Beispiel 1/3. Abstrakte Datentypen. Beispiel 3/3. Beispiel 2/3. Abstrakte Klasse SortierVerfahren
|
|
- Ferdinand Benjamin Hausler
- vor 5 Jahren
- Abrufe
Transkript
1 Beispiel 1/ Abstrakte Klasse SortierVerfahren Abstrakte Datentypen Die Methode sort von Sortierverfahren ist sinnlos bietet keinerlei Sortierung Objekte können in Wahrheit nicht sortieren Überhaupt sind Objekte dieser Klasse sinnfrei von Sortierverfahren wird nur abgeleitet Das sollte sich auch im Code wiederspiegeln Abstrakte Klassen bieten genau das dienen als Schablone für abgeleitete Klassen können gemeinsame Funktionen implementieren müssen nicht alle Details implementieren Abstrakte Datentypen können nicht instanziiert werden! erleichtert Fehlersuche 1 class SortierVerfahren{ 2 protected: int N; //Anzahl 4 int* a; //zu sort. Zahlen 5 public: 6 SortierVerfahren(); 7 SortierVerfahren(int); 8 virtual ~SortierVerfahren(){delete[] a;}; 9 virtual void sort() = 0; 10 void ausgabe(); 11 }; Abstrakte Methode in Zeile 9 Abstraktion durch =0 nach virtueller Methode Syntax: virtual rtype funname(varlist) = 0 rtype ist Typ d Rückgabewerts von Fkt funname varlist bezeichnet beliebige Inputparameter Virtuelle Methode wird durch nachgestelltes = 0 als abstrakt deklariert AM müssen nicht implementiert werden AM nennt man auch rein virtuell Durch eine AM wird die ganze Klasse abstrakt abstrakte Kl. können nicht instanziiert werden 29 0 Beispiel 2/ abgeleitete Klasse InsertionSort: 1 class InsertionSort : public SortierVerfahren { 2 public: InsertionSort(int N) : SortierVerfahren(N){}; 4 void sort(); 5 }; 6 7 void InsertionSort::sort() { 8 int key,i; 9 for(int j=1;j<n;++j) { 10 key=a[j]; 11 i=j-1; 12 while(a[i]>key && i>=0) { 1 a[i+1]=a[i]; 14 i--; 15 } 16 a[i+1]=key; 17 } 18 } InsertionSort redefiniert die AM sort alle AM müssen redefiniert werden Beispiel / 1 int main() { 2 BubbleSort mysort(10); InsertionSort mysort2(10); 4 Sortierverfahren testsort(10); 5 mysort.ausgabe(); 6 mysort2.ausgabe(); 7 sortme(mysort); 8 sortme(mysort2); 9 } Ausgabe: aktuelle Sortierung: aktuelle Sortierung: aktuelle Sortierung: aktuelle Sortierung: (Zufallszahlen) Eigentlich gelogen: Fehler in Zeile 5 error: cannot declare variable testsort to be of abstract type SortierVerfahren 1 2
2 Mehrfachvererbung Übersicht - abstrakte Klassen C++ erlaubt Vererbung mit multiplen Basisklassen Dienen als Schablone / Schnittstelle für Vererbung Können nicht instanziiert werden Fehlerfindung durch Compiler! Was Sie tun sollten: Verwenden Sie AK für gemeinsame Funktionen (delegieren nach oben) jedoch nur wenn sie für alle Kinder relevant sind redefinieren Sie alle abstrakten Methoden definieren Sie alle Methoden abstrakt die zu redefinieren sind Syntax: class Auto : public Wertgegenstand, public Fortbew{...} Vertieft Konzept der Objektorientierung erhöht Wiederverwendbarkeit von Code Problem: Mehrdeutigkeiten (nächste Folie) 4 Diamantvererbung 2/2 Diamantvererbung 1/2 Es könnte eine gemeinsame Oberklasse geben Klasse Matrix hat ein Feld int n beide abgeleiteten Klassen erben int n SPD erbt von zwei Klassen SPD hat int n doppelt Lösung 1: Zugriff mittels vollem Namen symmmat::n bzw. posdefmat::n Unschön, da Speicher dennoch doppelt unübersichtlich schlimmstenfalls sogar verschiedene Werte Lösung 2: virtuelle Basisklassen Führt zu Mehrdeutigkeit Felder und Methoden sind mehrfach vorhanden Unklar worauf zugegriffen werden soll Speicherverschwendung Schlimmstenfalls: Objekte inkonsistent class symmmat : virtual public matrix class posdefmat : virtual public matrix Virtuelle Basisklasse wird nur einmal eingebunden Literatur: Uneinigkeit ob Mehrfachvererbung sinnvoll sein kann Konzept nicht möglich in Java, C# 5 6
3 Generische Programmierung Templates Was sind Templates? Funktionentemplates Klassentemplates template Wieso Umstieg auf höhere Programmiersprache? Mehr Funktionalität (Wiederverwendbarkeit/Wartbarkeit) haben wir bei Vererbung ausgenutzt Ziele: möglichst wenig Code selbst schreiben Gemeinsamkeiten wiederverwenden nur Modifikationen implementieren Oftmals ähnlicher Code für verschiedene Dinge Vererbung bietet sich oft nicht an es liegt nicht immer Ist-Ein-Beziehung vor Idee: Code unabhängig vom Datentyp entwickeln Führt auf generische Programmierung 7 8 Beispiel: Maximum Aufgabe: Maximum berechnen / quadrieren 1 int max(int a, int b) { 2 if (a < b) return b; 4 else 5 return a; 6 } 7 8 double max(double a, double b) { 9 if (a < b) 10 return b; 11 else 12 return a; 1 } int sqr(int a) { 16 return a*a; 17 } double sqr(double a) { 20 return a*a; 21 } Gleicher Code für viele Probleme Vererbung bietet sich hier nicht an z.b. Quadrate von Matrizen Lösung: Templates Funktionstemplate 1/2 Funktionalität unabhängig vom Datentyp: 4 template <typename T> 5 T square(const T& t) { 6 return t*t; 7 } 8 9 int main() { 10 cout << square<double>(4.7) << endl; 11 cout << square(4.7) << endl; 12 } Ausgabe: t ist Platzhalter für Daten vom Typ T Für alle DT die Multiplikation * bereitstellen z.b. Quadrate von Matrizen Bei Aufruf DT in spitze Klammern (Z. 8) kann auch weggelassen werden (Z. 9) template <typename T> rtype funname(varlist) Einleitung durch Schlüsselwort template Templateparameter in spitzen Klammern allgemeiner Datentyp: typename alternative Syntax: class T ist Name des Parameters (beliebiger Name) rtype ist Typ des Rückgabewerts von funname Rückgabe u Eingabe können vom Typ T sein auch Referenz oder Pointer auf T möglich 9 40
4 Funktionstemplate 2/2 Klassentemplate 1/ Was passiert eigentlich bei folgendem Code? 4 template <typename T> 5 T square(const T& t) { 6 return t*t; 7 } 8 9 int main() { 10 int x = 2; 11 double y = 4.7; 12 cout << square(x) << endl; 1 cout << square(y) << endl; 14 } Compiler erkennt dass Fkt square einmal für Typ int und einmal für Typ double benötigt wird Compiler erzeugt ( programmiert ) und kompiliert anhand von dieser Information, zwei (!) Funktionen mit der Signatur double square(double) int square(int) D.h. Funktion square wird automatisch anhand des Templates (= Vorlage) generiert also nur für die Typen die wirklich benötigt Auch allgemeine Klassen möglich haben wir bereits verwendet (vector) Automatische Speicherverwaltung bei Pointern: 1 template <typename T> 2 class simple_ptr { public: 4 simple_ptr(t* ptr); 5 ~simple_ptr(); 6 T& operator*(); 7 T* operator->(); 8 private: 9 //Die Klasse soll nicht kopierbar sein. 10 simple_ptr(const simple_ptr&); 11 simple_ptr& operator=(const simple_ptr&); 12 1 T* m_ptr; 14 }; Idee: Speicher automatisch freigeben verhindert Speicherlecks Für Pointer von beliebigem Typ Das nennt man Smartpointer Um zu verhindern, dass Obj der Kl kopiert werden kann schreibt man Kopierkonstruktor und Zuweisungsoperator in den private Bereich Klassentemplate / Restliche Klassenmethoden Klassentemplate 2/ Implementierung von Klassenmethoden Beispiel: Konstruktor 1 template <typename T> 2 simple_ptr<t>::simple_ptr(t* ptr) : m_ptr(ptr) {} Syntax: voranstellen von template <typename T> Wichtig: <T> nach Klassenname (Methode für Klasse simple ptr<t>) (bei jeder Methode) tatsächliche Implementierung wie gehabt 1 template <typename T> 2 simple_ptr<t>::~simple_ptr() { if(m_ptr) 4 delete m_ptr; 5 m_ptr = NULL; 6 } 7 8 template <typename T> 9 T& simple_ptr<t>::operator*() { 10 return *m_ptr; 11 } 12 1 template <typename T> 14 T* simple_ptr<t>::operator->() { 15 return m_ptr; 16 } int main() { 19 simple_ptr<string> 20 some_stringptr(new string("hallo")); 21 cout << *some_stringptr << endl; 22 } Ausgabe: Hallo Destruktor gibt Speicher wieder frei (Garbage Collection) Operatoren * und -> überladen für Funktionalität von Pointer 4 44
5 Private Methoden Probleme bei Kopien von Smartpointern: 1 int main() { 2 simple_ptr<string> p(new string("blub")); p->size(); 4 { 5 simple_ptr<string> q = p; 6 q->size(); 7 // Destruktor von q wird aufgerufen 8 } 9 p->size(); 10 } Pointer wird kopiert (Z. 5) Speicher wird freigegeben (Z. 8) Problem: Speicher von p auch freigegeben const static inline Sonstiges über Klassen Hier: Zuweisung in (Z. 5) nicht möglich (Methode ist private) Sonst Lösung: Kopien zählen Speicher nur freigeben wenn kein Zugriff mehr (wird hier nicht vertieft) Schlüßelwort const 2/2 Schlüßelwort const 1/2 Bereits kennengelernt: Read-Only Referenzen const type& name Äquivalent zu type const& name Konstante (Read-Only) Methoden Deklaration mit nachgestelltem const nach Methodenname und vor Semikolon greifen nur lesend auf Members der Klasse zu const gehört zur Signatur der Methode Ziele: Möglichst kontrollierter Zugriff Fehler schon zur Kompilierung abfangen richtigen Gebrauch der Klasse vorschreiben verhindert inkonsistente Objekte Guter Stil: möglichst viel als const deklarieren Fehler vor der Fertigstellung abfangen ähnlich zu Zugriffskontrolle mit private, public 47 Man kann auch konstante Objekte definieren const type name = obj type gibt Datentyp an name ist Name des konstanten Obj Konst Obj muss bei Dekl. initialisiert werden Konst Obj ist nach Def nicht mehr veränderbar z.b. const double pi =.14159; definiert konstanten double Wert pi Anweisung pi = pi ; ist nicht möglich const mit Pointer ist auch möglich Hier ist auf unterschiedl Verwendungsweisen zu achten const type* name = adress Definiert einen Pointer auf konstantes Obj vom Typ type nur lesender Zugriff auf Obj mit Adresse adress Achtung: Man kann Pointer versetzen int a = 10, b = 5; const int* p = &a; p = &b type* const name = adress Def. konstanten Pointer name Pointer ist nicht mehr versetzbar Obj auf das gezeigt wird aber schon 48
6 Inline Funktionen Wiederholung Traditionell in der OO: viele kleine Methoden man denke an get, set Problem : Funktionsaufrufe sind nicht umsonst Ausweg : inline Funktionen Code wird direkt eingefügt (ähnlich zu Makros) 4 inline int sqr(int a) { 5 return a*a; 6 } 7 8 int main() { 9 cout << sqr() << endl; 10 cout << sqr(4) << endl; 11 } Umsetzung durch Compiler 4 int main() { 5 cout << * << endl; 6 cout << 4*4 << endl; 7 } Inline Funktionen 2 Deklaration durch Schlüsselwort inline Compiler versucht Code direkt einzufügen inline-deklaration für Compiler nicht zwingend Compiler wägt ab und entscheidet nach Nutzen evtl. hat inline nicht gewünschten Effekt Vorteile: Code kann schneller werden (kein Overhead) Optimierungspotential Berechnungen zur Kompilierzeit möglich Nachteile: Code wird länger ausführbare Datei wird größer Fazit: inline bei kurzen Funktionen die oft verwendet werden Statische Daten 1/2 Daten die zu keinem konkreten Objekt gehören die Daten gehören zu der Klasse sie existieren nur einmal für die gesamte Klasse sie sind dennoch an die Klasse gebunden 4 class mitarbeiter { 5 string name; 6 string Abteilung; 7 public: 8 static int count 9 mitarbeiter(){ ++count; } 10 }; int mitarbeiter::count = 0; 1 14 int main() { 15 mitarbeiter tom; 16 mitarbeiter bob; 17 cout << mitarbeiter::count << endl; 18 cout << tom.count << endl; 19 } Ausgabe: 2 2 Deklaration mit Schlüsselwort static Initialisierung außerhalb von Methoden / Klassen Zugriff über Klassenname oder Objekt (public) Statische Daten 2/2 private static Daten können nur über Klassennamen verwendet werden Zugriff nur über statische Funktionen statische Funktionen können nur auf statische Daten zugreifen 4 class mitarbeiter { 5 string name; 6 string Abteilung; 7 static int count; 8 public: 9 static int getcount(){return count;}; 10 mitarbeiter(){++count;}; 11 }; 12 1 int mitarbeiter::count = 0; int main() { 16 mitarbeiter tom; 17 mitarbeiter bob; 18 cout << mitarbeiter::getcount() << endl; 19 } Ausgabe: 2 globale Daten möglichst sparsam verwenden 51 52
7 Noch ein Beispiel 4 enum Art {BRUCH, FLOAT}; 5 6 class ratio{ 7 int z, n; 8 static Art ausgabeart; 9 public: 10 ratio(int a, int b){z=a; n = b;} 11 static int setzeausgabeart(art art); 12 void print(); 1 }; Art ratio::ausgabeart = BRUCH; int ratio::setzeausgabeart(art art) 18 {ausgabeart = art;} void ratio::print() { 21 if (ausgabeart == BRUCH) 22 cout << z << "/" << n << endl; 2 else 24 cout << double(z)/double(n) << endl; 25 } int main() { 28 ratio myratio1(,5), myratio2(1,7); 29 myratio1.print(); 0 myratio2.print(); 1 ratio::setzeausgabeart(float); 2 myratio1.print(); myratio2.print(); 4 } Ausgabe: /5 1/ Danke für Ihre Aufmerksamkeit 5 54
I Jede Klasse definiert einen Datentyp. I restliche Implementierung: 1 Sortierverfahren::Sortierverfahren(int n)
Vererbung 2 I Polymorphie I virtuelle Methoden I abstrakte Klassen I Mehrfachvererbung Polymorphie I jedes Objekt der abgeleiteten Klasse ist auch ein Objekt der Basisklasse Vererbung impliziert immer
MehrI dyn. Erzeugung von Objekten mit new statt malloc. I Vergleich zu C. I Erzeugung von Arrays mittel new[] I Speichergröße muss nicht angegeben werden
Pointer mit new I dyn. Erzeugung von Objekten mit new statt malloc C++ und Pointer I Schlüsselwort new I Schlüsselwort delete I Unterschied zu malloc und free int* i1 = new int; *i1 = 25; I Vergleich zu
MehrC++ und Pointer. I Schlüsselwort new I Schlüsselwort delete I Unterschied zu malloc und free
C++ und Pointer I Schlüsselwort new I Schlüsselwort delete I Unterschied zu malloc und free 85 Pointer mit new I dyn. Erzeugung von Objekten mit new statt malloc int* i1 = new int; *i1 = 25; I Vergleich
MehrI nicht verwechseln mit überladen
Konstruktoren der Basisklasse aufrufen Funktionen redefinieren 1/2 I Vererbung bedeutet eine ist-ein-beziehung Jedes Auto ist ein Fortbewegungsmittel I Das merkt man am Aufruf Zuerst wird der Konstruktor
MehrDAP2-Programmierpraktikum Einführung in C++ (Teil 2)
DAP2-Programmierpraktikum Einführung in C++ (Teil 2) Carsten Gutwenger 18. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Dynamischer Speicher Klassen und
MehrOOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik
Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik WS 2011/12 Inhalt Test-Besprechung! Ziele verdeutlichen Große Bild von OOP Wiederholung: Einbettung als Technik
MehrImplementieren von Klassen
Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und
MehrC++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11
C++ Teil 12 Sven Groß 18. Jan 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 12 18. Jan 2016 1 / 11 Themen der letzten Vorlesung Wiederholung aller bisherigen Themen: Datentypen und Variablen Operatoren Kontrollstrukturen
MehrI Wieso Umstieg auf höhere Programmiersprache? I Ziele: I oftmals ähnlicher Code für verschiedene Dinge I Vererbung bietet sich oft nicht an
Generische Programmierung I templates I exception handling I testen Ausblick I Wieso Umstieg auf höhere Programmiersprache? Mehr Funktionalität (Wiederverwendbarkeit/Wartbarkeit) haben wir bei Vererbung
MehrC++ - Objektorientierte Programmierung Polymorphie
C++ - Objektorientierte Programmierung Polymorphie hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen C++ - Objektorientierte Programmierung 21.06.16 Seite 1 Polymorphie
MehrMapra: C++ Teil 6. Felix Gruber, Sven Groß. IGPM, RWTH Aachen. 13. Juni 2017
Mapra: C++ Teil 6 Felix Gruber, Sven Groß IGPM, RWTH Aachen 13. Juni 2017 Felix Gruber, Sven Groß (IGPM, RWTH Aachen) Mapra: C++ Teil 6 13. Juni 2017 1 / 22 Was bisher geschah Klassen I Attribute und Methoden
MehrVererbung und Polymorphie
Vererbung und Polymorphie Marc Satkowski, Sascha Peukert 29. September 2016 C# Kurs Gliederung 1. Methodenüberladung 2. Vererbung Polymorphie Methoden- & Eigenschaftsüberschreibung Weitere Schlüsselwörter
MehrC++ Klassen weitere Funktionen
C++ Klassen weitere Funktionen Übersicht static Elemente const Elemente Zusätzliches zu Konstruktoren Kopier-Konstruktor Konvertierung-Konstruktor Initialisierungslisten Friend Funktionen 2 Statische Klassenkomponenten
MehrMehrfachvererbung 372
Mehrfachvererbung 372 Mehrfachvererbung C++ erlaubt Vererbung mit multiplen Basisklassen Syntax: class Auto : public Wertgegenstand, public Fortbew {...} Vertieft Konzept der Objektorientierung erhöht
Mehr7. Übung Informatik II - Objektorientierte Programmierung
7. Übung Informatik II - Objektorientierte Programmierung 29. Mai 2015 Inhalt 1 2 3 Übersicht 1 2 3 Idee Menschen nehmen die Welt in Form von Objekten wahr manche Objekte haben gleiche Eigenschaften, hierüber
MehrEinführung in die Programmiersprache Java II
Einführung in die Programmiersprache Java II ??????????? UML OOP "Object oriented programming is bad" - professional retard 90s... UML Entwicklungsziele verschiedenen existierenden objektorienten Modellierungsmethoden
MehrThema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen
1 Thema heute: Vererbung und Klassenhierarchien Abgeleitete Klassen Vererbung von Daten und Funktionen Virtuelle Funktionen 2 Vererbung oft besitzen verschiedene Datentypen einen gemeinsamen Kern Beispiel:
MehrVorlesung Datenstrukturen
Vorlesung Datenstrukturen Objektorientierung in C++ (3) Aspekte der Vererbung (1) Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 546 Zuweisung bei Vererbung Dr. Frank Seifert Vorlesung
MehrGrundkurs C++ IDE Klassenhierarchien
Grundkurs C++ IDE Klassenhierarchien Martin Knopp 03.05.2017 Folie 1/34 GK C++: IDE, Klassenhierarchien Martin Knopp 03.05.2017 IDE Integrated Development Environment Wir empfehlen: Qt Creator (Bestandteil
MehrGrundkurs C++ IDE Klassenhierarchien
Grundkurs C++ IDE Klassenhierarchien Martin Knopp & Johannes Feldmaier 20.04.2016 Folie 1/35 GK C++: IDE, Klassenhierarchien Martin Knopp & Johannes Feldmaier 20.04.2016 IDE Integrated Development Environment
MehrGrundkurs C++ IDE Klassenhierarchien
Grundkurs C++ IDE Klassenhierarchien Martin Gottwald und Stefan Röhrl 8 Mai 2019 Folie 1/34 GK C++: IDE, Klassenhierarchien Martin Gottwald und Stefan Röhrl 8 Mai 2019 IDE - Integrated Development Environment
MehrC++ - Objektorientierte Programmierung Konstruktoren und Destruktoren
C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue
Mehr10.4 Konstante Objekte
10.4 Konstante Objekte Genau wie bei einfachen Datentypen (int,double,...) kann man auch Objekte als const deklarieren. Eine solche Deklaration bedeutet, daß alle Attribute so behandelt werden, als wären
MehrThema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen
1 Thema heute: Vererbung und Klassenhierarchien Abgeleitete Klassen Vererbung von Daten und Funktionen Virtuelle Funktionen 2 Vererbung oft besitzen verschiedene Datentypen einen gemeinsamen Kern Beispiel:
MehrStandardbibliotheken. Datentyp bool. Eingaben 2/2. Eingaben 1/2. In C gibt es keinen logischen Datentyp
Datentyp bool Standardbibliotheken Ein- und Ausgabe Vektoren Container In C gibt es keinen logischen Datentyp Abhilfe schafft Interpretation 0 == false 1 == true Das könnte so aussehen: #define false 0
MehrKapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz
Kapitel 13 Abstrakte Methoden und Interfaces 13. Abstrakte Klassen und Interfaces 1. Abstrakte Klassen 2. Interfaces und Mehrfachvererbung Folie 12.2 Abstrakte Methoden und Klassen Manchmal macht es überhaupt
MehrCrashkurs C++ Wiederholung
Crashkurs C++ Wiederholung #include int main(void) { int i, j; bool is_prime; for (j = 1; j < 1000; j += 2) { is_prime = true; for (i = 3; i
MehrMapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.
Mapra: C++ Teil 4 Felix Gruber IGPM, RWTH Aachen 6. Mai 2015 Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6. Mai 2015 1 / 22 Themen vom letzten Mal Kompilieren mit Makefiles Ein-/Ausgabe über Dateien
MehrProgrammieren in Java
Einführung in die Objektorientierung Teil 4 Interfaces, innere Klassen und Polymorphie 2 Vererbung im Klassendiagram (Wiederholung) Vererbung repräsentiert eine ist ein Beziehung zwischen Klassen Ware
MehrC++ - Objektorientierte Programmierung Konstante und statische Elemente
C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja
MehrDas Interface-Konzept am Beispiel der Sprache Java
Das Interface-Konzept am Beispiel der Sprache Java Klaus Kusche, November 2013 Inhalt Motivation: Wozu braucht man Interfaces? Interfaces in Java Was spricht gegen die große Lösung? Voraussetzungen Kenntnisse
MehrJavakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren
MehrObjektorientierte Programmierung
C++ Objektorientierte Programmierung Erweiterung von selbstdefinierten Datentypen (struct) zu Klasse. Eine Klasse besteht dann aus - Attributen (Untertypen wie struct) und zusätzlich - aus Methoden (Funktionen
MehrKapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen
Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18
MehrProgrammierpraktikum 3D Computer Grafik
Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung in C++ Teil II: Klassen, Objekte, Funktionen und Vererbung. Funktionen [Rückgabetyp] [Name] ([Parameter]) { } Wichtig: Funktionen
MehrWintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29
Kapitel 2 Einführung in C++ Seite 1 von 29 C++ Zeichensatz - Buchstaben: a bis z und A bis Z. - Ziffern: 0 bis 9 - Sonderzeichen: ; :,. # + - * / % _ \! < > & ^ ~ ( ) { } [ ]? Seite 2 von 29 Höhere Elemente
MehrC++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17
C++ Teil 9 Sven Groß 17. Juni 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 9 17. Juni 2016 1 / 17 Themen der letzten Vorlesung Objektorientierung und Klassen Attribute / Datenelemente Methoden / Elementfunktionen
MehrFragen zur OOP in Java
- 1 - Inhalt Was bedeutet OOP?... 2 Was versteht man unter einer Klasse?... 2 Wie nennt man die Mitglieder einer Klasse?... 2 Wie erzeugt man Objekte?... 2 Wie greife ich auf Member einer Klasse zu?...
MehrProgrammierkurs C++ Abstrakte Klassen und Methoden
Programmierkurs C++ Abstrakte Klassen und Methoden Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Vererbungshierarchie Obst double
MehrNeben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter
Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener
MehrProgrammieren in Java
Einführung in die Objektorientierung Teil 4 Interfaces, Polymorphie und innere Klassen 2 Vererbung im Klassendiagramm (Wiederholung) Vererbung repräsentiert eine ist ein Beziehung zwischen Klassen Object
MehrJava Einführung Methoden. Kapitel 6
Java Einführung Methoden Kapitel 6 Inhalt Deklaration und Aufruf von Methoden Lokale und globale Namen (Bezeichner) Sichtbarkeit und Lebensdauer von Variablen in Methoden Überladen von Methoden 2 Methoden
MehrÜbung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil
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
MehrKlassen. Kapitel Klassendeklaration
Kapitel 4 Klassen Wir kommen nun zu einem sehr wichtigen Aspekt der OOT: zu den Klassen. Eine Klasse ist eine vom Benutzer definierte Datenstruktur, eine Sammlung von Variablen (unterschiedlichen Typs)
MehrAngewandte Mathematik in OOP WS 2011/12. Abschluss-Test
Angewandte Mathematik in OOP WS 2011/12 Abschluss-Test 012 6 5 4 5 6 Aufgabe 1 (9 Punkte 1 Punkt je Antwort) Bitte jeweils eine Antwort ankreuzen (je nach Fragestellung die richtige oder falsche): a.)
MehrInhalte der Grundlagen
Inhalte der Grundlagen Programmieren mit Klassen Operatoren für Klassen Laufzeit- und Codeoptimierung Referenzen und Konstanten UGE - IPD Freunde und andere Typen Templates UGE - IPD UGE - IPD UGE - IPD
MehrÜberblick. R.Grossmann / P. Sobe 1
Überblick 1. Einführung C++ / Entwicklung/ Sprachfamilie 2. Nicht objektorientierte Erweiterungen von C 3. Grundlagen des Typkonzepts von C++ 4. Ziele der Objektorientierung 5. Objekt und Klasse, Elementfunktionen
MehrPolymorphismus 44. Function.hpp. #include <string>
Polymorphismus 44 #include Function.hpp class Function { public: virtual ~Function() {}; virtual const std::string& get_name() const = 0; virtual double execute(double x) const = 0; }; // class
MehrDie verschiedenen Programmierparadigmen von C++ Software-Technik: Vom Programmierer zur erfolgreichen
Software-Technik: Vom Programmierer zur erfolgreichen 1. Von der Idee zur Software 2. Funktionen und Datenstrukturen Lehrbuch: 4.3 3. Organisation des Quellcodes 4. Werte- und Referenzsemantik 5. Entwurf
MehrObjektorientierte Programmierung mit C++ SS 2007
Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string
Mehrvirtual Wertpapier& operator=(const Wertpapier&); // VIRTUELLE ZUWEISUNG protected: static enum {wortfeldlaenge = 20}; char* name_z; double kurs; };
C++ für Anfänger des Programmierens Rieckeheer GSO-Hochschule Nürnberg März 2008 174 a neu Vor Kapitel 24 ist folgender Text einzufügen. Das folgende Programm variiert das Programm VIRTfunktion3.cpp und
MehrGeschachtelte Klassen
Geschachtelte Klassen Die Programmiersprache Java bietet nicht nur die Möglichkeit innerhalb von Klassen Datenfelder und Methoden zu definieren, sondern auch Klassen. Solche Klassen heißen en geschachtelte
MehrVerschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes
Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine
MehrPolymorphismus 179. Function.h. #include <string>
Polymorphismus 179 #include Function.h class Function { public: virtual ~Function() {}; virtual std::string get_name() const = 0; virtual double execute(double x) const = 0; }; // class Function
MehrHSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2
HSR Rapperswil 2001 Markus Rigling Programmieren: Vererbung 1 Variante 2 Inhaltsverzeichnis: 1. Was ist Vererbung...3 2. Anwendung...3 3. Realisierung...3 4. Vorgehensweise zur Erstellung einer Kind-Klasse...3
Mehr4. Objektorientierte Programmierung mit C++
4. Objektorientierte Programmierung mit C++ Einführung C++ / Entwicklung der Sprachfamilie Erweiterungen der Sprache C: Ein- und Ausgabe, Referenzen, Speicherallokation und Freigabe Grundlagen des Typkonzepts
MehrRepetitorium Programmieren I + II
Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 6. März 2012 Agenda 1 Operatoren 2 Datentypen Gleitpunkt Zahl Typkonvertierung 3 Strommanipulatoren 4 Bedingungen if-else switch-case
MehrProgrammierkurs C/C++
Blockkurs: "Einführung in C/C++" Programmierkurs C/C++ Freitag Sandro Andreotti andreott@inf.fu-berlin.de WS 2008/09 1 Blockkurs: "Einführung in C/C++" 2 Vererbung Klassen erben die Member von Basisklassen:
MehrÜberblick. Überblick. Abstrakte Klassen - rein virtuelle Funktionen Beispiele
Überblick 1. Einführung C++ / Entwicklung/ Sprachfamilie 2. Nicht objektorientierte Erweiterungen von C 2.1 Das Ein-/Ausgabekonzept von C++ 2.2 Referenzen in C++ 2.3 Heap-Allokatoren in C++ 3. Grundlagen
MehrC++ Notnagel. Ziel, Inhalt. Programmieren in C++
C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt
MehrDie Welt in unseren Programmen false -1.4E-12. false. Klassen
Algorithmen und Datenstrukturen Die Welt in unseren Programmen Die Welt in unseren Programmen Wintersemester 2012/13 9. Vorlesung Sortieren von Objekten 1.357374356 25236748458 true "HalloWelt!" 14136.23462
MehrC++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18
C++ Teil 5 Sven Groß 13. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 13. Mai 2016 1 / 18 Themen der letzten Vorlesung Funktionen Funktionsüberladung, Signatur Rekursion const-deklaration Referenzen
Mehr4. Objektorientierte Programmierung mit C++
4. Objektorientierte Programmierung mit C++ Einführung C++ / Entwicklung der Sprachfamilie Erweiterungen der Sprache C: Ein- und Ausgabe, Referenzen, Speicherallokation und Freigabe Grundlagen des Typkonzepts
MehrC++ und Pointer. Dyn. Speicherverwaltung 1/3. Dyn. Speicherverwaltung 3/3. Dyn. Speicherverwaltung 2/3
Dyn. Speicherverwaltung 1/ C++ und Pointer Dynamische Speicherverwaltung Pointer auf Objekte new, new[] delete, delete[] Speicherallokierung eines Obj bisher mit malloc type* name=(type*)malloc(length*sizeof(type))
MehrC++ und Pointer. Dyn. Speicherverwaltung 1/3. Dyn. Speicherverwaltung 3/3. Dyn. Speicherverwaltung 2/3
Dyn. Speicherverwaltung 1/ C++ und Pointer Dynamische Speicherverwaltung Pointer auf Objekte new, new[] delete, delete[] Speicherallokierung eines Obj bisher mit malloc type* name=(type*)malloc(length*sizeof(type))
MehrPräsentation Interfaces
Einführung in Java Präsentation Interfaces Nozar Delassaei Marvi Inhalt 1. Erinnerung Klasse Objekte Beispiel Klasse Abstrakte Klasse Beispiel Abstrakte Klasse Mehrfachvererbung-1 Mehrfachvererbung-2 2.
MehrEinführung in die Programmierung mit C++
1 Seite 1 Einführung in die Programmierung mit C++ Teil III - Objektorientierte Programmierung 9. Klassen und Methoden Was sind Klassen? Seite 2 sprachliches Mittel von C++ um objektorientierte Programmierung
MehrInstitut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke
Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen
Mehr3D Programmierpraktikum: Einführung in C++ - Teil 2
3D Programmierpraktikum: Einführung in C++ - Teil 2 Praktikum 3D Programmierung Sebastian Boring, Otmar Hilliges Donnerstag, 4. Mai 2006 LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum
MehrProgrammiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften
Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder
MehrEinstieg in die Informatik mit Java
1 / 16 Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 16 1 Einführung 2 Element-Klassen 3 Lokale Klassen 4 Anonyme Klassen
MehrEinstieg in die Informatik mit Java
1 / 35 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 35 1 Grundlagen 2 Verdeckte Variablen 3 Verdeckte Methoden 4 Konstruktoren
MehrInhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1
Inhaltsverzeichnis Grundlagen und Einführung (1. Band) 1 1 Einleitung und Vorwort 1 1.1 Vorwort zur 13. Auflage....................... 1 1.2 Vorwort zur 10. Auflage....................... 1 1.3 Voraussetzungen...........................
MehrAllgemeines - Prinzipien
OOP - Prinzipien Allgemeines - Prinzipien OO modelliert die reale Welt als System interagierender Objekte Objekt = gedankliche oder reale Einheit in der Umwelt und/oder in Software Klar definierte Schnittstellen
MehrGrundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.
Mehrfache Vererbung Daniel Beneckenstein 21. August 2006 Mehrfache Vererbung Ableitung einer Klasse von beliebig vielen Basisklassen: class A {... }; class B {... }; class C {... }; class D: public A,
MehrC++ Teil 10. Sven Groß. 17. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Dez / 14
C++ Teil 10 Sven Groß IGPM, RWTH Aachen 17. Dez 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 1 / 14 Themen der letzten Vorlesung Objektorientierung und Klassen Attribute / Datenelemente
MehrProf. W. Henrich Seite 1
Klasse - ist ein benutzerdefinierter Datentyp (Referenztyp) - hat Datenelemente - hat Methoden - Konstruktor ist spezielle Methode zum Erstellen eines Objektes vom Typ der Klasse (Instanz) - jede Klasse
MehrVererbung, Polymorphie
Vererbung, Polymorphie Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 21.1.08 G. Bohlender (IANM UNI Karlsruhe) Vererbung, Polymorphie 21.1.08
MehrHSR Rapperswil 2001 Markus Rigling. Programmieren: Templates Auflage
HSR Rapperswil 2001 Markus Rigling Programmieren: Templates 1 1. Auflage Inhaltsverzeichnis: Templates.1 1. Verwendung 3 2. Erstellen einer Templateklasse. 3 3. Faustregel zum Erstellen eines Klassentemplates..
MehrRepetitorium Programmieren I + II
Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 24. September 2012 Agenda 1 Funktionen Aufbau und Anwendung Call by Value Call by Reference Überladen von Funktionen Default
Mehr1 Einleitung Generizität Syntax... 2
Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung 1 1.1 Generizität................................ 1 1.2 Syntax.................................. 2 2 Realisierung 2 2.1 Compilierung generischer Klassen...................
MehrPraxis der Programmierung
Klassenvariablen und -methoden, Vererbung Institut für Informatik und Computational Science Henning Bordihn 1 Klassenvariablen und -methoden 2 Klassenvariablen und -methoden werden mit dem Schlüsselwort
MehrVisuelle Kryptographie. Anwendung von Zufallszahlen
Visuelle Kryptographie Anwendung von Zufallszahlen Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken, so dass Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken,
MehrInnere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java
Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 13.06.07 G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 1 / 11
MehrVorlesungsprüfung Programmiersprache 1
Vorlesungsprüfung Programmiersprache 1 Termin der Prüfung: 1) Di 20.03.2018 16:15 17:00 HSB 3 2) Di 15.05.2018 16:15 17:00 HSB 3 3) Di 12.06.2018 16:15 17:00 HSB 3 Stoffgebiete: 1) Ganzzahltypen: char,
MehrFunktionen: Rückgabewert
Funktionen: Rückgabewert Jede Funktion in C++ (außer Konstruktoren und Destruktoren siehe später) MUSS einen Rückgabewert-Typ vereinbaren. Gibt sie nichts zurück, muss der Rückgabetyp void sein. Jede return-anweisung
MehrProgrammierung und Angewandte Mathematik
Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden
MehrProgrammierung und Angewandte Mathematik
Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ziele Sie wissen, was Vererbung
MehrFH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0
9 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Gerüstbeispiel Ein Duo, Quarto oder Sexto ist ein Gerüst. Die Klassen Duo, Quarto und Sexto sollen durch Vererbung
MehrKurzeinführung in C/C++ Elementare Datentypen in C++
Elementare Datentypen in C++ Anders als in Java sind in C++ die Größen der Elementaren Datentypen maschinenabhängig Die Größe der Datentypen lässt sich mit sizeof ermitteln: int n=sizeof(int) In C++ gilt
MehrEinführung in die Programmierung
Skript zur Vorlesung: Einführung in die Programmierung WiSe 2009 / 2010 Skript 2009 Christian Böhm, Peer Kröger, Arthur Zimek Prof. Dr. Christian Böhm Annahita Oswald Bianca Wackersreuther Ludwig-Maximilians-Universität
MehrProgrammieren - C++ Templates
Programmieren - C++ Templates Reiner Nitsch r.nitsch@fbi.h-da.de Was sind Templates? C++ Templates ermöglichen generische Programmierung. Das ist Programmierung unabhängig vom speziellen Objekt-Typ Templates
Mehr1 Klassen und Objekte
1 Klassen und Objekte Datentyp - Spezifikation des Typs von Datenobjekten Datenstruktur - logische Ordnung von Elementen eines Datentyps - zur (effizienten) Speicherung, Verwaltung, Zugriff - auf die Elemente
MehrGrundlagen der Informatik
Grundlagen der Informatik Polymorphie, Abstrakte Klassen, Mehrfachvererbung Prof. Dr.-Ing. Thomas Wiedemann Prof. Dr. rer.nat. Ralph Großmann Fachgebiet Informatik / Mathematik Überblick zum Inhalt Klassen-3
MehrÜbersicht. Bisherige Verwendung von Klassen Vererbung. Zeiger auf Objekte (abgeleiteter) Klassen Virtuelle Funktionen Konstruktoren/Destruktoren
C++ - Vererbung Übersicht Bisherige Verwendung von Klassen Vererbung Grundlagen Zugriffschutz Vererbte Funktionen Zeiger auf Objekte (abgeleiteter) Klassen Virtuelle Funktionen Konstruktoren/Destruktoren
MehrTafelübung 07 Algorithmen und Datenstrukturen
Tafelübung 07 Algorithmen und Datenstrukturen Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Vererbung Grundlagen Abstrakte
MehrProgrammierkurs. Steffen Müthing. January 18, Interdisciplinary Center for Scientific Computing, Heidelberg University
Programmierkurs Steffen Müthing Interdisciplinary Center for Scientific Computing, Heidelberg University January 18, 2019 Konzepte Standard-Konzepte für Code Reuse: Polymorphie/Vererbung Funktionalität
MehrVererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.
Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 23.5.07 G. Bohlender (IANM UNI Karlsruhe) Vererbung 23.5.07 1 / 22 Übersicht 1
Mehr