110 likes | 259 Views
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++.
E N D
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 Linie s:Anfangspunkt Punkt a: 2; 15 15;12 Endpunkt 18;9 Linienstärke: 2 richtig: a.x, w.x s.Endpunkt.x falsch: s.x ein spezieller Punkt mit Höhe und Breite Rechteck w: 2; 3; 5; 3
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.