Objektorientierte Programmierung Teil 1: Einführung Prof. Dr. Schoop FHT Esslingen, Sommersemester 2005 Agenda Beispielszenario Eigenschaften des objektorientierten Ansatzes Konzepte des objektorientierten Programmierens 1.2
Agenda Beispielszenario Eigenschaften des objektorientierten Ansatzes Konzepte des objektorientierten Programmierens 1.3 Beispielszenario: Hochregallager (Quelle: Industriebau 2/04, www.viastore.de) 1.4
Beispielszenario: Hochregallager Ein Unternehmen erhält den Auftrag für einen Automobilkonzern die Steuerung für ein vollautomatisches Hochregallager zu implementieren. Nebenbedingungen: Es soll optimal gelagert werden. D.h. es muss so viel wie möglich in das Lager hineinpassen und die durchschnittliche Zeit, ein Objekt aus dem Lager zu holen, soll minimal sein. Es gibt Regale für Paletten und Regale für Behälter. Behälter kann man in einem Regalfach stapeln (maximal drei übereinander). Schwere Objekte müssen in die untere Hälfte des Regals. 1.5 Entwurf Datenmodell des Entwurfs muss beinhalten Regal Regaltyp (Paletten oder Behälter) untere Hälfte, obere Hälfte des Regals Gewicht des Objektes Regalfach voll/leer Entfernung des Regalfaches (horizontal, vertikal) Paletten Behälter stapelbar oder nicht Lagerort eines Objektes 1.6
Konzeptuelles Datenmodell Lagerobjekt Gewicht t Palette Behälter Position 1 n p_lagert_in Entfernung_v b_lagert_in 1 Fach t n 1 1 Palettenregalfach Behälterregalfach ist_fach_von Stapelhöhe Regal Entfernung_h 1.7 Relationales Datenmodell 1.8
Trennung von Daten und Funktionen Daten Funktionen f1( ) f2( ) f3( ) 1.9 Objektorientiertes Datenmodell Regal Horiz_Entf: real Regalfach Fach-Nr: integer Vert_Entf: real Belegt: bool Lagerobjekt Gewicht: real Fach-Nr: integer Behälterfach Stapelhöhe: integer Behälter Stapelpos:integer getlagerort(); Palette getlagerort(); 1.10
Agenda Beispielszenario Eigenschaften des objektorientierten Ansatzes Konzepte des objektorientierten Programmierens 1.11 Eigenschaften des OO-Ansatzes Kapselung Objekte kapseln die dazugehörigen Eigenschaften gegenüber der Umwelt. Identität Alle Objekte besitzen eine eigene Identität, auch wenn sie nach außen gleich erscheinen. Klassifikation / Abstraktion Ähnliche Objekte können zu Gruppen zusammengefasst werden und ein Muster (Klasse) steht für die gemeinsamen Eigenschaften dieser Objekte. 1.12
Eigenschaften des OO-Ansatzes Vererbung / Hierarchisierung Objekt-Muster (Klassen) können ihre Eigenschaften an spezifischere Objekt-Muster vererben. Es entsteht eine Hierarchie von Objekt-Mustern, die eine verschieden tiefe Abstraktion widerspiegeln. Polymorphismus Eine Funktion kann mehrmals implementiert sein. Beim Funktionsaufruf wird die passende Funktion angewählt und ausgeführt. ( Kapselung, Abstrahierung) 1.13 Vorteile des OOP-Ansatzes kein Bruch zwischen Modellierung und Implementierung Nachvollziehbarkeit der Implementierung Programmstabilität durch Kapselung Wiederverwertbarkeit 1.14
Agenda Beispielszenario Eigenschaften des objektorientierten Ansatzes Konzepte des objektorientierten Programmierens 1.15 Konzepte des OOP Kapselung Klasse Objekt (Instanz, Exemplar) Methoden (Funktionen) Botschaften (Funktionsaufrufe) Vererbung 1.16
Klasse Kapselung (information hiding, Geheimnisprinzip) von Daten und Methoden Klasse: Lagerobjekt Lagerobjekt Name getregal() int Regal setregal(x) Gewicht: real Fach-Nr: integer getregal() setregal() Daten Methoden 1.17 Klasse in C++ class Lagerobjekt { float Gewicht; int Regal; int Fach; public: int getregal() { return Regal; } void setregal(int i) { Regal = i; } }; // Daten // Daten // Daten // Methode // Methode 1.18
1 Objekt (Instanz, Exemplar) Objekt = Behältnis für Daten und Methoden (Funktionen) Klasse Objekte Lagerobjekt Gewicht: real Fach-Nr: integer getregal() setregal() Lagerobjekt: o1 Gewicht = 70 Regal-Nr = 4 Fach-Nr = 12 Lagerobjekt: o2 Gewicht = 120 Regal-Nr = 2 Fach-Nr = 7 1.19 Objekt in C++ void main() {... Lagerobjekt o1, o2;... o1.setregal(4); o2.setregal(2);... } 1.20
1 Klassenvariablen und -methoden Instanzvariablen halten die Daten eines Objektes Instanzmethoden sind Funktionen, um Instanzvariablen zu manipulieren. Klassenvariablen sind Variablen eine Klasse; sie werde nicht vererbt Klassenmethoden sind Funktionen, um Klassenvariablen zu manipulieren. Lagerobjekt Gewicht: real Fach-Nr: integer getanzahl() 1.21 Klassenariablen und Methoden in C++ class Lagerobjekt { float Gewicht; int Regal; int Fach; static int Anzahl; public: static int getanzahl() { return Anzahl; } }; cout << "Anzahl: " << Lagerobjekt::getAnzahl << endl; 1.22
1 Vererbung Behälter Stapelpos:integer getlagerort(); Lagerobjekt Gewicht: float Fach-Nr: integer Palette getlagerort(); class Lagerobjekt { }; class Behaelter : public Lagerobjekt { int Stapelpos; public: void setstapelpos(int i) { }; int getlagerort() { }; } 1.23 Zusammenfassung Die objektorientierte Programmierung setzt den Ansatz des objektorientierten Modellierens fort. Bruch zwischen Modellierung und Implementierung wird vermieden. Objekte kapseln Daten und Funktionen und fördern dadurch Nachvollziehbarkeit der Implementierung Programmstabilität Wiederverwertbarkeit 1.24