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