Objektorientierte Konzepte

Werbung
Konzepte objektorientierter Systeme
objektorientiertes Programmieren
Objektorientierte Konzepte
•
•
•
•
•
•
Klassen und Objekte
Unterklassen und Klassenhierarchien
Aggregate, zusammengesetzte Objekte
Methoden
Objektidentität
Abstrakte Datentypen
Klassen und Objekte: Beispiel in C++
• Gleichartige Objekte bilden eine Klasse
• class Brüche
{private: long zähler;
long nenner;
kürze();
public: Brüche(long z, long n = 1)
{zähler = z; nenner = n; kürze();}
Brüche& plus(const Brüche &x)
{zähler = zähler * x.nenner + nenn ...
nenner = nenner * x.nenner;
kürze();}
Objekte statt Variable
•
void ausgabe ()
{ cout << zähler << "/" << nenner;}
}; // Ende der Klassendefinition
• Brüche zahl1 (3, 4);
Brüche zahl2 (1, 7);
zahl1.plus(zahl2);
zahl1.ausgabe ();
• 25/28
wird ausgegeben.
• Zunächst keine Datenbank:
"Suche alle Objekte der Klasse Brüche > 1/4"
nicht möglich.
Spezialisierung:
Klassen mit Unterklassen
• class Punkte
{private: int x, y;
public: Punkte (int px = 0, int py = 0) {x=px; y=py;}
move (int dx, int dy) {x+=dx; y+=dy;}
int draw ();
}
• class Rechtecke: public Punkte
{private: int höhe, breite;
public: Rechtecke (int x, int y, int höhe, int breite);
int draw ();
}
Aggregate
• Objekte können aus Teilobjekten bestehen
• class Strecken
{private: Punkte anfang, ende;
int linienstärke;
public: Strecken(int xa, int ya, int xe, int ye, int ls);
int draw ();
}
• Rechtecke ist Unterklasse von Punkte, d. h. der linke
untere Punkt und zusätzlich Höhe und Breite.
• Strecken ist keine Unterklasse von Punkte, sondern ist
zusammengesetzt aus Anfangs- und Endpunkt.
Unterklasse und Aggregeation
Punkt a: 2; 15
Linie s:
Anfangspunkt
15;12
Endpunkt
18;9
Linienstärke: 2
ein spezieller Punkt mit Höhe und Breite
Rechteck w: 2; 3; 5; 3
richtig: a.x, w.x
s.Endpunkt.x
falsch: s.x
Methoden
• Methoden sind Funktionen, die zu einer Klasse gehören.
• Sei a Objekt der Klasse k und m Methode von k.
Mit a.m(Parameter) wird eine Botschaft an a gesendet,
die Methode m auszuführen.
• Weniger Seiteneffekte
• Attribute erfragen und Methoden aufrufen ist gleich
 Wechsel der Implementierung einfach, z. B.
– Attribut Alter oder
– Methode Alter: Berechnung aus Geburtsdatum
• Schnittstellendefinition und Implementierung trennen
Objektidentität
• Jedes Objekt bekommt eindeutigen Identifikator: OID
• Diese OID ändert sich nicht während der gesamten
Lebensdauer des Objekts.
• Die OID bleibt gleich, auch wenn Inhalte sich ändern.
• Der Benutzer braucht die OID nicht explizit definieren.
• Der Benutzer kann die OID nicht ungewollt ändern.
Klassen implementieren
abstrakte Datentypen (ADT)
• Abstrakte Datentypen beschreiben Verhalten von Daten
nach außen, die Implementierung wird verborgen.
• Mit Klassen kann man ADTn definieren.
• Insbesondere generische Klassen sind dafür geeignet
• Beispiel: ADT Kellerspeicher (= stack)
Es werden Keller für beliebige Grunddatentypen erzeugt:
– Keller für integer
– Keller für float
– Keller für Personen
Beispiel ADT Kellerspeicher
TYP
Keller [e_Typ]
FUNKTIONEN: leer?: Keller [e_Typ]  BOOLEAN
neu: Keller [e_Typ]
rein: e_Typ  Keller [e_Typ]  Keller [e_Typ]
raus: Keller [e_Typ]  Keller [e_Typ]
lies:
Keller [e_Typ]  e_Typ
VORBEDING.: raus (k  Keller[e_Typ]): NOT leer? (k)
lies (k  Keller[e_Typ]): NOT leer? (k)
GESETZE:
e  e_Typ, k  Keller[e_Typ]:
leer? (Neu());
NOT leer? (rein (e,k));
lies (rein (e,k)) = e;
raus (rein (e,k)) = k.
Herunterladen