140 likes | 434 Views
Warum Objektorientierung?. Hauptprobleme der industriellen Softwareentwicklung: Beherrschung der Komplexität Wartbarkeit Wiederverwendung (Ökonomie der Softwareentwicklung) Objektorientierte Programmierung: bietet Lösungsansätze für obige Hauptprobleme
E N D
Warum Objektorientierung? • Hauptprobleme der industriellen Softwareentwicklung: • Beherrschung der Komplexität • Wartbarkeit • Wiederverwendung (Ökonomie der Softwareentwicklung) • Objektorientierte Programmierung: • bietet Lösungsansätze für obige Hauptprobleme • bietet natürlichen Übergang von Problemformulierung zum Programm • objektorientierte Modellierung in Systemanalyse und Design • paßt zu graphischen Oberflächen und verteilten Systemen (Internet!) aber: • erfordert völlig anderes Denken als klassisches prozedurales Programmieren
Programmierparadigmen • Maschinennahe Programierung: • Sprungbefehle (GO TO), Adressierung auf Speichereben • Prozedurale (strukturierte) Programmierung: • Verwendung von IF, WHILE und Unterprogrammen • Modulare Programmierung: • Zusammenfassung von Unterprogrammen und Datentypen in geschlossene Einheiten • Objektorientierte Programmierung • Programm als Gemeinschaft kooperierender Einheiten • Methoden (lokale Operationen auf Dateneinheiten) statt Prozeduren • Komponentenorientierte Programmierung: • Programm zusammengesetzt aus vorgefertigten Bausteinen • Delphi: • ermöglicht alle Programmierparadigmen und deren Mischung
Meine Verantwortung: Produktkatalog Meine Verantwortung: Kontoführung Verantwortungsbereiche • Sachbearbeiter in einem Betrieb oder einer Behörde • Ist unter definierter Adresse/Telnr. erreichbar. (Identität) • Hat genau definierten Zuständigkeitsbereich • Bearbeitet genau definierte Einzelaufgaben • Verfügt über spezielles Wissen bzw. spezifische Information • Bearbeitet komplexe Geschäftsvorfälle in Zusammenarbeit mit anderen Sachbearbeitern • “Software-Sachbearbeiter” = Objekte
Objektorientierung • Wie ist das Objekt bezeichnet? • Wie verhält es sich zu seiner Umgebung? • Welche Informationen sind „Privatsache“ des Objekts? Identität: „DD-0X5A“ Zustand: Normalbetrieb Verhalten: „gelbes Licht“
Grundkonzepte der Objektorientierung • Ein System besteht aus vielen Objekten. • Ein Objekt hat ein definiertes Verhalten. • Verhalten setzt sich zusammen aus einer Menge genau definierter Methoden zur Erfüllung von Einzelaufgaben. • Eine solche Methode wird beim Empfang einer Nachricht ausgeführt. • Ein Objekt hat einen inneren Zustand. • Der Zustand des Objekts ist Privatsache. • Das Resultat einer Methode des Objekts (bei Empfang einer Nachricht) hängt vom aktuellen Zustand des Objektes ab. • Ein Objekt hat eine eindeutige Identität. • Die Identität eines Objektes ist unabhängig von seinen anderen Eigenschaften. • Es können mehrere verschiedene Objekte mit identischem Verhalten und identischem inneren Zustand im gleichen System existieren.
Beispiel: Ampel-Objekt Objekt zur Repräsentation einer Ampel • Verhalten des Ampel-Objekts: • Reaktion auf Nachrichten wie ‚Zeittakt‘, ‚Fahrzeugsensor‘ • Zustand des Ampel-Objekts: • Schaltphase, Restzeit, Betriebsmodus, ... • Identität des Ampel-Objekts: • Unabhängig vom Zustand • Unterscheidbar von anderen Ampeln (auch solchen im gleichen Zustand!) Ampel DD-0X5A Zeittakt Lichtsignale
Beispiel: Termin-Objekt Objekt zur Repräsentation eines Termins • Verhalten des Termin-Objekts: • Reaktion auf Nachrichten wie ‘gibDatum’, ‘versendeEinladungen’ • Zustand des Termin-Objekts: • Datum, Ort, Teilnehmer, geplant/bestätigt • Identität des Termin-Objekts: • Unabhängig vom Zustand 12. Abteilungsrunde gibDatum versendeEinladungen Ergebnis: Datum
Klasse und Objekt • Welcher Begriff beschreibt das Objekt? • Welche Begriffshierarchie wird verwendet? • Wie hängt das Verhalten des Objektes von der Hierarchie ab? Klasse: „Ampel“ Polymorphie: Ampeln mit Sensorsteuerung reagieren in spezieller Weise auf Zeittakt Vererbung: Sensorgesteuerte Ampel
Erweiterte Konzepte der Objektorientierung • Ein Objekt gehört zu einer Klasse. • Die Klasse schreibt das Verhaltensschema und die innere Struktur ihrer Objekte vor. • Klassen besitzen einen ‘Stammbaum’, in der Verhaltensschema und innere Struktur durch Vererbung weitergegeben werden. • Vererbung bedeutet Generalisierung einer Klasse zu einer Oberklasse. • Polymorphie: Eine Nachricht kann verschiedene Reaktionen auslösen, je nachdem zu welcher Unterklasse einer Oberklasse das empfangende Objekt gehört. n n
Beispiel: Ampel-Klasse und Ampel-Objekte DD-0X5A: SensorAmpel DD-0Y3C: ZeitAmpel DD-0X5B: SensorAmpel Ampel SensorAmpel ZeitAmpel Instanz einer Klasse Generalisierung (Vererbung)
Beispiel: Termin-Klasse und Termin-Objekte AR-12: Teambesprechung Figaro: Theaterbesuch AR-13: Teambesprechung Termin Geschäftstermin Privater Termin Teambesprechung Kundenbesuch Theaterbesuch Instanz einer Klasse Generalisierung (Vererbung)
Beispiele: Polymorphie • Jede Ampel reagiert auf den Zeittakt. • Die Klasse Ampel schreibt vor, daß auf die Nachricht „Zeittakt“ reagiert werden muß. • Verschiedene Reaktionen: • Jeder Termin kann verschoben werden. • Die Klasse Termin schreibt vor, daß auf die Nachricht „verschiebeTermin“ reagiert werden muß. • Verschiedene Reaktionen: • Unterklassen spezialisieren das Verhalten ihrer Oberklassen. DD-0Y3C: ZeitAmpel DD-0X5A: SensorAmpel AR-13: Teambesprechung Figaro: Theaterbesuch
Prinzipielle Vorteile von Objektorientierung Lokale Kombination von Daten und Operationen, gekapselter Zustand Zuständigkeitsbereiche Stabilität Definiertes Objektverhalten, Nachrichten zwischen Objekten Klare Schnittstellen Änderungs- freundlichkeit Vererbung und Polymorphie (Spezialisierung), Klassenschachtelung Hierarchie Wieder- verwendung Benutzung vorgefertigter Klassenbibliotheken, Anpassung durch Spezialisierung (mittels Vererbung) Baukastenprinzip
Objektorientierte Programmiersprachen • Simula (1967) • Historisch erste objektorientierte Sprache • Smalltalk (1976-80) • radikale Objektorientierung und graphische Oberflächen • C++ (1984) • Objektorientierte Erweiterung von C • Java (1995) • Einfache C-ähnliche Sprache, plattformneutral • Object Pascal / Delphi (1995) • Objektorientierte Erweiterung von (Turbo-)Pascal, Windows-orientiert