Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Ähnliche Dokumente
Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Wintersemester 2013/14 Auffrischung zur Programmierung in C++, 1. Teil

Vorlesung Datenstrukturen

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

Programmieren in Java

Programmierkurs C++ Abstrakte Klassen und Methoden

Programmierung und Angewandte Mathematik

Objektorientierte Programmierung mit C++ SS 2007

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

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

Konzepte der Programmiersprachen

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

C++ - Objektorientierte Programmierung Vererbung

Mapra: C++ Teil 6. Felix Gruber, Sven Groß. IGPM, RWTH Aachen. 13. Juni 2017

Polymorphismus 179. Function.h. #include <string>

Programmieren in Java

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

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

Vererbung und Polymorphie

C++ - Objektorientierte Programmierung Polymorphie

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

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

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

Polymorphismus 44. Function.hpp. #include <string>

Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz

Programmierkurs Java

Java für Bauingenieure

Prinzipien der objektorientierten Programmierung (OOP)

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

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Vererbung und Polymorphie

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Objektorientierte Programmierung

Implementieren von Klassen

Programmieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden

Die verschiedenen Programmierparadigmen von C++ Software-Technik: Vom Programmierer zur erfolgreichen

11.3 Virtuelle Methoden

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

C++ Teil 10. Sven Groß. 17. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Dez / 14

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

Einführung in die Programmierung mit C++

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

7. Übung Informatik II - Objektorientierte Programmierung

Objektorientierte Programmierung

Wissenschaftliches Rechnen

Einstieg in die Informatik mit Java

Angewandte Mathematik in OOP WS 2011/12. Abschluss-Test

Programmieren in Java

Javakurs für Anfänger

Objektorientierte Programmierung OOP

Die abgeleiteten Klassen Kreis und Viereck erben die Elemente des Basisklasse und verfügen über zusätzliche Eigenschaften (Seitenlänge,

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

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

Programmierung und Angewandte Mathematik

C/C++ - Programmierung. Vererbung Seite 1 von 6. Eine einfache Klasse für eine Personenbeschreibung hat die folgende UML: CPerson.

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object

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

Einführung in die Programmiersprache Java II

Einstieg in die Informatik mit Java

Grundkurs C++ IDE Klassenhierarchien

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

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Propädeutikum Programmierung in der Bioinformatik

Grundkurs C++ IDE Klassenhierarchien

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

Einführung in das Objektorientierte Programmieren mit C++

Objektorientierte Anwendungsentwicklung

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Probeklausur. Musterlösung

Grundkurs C++ IDE Klassenhierarchien

Informatik II Übung, Woche 17

Skriptum Bauinformatik SS 2013 (Vorlesung III)

Java Einführung Vererbung und Polymorphie. Kapitel 13

Objektorientierte Programmierung Studiengang Medieninformatik

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

Erste Java-Programme (Java Wiederholung & Vererbung)

Tafelübung 07 Algorithmen und Datenstrukturen

Programmierpraktikum 3D Computer Grafik

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Objektorientierte Programmierung Studiengang Medieninformatik

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

Programmierung und Angewandte Mathematik

Programmieren 2 C++ Überblick

Zusammenfassung. Mit bjam und ein paar Zeilen in einem Jamroot oder Jamfile lässt sich das Kompilieren und Linken einfach automatisieren

Einstieg in die Informatik mit Java

Einführung in die Programmierung mit C++

Einführung in die Programmierung

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1

14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch

11 Vererbung und Klassenhierarchie

Kapitel 06. Klassen und Objekte. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Java-Grundkurs für Wirtschaftsinformatiker

Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

Transkript:

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 2. Teil 18. April 2012

Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 2 /22 Gestern Ausgabe des ersten Übungszettels: Abgabe Dienstag pünktlich 10:00 Uhr Briefkasten 89 Hat jeder einen Partner für die Abgabe?

Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 2 /22 Gestern Ausgabe des ersten Übungszettels: Abgabe Dienstag pünktlich 10:00 Uhr Briefkasten 89 Hat jeder einen Partner für die Abgabe? Erinnerung: Schriftliche Abgabe Code zusätzlich per e-mail Code muss kompilieren sonst wird er nicht bewertet

Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 2 /22 Gestern Ausgabe des ersten Übungszettels: Abgabe Dienstag pünktlich 10:00 Uhr Briefkasten 89 Hat jeder einen Partner für die Abgabe? Erinnerung: Schriftliche Abgabe Code zusätzlich per e-mail Code muss kompilieren sonst wird er nicht bewertet Für Nachzügler: e-mail an sebastian.westerheide@uni-muenster.de

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 3 /22 Erinnerung Eingliederung C++ C++: Imperative Programmiersprache Hybrider Ansatz: Prozedurale und objektorientierte Programmierung möglich

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 4 /22 Überblick über die ersten beiden Übungsstunden Letzte Woche: Auffrischung zur prozeduralen Programmierung in C++ Heute: Auffrischung zur objektorientierten Programmierung in C++

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 4 /22 Überblick über die ersten beiden Übungsstunden Letzte Woche: Auffrischung zur prozeduralen Programmierung in C++ Heute: Grundlegende Syntax Basisdatentypen Wichtige Operatoren Kontrollstrukturen Prozeduren Wertparameter vs. Referenzparameter Pointer und Referenzen Auffrischung zur objektorientierten Programmierung in C++

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 4 /22 Überblick über die ersten beiden Übungsstunden Letzte Woche: Auffrischung zur prozeduralen Programmierung in C++ Heute: Auffrischung zur objektorientierten Programmierung in C++

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 4 /22 Überblick über die ersten beiden Übungsstunden Letzte Woche: Auffrischung zur prozeduralen Programmierung in C++ Heute: Auffrischung zur objektorientierten Programmierung in C++ Motivation Klassen und Objekte Klassendesign Konstruktoren Datenkapselung Vererbung Virtuelle Methoden Abstrakte Methoden Abstrakte Klassen Interfaces

Motivation (1/3) MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 5 /22 Prozedurale Programmierung: Aufbau der Programme aus Teilproblemen (Prozeduren) Es gibt Daten und Prozeduren

Motivation (1/3) MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 5 /22 Prozedurale Programmierung: Aufbau der Programme aus Teilproblemen (Prozeduren) Es gibt Daten und Prozeduren Prozeduren: Lesen oder Verändern lokaler Daten Aufruf von Prozeduren in Abhängigkeit von Parametern Diese enthalten Daten die weiter verarbeitet werden können Rückgabe der bearbeiteten Daten an den Aufrufer

Motivation (1/3) MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 5 /22 Prozedurale Programmierung: Aufbau der Programme aus Teilproblemen (Prozeduren) Es gibt Daten und Prozeduren Prozeduren: Lesen oder Verändern lokaler Daten Aufruf von Prozeduren in Abhängigkeit von Parametern Diese enthalten Daten die weiter verarbeitet werden können Rückgabe der bearbeiteten Daten an den Aufrufer Nachteil: Die Daten sind unabhängig von den Anweisungen Jede Anweisung kann gültige Daten lesen oder verändern Falls globale Daten verändert werden können die Folgen für das Programm nicht abgeschätzt werden Wie Daten und Prozeduren zusammenhängen steht nur in den Kommentaren

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 6 /22 Motivation (2/3) Beispiel 1 double kreis_umfang ( double r a d i u s ) ; double k r e i s _ f l a e c h e ( double r a d i u s ) ; 3 double rechteck_umfang ( double hoehe double b r e i t e ) ; double r e c h t e c k _ f l a e c h e ( double hoehe double b r e i t e ) ; 5... 7 i n t main ( ) { 9 double hoehe ; double b r e i t e ; 11 double r a d i u s ;... 13 } Daten und Prozeduren sind getrennt man könnte auch kreis_flaeche (hoehe) aufrufen

Motivation (3/3) MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 7 /22 Objektorientierte Programmierung: Zusammenfassung von Daten die ein Objekt beschreiben und Prozeduren zum Ändern dieser Daten

Motivation (3/3) MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 7 /22 Objektorientierte Programmierung: Zusammenfassung von Daten die ein Objekt beschreiben und Prozeduren zum Ändern dieser Daten Gegenstände der realen Welt werden abstrahiert um sie im Programm abzubilden

Motivation (3/3) MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 7 /22 Objektorientierte Programmierung: Zusammenfassung von Daten die ein Objekt beschreiben und Prozeduren zum Ändern dieser Daten Gegenstände der realen Welt werden abstrahiert um sie im Programm abzubilden Es werden Klassen erstellt um Gruppen von Objekten zu beschreiben Objekte erstellt um einen Gegenstand aus der realen Wert abzubilden Nachrichten zwischen Objekten verschickt

Motivation (3/3) MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 7 /22 Objektorientierte Programmierung: Zusammenfassung von Daten die ein Objekt beschreiben und Prozeduren zum Ändern dieser Daten Gegenstände der realen Welt werden abstrahiert um sie im Programm abzubilden Es werden Klassen erstellt um Gruppen von Objekten zu beschreiben Objekte erstellt um einen Gegenstand aus der realen Wert abzubilden Nachrichten zwischen Objekten verschickt Vorteile: Hilft bei der Strukturierung des Programms Reduziert mögliche Fehlerquellen Erleichtert die Wiederverwendung und Weiterentwicklung

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 8 /22 Klassen und Objekte Klassen beschreiben die Struktur von Objekten Objekte sind Instanzen einer Klasse Jede neue Klasse ist ein neuer Datentyp

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 8 /22 Klassen und Objekte Klassen beschreiben die Struktur von Objekten Objekte sind Instanzen einer Klasse Jede neue Klasse ist ein neuer Datentyp Klassen haben Eigenschaften (Attribute / Member-variables) Attribute beschreiben einen Gegenstand Jede Instanz einer Klasse besitzt die gleichen Eigenschaften Jedes Objekt hat aber bestimmte Attributwerte die das Objekt von anderen Objekten unterscheidet Attribute werden in C++ durch Variablen von einem bestimmten Datentyp dargestellt Methoden (Member-functions)

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 8 /22 Klassen und Objekte Klassen beschreiben die Struktur von Objekten Objekte sind Instanzen einer Klasse Jede neue Klasse ist ein neuer Datentyp Klassen haben Eigenschaften (Attribute / Member-variables) Methoden (Member-functions) Methoden können die Eigenschaft eines Objekts verändern Objekte teilen Informationen über sich selbst durch Methoden mit Objekte nutzen Methoden um mit anderen Objekten zu kommunizieren

Klassendesign MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 9 /22 Klassen entsprechen Substantiven in einer Problembeschreibung Ein Rechteck hat ein Breite b und eine Höhe h Daten in einer Klasse beschreiben Eigenschaften / Attribute Methoden in einer Klasse ändern Attribute / Daten oder geben einem darauf Zugriff

Klassendesign MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 9 /22 Klassen entsprechen Substantiven in einer Problembeschreibung Daten in einer Klasse beschreiben Eigenschaften / Attribute Ein Rechteck hat ein Breite b und eine Höhe h Methoden in einer Klasse ändern Attribute / Daten oder geben einem darauf Zugriff

Klassendesign MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 9 /22 Klassen entsprechen Substantiven in einer Problembeschreibung Daten in einer Klasse beschreiben Eigenschaften / Attribute Methoden in einer Klasse ändern Attribute / Daten oder geben einem darauf Zugriff Der Flächeninhalt des Rechtecks ist A = b h Der Umfang des Rechtecks ist U = 2 (b + h)

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 10 /22 Beispiel Klassendeklaration // K l a s s e n d e k l a r a t i o n 2 c l a s s Rechteck { 4 // Daten des Rechtecks double hoehe ; 6 double b r e i t e ; 8 p u b l i c : // K o n s t r u k t o r 10 Rechteck ( double h double b ) : hoehe ( h ) b r e i t e ( b ) { } 12 // Berechnungen double umfang ( ) ; 14 double f l a e c h e ( ) ; } ;

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 11 /22 Beispiel Implementierung 1 // Implementierung double Rechteck : : umfang ( ) 3 { r e t u r n 2 ( hoehe+ b r e i t e ) ; 5 } 7 double Rechteck : : f l a e c h e ( ) { 9 r e t u r n hoehe b r e i t e ; }

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 12 /22 Beispiel Hauptprogramm // K l a s s e n d e k l a r a t i o n und Implementierung laden 2 # i n c l u d e " 02 _Rechteck. hh " # i n c l u d e " 02 _Rechteck. cc " 4 # i n c l u d e < iostream > 6 i n t main ( ) 8 { // Ein Objekt vom Typ Rechteck i n s t a n z i i e r e n 10 Rechteck r ( 3. 5 4. 2 ) ; std : : cout < < r. f l a e c h e ( ) < < std : : endl ; 12 }

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 13 /22 Beispiel Insgesamt # include < iostream > 2 // K l a s s e n d e k l a r a t i o n 4 c l a s s Rechteck { 6 // Daten des Rechtecks double hoehe ; 8 double b r e i t e ; public : 10 // K o n s t r u k t o r Rechteck ( double h double b ) : hoehe (h) b r e i t e (b) { } 12 // Berechnungen double umfang ( ) ; 14 double f l a e c h e ( ) ; } ; 16 i n t main ( ) 18 { // Ein Objekt vom Typ Rechteck i n s t a n z i i e r e n 20 Rechteck r ( 3. 5 4. 2 ) ; std : : cout < < r. f l a e c h e ( ) < < std : : endl ; 22 } 24 // Implementierung double Rechteck : : umfang ( ) 26 { return 2 ( hoehe+ b r e i t e ) ; 28 } double Rechteck : : f l a e c h e ( ) 30 { return hoehe b r e i t e ; 32 }

Konstruktoren MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 14 /22 Konstruktoren erzeugen eine neue Instanz einer Klasse Spezielle Methoden die der Initialisierung der Klasse dienen

Konstruktoren MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 14 /22 Konstruktoren erzeugen eine neue Instanz einer Klasse Spezielle Methoden die der Initialisierung der Klasse dienen Sie bestehen aus drei Teilen: Methodenkopf Initialisierung der Variablen Methodenrumpf // D e f a u l t K o n s t r u k t o r 2 Rechteck ( ) : hoehe ( 1. 0 ) b r e i t e ( 2. 0 ) { } // S p e z i e l l e r K o n s t r u k t o r 4 Rechteck ( double h double b ) : hoehe ( h ) breite ( b ) { }

Konstruktoren MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 14 /22 Konstruktoren erzeugen eine neue Instanz einer Klasse Spezielle Methoden die der Initialisierung der Klasse dienen Sie bestehen aus drei Teilen: Methodenkopf Initialisierung der Variablen Methodenrumpf // D e f a u l t K o n s t r u k t o r 2 Rechteck ( ) : hoehe ( 1. 0 ) b r e i t e ( 2. 0 ) { } // S p e z i e l l e r K o n s t r u k t o r 4 Rechteck ( double h double b ) : hoehe ( h ) breite ( b ) { } Beim Erzeugen einer Instanz wird der Konstruktor aufgerufen: // D e f a u l t K o n s t r u k t o r 2 Rechteck r ; // S p e z i e l l e r K o n s t r u k t o r 4 Rechteck r ( 2. 3 4. 5 ) ;

Datenkapselung MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 15 /22 Die Daten und Methoden eines Objekts werden zusammengefasst Die Daten werden vor einem Zugriff von außen geschützt Attributwerte sind von außen nicht sichtbar Daten können nur über bestimmte Schnittstellen verändert oder gelesen werden Die Implementierung von Methoden ist nach außen hin nicht sichtbar Der Nutzer der Methode kennt nur die Eingangs- und Ausgangswerte der Methode

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 16 /22 // K l a s s e n d e k l a r a t i o n 2 c l a s s Rechteck { 4 // Daten des Rechtecks double hoehe ; 6 double b r e i t e ; 8 p u b l i c : // K o n s t r u k t o r 10 Rechteck ( double h double b ) : hoehe ( h ) b r e i t e ( b ) { } 12 // Berechnungen double umfang ( ) ; 14 double f l a e c h e ( ) ; } ;

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 16 /22 // K l a s s e n d e k l a r a t i o n 2 c l a s s Rechteck { 4 // Daten des Rechtecks double hoehe ; 6 double b r e i t e ; 8 p u b l i c : // K o n s t r u k t o r 10 Rechteck ( double h double b ) : hoehe ( h ) b r e i t e ( b ) { } 12 // Berechnungen double umfang ( ) ; 14 double f l a e c h e ( ) ; } ; 1 // Daten des Rechtecks double hoehe ; 3 double b r e i t e ; private : Der Zugriff auf Methoden oder Attribute ist von außen her nicht möglich Ein Zugriff von außen ist nicht zulässig Attribute einer Klasse werden meist mit private deklariert Standardmäßig sind alle Elemente einer Klasse privat

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 16 /22 // K l a s s e n d e k l a r a t i o n 2 c l a s s Rechteck { 4 // Daten des Rechtecks double hoehe ; 6 double b r e i t e ; p u b l i c : 2 // K o n s t r u k t o r Rechteck ( double h double b ) ; 4 // Berechnungen double umfang ( ) ; 6 double f l a e c h e ( ) ; 8 p u b l i c : // K o n s t r u k t o r 10 Rechteck ( double h double b ) : hoehe ( h ) b r e i t e ( b ) { } 12 // Berechnungen double umfang ( ) ; 14 double f l a e c h e ( ) ; } ; public: Die Methoden und Attribute sind öffentlich zugänglich Objekte beliebiger Klassen können auf diese Methoden und Attribute zugreifen Methoden die Eigenschaften verändern sind meist public deklariert

Vererbung MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 17 /22 Vererbung dient dazu aufbauend auf existierenden Klassen neue zu schaffen

Vererbung MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 17 /22 Vererbung dient dazu aufbauend auf existierenden Klassen neue zu schaffen Eine neue Klasse ist dann eine Erweiterung der ursprünglichen Basisklasse d.h. eine Spezialisierung Die Spezialisierungen werden abgeleitete Klassen oder Unterklassen genannt

Vererbung MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 17 /22 Vererbung dient dazu aufbauend auf existierenden Klassen neue zu schaffen Eine neue Klasse ist dann eine Erweiterung der ursprünglichen Basisklasse d.h. eine Spezialisierung Die Spezialisierungen werden abgeleitete Klassen oder Unterklassen genannt Unterklassen erben Struktur und Verhalten ihrer Basisklasse Wiederverwendung der vorhandenen Methoden

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 18 /22 Beispiel Vererbung / 2 Klasse M i t g l i e d : R e p r a e s e n t i e r t das M i t g l i e d e i n e r Schule ; z. B. Hausmeister Lehrer Schueler... 4 / c l a s s M i t g l i e d 6 { p r i v a t e : 8 std : : s t r i n g vorname ; // h i e r kommen dann noch die anderen Daten 10 p u b l i c : 12 // K o n s t r u k t o r M i t g l i e d ( std : : s t r i n g v ) : vorname ( v ) { } ; 14 // Lesen / Schreiben der Vornamens 16 std : : s t r i n g lesevorname ( ) ; void schreibevorname ( std : : s t r i n g v ) ; 18 } ;

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 18 /22 Beispiel Vererbung / 2 Klasse Schueler : E r w e i t e r t Klasse M i t g l i e d ; Z u s a e t z l i c h hat der Schueler die I n f o r m a t i o n i n welcher Klasse er i s t 4 / c l a s s Schueler : p u b l i c M i t g l i e d 6 { p r i v a t e : 8 i n t klasse ; // h i e r kommen dann noch die anderen Daten 10 p u b l i c : 12 // K o n s t r u k t o r Schueler ( std : : s t r i n g v i n t k ) : M i t g l i e d ( v ) klasse ( k ) { } ; 14 // Lesen / Schreiben der Klasse 16 i n t l e s e K l a s s e ( ) ; void s c h r e i b e K l a s s e ( i n t k ) ; 18 } ;

Virtuelle Methoden MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 19 /22 Methoden die von einer Unterklasse durch eine Methode gleicher Signatur überschrieben werden können Erst zur Laufzeit wird bestimmt welche Variante verwendet wird (dynamisches Binden)

Virtuelle Methoden MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 19 /22 Methoden die von einer Unterklasse durch eine Methode gleicher Signatur überschrieben werden können Erst zur Laufzeit wird bestimmt welche Variante verwendet wird (dynamisches Binden) Sofern vorhanden wird die Implementierung der Unterklasse verwendet Wenn eine Unterklasse eine virtuelle Methode einer Basisklasse nicht überschreibt wird die Methode der Basisklasse genutzt

Virtuelle Methoden MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 19 /22 Methoden die von einer Unterklasse durch eine Methode gleicher Signatur überschrieben werden können Erst zur Laufzeit wird bestimmt welche Variante verwendet wird (dynamisches Binden) Sofern vorhanden wird die Implementierung der Unterklasse verwendet Wenn eine Unterklasse eine virtuelle Methode einer Basisklasse nicht überschreibt wird die Methode der Basisklasse genutzt Klassen mit virtuellen Methoden werden als polymorphe Klassen bezeichnet

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 20 /22 Abstrakte Methoden Abstrakte Klassen Abstrakte Methoden (rein virtuelle Methoden) sind virtuelle Methoden die keine Implementierung besitzen

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 20 /22 Abstrakte Methoden Abstrakte Klassen Abstrakte Methoden (rein virtuelle Methoden) sind virtuelle Methoden die keine Implementierung besitzen Sie bestehen nur aus ihrer Deklaration in Form eines Prototyps z.b. virtual void pure_virtual () = 0; Die Implementierung erfolgt erst in den abgeleiteten Klassen weshalb eine Klasse mit abstrakten Methoden auch nicht direkt instanziiert werden kann

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 20 /22 Abstrakte Methoden Abstrakte Klassen Abstrakte Methoden (rein virtuelle Methoden) sind virtuelle Methoden die keine Implementierung besitzen Sie bestehen nur aus ihrer Deklaration in Form eines Prototyps z.b. virtual void pure_virtual () = 0; Die Implementierung erfolgt erst in den abgeleiteten Klassen weshalb eine Klasse mit abstrakten Methoden auch nicht direkt instanziiert werden kann Enthält eine Klasse eine abstrakte Methode wird sie als abstrakte Klasse bezeichnet

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 20 /22 Abstrakte Methoden Abstrakte Klassen Abstrakte Methoden (rein virtuelle Methoden) sind virtuelle Methoden die keine Implementierung besitzen Sie bestehen nur aus ihrer Deklaration in Form eines Prototyps z.b. virtual void pure_virtual () = 0; Die Implementierung erfolgt erst in den abgeleiteten Klassen weshalb eine Klasse mit abstrakten Methoden auch nicht direkt instanziiert werden kann Enthält eine Klasse eine abstrakte Methode wird sie als abstrakte Klasse bezeichnet Hinweis: Die Abstraktheit einer Methode darf sich über mehrere Ebenen der Vererbungshierarchie erstrecken

Interfaces MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 21 /22 Die Gemeinsamkeiten von Klassen sollen häufig von einer Schnittstelle abgebildet werden Die verschiedenen Klassen können verschiedene Implementierungen der Schnittstelle verwenden

Interfaces MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 21 /22 Die Gemeinsamkeiten von Klassen sollen häufig von einer Schnittstelle abgebildet werden Die verschiedenen Klassen können verschiedene Implementierungen der Schnittstelle verwenden Solche Schnittstellen werden auch Interfaces genannt

Interfaces MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 21 /22 Die Gemeinsamkeiten von Klassen sollen häufig von einer Schnittstelle abgebildet werden Die verschiedenen Klassen können verschiedene Implementierungen der Schnittstelle verwenden Solche Schnittstellen werden auch Interfaces genannt In C++ realisiert man ein Interface als abstrakte Klasse die ausschließlich aus abstrakten Methoden besteht

MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen SS 2012 22 /22 Beispiel Interfaces c l a s s G e o m e t r i e O b j e k t I n t e r f a c e { 2 public : v i r t u a l double umfang ( ) = 0; 4 v i r t u a l double f l a e c h e ( ) = 0; } ; 6 c l a s s K r e i s : G e o m e t r i e O b j e k t I n t e r f a c e { 8 double radius ;... 10 v i r t u a l double umfang ( ) { return 2 M_PI radius ; } v i r t u a l double flaeche ( ) { return M_PI radius radius ; } 12 } ; 14 c l a s s Rechteck : G e o m e t r i e O b j e k t I n t e r f a c e { double hoehe ; double breite ; 16... v i r t u a l double umfang ( ) { return 2 hoehe breite ; } 18 v i r t u a l double flaeche ( ) { return hoehe breite ; } } ; 20 void datenausgeben ( G e o m e t r i e O b j e k t I n t e r f a c e& geom ) { 22 std : : cout < < "Umfang = " < < geom. umfang ( ) < < " Flaeche = " < < geom. f l a e c h e ( ) < < std : : endl ; 24 } 26 i n t main ( ) { K r e i s k ( 3. 0 ) ; Rechteck r ( 3. 5 4. 2 ) ; 28 datenausgeben ( k ) ; datenausgeben ( r ) ; }