Grundkonzepte Objektorientierter Programmierung Nicole Himmerlich FSU Jena mit Java, Oberon-2, Object-Pascal und Python Inhaltsüberblick I. Grundbegriffe 1) Kopplung 2) Datenkaspelung 3) Konstruktor 4) Klassenvariablen 5) Manipulierbarkeit 6) Vererbung 7) Überschreiben 8) Überladen 9) Polymorphismus Organisatorisches I. Grundbegriffe - Objekte und Klassen Pausenzeiten: 15:30 16:00 Objekt Gegenstand, Person, Sachverhalt oder Ereignis der realen Welt 17:00 17:10 Ausarbeitung und Quelltexte: www.minet.uni-jena.de/content_page_508.html Kontakt: nhimmerlich@web.de besitzt: Zustand Verhalten Identität Attribute Methoden kommuniziert mit anderen Objekten Botschaften I. Grundbegriffe - Objekte und Klassen I. Grundbegriffe - Objektorientierte Konzepte Klasse beschreibt Struktur und Verhalten einer Menge gleichartiger Objekte konkretes Objekt ist Instanz einer Klasse 1
Klassendefinition: mit Schlüsselwort class Attribute: Variablendeklaration Methoden: Prozeduren / Funktionen Attribute und Methoden bilden ein Aggregat einzelne Komponenten nehmen Bezug aufeinander Beispiel: Konto Attribute: Kontonummer, Eigentümer, Kontostand, Kreditlimit, Zinssatz, Methoden: einzahlen, auszahlen, kontoauszug, verzinsen, überweisen, Attribute und Methoden bilden ein Aggregat einzelne Komponenten nehmen Bezug aufeinander Beispiel: Konto Objekt erzeugen: Variable deklarieren new-operator + Konstruktor Zugriff auf Attribute / Methoden: Punktnotation Referenz.Attribut Referenz.Methode() Klassendefinition: in einem Modul Attribute: Felder eines Recordtyp + Referenztyp Methoden: typgebundene Prozeduren Objekt erzeugen: Variable deklarieren new-operator Zugriff auf Attribute / Methoden: Punktnotation Referenz.Attribut Referenz.Methode() 2
Klassendefinition: in einer Unit Typdeklaration mit class Attribute: Variablen des Typs Methoden: Prozeduren / Funktionen des Typs gesonderte Implementierung Objekt erzeugen: Variable deklarieren create-methode Zugriff auf Attribute / Methoden: Punktnotation Referenz.Attribut Referenz.Methode() - Datenkapselung - Datenkapselung Aufbau des Objektes und Implementierung der Methoden verborgen Geheimnisprinzip (engl. Information Hiding) Wie kann die Komponente verwendet werden? statt Wie ist die Komponente realisiert? Zugriff auf gekapselte Attribute über spezielle Methoden get- und set-methoden bzw. properties Modifizierer für Attribute und Methoden get- und set-methoden Modifizierer: default = Paket public = Global private = Klasse protected = Subklassen - Datenkapselung - Datenkapselung mit Stern gekennzeichnete Komponenten werden exportiert get- und set-methoden als typgebundene Prozeduren Properties: repräsentieren gekapselte Attribute read-zweig write-zweig (optional) Definitionsbereiche: public = Global private = Unit protected = Subklassen 3
spezielle Methode aktiviert wenn ein neue Instanz gebildet wird stellt sicher, dass alle Objekte definierte Werte besitzen Methode ohne Rückgabetyp trägt Klassennamen Standardkonstruktor ohne Parameter Programmierer kann Objekterzeugung beeinflussen elegante Möglichkeit zur Initialisierung spezielle Default-Werte festlegen mehrere Konstruktoren mit unterschiedlicher Signatur nicht im Sprachkonzept enthalten 2 Möglichkeiten zur Nachbildung Schlüsselwort constructor Standardkonstruktor create Klassendefinition: mit Schlüsselwort class Konstruktor: Spezialmethode init Attribute: Variablen im Konstruktor Methoden: Funktionen mit Parameter self Objekt erzeugen: Klassenname als Funktionsaufruf init wird ausgeführt Zugriff auf Attribute / Methoden: Punktnotation Referenz.Attribut Referenz.Methode() Datenkapselung: exportiert alle Namen Konvention 4
- Klassen- und Instanzkomponenten - Klassen- und Instanzkomponenten instanzspezifische Variablen und Methoden gehören jeweils einer bestimmten Instanz der Klassen klassenspezifische Variablen und Methoden gehören der gesamten Klasse Klassenvariablen für alle Instanzen gleicher Wert Klassenmethoden für alle Instanzen gleiches Verhalten dürfen nicht auf instanzspezifische Komponenten zugreifen - Klassenkomponenten Instanzkomponenten: kein spezielle Kennzeichnung Instanz.Variable Instanz.Methode() Instanzkomponenten: Felder eines Record bzw. typgebundene Prozeduren Instanz.Variable Instanz.Methode() Klassenkomponenten: Schlüsselwort static Klasse.Variable Klasse.Methode() Klassenkomponenten: Modulvariablen bzw. ungebundene Prozeduren Modul.Variable Modul.Methode() - Klassenkomponenten Instanzkomponenten: Variablen und Methoden innerhalb der Klassendefinition Instanz.Variable Instanz.Methode() Instanzkomponenten: Variablen innerhalb init Instanz.Variable Klassenkomponenten: Unitvariablen bzw. Methoden mit class Unit.Variable Klasse.Methode() Klassenkomponenten: Variablen außerhalb init Klasse.Variable 5
- Manipulierbarkeit - Manipulierbarkeit Vergleich: Zuweisung: Parameter: - Manipulierbarkeit - Vererbung Generalisierung: Objekte mit gemeinsamen Eigenschaften zu einer allgemeineren Kategorie zusammengefasst Spezialisierung: Gruppe von Objekten durch Hinzufügen von Eigenschaften in Unterkategorien eingeteilt Vererbung: Mechanismus durch den Klassen Eigenschaften von übergeordneten Klassen übernehmen - Vererbung Klasse ableiten: Schlüsselwort extends und Name der Superklasse Geerbte Komponenten: mit public oder protected deklarierte Variablen und Methoden der Superklasse keine mit private gekennzeichneten Komponenten keine Konstruktoren 6
- Vererbung - Vererbung Klasse ableiten: Name der Superklasse in Record-Definition angeben Klasse ableiten: Name der Superklasse hinter Schlüsselwort class Geerbte Komponenten: mit * exportierten Variablen und Methoden der Superklasse Geerbte Komponenten: public- oder protected- Komponenten der Superklasse private-komponenten von Superklassen in der selben Unit - Vererbung - Überschreiben von Methoden Klasse ableiten: Name der Superklasse hinter Klassenname Geerbte Komponenten: alle Variablen und Methoden der Superklasse allgemeine Methode der Superklasse wird in der Subklasse durch speziellere Fassung ersetzt Überschreiben von Methoden: gleicher Name, Parameterliste, Rückgabetyp andere Anweisungen Änderung der Funktionalität 7
- Überschreiben von Methoden Überschreiben: für alle Methoden möglich mit final unterbinden verdeckte Komponenten: Schlüsselwort super Überschreiben: für alle Methoden möglich über Empfängerparameter an Subklasse binden verdeckte Komponenten: Pfeil ^ anhängen Überschreiben: für dynamische Methoden möglich mit dynamic erlauben mit override kennzeichnen verdeckte Komponenten: Schlüsselwort inherited - Überschreiben von Methoden - Überschreiben von Methoden Überschreiben: für alle Methoden möglich verdeckte Komponenten: Name der Superklasse 8
Methode einer Klasse wird in verschiedenen Varianten definiert Überladen von Methoden: gleicher Name unterschiedliche Parameterliste unabhängig vom Rückgabetyp vergleichbare Funktionalität 9
- Polymorphismus - Polymorphismus Polymorphie I: Fähigkeit von Variablen zur Laufzeit auf Objekte beliebigen Typs zu verweisen statischer Typ = Typ der Variable in Deklaration dynamischer Typ = Typ des Objektes zur Laufzeit Polymorphie II: Eigenschaft von Operationen sich in verschiedenen Klassen unterschiedlich zu verhalten Überschrieben & Überladen 10