Gliederung TIAI1004: Programmierung Teil 6: Objektorientierte Programmierung (II) • Pakete • Zugriffsrechte für Klassen • Attribute (Vertiefung) • Methoden (Vertiefung) • Kapselung, ADT Berufsakademie Stuttgart/Horb Studiengang Angewandte Informatik Dozent: Olaf Herden Stand: 01/2009 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6-1 Olaf Herden 01/2009 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II Organisation von Klassen (I) Organisation von Klassen (II) • • • • Bisher: Klassen wurden entwickelt und abgespeichert Bei größeren Entwicklungen wird Struktur innerhalb einer Sammlung von Klassen benötigt In Java gibt es die Strukturierungsmöglichkeit über Pakete (Packages): • Paket ist benannte Sammlung von Klassen Java liefert eine Reihe von Paketen mit, z.B.: - • • • Pakete können ihrerseits wieder Unterpakete (Subpackages) enthalten Beispielsweise gibt es im Paket java.lang das Unterpaket ref, welches mittels java.lang.ref angesprochen wird Objektorientierte Programmierung II Jede Klasse hat einfachen Namen (den aus der Klassendefinition) und vollqualifizierten Namen (der auch den Namen des Paketes enthält) Beispiel: Pakete definieren: - Um eine Klasse einem Paket zuzuordnen, muss die erste Anweisung im Quellcode package <Paketname>; lauten java.lang: Enthält die fundamentalsten Klassen java.util: Enthält diverse Hilfsklassen java.io: Enthält Klassen für Ein-/Ausgabefunktionalität ... TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Olaf Herden 01/2009 - Die Klasse String hat den einfachen Namen String - Da sie zum Paket java.lang gehört hat sie außerdem den vollqualifizierten Namen java.lang.String - Ermöglichen das Zusammenfassen (inhaltlich) verwandter Klassen - Stellen für die Klassen des Pakets einen Namensraum zur Verfügung • • 6-2 6-3 Olaf Herden 01/2009 - Damit werden alle Klassen dieser Datei dem entsprechenden Paket zugeordnet - Wird die package-Anweisung weggelassen, so gehören die Klassen zu einem unbenannten Standardpaket (Default Package) TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6-4 Olaf Herden 01/2009 Verwendung von Klassen Import (I) • • Verwendung von Klassen: - Klassen aus demselben Paket können über ihren einfachen Namen angesprochen werden - Klassen aus anderen Paketen müssen über ihren vollqualifizierten Namen angesprochen werden - Ausnahme: Weil das Paket java.lang so essentielle Klassen enthält, die ständig gebraucht werden, können die Klassen auch über ihren einfachen Namen angesprochen werden (String anstelle von java.lang.String) TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6-5 Olaf Herden 01/2009 Insgesamt gibt es vier Möglichkeiten des Imports: - Eine einzelne Klasse wird mit der Anweisung import <Paketname>.<Klassenname>; importiert Verwendung: <Klassenname> k = new <Klassenname>(); - Alle Klassen eines ganzen Pakets werden mit der Anweisung import <Paketname>.*; importiert Verwendung: siehe oben - Ein ganzes Paket wird mit import <Paketname>.<Unterpaketname>; importiert Verwendung: <Unterpaketname>.<Klassenname> k = new <Unterpaketname>.<Klassenname>(); - Verwendung ohne import-Anweisung: <Paketname>.<Unterpaketname>.<Klassenname> k = new <Paketname>.<Unterpaketname>.<Klassenname>(); TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II Import (II) Organisation von Klassen • • Anmerkungen zum Importieren: - import-Anweisungen müssen direkt hinter der package-Anweisung stehen - Es können beliebig viele import-Anweisungen in einer Datei verwendet werden - Durch die Anweisung import <Paketname>.*; wird kein Unterpaket importiert; dieses muss explizit durch import <Paketname>.<Unterpaketname>.*; geschehen - Durch import-Anweisungen können aus zwei Paketen gleich benannte Methoden importiert werden; dieser Namenskonflikt wird durch Nennung des vollqualifizierten Namens aufgelöst TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6-7 Olaf Herden 01/2009 6-6 Olaf Herden 01/2009 Global eindeutige Paketnamen: - Benennt jede/r Entwickler/in seine/ihre Pakete „einfach so“, kann es zu Namenskonflikten kommen - Daher sind globale Bennennungskonventionen notwendig - Sun kontrolliert alle Pakete, die mit java, javax und sun beginnen - Für alle anderen Entwickler gilt: Vor den Paketnamen ist der umgedrehte Name der eigenen Internetdomäne zu setzen - Bsp.: Lautet die Internetdomäne „ba-horb.de“, so sind die Pakete alle mit dem Präfix „de.bahorb“ zu versehen - Innerhalb dieses Namensraums besteht Freiheit in der Organisation der Pakete bzw. Unterpakete TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6-8 Olaf Herden 01/2009 Kompilieren von Paketen Umgebungsvariable CLASSPATH • • • • • • • Alle Klassen eines Paketes müssen sich in einem Verzeichnis befinden In einem Verzeichnis darf sich nur ein Paket befinden Name des Verzeichnis muss dem Paketnamen entsprechen Kompilieren vom Verzeichnis oberhalb mit javac <Paketname>\*.java Zur Verwendung des Paketes Umgebungsvariable CLASSPATH auf das Verzeichnis oberhalb setzen • CLASSPATH ist eine Umgebungsvariable des Betriebssystems CLASSPATH enthält alle Verzeichnisse (bzw. jar-Dateien), in denen Compiler und Interpreter nach Paketen suchen sollen Setzen von CLASSPATH: - Linux mit csh: setenv CLASSPATH “<Pfad1>:<Pfad2>:...“ - Linux mit bash: setenv CLASSPATH = <Pfad1>:<Pfad2>:... - Windows: Unter Systemsteuerung → System → Register „Erweitert“→ Button „Umgebungsvariablen“ • Anmerkungen: - „.“ muss für anonyme Pakete in den CLASSPATH aufgenommen werden - Verzeichnis der JDK-Klassenbibliothek muss nicht in den CLASSPATH aufgenommen werden ... ... ... p Klasse1.java Klasse2.java Klasse3.java TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II Paket p 6-9 Olaf Herden 01/2009 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II Pakete in UML (I) Pakete in UML (II) • • • • Auch die UML kennt Pakete als Strukturierungsmittel zur Zusammenfassung von Klassen Notation: Klasse 1 Klasse 2 Klasse 3 ... • • Anmerkung: In UML-Modellierungswerkzeugen wird typischerweise keine Auflistung verwendet, sondern mittels „Click and Zoom“ kann man sich die zugehörigen Klassen anzeigen lassen Olaf Herden 01/2009 Pakete können in sich geschachtelt sein Notation: Paketname Klasse 1 Klasse 2 Klasse 3 ... Paketname 6 - 10 Unterpaket Klasse 1 Klasse 2 Klasse 3 ... Zwischen Paketen vorliegende Abhängigkeiten können in der UML dargestellt werden: Paket 1 Paket 2 Klasse 1 Klasse 2 Klasse 3 ... Klasse 1 Klasse 2 Klasse 3 ... Paket 1 ist von Paket 2 abhängig TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 11 Olaf Herden 01/2009 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 12 Olaf Herden 01/2009 Übersicht Zugriff • Pakete • • • Zugriffsrechte für Klassen • Attribute (Vertiefung) • Methoden (Vertiefung) • Kapselung, ADT TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II Bisher: Keine Berücksichtigung über Zugriff auf Klassen von außen Zugriffsschutz kann auf verschiedenen Ebenen betrachtet werden: - Pakete - Klassen - Attribute/Methoden • Zugriff auf Pakete: - Paket ist für Code im selben Paket erreichbar - Ob auch auf andere Pakete zugegriffen werden darf, ist nicht in Java selber geregelt - Hängt davon ab, wo dieses Paket abgelegt ist und ob der/die Benutzer/in mindestens lesende Zugriffsrechte auf dieses Verzeichnis hat 6 - 13 Olaf Herden 01/2009 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II Zugriffsrechte auf Klassen Übersicht • • Pakete • Zugriffsrechte für Klassen • Attribute (Vertiefung) • Methoden (Vertiefung) • Kapselung, ADT • • • • • • • • Klassen können bei ihrer Definition mit einem Zugriffsmodifier versehen werden Syntax: [Modifiers] class <Klassenname> Klasse ist standardmäßig (bei Weglassen des Modifier) innerhalb ihres Paketes zugreifbar Beispiel: class Landfahrzeug{...} Wird der Modifier public verwendet, so ist die Klasse auch außerhalb des eigenen Paketes zugreifbar Beispiel: public class Landfahrzeug{...} Ebenso zu den Modifiern zählen abstract und final 6 - 14 Olaf Herden 01/2009 6 - 16 Olaf Herden 01/2009 Modifier dürfen miteinander kombiniert werden, wobei die Kombination abstract final verboten ist Alle mögliche Kombinationen sind also: kein Modifier, final, abstract, public, public final, public abstract TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 15 Olaf Herden 01/2009 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II Klassenvariablen (I) Klassenvariablen (II) • • W.D.H.: • • Bisher angelegte Variablen sind sog. Instanzvariablen Sie beschreiben eine Eigenschaft eines einzelnen Objektes und es wird pro angelegtem Objekt auch eine Variable angelegt • • Daneben gibt es Klassenvariablen, die nur einmal pro Klasse existieren Syntax: static <Datentyp> <Attributname> • Objekte der Klasse können Klassenvariablen ganz normal über die Punktnotation ansprechen TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 17 Olaf Herden 01/2009 Beispiel: Instanzzähler einer Klasse ( 1) public class Fahrzeug{ ( 2) static int anzObjekte = 0; ( 3) public Fahrzeug(){ ( 4) ++anzObjekte; ( 5) <Weitere Anweisungen> ( 6) } ( 7) public void finalize(){ ( 8) --anzObjekte; ( 9) <Weitere Anweisungen> (10) } (11) ... (12) } - Attribute einer Klasse werden durch Angabe des Datentyps und des Namens angelegt - Durch Voranstellen des Schlüsselworts final wird statt einer Variablen eine Konstante angelegt TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II Klassen als Datentypen Attributzugriffsrechte • • • • Als Datentyp eines Attributs können neben einfachen Datentypen auch andere Klassen verwendet werden Beispiel: ( 1) ( 2) ( 3) ( 4) ( 5) ( 6) ( 7) ( 8) ( 9) (10) class Rad{...} class Motor{...} class Fahrzeug{ String name; Motor m; Rad[] r; ... } TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 19 Olaf Herden 01/2009 6 - 18 Olaf Herden 01/2009 Jedem Attribut kann bestimmtes Zugriffsrecht zugeordnet werden Zugriffsspezifikation: - Auf Attribute innerhalb einer Klasse kann immer von Methoden der gleichen Klasse zugegriffen werden - Für Methoden anderer Klassen sind aber Beschränkungen möglich - Standardwert (Weglassen des Zugriffswertes) deklariert Attribut als paketsichtbar, d.h. Attribut darf sowohl innerhalb der Klasse als auch innerhalb des eigenen Paketes von außen manipuliert werden Beispiel: int i; - Mit Zugriffswert public kann Attribut aus allen anderen Klassen und Paketen manipuliert werden; Bsp.: public int i; - Mit Zugriffswert protected ist Attribut nur im eigenen Paket und in allen Unterklassen auch in anderen Paketen (dies ist der Unterschied zu paketsichtbar) zugreifbar; Bsp.: protected int i; - Mit Zugriffswert private ist Attribut nur innerhalb der eigenen Klasse zugreifbar; Bsp.: private int i; TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 20 Olaf Herden 01/2009 Attribut-Zugriffsrechte in UML Übersicht • • Pakete • Zugriffsrechte für Klassen • Attribute (Vertiefung) • Methoden (Vertiefung) • Kapselung, ADT Auch in UML-Notation können die Zugriffsrechte dargestellt werden: - public wird durch das Symbol „+“ dargestellt - private wird durch das Symbol „-“ dargestellt - protected wird durch das Symbol „#“ dargestellt • Beispiel: Fahrzeug + Bezeichnung : Textfeld(50) - PS_Zahl : Zahl - Räder : Zahl ... ... TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 21 Olaf Herden 01/2009 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II Zugriffsspezifikation von Methoden (I) Zugriffsspezifikation von Methoden (II) • • • • Bisher: Methodendeklaration bestand aus Rückgabewert, Name und Parameterliste Nun: Erweiterung um Zugriffsrechte und Modifier Syntax: [Zugriffswert] [Modifier] <Rückgabewert> <Name> (<Parameterliste>) • Zugriffsspezifikation: - Methoden innerhalb einer Klasse können immer auf andere Methoden der gleichen Klasse zugreifen - Für Methoden anderer Klassen sind aber Beschränkungen möglich - Standardwert (Weglassen des Zugriffswertes) deklariert die Methode als paketsichtbar, d.h. Methode darf sowohl innerhalb der Klasse als auch innerhalb des eigenen Paketes verwendet werden - Mit Zugriffswert public können Methoden aus allen anderen Klassen und Paketen auf Methode zugreifen Beispiel: public int quadrat(i); TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 23 Olaf Herden 01/2009 6 - 22 Olaf Herden 01/2009 Zugriffsspezifikation (Fortsetzung): - Mit Zugriffswert protected ist Methode nur in ihrem Paket und in allen Unterklassen zugreifbar Beispiel: protected int quadrat(i); - Mit Zugriffswert private ist Methode nur für die anderen Methoden innerhalb der eigenen Klasse zugreifbar Beispiel: private int quadrat(i); - Auch Unterklassen dürfen nicht auf private Methoden ihrer Oberklasse zugreifen TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 24 Olaf Herden 01/2009 Zugriffsspezifikation von Methoden in UML Klassen als Rückgabe- und Parametertyp • • Auch in UML-Notation können die Zugriffsrechte dargestellt werden (analog zu den Zugriffsrechten bei Attributen): - public wird durch das Symbol „+“ dargestellt - private wird durch das Symbol „-“ dargestellt - protected wird durch das Symbol „#“ dargestellt • • ( 1) public class Fahrzeug{ ( 2) ( 3) static Fahrzeug kopieren(Fahrzeug f){ ( 4) return f; ( 5) } ( 6) ( 7) public static void main (String[] args){ ( 8) Fahrzeug f = new Fahrzeug(); ( 9) Fahrzeug g = new Fahrzeug(); (10) g = kopieren(f); (11) } (12) } Beispiel: Fahrzeug ... + bewegen() # Verbrauch auf km(kmZahl) ... TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II In Methoden dürfen sowohl der Rückgabetyp als auch der Typ eines Parameters nicht nur einfache Datentypen, sondern auch Objekttypen sein Beispiel: 6 - 25 Olaf Herden 01/2009 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II Klassen- und Instanzmethoden Statischer Import • • • • • Instanzmethoden sind für jedes einzelne Objekt einer Klasse definiert Klassenmethoden sind nur einmal für eine Klasse definiert Klassenmethoden werden mit dem Schlüsselwort static deklariert und heißen daher auch statische Methoden Beispiele: - main-Methode ist eine statische Methode - public static double quadrat(double i){ return i*i; } • • • • Mit einem statischen Import mittels - Können keine Instanzmethoden aufrufen - Dürfen nur überschrieben werden, wenn die Methode der Unterklasse auch wieder statisch ist 6 - 27 Olaf Herden 01/2009 werden alle statischen Attribute und Methoden der Klasse importiert Damit kann der Code von oben wie folgt geschrieben werden: System.out.println("Umfang = " + 2*PI*radius); System.out.println("Sinus("+radius+") = " + sin(radius)); • Klassenmethoden: Objektorientierte Programmierung II Statische Attribute und statische Methoden sind mit bisherigen Mitteln etwas umständlich durch Voranstellen des Klassennamens anzusprechen Beispiel: import static java.lang.Math.*; Beim Aufrufen einer statischen Methode außerhalb ihrer Klasse müssen sowohl Klassen- als auch Methodenname angegeben werden: TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Olaf Herden 01/2009 float radius = 4; System.out.println("Umfang = " + 2*Math.PI*radius); System.out.println("Sinus("+radius+") = "+Math.sin(radius)); double d = GanzeZahl.quadrat(5.0); • 6 - 26 Anmerkung: - import java.util.* und import static java.lang.Math.* sehen ähnlich aus - Aber: Einmal werden alle Klassen aus Paket importiert, einmal alle statischen Attribute und Methoden einer Klasse TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 28 Olaf Herden 01/2009 Finale Methoden Abstrakte Methoden (I) • Finale Methoden sind Methoden, die in keiner Unterklasse überschrieben werden dürfen Kennzeichnung erfolgt durch das Schlüsselwort final Beispiel: • final int berechne(int a, float b); • • • • Zweck: Implementierung der Methode ist Standard, der nicht verändert werden soll • abstract int zeichne(); • • TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 29 Olaf Herden 01/2009 Abstrakte Methoden sind Methoden, die in einer Klasse zwar deklariert, aber nicht implementiert werden Syntax: Kennzeichnung erfolgt durch das Schlüsselwort abstract, der Methodenrumpf wird einfach weggelassen Beispiel: Zweck: Deklaration der Methode ist an dieser Stelle zwar passend, aber Realisierung erfolgt erst in Unterklassen, wird hier in unterschiedlicher Art und Weise vorgenommen Beispiel: Jedes Fahrzeug hat eine Methode bewege(), aber die Implementierung ist so individuell, dass sie erst in den Unterklassen sinnvoll ist TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II Abstrakte Methoden (II) Weitere Methodenmodifier • • Anmerkungen: - Abstrakte Methoden dürfen nur in abstrakten Klassen deklariert werden, sonst Fehlermeldung: <Klasse> should be declared abstract; it does not define <Methode> in <Klasse> - Statische Methoden dürfen nicht als abstract deklariert werden, sonst Fehlermeldung: illegal combination of modifiers: abstract and static - Abstrakte Methoden dürfen nicht gleichzeitig auch als final deklariert werden, sonst Fehlermeldung: illegal combination of modifiers: abstract and final - Konstruktoren dürfen zwar als abstract deklariert werden (d.h. beim Compilieren erfolgt keine Fehlermeldung), jedoch ist dies nicht sinnvoll - Wenn eine Unterklasse nicht alle abstrakten Methoden überschreibt, dann muss auch sie als abstract deklariert werden TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 31 Olaf Herden 01/2009 6 - 30 Olaf Herden 01/2009 Native Methoden - Sind nicht in Java, sondern meistens in C/C++ geschrieben - Beispiel: native int berechne(int a, float b); - Zweck: Verwendung bereits vorhandener Bibliotheken - Problem: Plattformunabhängigkeit geht verloren • Methoden synchronisieren - Versuchen zwei Methoden auf gleiche Daten zuzugreifen, kann es zu Problemen in Form von Datenverletzungen kommen - Dieses kann durch Synchronisation vermieden werden - Beispiel: synchronized int berechne(int a, float b); - In Objekt dürfen nie zwei als synchronized deklarierte Methoden gleichzeitig ablaufen - Anm.: Synchronisierte Methoden werden im separaten VL-Abschnitt „Multithreading“ behandelt TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 32 Olaf Herden 01/2009 Methoden: Namenskonventionen in Java Konstruktoren und Modifier • • Konstruktoren dürfen nicht als native, static, synchronized oder final deklariert werden • Somit bleiben noch der Standard Paket-sichtbar (keine Modifier-Angabe) und die Deklaration als public übrig Meistens werden die Konstruktoren als public deklariert Zwingend: - Methodennamen dürfen prinzipiell eine unbeschränkte Länge haben (bis auf technische Einschränkungen durch das System) - Methodennamen müssen (wie alle anderen Java-Bezeichner) mit einem Buchstaben oder einem der beiden Zeichen „_“ oder „$“ beginnen, alle weiteren Zeichen dürfen Buchstaben, Zahlen und ein paar Sonderzeichen sein - Bei Methodennamen wird (wie bei allen anderen Bezeichnern in Java) Großund Kleinschreibung unterschieden - Methodennamen dürfen (wie andere Bezeichner auch) nicht einem JavaSchlüsselwort entsprechen • • • Anmerkung: Überschreiben von Konstruktoren ist rein technisch nicht möglich, denn sie müssen ja immer den gleichen Namen wie ihre Klasse haben Üblich: - Methodennamen sollten möglichst aussagekräftig sein („Sprechende Bezeichner“) - Methodennamen sollten mit einem Kleinbuchstaben beginnen, dann sollten weitere Kleinbuchstaben folgen - Besteht der Name aus mehreren Wörtern, so sollten diese zusammengeschrieben werden und neues Wort mit Großbuchstaben beginnen TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 33 Olaf Herden 01/2009 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II Zusammenfassung Sichtbarkeit Übersicht Modifier Sichtbarkeit • Pakete public • In Methoden der Klasse selbst • In Methoden abgeleiteter Klassen • In Methoden des Paketes • In Methoden anderer Pakete, keine Unterklasse • Zugriffsrechte für Klassen • Attribute (Vertiefung) • Methoden (Vertiefung) • Kapselung, ADT • In Methoden der Klasse selbst • In Methoden abgeleiteter Klassen, auch in anderen Paketen • In allen Klassen desselben Pakets protected private • Nur in Methoden der Klasse selbst Default (Paket-sichtbar) • In allen Klassen desselben Paketes TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 35 Olaf Herden 01/2009 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 34 Olaf Herden 01/2009 6 - 36 Olaf Herden 01/2009 Kapselung Beispiel • • • • • • Kapselung ist ein ganz wichtiges Konzept der Objektorientierung Dabei werden Klassen von außen nur über eine Schnittstelle angesprochen und von interner Realisierung abstrahiert Realisiert werden kann dies, indem alle Attribute als private deklariert werden und für jedes von außen les- bzw. veränderbare Attribut eine Methode definiert wird Diese Methoden tragen typischerweise die Bezeichnungen get<Attributname> bzw. set<Attributname> ( 1) public class Fahrzeug{ ( 2) private String name; ( 3) private int raeder; ( 4) private int psZahl; ( 5) ... ( 6) public void setName(String s){name = s;} ( 7) public String getName(){return name;} ( 8) public void setRaeder(int r){raeder = r;} ( 9) public int getRaeder(){return raeder;} (10) public void setPsZahl(int z){psZahl = z;} (11) public int getPsZahl(){return psZahl;} (12) ... (13) } Anschaulich: M8 A1 A2 M2 M6 A3 A4 M3 M5 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb M1 M7 In folgender Klasse sind alle Attribute gekapselt: M4 Objektorientierte Programmierung II 6 - 37 Olaf Herden 01/2009 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II Abstrakter Datentyp Zusammenfassung • • • • Kapselung ist die Umsetzung bzw. Weiterführung des Konzeptes des ADT (Abstrakter Datentyp) (Siehe auch Informatik-VL) Abstrakte Datentypen auch in nicht OO-Sprachen Abstrakter Datentyp: • • Olaf Herden 01/2009 Zugriffsrechte für Klassen: 6 - 39 Attribute (Vertiefung) - Statische Attribute (Klassenattribute) - Zugriffsrechte (public, private, protected) • Methoden (Vertiefung) - Statische Methoden (Klassenmethoden) - Zugriffsrechte (public, private, protected) - Finale und abstrakte Methoden - Konstruktoren und Modifier Informationen über die interne Realisierung werden bei einem ADT nicht angegeben Objektorientierte Programmierung II 6 - 40 - UML-Notation Beispiel: ADT Stapel TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Pakete: - Öffentliche und nicht-öffentliche Klassen - Speicherstruktur, die das LIFO-Prinzip realisiert (Last In First Out) - Funktionen: - push(o): Legt das Objekt o auf dem Stapel ab - pop(): Liest und entnimmt das oberste Element vom Stapel - peek(): Liest oberstes Element vom Stapel ohne es zu entfernen - isEmpty(): Prüft, ob der Stapel leer ist • Olaf Herden 01/2009 - Organisation großer Mengen von Klassen - Java-Anweisungen package und import • - Name - Funktionen/Methoden auf dem Datentypen - Evtl. weitere Axiome 6 - 38 Olaf Herden 01/2009 • Kapselung, ADT TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II