Kapitel 4 Flashcards
Konzepte der OOS
Konzepte der OOS
- programmiert wird in?
- OO-Programme bestehen aus interagierenden Objekten
- programmiert werden Klassen (davon werden dann Objekte als Instanzen erzeugt)
Klassen
Def.: Beschreibung eines oder mehrerer ähnlicher Objekte (Abstraktion)
UML-Notation:
3 Rechtecke: Name, Attributdeklaration, Methodendeklaration
Objekte Def.
Def.: Ein Objekt ist ein tatsächlich existierendes „Ding“. Es ist eindeutig identifizierbar durch
Objekt-ID (Referenz) und hat Zustand (Attributwerte) und Verhalten (Methoden).
Objekt in UML:
Objekt in UML:
meistens Objekte nicht in UML dargestellt, ansonsten wie Klassen, aber Name (Kleinbuchstabe
vorne!) unterstrichen, Attribute haben Werte
Auto meinAuto;
//Legt auf Stack Referenz an, die spater auf ein Auto-Objekt zeigen wird:
meinAuto = new Auto();
//Erzeugt Objekt auf Heap:
“this“
„this“ ist Referenz auf sich selbst
- muss immer dann verwendet werden, wenn Attribut durch Parameter/lokale Variable
(innerhalb einer Methode) überlagert wird
- später: mit this Referenz auf sich selbst anderen Objekten mitteilen
call-by-value in Java
call-by-value: Veränderungen der Parameter werden nach außen nicht sichtbar (s.o.: in
aktJahr steht weiterhin 2008)
- a bleibt unverändert
Konstruktoren
Bei Erzeugung neuer Objekte:
Auto meinAuto = new Auto();
// Defaultkonstruktor (Auto()) so lange vorhanden,
// bis manuell anderer Konstruktor definiert
Konstruktor stellt Speicherplatz auf Heap zur Verfügung und initialisiert Attribute
defaultmäßig
man kann auch eigenen Konstruktor implementieren
Konstruktoren Def.
Def.: Konstruktoren sind Methoden ohne explizit aufgeführten Rückgabetyp (also auch kein
void), die den Namen der Klasse erhalten, zu der sie gehören. Die Anzahl der Parameter ist
beliebig.
- Rückgabewert des Konstruktors ist Referenz auf neu erzeugten Speicherplatz
- möglichst immer vor die anderen Methode der Klasse schreiben
Überladung:
Überladung: mehrere Implementierungen einer Methode mit gleichem Namen mit
unterschiedlichen Signaturen in gleicher Klasse
Vererbung Def.
unterstützt die Wiederverwendung
- Def.: Die Möglichkeit eine Klasse B so zu definieren, dass sie ohne explizite Deklaration
alle Attribute und Methoden einer bereits definierten Klasse übernimmt (erbt), heißt
Vererbung.
Mehrfachvererbung
Gibt es in Java nicht! Simulation durch Interf
Zuweisungskompatibilitat
Man kann einer Objektreferenz auf ein Oberklassenobjekt eine Referenz auf ein Objekt einer
Unterklasse zuweisen.
Da jeder LKW ein Auto ist, sind in LKWs auch alle Dinge der Autos enthalten ) kein
Problem
Umgedreht geht nicht, später aber mit cast
Zuweisungskompatibilitat auch in Parametern
auch als Parameter von Konstruktoren / Methoden kann man anstelle einer Referenz
auf ein Oberklassenobjekt eine Referenz auf ein Unterklassenobjekt übergeben
- Methode verwendet nur Dinge des Oberklassenobjekts (in Unterklassenobjekt auch
vorhanden)
Uberlagerung von geerbten Methoden in Unterklassen
Auto auto = new Auto(); LKW lkw = new LKW(); auto = lkw; // kann nur auf Auto-Attribute / -Methoden zugreifen System.out.println(auto.alter(2003)); // falls Methode aus Auto // allerdings uberlagert wurde, wird die Unterklassenimplementierung // ausgefuhrt
Da auto auf ein Objekt der Klasse LKW zeigt, wird Methodenimplementierung aus LKW
ausgeführt.
Dynamisches Binden
Bei überlagerten Methoden kann erst zur Laufzeit (in Abhängigkeit des Objekttyps) entschieden
werden, welche Implementierung ausgeführt wird.
Möchte man die Methodenimplementierung der Oberklasse verwenden, so kann man dies
mit super.methodenName(..) innerhalb der abgeleiteten Klasse ausführen.
Wichtig: Man muss mindestens die gleichen Zugriffsrechte in der Unterklasse, wie in der
Oberklasse geben.
Ohne dynamisches Binden wäre Polymorphismus (Überlagerung) nicht möglich.
Klasse Object
alle Klassen sind automatisch von Object abgeleitet
-stellt nützliche Methoden zur Verfügung, die in erbenden Klassen überlagert werden
müssen
bei Objekten immer equals benutzen und nicht ==
Konstruktoren in Vererbungshierarchien
Bei Konstruktoraufruf einer erbenden Klasse, wird implizit zuerst der Defaultkonstruktor
der Oberklasse mit super() aufgerufen.
Aggregation
bisher: Vererbung (ist_ein) als einzige Relation zwischen Objekten
- jetzt: Aggregation (hat_ein, besteht_aus)
Aggregation der Vererbung vorziehen, da in Java keine Mehrfachvererbung möglich
und Vererbung oft auch bei nicht - ist_ein-Relationen eingesetzt
Konstruktoren bei Aggregation
Unterschied zur Vererbung, wo Konstruktor der Oberklasse implizit aufgerufen wird!
Definiert man Klasse A durch Aggregation mit Klasse B, so muss ggf. im Konstruktor von A
der von B explizit aufgerufen werden, um Speicherplatz für das Attribut zur Verfügung zu
stellen.
Abstrakte Methode Def.
Def.: Abstrakte Methode: Wenn eine Methode nicht implementiert ist, so heißt diese abstrakt
Def.: Abstrakte Klasse
Def.: Abstrakte Klasse: Eine Klasse, die mindestens eine als abstrakt definierte Methode
enthält, muss selbst als abstrakt definiert werden