TIAI1004: Programmierung

Werbung
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
Herunterladen