Programmierparadigmen

Ähnliche Dokumente
Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

Programmierung und Angewandte Mathematik

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Prinzipien der objektorientierten Programmierung (OOP)

Objektorientierte Programmierung (OOP)

Vererbung und Polymorphie

Einstieg in die Informatik mit Java

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

Einstieg in die Informatik mit Java

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

C++ - Objektorientierte Programmierung Vererbung

Objektorientierte Programmierung Studiengang Medieninformatik

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Begriffe 1 (Wiederholung)

Vererbung, Polymorphie

Programmieren in Java

Programmieren in Java

Einführung in die Programmiersprache Java II

11 Vererbung und Klassenhierarchie

Objektorientierte Programmierung OOP

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Objektorientierung

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

Programmiertechnik Objektorientierung

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.

Angewandte Mathematik und Programmierung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

3 Objektorientierte Konzepte in Java

Vorlesung Datenstrukturen

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Einführung in die Programmierung mit C++

Programmieren in Java

Objektorientierte Programmierung OOP

Vererbung und Polymorphie

Kapitel 6. Vererbung

Rückblick: Benutzerdefinierte Datentypen Definition der Klasse Vektor als Container für 2-dimensionale Vektoren

Einführung in die Programmierung

7. Übung Informatik II - Objektorientierte Programmierung

Grundkurs C++ IDE Klassenhierarchien

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

11.3 Virtuelle Methoden

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Grundkurs C++ IDE Klassenhierarchien

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Einführung in C# Teil 3. Matthias Nübling

Java für Bauingenieure

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Kapitel 6. Vererbung

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

Java, OO und UML Fortsetzung

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

3 Objektorientierte Konzepte in Java

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

Exceptions und Vererbung

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

Kapitel 6. Vererbung

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Objektorientierte Programmierung (OOP) mit Matlab - Ein Crashkurs

Java Vererbung. Inhalt

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Überblick. Überblick. Abstrakte Klassen - rein virtuelle Funktionen Beispiele

Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen

Vorkurs C++ Programmierung

Fragen zur OOP in Java

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Von der UML nach C++

Vererbung. Was versteht man unter dem Begriff Vererbung?

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Grundlagen der Informatik

Javakurs für Anfänger

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Java Einführung Methoden in Klassen

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Einstieg in die Informatik mit Java

Objektorientierte Programmierung. Kapitel 12: Interfaces

Einstieg in die Informatik mit Java

Objektorientierte Programmierung. Kapitel 14: Interfaces

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Objektorientierte Programmierung mit C++ SS 2007

Einführung in die Programmierung für NF MI. Übung 07

Überblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Überblick. 5. Objekt und Klasse, Elementfunktionen

"Roman Jachs" PR Überblick C++ Roman Jachs 5 AHD 1998/99. Überblick C++

Transkript:

Programmierparadigmen DEKLARATIV Funktional Logisch IMPERATIV Prozedural Objektorientiert Einsatz der Programmierparadigmen Systemkomplexität von der Komplexität der Algorithmen dominiert deklarativ oder prozedural Systemkomplexität höher als Komplexität der einzelnen Algorithmen Objektorientierte Programmierung OOP 3

Grundidee der OOP Abbildung der Realität in Form von objektorientierten Strukturen Objekte sind Einheiten aus Eigenschaften/Attributen/Properties ( Variablen ) z.b.: Objekt=Mensch: Mein Name ist Andreas. und Methoden/Routinen ( Funktionen ) z.b.: Objekt=Mensch: Ein Mensch kann Essen. 4

Konzepte der OOP Kapselung: Zusammenfassen von Eigenschaften und Methoden Interaktion zwischen den Objekten erfolgt über wohldefinierte Schnittstellen PRO: zwingt zu strukturierterem Programmierstil Wiederverwendbarkeit von Code Stabilitätsverbesserung leichtere Wartbarkeit 5

Grundlage der OOP - Klasse Klasse = allgemeine Beschreibung der Struktur von Objekten Klasse fasst die Eigenschaften und Methoden von Objekten zusammen Klasse = Vorlage für alle davon abgeleiteten Objekte die Instanz (=konkrete Repräsentation) einer Klasse entspricht einem Objekt alle Objekte sind Instanzen einer Klasse 6

Klasse - Beispiel class Bankangestellter { float m_monatsgehalt; public: float getjahresgehalt() const { return (m_monatsgehalt * 12); } }; 7

Tipps zu Notationen empfehlenswert: Schreibweise konsistent halten Klassennamen: Groß-Schreibung bzw. CKlassenname: z.b.: Bankangestellter bzw. CBankangestellter Schnittstellen (Interfaces: in C++ durch abstrakte Klassen realisiert): IKlassenname: z.b.: IAngestellter Attribute: Kleinschreibung mit vorangestelltem m_: z.b.: m_monatsgehalt Methoden: beginnen mit kleinem Verb, weitere Wörter groß: z.b.: getjahresgehalt() 8

Zugriffsrechte Access Specifier class Name { private: int m_x; protected: int m_y; public: int m_z; }; private: erlaubt nur Elementen der eigenen Klasse den Zugriff (default) protected: auch Elemente abgeleiteter Klassen besitzen ein Zugriffsrecht public: jedes Element kann zugreifen 9

Konstruktoren 1/3 Konstruktoren sind spezielle Methoden, die definieren, wie ein Objekt zu erzeugen ist (haben keinen Rückgabewert) Konstruktorname ist gleich dem Klassennamen ein Konstruktor wird bei der Instantierung (=Erzeugung) eines Objektes automatisch aufgerufen Zwei Konstruktoren werden automatisch (implizit) erzeugt: Standard-Konstruktor (default constructor) Kopier-Konstruktor (copy constructor) 10

Konstruktoren 2/3 Standard-Konstruktor: Hat die Signatur ClassName::ClassName() Wird kein Standard-Konstruktor deklariert, so wird ein solcher Konstruktor automatisch erzeugt (der automatisch generierte Standard-Konstruktor ist immer public und hat einen leeren Methodenrumpf) Beispiel: public class Bruch { int m_zaehler; int m_nenner; }; Bruch v1; /* Aufruf des impliziten Standard-Konstruktors */ 11

Konstruktoren 3/3 Kopier-Konstruktor: Hat die Signatur ClassName::ClassName(ClassName&) Initialisiert Objekt mit anderem Objekt vom selben Typ: neues Objekt wird erzeugt, indem übergebenes Objekt kopiert wird. Wird kein Kopier-Konstruktor deklariert, so wird ein solcher Konstruktor automatisch erzeugt. Beispiel: Bruch v1; Bruch v2(v1); /* Aufruf des Kopier-Konstruktors */ Bruch v3 = v1; /* Aufruf des Kopier-Konstruktors */ aber: Bruch v4; v4 = v1; /* Kopie mittels Zuweisungsoperator!! */ 12

Destruktoren Destruktoren sind spezielle Methoden, die automatisch vor dem Löschen eines Objektes aufgerufen werden (man kann definieren, wie ein Objekt aufzuräumen ist) Destruktorname ist ~Klassennamen, z.b., ~circle Destruktoren haben keine Inputparameter und auch keinen Rückgabewert Es ist nur ein Destruktor pro Klasse erlaubt (kann nicht überladen werden, da keine Inputparameter) 13

this-zeiger jede Methode besitzt den Zeiger this, über den eine Methode auf die Adresse des Objektes zugreifen kann, über das die Methode aufgerufen wurde class Klasse { int m_wert; public: void nix() const { } Klasse() { m_wert = 10; this -> m_wert = 10; nix(); this -> nix(); } }; 14

UML 1/2 Unified Modeling Language Modellierungssprache für (objektorientierte) Programmierung Vielzahl an Diagrammtypen Klassendiagramm: Darstellung von Klassen und ihrer Beziehung zueinander 15

UML 2/2 Klassenname -private Attribute Bruch -m_zaehler: int #protected Attribute +public Attribute -m_nenner: int <<instance of>> b1 m_zaehler=3 -private Method() #protected Method() +Bruch(in z: int, in n: int) m_nenner=4 +public Method() 16

Vererbung Definition von neuen Klassen auf Basis von existierenden Klassen Eigenschaften und Methoden werden automatisch übernommen (abhängig von den gesetzten Zugriffsrechten in der Basisklasse) Erweiterungs- und Änderungsmöglichkeiten: Hinzufügen von Eigenschaften/Methoden Überschreiben von Methoden 17

Vererbung - Beispiel class Filialleiter : public Bankangestellter { float m_weihnachtsgeld; float m_urlaubsgeld; public: float getjahresgehalt() const { return (m_weihnachtsgeld+m_urlaubsgeld+bankang estellter::getjahresgehalt()); } }; 18

Überschreiben vs. Überladen von Methoden Die Signatur einer Methode besteht aus dem Methodennamen und der Parameterliste. Werden in der abgeleiteten Klasse Methoden mit gleichem Namen wie in der Basisklasse definiert: Methode wurde überschrieben, wenn die Methoden eine idente Signatur besitzen Methode wurde überladen, wenn die Methoden eine unterschiedliche Signatur besitzen 19

Beziehungen zwischen Klassen ist-ein(e)-beziehung: Ein Filialleiter ist ein Bankangestellter. ist-implementiert-mit-beziehung: bei privater Vererbung, vererbte Methoden sind in der Subklasse nicht sichtbar, müssen neu definiert werden, möglich: Einbettung hat-ein(e)-beziehung: Aufgaben werden an das eingebettete Objekt delegiert, das eingebettete Objekt übernimmt einen Teil der Aufgaben des Hauptobjekts 20

Mehrfachvererbung 1/2 eine Klasse wird von mehreren Basisklassen abgeleitet class Subklasse: public BasisA, public BasisB { }; public: Subklasse() : BasisA(), BasisB() { m_awert=10; m_bwert=20; } 21

Mehrfachvererbung 2/2 Diamanten-Problem : Klasse erbt von zwei Klassen, die dieselbe Basisklasse haben Problem: Mehrdeutigkeiten bei geerbten Attributen Lösung: virtuelle Basisklassen (Basisklasse wird in Subklasse nur einmal eingebunden) Mehrfachvererbung von Schnittstellen (interfaces) durch Vererbung von abstrakten Klassen: (Abstrakte Klassen haben mind. eine rein virtuelle Methode, d.h., Methode ohne Rumpf) 22

OO Prinzip 1: Datenabstraktion Datenabstraktion wichtig für Wartung Datenabstraktion = Kapselung + data hiding data hiding: über Zugriffsrechte regeln, was außen hin (zu anderen Objekten) sichtbar ist Definition von Schnittstellen: beschreibt, was nach außen hin sichtbar ist unterschiedliche Schnittstellen pro Objekt Datenabstraktion für unterschiedliche Sichtweisen 23

OO Prinzip 2: Klassenzusammenhalt/ Objekt-Kopplung 1/3 class coherence = Klassenzusammenhalt definiert Grad der Beziehung zwischen den Zuständigkeiten der Klassen hoch, wenn Eigenschaften und Methoden gut zusammenarbeiten und durch Klassenname gut beschrieben Klassenzusammenhalt soll hoch sein Hinweis auf gute Faktorisierung 24

OO Prinzip 2: Klassenzusammenhalt/ Objekt-Kopplung 2/3 object coupling = Objekt-Kopplung definiert Abhängigkeit der Objekte voneinander stark, wenn viele sichtbare Eigenschaften und Methoden viele Parameter in Methoden viel Nachrichtenaustausch im laufenden System Objekt-Kopplung soll schwach sein Hinweis auf gute Kapselung 25

OO Prinzip 2: Klassenzusammenhalt/ Objekt-Kopplung 3/3 Klassenzusammenhalt (class coherence) und Objektkopplung (object coupling) stehen in enger Beziehung zueinander Gutes objektorientiertes Programmdesign: hoher Klassenzusammenhalt und geringe Objektkopplung erleichtert mögliche notwendige Adaptierungen bzw. Erweiterungen Wichtig: Planung in früher Software-Entwicklungsphase 26

OO Prinzip 3: Offen-Geschlossen- Prinzip open closed principle (OCP), Robert C. Martin Code-Einheiten (z.b. Klassen) sollen offen für Erweiterungen, aber geschlossen für Veränderungen sein Es soll möglich sein, die Funktionalität einer Code-Einheit zu erweitern, ohne ihren bestehenden Code zu verändern Eine Erweiterung an anderer Stelle, die Auswirkungen auf eine Code-Einheit hat, darf keine Änderungen der Code- Einheit selbst nach sich ziehen 27

OO Prinzip 4: Ersetzbarkeitsprinzip Liskov-Substitutionsprinzip LSP, Barbara Liskov Instanzenmenge des Obertyps enthält Instanzenmenge des Untertyps. z.b.: Eine Maus ist ein Tier. U ist Untertyp von T, wenn Instanz von U überall verwendbar ist, wo Instanz von T erwartet wird. das Verhalten eines Objekts darf sich nicht verändern, wenn über einen Basisklassen-Zeiger darauf zugegriffen wird 28

OO Prinzip 5: Polymorphismus 1/3 poly viel, morphus Gestalt Vielgestaltigkeit Fähigkeit einer abgeleiteten Klasse, die Form ihrer Basisklasse anzunehmen überall dort, wo ein Objekt der Basisklasse erwartet wird, kann auch ein Objekt der abgeleiteten Klasse verwendet werden 29

OO Prinzip 5: Polymorphismus 2/3 SpielObjekt -m_x: KoordTyp -m_y: KoordTyp +getposition(): PosTyp Tuer +istoffen() 30

OO Prinzip 5: Polymorphismus 3/3 Tuer tuer(6,5,true); SpielObjekt so = tuer; SpielObjekt* pso = &tuer; cout << pso->getposition() << endl; cout << pso->istoffen() << endl; OK slicing (Weglassen der ungültigen Eigenschaften/Methoden) OK nicht OK Tuer* ptuer = pso; falsche Typzuweisung (Zeiger auf Tuer Zeiger auf Spielobjekt) Tuer* ptuer = static_cast<tuer*> (pso); cout << ptuer->istoffen() << endl; OK 31