Das Geheimnisprinzip
private – public
Konstanten,
Klassenattribute, und
Klassenmethoden
final, static
IT2 – WS 2005/2006
Nov 07, 2005
1
1.0
Das Geheimnisprinzip (Information hiding)
Man soll wissen was ein Objekt tun kann, nicht wie
das Objekt das tut.
Daten gehören zu einem Objekt und sind für andere
Objekte verborgen.
Der Zugriff erfolgt nur mittels definierter
Schnittstellen, d.h. public Methoden.
Information hiding unterstützt lose Kopplung, d.h.
Klassen sind möglichst unabhängig von einander.
Solange die Schnittstellen (public Methoden)
unverändert bleiben, kann die Implementierung
einer Klasse verändert werden, ohne dass andere
Klassen geändert werden müssen.
Das ist wichtig für große Systeme und die Wartung.
IT2 – WS 2005/2006
Nov 07, 2005
2
public vs. private
Public Datenfelder, Konstruktoren und
Methoden sind zugreifbar auch von
anderen Klassen.
Datenfelder sind vorzugsweise (d.h. fast
immer) nicht public.
Private Datenfelder und Methoden sind
zugreifbar nur innerhalb der zu
definierenden Klasse.
Nur Methoden, bestimmt für die
Benutzung durch anderen Klassen, sollten
public sein.
IT2 – WS 2005/2006
Nov 07, 2005
3
Klassenattribute
Klassenattribute sind Attribute, die einer
Klasse zugeordnet sind.
Objektattribute sind immer Objekten
zugeordnet.
Der Wert eines Objektattributs kann für
jedes Objekt unterschiedlich sein.
Klassenattribute haben für alle Objekte einer
Klassen denselben Wert.
Klassenattribute haben auch ohne Objekte
ihren Wert.
Konstanten in Java sind Klassenattribute,
deren Wert nicht verändert werden kann.
IT2 – WS 2005/2006
Nov 07, 2005
4
Klassenvariablen
IT2 – WS 2005/2006
Nov 07, 2005
5
Klassenmethoden
Klassenmethoden können auch unabhängig
von einem Objekt aufgerufen werden.
• Objektmethoden werden immer für ein
bestimmtes Objekt aufgerufen.
Da eine Klassenmethode keinem Objekt
zugeordnet ist, kann sie keine
Objektattribute verwenden und keine
Objektmethoden aufrufen.
• Außer für Objekte, die von der Klassenmethode
explizit angesprochen werden.
IT2 – WS 2005/2006
Nov 07, 2005
6
Java-Syntax
Visibility ::= [ („public“ | „private“) ]
ClassDeclaration ::=
Visibility „class“ Identifier
„{“
{ AttributeDeclaration }
{ ConstructorDeclaration }
{ MethodDeclaration }
„}“
AttributeDeclaration ::=
Visibility [„static“ ] [„final“ ] VariableDeclaration
IT2 – WS 2005/2006
Nov 07, 2005
7