OO Softwareentwicklung Objektorientierung Prof. Dr. Bernhard Schiefer 1 OO als Ansatz zur Verbesserung der Software-Qualität Modellierung der Welt als selbständig agierende Objekte. Gemeinsame Beschreibung von Objekte gleichen Verhaltens durch "Klassen". Syntaktische Unterstützung von Moduln Trennung Schnittstelle von Implementierung. Kapselung von Daten und Funktionen. Information hiding Lösung des Offen/Geschlossen Problems durch Vererbung und Polymorphie. Prof. Dr. Bernhard Schiefer 2
Objekte und Klassen Objekt Alles dem ein Name gegeben werden kann Instanz der Implementierung eines ADT Klasse Implementierung eines ADT Beschreibt das Verhalten einer Menge gleitiger Objekte class Pkw int void kennzeichen[8]; max_geschw; nächste_ asu[5]; print (void); Prof. Dr. Bernhard Schiefer 3 void main (void) Pkw *mikes_car = new Pkw ("ZW-X1",156, "05/99"); Pkw *susis_car = new Pkw ("HOM-P5",187, "01/99"); } Eigenschaften - Features Attribut Daten eines Objektes Andere Begriffe: Instanzvariable, Komponente Methode Operationen, die auf ein Objekt angewandt werden können Andere Begriffe:Operation, Funktion Eigenschaft Attribute und Methoden Andere Begriffe:Feature Prof. Dr. Bernhard Schiefer 4
Vererbung Einfache Vererbung Mechanismus, durch den ein Objekt einer Klasse (Unterklasse) Zugriffe auf Features einer anderen Klasse (Oberklasse) bekommt. Ziel: Die Objekte der Unterklasse können überall dort verwendet werden, wo Objekte der Oberklasse erwartet werden. Mehrfachvererbung Eine Klasse erbt von mehreren Oberklassen. Prof. Dr. Bernhard Schiefer 5 Vererbung - Beispiel class Fahrzeug int void kennzeichen[8]; max_geschw; nächste_ asu[5]; print (void); class Pkw : public Fahrzeug bool cabrio; bool notersatzrad; bool seitenairbag; class Lkw : public Fahrzeug int anzahl_achsen; int lade_fläche; bool schlafkabine; Prof. Dr. Bernhard Schiefer 6
Mehrfachvererbung - Beispiel class Fahrzeug int void kennzeichen[8]; max_geschw; nächste_ asu[5]; print (void); class Boot int max_geschw_knoten; int wasserverdrängung; class Amphibienfahrzeug : public Fahrzeug, public Boot Prof. Dr. Bernhard Schiefer 7 Polymorphie Wesen der Polymorphie Eine Variable kann Werte verschiedener Klassen annehmen. Zulässig sind beim oop idr die Objekte der Unterklassen. Unterscheidung zwischen formalem (statischem) und aktuellem (dynamischem) Typ. Dynamisches Binden Auswahl der tatsächlich auszuführenden Methode zur Laufzeit. Welche Methode ausgeführt wird hängt vom aktuellen Typ ab. Prof. Dr. Bernhard Schiefer 8
Überschreiben/Überladen Bei der Vererbung können Methoden in der Unterklasse neu definiert werden. Überschreiben Innerhalb einer Klasse können Methoden mit gleichem Namen aber unterschiedlichen Parametertypen definiert werden. Überladen Prof. Dr. Bernhard Schiefer 9 Abstrakte Klassen Klassen, von denen keine Objekte gebildet werden heißen "abstrakt". Abstrakte Klassen spiegeln häufig abstrakte Konzepte wieder. Bei abstrakten Klassen müssen nicht alle Methoden definiert sein. Klassen, die instantiiert werden können heißen "konkret". Prof. Dr. Bernhard Schiefer 10
Gründe für den Einsatz von Vererbung Umsetzung einer Generalisierungs- /Spezialisierungsbeziehung (IS_A) Beispiel: Student -> HiWi Wiederverwendung von Klassenimplementierungen Reduktion von Tippaufwand Beispiel: IntArray -> IntVektor Prof. Dr. Bernhard Schiefer 11 Generische Klassen Problem: Viele Klassendefinitionen unterscheiden sich nur in den Parametertypen. Beispiele: IntListe, IntSet, KontoListe, KundenListe Lösung: Schablonen zur Erzeugung von Klassen. Klassen, die über Typparameter verfügen. Beispiel: Liste<Konto>, Liste<Kunde>,... Prof. Dr. Bernhard Schiefer 12