TIAI1004: Programmierung Teil 6: Objektorientierte Programmierung (II) 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 Gliederung • Pakete • Zugriffsrechte für Klassen • Attribute (Vertiefung) • Methoden (Vertiefung) • Kapselung, ADT TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6-2 Olaf Herden 01/2009 Organisation von Klassen (I) • • • 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): - Ermöglichen das Zusammenfassen (inhaltlich) verwandter Klassen - Stellen für die Klassen des Pakets einen Namensraum zur Verfügung • • Paket ist benannte Sammlung von Klassen Java liefert eine Reihe von Paketen mit, z.B.: - • • java.lang: Enthält die fundamentalsten Klassen java.util: Enthält diverse Hilfsklassen java.io: Enthält Klassen für Ein-/Ausgabefunktionalität ... 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 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6-3 Olaf Herden 01/2009 Organisation von Klassen (II) • • Jede Klasse hat einfachen Namen (den aus der Klassendefinition) und vollqualifizierten Namen (der auch den Namen des Paketes enthält) Beispiel: - 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 • Pakete definieren: - Um eine Klasse einem Paket zuzuordnen, muss die erste Anweisung im Quellcode package <Paketname>; lauten - 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 • 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 Import (I) • 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 6-6 Olaf Herden 01/2009 Import (II) • 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 Organisation von Klassen • 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 • • • • • 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 ... ... ... p Klasse1.java Klasse2.java Klasse3.java TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6-9 Paket p Olaf Herden 01/2009 Umgebungsvariable CLASSPATH • • • 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 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 10 Olaf Herden 01/2009 Pakete in UML (I) • • Auch die UML kennt Pakete als Strukturierungsmittel zur Zusammenfassung von Klassen Notation: Paketname 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 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 11 Olaf Herden 01/2009 Pakete in UML (II) • • Pakete können in sich geschachtelt sein Notation: Paketname Klasse 1 Klasse 2 Klasse 3 ... • 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 - 12 Olaf Herden 01/2009 Übersicht • Pakete • Zugriffsrechte für Klassen • Attribute (Vertiefung) • Methoden (Vertiefung) • Kapselung, ADT TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 13 Olaf Herden 01/2009 Zugriff • • 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 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 14 Olaf Herden 01/2009 Zugriffsrechte auf Klassen • • • • • • • • • 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 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 Übersicht • Pakete • Zugriffsrechte für Klassen • Attribute (Vertiefung) • Methoden (Vertiefung) • Kapselung, ADT TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 16 Olaf Herden 01/2009 Klassenvariablen (I) • W.D.H.: - 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 • • 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 Klassenvariablen (II) • 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) } TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 18 Olaf Herden 01/2009 Klassen als Datentypen • • 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 Attributzugriffsrechte • • 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 • 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 Übersicht • Pakete • Zugriffsrechte für Klassen • Attribute (Vertiefung) • Methoden (Vertiefung) • Kapselung, ADT TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 22 Olaf Herden 01/2009 Zugriffsspezifikation von Methoden (I) • • • 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 Zugriffsspezifikation von Methoden (II) • 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 • 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 • Beispiel: Fahrzeug ... + bewegen() # Verbrauch auf km(kmZahl) ... TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 25 Olaf Herden 01/2009 Klassen als Rückgabe- und Parametertyp • • In Methoden dürfen sowohl der Rückgabetyp als auch der Typ eines Parameters nicht nur einfache Datentypen, sondern auch Objekttypen sein Beispiel: ( 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) } TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 26 Olaf Herden 01/2009 Klassen- und Instanzmethoden • • • • 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; } • Beim Aufrufen einer statischen Methode außerhalb ihrer Klasse müssen sowohl Klassen- als auch Methodenname angegeben werden: double d = GanzeZahl.quadrat(5.0); • Klassenmethoden: - Können keine Instanzmethoden aufrufen - Dürfen nur überschrieben werden, wenn die Methode der Unterklasse auch wieder statisch ist TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 27 Olaf Herden 01/2009 Statischer Import • • Statische Attribute und statische Methoden sind mit bisherigen Mitteln etwas umständlich durch Voranstellen des Klassennamens anzusprechen Beispiel: float radius = 4; System.out.println("Umfang = " + 2*Math.PI*radius); System.out.println("Sinus("+radius+") = "+Math.sin(radius)); • Mit einem statischen Import mittels import static java.lang.Math.*; • 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)); • 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 • • • 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 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 29 Olaf Herden 01/2009 Abstrakte Methoden (I) • • • 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: abstract int zeichne(); • • 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 6 - 30 Olaf Herden 01/2009 Abstrakte Methoden (II) • 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 Weitere Methodenmodifier • 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 • 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 • Ü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 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 • • Anmerkung: Überschreiben von Konstruktoren ist rein technisch nicht möglich, denn sie müssen ja immer den gleichen Namen wie ihre Klasse haben TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 34 Olaf Herden 01/2009 Zusammenfassung Sichtbarkeit Modifier Sichtbarkeit public • In Methoden der Klasse selbst • In Methoden abgeleiteter Klassen • In Methoden des Paketes • In Methoden anderer Pakete, keine Unterklasse protected • In Methoden der Klasse selbst • In Methoden abgeleiteter Klassen, auch in anderen Paketen • In allen Klassen desselben Pakets 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 Übersicht • Pakete • Zugriffsrechte für Klassen • Attribute (Vertiefung) • Methoden (Vertiefung) • Kapselung, ADT TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 36 Olaf Herden 01/2009 Kapselung • • • • • 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> Anschaulich: M8 M7 A1 A2 M2 M6 A3 A4 M3 M5 TIAI1004: Programmierung Berufsakademie Stuttgart/Horb M1 M4 Objektorientierte Programmierung II 6 - 37 Olaf Herden 01/2009 Beispiel • In folgender Klasse sind alle Attribute gekapselt: ( 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) } TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 38 Olaf Herden 01/2009 Abstrakter Datentyp • • • 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: - Name - Funktionen/Methoden auf dem Datentypen - Evtl. weitere Axiome • Beispiel: ADT Stapel - 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 • Informationen über die interne Realisierung werden bei einem ADT nicht angegeben TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 39 Olaf Herden 01/2009 Zusammenfassung • Pakete: - Organisation großer Mengen von Klassen - Java-Anweisungen package und import - UML-Notation • Zugriffsrechte für Klassen: - Öffentliche und nicht-öffentliche Klassen • 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 • Kapselung, ADT TIAI1004: Programmierung Berufsakademie Stuttgart/Horb Objektorientierte Programmierung II 6 - 40 Olaf Herden 01/2009