8. Objektorientierung und C++
|
|
|
- Britta Jaeger
- vor 10 Jahren
- Abrufe
Transkript
1 8. Objektorientierung und C++ Inhalt: 8.1 Objektorientierung 8.2 Abstrakte Datentypen 8.3 Ziele der Objektorientierung 8.3 C++ - Erweiterungen 8.4 C++ - Klassen, Objekte und Methoden 8.5 C++ - Vererbung und Polymorphie Peter Sobe Objektorientierung Objektorientierte Programmierung kann auf verschiedene Weise erfolgen: Prozedurale Sprachen in Verbindung mit abstrakten Datentypen Objektorientierte Sprachen, welche die Ziele der Objektorientierung durch eine spezielle Syntaxerweiterung und Verfahren bei der Übersetzung und Laufzeitunterstützung der Programme unterstützen R. Grossmann / P. Sobe 2
2 Objektorientierung Mit dem objektorientierten Programmier-Paradigma wird ein besonderes Herangehen bei der Modellierung eines Realitätsausschnittes praktiziert. Man sucht dort Entitäten (Autos, Mitarbeiter, Rechnungen, elektr. Bauelemente, mechanische Elemente,...), die bei Verarbeitungsprozessen eine Rolle spielen. Zu einer bestimmten Zeit wird jeweils eine Menge von Entitäten einer bestimmten Sorte, wie Autos oder Personen vorhanden sein. Vergleich mit imperativen, prozeduralem Programmierparadigma: Bisher wurde bei der Modellierung eines Realitätsausschnittes stets nach Verarbeitungsprozessen gesucht und deren Abfolge und Verflechtung als Algorithmus (Steuerfluss) entwickelt und formal beschrieben. R. Grossmann / P. Sobe 3 Objektorientierung Entitätsbegriff - Datenelemente Entität: ist ein in der Realität existierendes und eindeutig identifizierbares Exemplar (Ding, Lebewesen, Gedankenkonstrukt) als Träger von Eigenschaften (Datenelemente), die durch bestimmte Werte beschrieben sind. Beispiel Auto als Entität: Eigenschaft Typ Wert VW-Golf, Eigenschaft Eigentümer Wert Lehmann, Eigenschaft Hubraum Wert 1943, Eigenschaft Tankinhalt Wert Jedes weitere Auto der betrachteten Menge hat die gleichen Eigenschaften, die aber mit anderen Werten belegt sind. R. Grossmann / P. Sobe 4
3 Grundlagen Methodenbegriff - Elementfunktion Sind alle relevanten Entitätsmengen im Realitätsausschnitt identifiziert, überlegt man, welche Operationen man auf den jeweiligen Entitätsmengen (Autos, Personen, Matrizen,...) benötigt. So wird man Matrizen sicher addieren und multiplizieren wollen, von Personen vielleicht das Alter bestimmen, oder ob sie in Beziehung zu anderen Entitäten stehen (Eigentümer eines Autos). Methode/Elementfunktion: ist eine wohldefinierte Operation / Funktion, die man auf Elemente einer bestimmten Entitätsmenge anwenden darf. Für jede Entitätsmenge ist eine bestimmte Menge solcher Elementfunktionen definiert und ausschließlich an die Anwendung nur auf Elemente dieser Menge gebunden. R. Grossmann / P. Sobe 5 Objektbegriff Die Zusammenfassung von Datenelementen und der über diesen Elementen definierten Elementfunktionen führt zum Objektbegriff. Objekt: ist eine in der Realität existierende Entität, die auf eine Menge von Elementfunktionen zurückgreifen kann. Objekte agieren, indem sie sich gegenseitig Nachrichten senden können, die durch Elementfunktionen bearbeitet werden. Den Bauplan eines jeden Objektes nennt man Typ oder Klasse. R. Grossmann / P. Sobe 6
4 8.2 Abstrakte Datentypen Bei der Entwicklung größerer Programme wird eine Modularisierung verlangt. Das bedeutet eine Aufteilung des Programmcodes im mehrere Quelldateien (Dateityp/endung.c oder.cpp). Teile eines Programms (Module) werden aus Daten und Funktionen gebildet: Lokale Daten werden dann nur innerhalb der Programmteile benutzt und sind vor den Zugriff von anderer Stelle verborgen Das Programmteil wird ausschließlich über Funktionen (Schnittstellen) angesprochen. Die Funktionen werden in einer Header Datei (Dateityp.h) für andere Programmteile bekannt gemacht. Das ist bereits eine Variante der Objektorientierung. Peter Sobe 7 Abstrakte Datentypen Ein solches Modul, das lokale Daten besitz und Funktionen zum Zugriff bzw. zur Manipulation der lokalen Daten nach außen bereitstellt wird auch abstrakter Datentyp genannt. Beispiel eines Interfaces single_timer.h : void timer_init(); char start(); // starts a timer, returns 1 when successful, otherwise 0 char stop(); // stops a timer, returns 1 when successful, otherwise 0 char get_elapsed_time(int *n_mikrosecs); // returns 1 when a timer has been started, // 0 when timer has not been started, // 2 when timer has been started and stopped Peter Sobe 8
5 Abstrakte Datentypen Innerhalb single_timer.c wird nun der Startzeitpunkt und der Stopzeitpunkt als lokale Variablen deklariert. Durch Aufruf von init_timer(), start(), stop() und get_elapsed_time(µsecs) kann ein anderes Modul, bzw. das Hauptprogramm den abstrakten Datentypen benutzten. Man bildet ein Objekt Timer nach. Problem: Bislang ist nur ein Timer verfügbar. Was macht man wenn man mehrere unabhängige Zeiten messen möchte? Peter Sobe 9 Abstrakte Datentypen Abstrakte Datentypen erlauben oft dem Benutzer, mehrere Exemplare d.h. Objekte eines Typs zu erzeugen und über Funktionen anzusprechen. Beispiel eines Interfaces multi_timer.h: timer_id create_timer(); char start(timer_id id); // starts the timer with the specified id, // returns 1 when successful, otherwise 0 // returns -1, if id does not specify a valid timer char stop(timer_id id); char get_elapsed_time(timer_id id, int *n_mikrosecs); char destroy_timer(timer_id id); Peter Sobe 10
6 8.3 Ziele der Objektorientierung Es sollen kurz die Hauptziele angegeben werden, durch die die Nutzung objektorientierter Sprachen charakterisiert wird: Datenabstraktion: Definition und Verwendung anwendungsbezogener Datentypen und der auf ihnen möglichen Operationen. Datenkapselung: Vereinbarung von Daten und den Prozeduren, die diese Daten verwalten, in einer Programmeinheit. Zugriffe sind über Zugriffsspezifizierer einschränkbar. In der Regel sind die Datenelemente eines Objektes vollständig gekapselt (private) und für den Nutzer nicht einsehbar. Nur über die Elementfunktionen (public) kann der Nutzer das Objekt manipulieren. R. Grossmann / P. Sobe 11 Ziele der Objektorientierung Trennung von Implementierung und Applikation: Durch die Datenkapselung wird es möglich, dass der Programmierer Freiheiten beim Entwurf der (gekapselten) Datenelemente hat. Er ist nur an die Signatur und die äußere Wirkung der Elementfunktionen gebunden. Der Nutzer des Typs benötigt in seiner Applikation ausschließlich das Interface, das die Elementfunktionen bilden. Damit ist eine Applikation vollkommen unabhängig von konkreten internen Kodierungen. Aus Nutzersicht liegt also ein Abstrakter Datentyp (ADT) vor. Er kann nicht mehr zwischen verschieden implementierten Datentypen unterscheiden, da er nur das äußere (identische) Verhalten sieht. R. Grossmann / P. Sobe 12
7 Ziele der Objektorientierung Spezialisierung und Generalisierung (Vererbung): Durch das Prinzip der Spezialisierung wird es möglich, aus einem Datentyp einen weiteren Datentyp abzuleiten, der viele Gemeinsamkeiten mit ersterem hat und nur in einigen Details abweicht. Der abgeleitete Datentyp erbt Datenstruktur und vererbbare Elementfunktionen vom Basisdatentyp. Es müssen folglich nur die Abweichungen (Spezialisierung) angegeben werden, was den Kodierungsaufwand und die mögliche Fehlerquote stark senkt. Polymorphismus: Das ist in Klassenhierarchien mit Vererbung die Fähigkeit, dass dieselbe Nachricht (Elementfunktion) gesendet an Objekte unterschiedlicher Typen, unterschiedliche Aktionen auslösen kann. R. Grossmann / P. Sobe 13 Ziele der Objektorientierung Überladen von Operatoren: Durch das Prinzip des Überladens von Operatoren ist es möglich, die in einem Namensraum eines Datentyps bekannten Operatoren (z.b. +,-,*,/,...) in einem anderen Datentyp mit zu benutzen, dort aber mit einer anderen Bedeutung. So könnten z.b. die aus den Datentypen int, float usw. bekannten arithmetischen Operatoren auch in einem Datentyp complex verwendet werden. Durch das Überladen des Operators müssen aber die Rechenregeln für den Operator im neuen Typ bekannt gemacht werden. R. Grossmann / P. Sobe 14
8 Möglichkeiten der Programmierung mit C++ Die Ziele werden durch die Sprache C++ unterstützt. Was ist jetzt möglich? Beispiel 1: Klassenhierarchie geometrischer Objekte Beispiel 2: Klassen mit Operatoren am Beispiel der Klassen Person und Verein Es entsteht ein anderer Programmierstil. Dieser wird durch Festlegung der Klassen und deren Beziehungen dominiert. Objektorientierter Entwurf statt prozeduraler Entwurf. R. Grossmann / P. Sobe 15 Möglichkeiten der Programmierung mit C++ Bespiel 1: Klassenhierarchie geometrischer Objekte Spezielle Klassen punkt, rechteck, kreis oder dreieck sind durch Vererbung von einer allgemeinen Klasse geofigur abgeleitet. Eine abstrakte Klasse geofigur definiert die Menge gemeinsamer Methoden für alle speziellen Objekte, zum Beispiel void zeichne(hdc &hdc); als einheitliches Interface, um das Objekt in einem Fenster zu zeichnen. Objekte anlegen: figuren[0] = new punkt(100.0, 100.0); figuren[1] = new punkt(200.0, 200.0); figuren[2] = new punkt(300.0, 300.0); figuren[3] = new kreis(punkt(400.0,400.0),10.0); figuren[4] = new rechteck(450.0,250.0,80.0,150.0); figuren[5] = new kreis(punkt(400.0, 120.0), 80.0); figuren[6] = new dreieck(200.0, 100.0, 300.0, 100.0, 250.0, ); anz_figuren=7; R. Grossmann / P. Sobe 16
9 Möglichkeiten der Programmierung mit C++ In der Paint-Funktion einer WIN32-Anwendung: for(int i=0; i<anz_figuren; i++) figuren[i]->zeichne(hdc); // figuren[i] ist ein geofigur* Peter Sobe 17 Möglichkeiten der Programmierung mit C++ Beispiel 2: Klassen mit speziellen Operatoren Person schulze( Robert, Schulze,1956, Kaninchenzucht ); meier( Klaus, Meier,1976, Schachspiel ); gartenfreunde = gartenfreunde+meier ; gartenfreunde = gartenfreunde+schulze; gartenfreunde.aufloesung(); Peter Sobe 18
10 8.3 C++ Erweiterungen C++ stellte einige Erweiterungen bereit, die auch bei nichtobjektorientierter Programmierung benutzt werden können. streambasierte Ein- und Ausgabe Referenzen Speicherallokation und Freigabe mit new und delete (wird später eingeführt) Peter Sobe 19 Streambasierte Ein- und Ausgabe I/O-Objekte cin, cout und cerr mit Operatoren <<, >> Der folgende Programmausschnitt zeigt die typische Nutzung: #include <iostream.h> void main() { int i; float f=7.5; char c[20]= i+f ist gleich ; cout<< \nprogrammstart ; cout<< \neingabe i= ; cin>>i; cout<<c<<i+f<< \n ; } Bemerkenswert ist das Fehlen von Formatierungen (es wird mit Standards gearbeitet) und die Nutzung von Operatoren >> bzw. << für die Ein- bzw. Ausgabe. Peter Sobe 20
11 Referenzen (1) Eine Referenz ist ein alternativer Name (Alias) für ein Objekt. Die Hauptanwendungen in C++ sind: die Angabe von Argumenten (Parameterkonzept) und Rückkehrwerten bei Funktionen und beim Überladen von Operatoren in Klassen In C++ ist die Schreibweise X& und bedeutet Referenz auf Typ X. Beispiel:... int i=1; int& r =i; // r ist ein zweiter Name für i Peter Sobe 21 Referenzen(2) Aus C sind die beiden Parametervermittlungsarten: call by value und call by reference bekannt. Call by reference wird dabei über Zeiger realisiert. Das ist auch in C++ so möglich. Eine weitere Form des call by reference ist aber die Verwendung von Referenzen anstelle von Zeigern (vgl. Demo-Programme). Peter Sobe 22
12 Referenzen für Call-by-Reference Parameter void main() { int n1=2, n2, n3; int& r=n2; n2=n3=0; plus_minus(n1, n2, n3); cout <<"\n1="<<n1<<" n2="<<n2<<" n3="<<n3<<endl; //mit Referenz r das gleiche Resultat n2=n3=0; plus_minus(n1, r, n3); cout <<"\n1="<<n1<<" n2="<<n2<<" n3="<<n3<<endl; } void plus_minus(int a, int& b, int& c) { b=a+1; c=b-1; } Peter Sobe C++ - Klassen, Objekte und Methoden Klassen sind der Bauplan für Objekte und müssen definiert werden. Eine Klassendefinition ist vergleichbar mit einer Type-Definition. class klassenname { private: public: Später können Objekte aus der Klasse erzeugt werden, vergleichbar mit Variablen, die aus eine Typ erzeugt werden. klassenname objekt1; // statisch Deklaration der Datenelemente Deklaration oder Definition der Elementfunktionen objekt2 = new klassenname;.. delete objekt2; // dynamisch Peter Sobe 24
13 Deklaration der Datenelemente Allgemein dürfen im Deklarationsteil von Datenelementen alle in C/C++ bekannten Standardtypen (auch Zeiger, Felder, Strukturen usw. benutzt werden. Sind neue Typen über Klassen definiert, dürfen diese Typen dann auch im Deklarationsteil anderer Klassen verwendet werden. Diese bezeichnet man dann als Elementobjekte. Da eine Klasse einen eigenen Gültigkeitsbereich für Namen bildet, sind Datenelemente lokal bezüglich der Klasse und nur Elementfunktionen können Zugriffe auf diese auslösen. Innerhalb einer Klasse darf niemals eine weitere Klassendeklaration vorgenommen werden. R.Grossmann / P. Sobe 25 Deklaration / Definition / Aufruf von Elementfunktionen Elementfunktionen sind einer Klasse zugeordnet und bilden die Menge der Operationen, die mit den Objekten der Klasse ausführbar sind. Damit der Nutzer Elementfunktionen zur Manipulation der Objekte in seinem Anwendungsprogramm aufrufen kann, müssen diese in aller Regel in einem public-teil verfügbar sein. Elementfunktionen sind syntaktisch gesehen - Funktionen im Sinne von C/C++. Die Deklaration und Definition dieser Elementfunktionen genügt den Regeln für normale Funktionen. Durch die Bindung an die Klasse unterscheidet sich der Aufruf von Elementfunktionen gegenüber normalen Funktionen: normale Funktion f(x) Elementfunktion f(x) der Klasse T f(y); T a; a.f(y); R.Grossmann / P. Sobe 26
14 Definition von Elementfunktionen Beispiel Klasse vektor (1) Deklaration und Definition der Elementfunktionen: class vektor { private: float x; float y; float z; //Deklaration Datenelemente } public: void init(float i,float j,float k) { x=i; y=j; z=k;} float betrag() {return sqrt(x*x+y*y+z*z);} R.Grossmann / P. Sobe 27 Definition von Elementfunktionen Beispiel Klasse vektor (2) Gewöhnliche Trennung von Deklaration und Definition: class vektor { private: float x; float y; float z; //Deklaration Datenelemente public: void init(float i,float j,float k) ; float betrag(); void vektor::init (float i,float j,float k) { x=i; y=j; z=k;} float vektor::betrag(){return sqrt(x*x+y*y+z*z);} R.Grossmann / P. Sobe 28
15 Konstruktor, Destruktor Konstruktor: eine ausgewählte Methode, die wie die Klasse benannt ist. kein Rückgabewert kann Parameter entgegen nehmen, die bei Erzeugung eines Objektes anzugeben sind mehrere Konstruktoren mit unterschiedlicher Parameterliste möglich einer der Konstruktoren wird bei Erzeugung einer Klasse ausgeführt Beispiel: class person { public: person(); person(char *vn, char *n, int gebj, char *h); Person unbekannt;// hier wird der parameterlose Konstruktor aufgerufen person *bk = new person( Helmut, Schmidt,1918, Rauchen und Politik ); R.Grossmann / P. Sobe 29 Konstruktor, Destruktor Destruktor: eine ausgewählte Methode, die wie die Klasse mit vorangestelltem ~ -Zeichen benannt ist. kein Rückgabewert, ohne Parameter nur ein Destruktor möglich Destruktor wird bei Ende der Gültigkeit eines Objekts ausgeführt Beispiel: class person { public: ~person(); Hier wird Objekt tmp freigegeben und der Destruktor aufgerufen. void tausch(person &a, person &b) { person tmp; tmp=a; a=b; b=tmp; } R.Grossmann / P. Sobe 30
16 Konstruktor, Destruktor Am Beispiel der Klasse Person: #define MAX_MITGLIEDER 100 class person { protected: char name[strlen], vorname[strlen], hobby[strlen]; int gebjahr; public: person() {} person(char *vn, char *n, int gebj, char *h) { gebjahr = gebj; strcpy(vorname, vn); strcpy(name, n); strcpy(hobby, h); } ~person() {} void print() { cout << vorname << " " << name << endl; } R.Grossmann / P. Sobe 31 Speicherallokation und Objekte Operatoren new und delete zur Speicherallokation bzw. -freigabe für Objekte Mit dem Operator new wird Speicher im Heap-Speicher angefordert und der Zeigervariablen zugewiesen: Beispiele: int *iptr = new int; int *kptr = new int(64); int *jptr = new int[30]; // ein Speicherbereich für 30 int Werte // wird angefordert person *p = new person( Fritz, Fuchs,1967, Fahrradfahren ); Keine Initialisierung für Standardtypen Bei Objekten wird nach Bereitstellung des Speichers der passende Klassenkonstruktor aufgerufen. Peter Sobe 32
17 Speicherallokation und Objekte Wird der über new angeforderte Speicherbereich nicht mehr verwendet, so muss er per delete explizit wieder freigegeben werden. int *pint = new int; int *pintfeld = new int[64]; person *pp = new person( Fritz, Fuchs,1967, Fahrradfahren ); delete pint; delete [] pintfeld; delete pp; delete kann nur in Verbindung mit new eingesetzt werden. int i, *pint = new int; int *pint2 = &i; delete pint; delete pint2; // Fehler, da nicht per new erzeugt delete auf einen Null-Pointer hat keine Auswirkungen. Peter Sobe 33 Elementobjekte Der Begriff Elementobjekt wurde zur Bezeichnung von Datenelementen im private-teil einer Klasse eingeführt, die keinen Standardtyp, wie float, int, char usw. repräsentieren, sondern Objekte einer anderen Klasse sind. Beispiel: Sie haben eine Klasse Punkt und wollen jetzt eine Klasse Linie definieren, die von einem Anfangspunkt zu einem Endpunkt geht. Das wäre mit Elementobjekten leicht zu erreichen: Im Programm Punkt_1 steht die Klassendefinition für Punkt: class Punkt { private: float x,y; public: Punkt(float a,float b){ x=a; y=b;} Punkt(){ }... R.Grossmann / P. Sobe 34
18 Elementobjekte Wir nehmen an, es gäbe die Klasse Punkt, mit einem Konstruktor Punkt(int xpos, int ypos). Nun wird die Klassendefinition für Linie unter Nutzung von Elementobjekten hinzugefügt: class Linie { private: Punkt anfang, ende ; public: Linie(){ }??? Wie muss der Konstruktor Linie geschrieben werden? Es muss ja der Anfangspunkt anfang und der Endpunkt ende mit zulässigen Werten belegt werden!!! Dies kann man nur über die Benutzung sogenannter Elementobjekt-Konstruktoren erreichen! R.Grossmann / P. Sobe 35 Elementobjekte Die Elementobjekt-Konstruktoren benutzen als Namen die Namen der Elementobjekte, in der Klasse Linie also anfang und ende. Der Konstruktor Linie muss deshalb mit Aufruf der Elementobjekt- Konstruktoren geschrieben werden: class Linie { private: Punkt anfang, ende ; public: Linie(float ax,float ay,float bx,float by) : anfang(ax,ay), ende (bx,by) { }... Der Aufruf der Elementobjekt-Konstruktoren muss durch einen Doppelpunkt hinter der Parameter-Liste eingeleitet werden! R.Grossmann / P. Sobe 36
19 Elementobjekte Besitzt eine Klassendefinition einen Standard-Konstruktor (Konstruktor ohne Parameter), so können im Programm auch Felder mit Elementen dieses Typs deklariert werden. Beispiel vektor class vektor { private: float x,y,z ; public: vektor(){ } // Standardkonstruktor vektor(float ax,float ay,float az) {x=ax;y=ay;z=az; }... In der Applikation (Hauptprogramm) kann jetzt ein Feld fv von vektoren vereinbart werden! vektor fv[4] = { v1, v2, v3, v4 v1-v4 sind vektor-objekte R.Grossmann / P. Sobe 37 Objekte als Parameter (1) C++ erlaubt, Objekte als Parameter von Methoden zu übergeben. Beispiel: Eine Zeichenfläche (canvas), der verschiedene geometrische Objekte übergeben werden. Die Zeichenfläche kann diese Objekte beispielsweise unter Berücksichtigung von 3D- Überdeckungen zeichnen. class geomobj { class canvas { public: public: geomobj() { } canvas() { } int register_geom_obj(geomobj &o) { } void draw_all() { } int num_vertexes(); int get_vertex( int *x, int *y, int *y); int draw_vertex { } R.Grossmann, P.Sobe 38
20 Objekte als Parameter (2) Bei Übergabe von Objekten an Methoden sind die Mechanismen der Parameterübergabe zu beachten. Bei der Übergabe als Wert würde der Compiler eine lokale Kopie des übergebenen Wertes erzeugen. Dazu wird der Kopierkonstruktor aufgerufen. Dies ist oft nicht wünschenswert (Ressourcenverschwendung, Nebeneffekte). Das bei der Wertübergabe erzeugte Objekt würde wie andere lokale Objekte am Ende der Funktion gelöscht und der zugehörige Destruktor aufgerufen. Das führt i.d.r. zu unerwünschten Wirkungen. Im allgemeinen ist es daher sinnvoll, Objekte als (konstante) Referenz zu übergeben. R.Grossmann, P.Sobe 39 Objekte als Parameter (3) Übergabe von Objekten als Referenz an Methoden: int register_geom_obj(geomobj &o) { for (int i=0; i<o.num_vertexes();i++) o.get_vertex( &geobj[a].v[i].x, &geobj[a].v[i].y, &geobj[a].v[i].z ); } // Kopiert Eckpunktkoordinaten von o auf lokales Objekt geobj[a] besser noch als konstante Referenz: int register_geom_obj(const geomobj &o) { R.Grossmann, P.Sobe 40
21 8.5 Vererbung und Polymorphie Verschiedene Klassen sind oft in einigen grundlegenden Eigenschaften/Funktionen gleich. Beispielsweise können verschiedene elektr. Bauelemente als Zweipole beschrieben werden. Generalisierung: Ohmscher Widerstand, Diode, Spule usw. sind Zweipole Spezialisierung: Vom Zweipol ausgehend erfolgt eine Spezialisierung als Ohmscher Widerstand durch ein lineares Strom/Spannungs-Verhältnis. als Diode durch eine Sperrfunktion und die Diodenkennlinie als Spule durch einen Induktiven Widerstand und ein phasenabhängiges Strom/Spannungsverhältnis ZP Generalisierung Peter Sobe 41 Generalisierung und Spezialisierung Gemeinsame Eigenschaften und Funktionen können in einer Basisklasse definiert werden. Eine Spezialisierung erfolgt durch Erzeugung einer neuen abgeleiteten Klasse, die die Eigenschaften und Funktion der Basisklasse erbt. Die abgeleitete Klasse kann Neues hinzufügen zusätzliche Elementobjekte und zusätzliche Methoden Die abgeleitete Klasse kann Methoden und Operationen verändern (überschreiben) Objekte der Basisklasse und abgeleiteter Klassen sind zuweisungskompatibel. R.Grossmann, P. Sobe 42
22 Begriff Klassenhierarchie Definition: Eine Menge von Klassen, deren Elemente durch die Relation Spezialisierung bzw. Generalisierung miteinander in Beziehung gesetzt sind, bezeichnet man als Klassenhierarchie, wenn jede Klasse höchstens eine Basisklasse besitzt. Basisklasse heißt eine Klasse von der durch Spezialisierung eine abgeleitete Klasse gebildet wurde. R.Grossmann, P. Sobe 43 Abgeleitete Klassen in C++Programmen Abgeleitete Klassen müssen in C++ Programmen durch Angabe ihrer Basisklasse gekennzeichnet werden. Beispiel: class A {... class B : public A{... class C: public B{... class D: public A{... //Basis-Klasse //abgeleitete Klasse und gleich- // zeitig Basis-Klasse für C //abgeleitete Klasse //abgeleitete Klasse Alle Datenelemente einer Klasse, sowie alle Methoden mit Ausnahme der unten angegebenen werden an die abgeleitete Klasse vererbt. Nicht vererbt werden alle Konstruktoren und der Destruktor. R.Grossmann, P. Sobe 44
23 Zugriffsspezifizierer in Klassenhierarchien Alle privaten Datenelemente einer Klasse können nur von den Methoden der Klasse benutzt werden. Sollen diese Datenelemente auch von Methoden der abgeleiteten Klassen erreichbar sein, muss anstelle von private der Spezifizierer protected benutzt werden. Veranschaulichung: class myclass : public yourclass { public: myclass(); ~myclass(); // öffentlich für alle anderen Objekte, // auch für abgeleitete Klassen protected: double calculate(); // nicht öffentlich, kann aber von Klasse // selbst und von abgeleiteter Klasse aufgerufen werden private: void internalaction(); // nur von Klasse selbst aufrufbar, kein Zugriff durch // abgeleitete Klassen R.Grossmann, P. Sobe 45 Konstruktoren abgeleiteter Klassen Konstruktoren werden nicht vererbt. Konstruktoren abgeleiteter Klassen müssen den Konstruktor der Basisklasse aufrufen, der für die Instanziierung der geerbten Anteile sorgt. Beispiel: class A //Basis-Klasse { private: int i; public: A(int k){i=k;} //Konstruktor class B : public A //abgeleitete Klasse { private: char c; public: B(char s,int j): A(j) {c=s;} // : A(j) ruft Basisklassen-Konstruktor auf R.Grossmann, P. Sobe 46
24 Elementobjektkonstruktoren in Konstruktoren abgeleiteter Klassen Enthalten abgeleitete Klassen Elementobjekte, so müssen neben dem Konstruktor der Basisklasse auch der Elementobjekt- Konstruktor aufgerufen werden. Beispiel: class A { private: int i; public: A(int k){i=k;} //Basis-Klasse //Konstruktor class B : public A //abgeleitete Klasse { private: char c; A a; //Elementobjekt public: B(char s,int j,int m) //Konstruktor abgl. Klasse : a(m),a(j) {c=s;} // A(j) Basisklassen-Konstruktor // a(m) ist Aufruf Elementobjekt-Konstr. R.Grossmann, P. Sobe 47 Elementobjektkonstruktoren in Konstruktoren abgeleiteter Klassen Beachten Sie, dass unabhängig von der Notation die Rufreihenfolge festgelegt ist: 1. Ruf des Konstruktors der Basisklasse 2. Ruf des Elementobjekt-Konstruktors 3. Ruf des Konstruktors der abgeleiteten Klasse Beispiel: class A { //Basis-Klasse class B : public A //abgeleitete Klasse { private: int a, c; public: B(..., int m, int s, ) : a(m),a(j) {c=s;} // zuerst wird A(), dann a() und zuletzt B() ausgeführt R.Grossmann, P.Sobe 48
25 Vererbung und dynamisches Binden Durch Einfügen der Compilerdirektive virtual wird dynamisches Binden von Methoden erzwungen: class A //Basis-Klasse {public: virtual void Druck(){cout<< Klasse A ;} void Nachricht(){cout<< Nachricht von ; Druck() ;} class B : public A //abgeleitete Klasse { public: void Druck(){cout<< Klasse B ;} void main() {A a; B b; a.nachricht(); b.nachricht(); } Jetzt wird ausgegeben: Nachricht von Klasse A Nachricht von Klasse B R.Grossmann, P. Sobe 49 Beispiel für Polymorphie (1) class B { public: B(int n): b(n) {} virtual void f() {cout << b;} private: int b; class C: public B { public: C(int n1, int n2): B(n1), c(n2) {} virtual void f() {B::f(); cout << c; } private: int c; class D: public C { public: D(int n1, int n2, int n3): C(n1,n2), d(n3) {} virtual void f() {C::f(); cout << d;} private: int d; int main { B* b_array[3]; B b(6); C c(9,12); D d (16,18,20); b_array[0] = &b; b_array[1] = &c; b_array[2] = &d; for(int i=0;i<3;i++) b_array[i]->f(); } R.Grossmann, P. Sobe 50
26 Beispiel für Polymorphie (2) b_array Ausgabe des Programms: B b(6) C c(9,12) D d(16,18,20) Es reicht aus, den Typ der Basisklasse zu kennen und einheitliche Methodennamen für Basis- und abgleitete Klassen zu verwenden. Zur Laufzeit werden die Methoden der entsprechenden Objekte (Klassen) richtig ausgewählt, ohne dass sich der Programmierer darum kümmern muss. R.Grossmann, P. Sobe 51 Grafische Veranschaulichung von Klassen (1) Klassen können untereinander verschiedene Beziehungen eingehen: Klasse B als Elementobjekt von Klasse A allgemein kann eine Klasse viele verschiedene Elementobjekte besitzen, die möglicherweise auch Instanzen verschiedener Klassen sind. Elementobjekte können ebenfalls aus verschiedenen Elementobjekten bestehen. Es ergibt sich eine Hierarchie von Elementen, die die Beziehung enthalten in wiederspiegeln. Klasse B als abgeleitete Klasse von A eine Klasse wird typischerweise von einer Basisklasse abgeleitet. Die Basisklasse kann wiederum eine abgeleitete Klasse sein. Es ergibt sich eine Schichtung im Sinne von erbt von. Mehrfachvererbung ist aber auch möglich, d.h. eine Klasse kann von mehreren Basisklassen erben. Klassen können sich über Referenzen assoziieren, d.h. Beziehungen aufbauen, die nicht durch die Elementobjekt-Beziehung abgedeckt ist. Diese Assoziation ist beim Entwurf zu berücksichtigen. Die grafische Darstellung der Hierarchien und Schichtung erfolgt durch Klassendiagramme, die als Teil der UML (Unified Modelling Language) vereinheitlicht wurden. R.Grossmann, P.Sobe 52
27 Grafische Veranschaulichung von Klassen (2) Objektorientierter Entwurf als Schritt, der vor der eigentlichen Programmierung erfolgt UML Einzelne Klasse: Vererbung: Name der Klasse Zweipol Elementobjekte Methoden BerechneU() spezialisiert OhmscherWiderst Diode BerechneU() BerechneU() R.Grossmann, P.Sobe 53 Grafische Veranschaulichung von Klassen (3) UML Komposition (Ganzes enthält Teile) ElektrSchaltung 1 1..* Zweipol Simuliere() BerechneU() Die Komposition durch Pfeil mit ausgefüllter Raute, wobei Teile nicht ohne das Ganze existieren können. In C++ wird die Komposition z.b. durch Elementobjekte realisiert. Am Pfeil sind Multiplizitäten vermerkt Die Aggregation ist ähnlich, wobei Teile auch ohne das Ganze existieren dürfen. Fahrgemeinschaft * Fahrgast Reise() Reise () R.Grossmann, P.Sobe 54
28 Grafische Veranschaulichung von Klassen (4) UML Assoziation eine inhaltliche Beziehung Konto 0.. * 1..* Kunde BucheAb() Kaufe() Klassen können Verweise (Zeiger, Referenzen) auf Objekte verwalten, um inhaltliche Beziehungen zu verwalten. R.Grossmann, P.Sobe 55 Vorgefertigte Klassenbibliotheken Beispiele: Klassenbibliotheken für grafische Ausgabe und Window-Systeme Microsoft MFC, Qt (Unix/Linux-Welt) Klassenbibliotheken für Datenstrukturen (Felder, Arrays, Listen), z.b. Standard Template Library.NET Klassenbibliothek, nutzbar für Programme in C#, C++, Visual Basic Klassenbibliotheken zur Simulation, z.b. SystemC R.Grossmann, P. Sobe 56
Vorkurs C++ Programmierung
Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:
Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22
Kapitel 19 Vererbung, UML Seite 1 von 22 Vererbung - Neben der Datenabstraktion und der Datenkapselung ist die Vererbung ein weiteres Merkmal der OOP. - Durch Vererbung werden die Methoden und die Eigenschaften
4. 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
Ü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
Überblick. 5. Objekt und Klasse, Elementfunktionen
Ü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
Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...
PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:
Einführung in die Java- Programmierung
Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger [email protected] WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113
Objektorientierte Programmierung OOP
Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Ronja Düffel WS2012/13 08. Oktober 2013 Objektorientierte Programmierung OOP Objektorientierte Programmierung Objektorientierte
Objektorientierte Programmierung
Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum
Objektorientierte Programmierung für Anfänger am Beispiel PHP
Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten
Programmieren in Java
Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können
5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:
5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel Beispiel (3) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Probleme des Implementierungsvorschlags:
Software Engineering Klassendiagramme Assoziationen
Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen
Klassendiagramm. Kurzer Überblick über UML - Stand 2006. BlaBla
BlaBla Diese Kennzeichnungen sind nur Erläuterungen und nicht Bestandteil des Diagramms Quelle: P.Grässle, H.Baumann, P.Baumann, UML projektorientiert, Galileo Verlag, 2003 21 Primäre Begriffe Kapselung
Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer
Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Klassendiagramme Ein Klassendiagramm dient in der objektorientierten Softwareentwicklung zur Darstellung von Klassen und den Beziehungen,
Grundlagen der Informatik Vererbung von Klassen
Grundlagen der Informatik Vererbung von Klassen Prof. Dr.-Ing. Thomas Wiedemann Prof. Dr.rer.nat. Ralph Großmann Fachgebiet Informatik / Mathematik Überblick zum Inhalt Klassen-2 Klassenhierarchie / Definition
Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur
Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert
4. 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
Zählen von Objekten einer bestimmten Klasse
Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --
3. Konzepte der objektorientierten Programmierung
3. Konzepte der objektorientierten Programmierung 3.1 Basiskonzepte 3.2 Generalisierung / Spezialisierung 3.3 Aggregation 3.4 Assoziation 3.5 Nachrichten 3.6 Polymorphismus 3. Konzepte der Objektorientierung
Software Engineering Klassendiagramme Einführung
Software Engineering Klassendiagramme Einführung Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Aufgabe Erstellen Sie eine Klasse Person in Java. Jede Person verfügt
5. Abstrakte Klassen
5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Vogel Amsel Drossel Fink Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg,
Arbeiten mit UMLed und Delphi
Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf
Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11
Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Wozu objektorientiertes Programmieren? Die Welt besteht für den Menschen
EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2
EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0 EDV Kurs 13/2 Inhaltsverzeichnis 1 Objekte... 1 2 Klassen... 3 2.1 Beziehungen zwischen Klassen... 4 2.1.1 Vererbung... 4 2.1.2
Softwaretechnik (Allgemeine Informatik) Überblick
Softwaretechnik (Allgemeine Informatik) Überblick 1 Einführung und Überblick 2 Abstraktion 3 Objektorientiertes Vorgehensmodell 4 Methoden der Anforderungs- und Problembereichsanalyse 5 UML-Diagramme 6
Java Kurs für Anfänger Einheit 5 Methoden
Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden
2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)
Objektorientierte Programmierung. Kapitel 12: Interfaces
12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/
Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster
Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.
Java Kurs für Anfänger Einheit 4 Klassen und Objekte
Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse
Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005
Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der
GetName(), GetName(), GetGeschlecht() und AelterWerden().
11. Vererbung Vererbung ist eine der mächtigsten Funktionalitäten der objektorientierten Programmiersprachen. Man versteht unter Vererbung die Tatsache, dass eine Klasse alle Methoden und Variablen einer
Einführung in die Programmierung
: Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte
Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18
Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.
Objektbasierte Entwicklung
Embedded Software Objektbasierte Entwicklung Objektorientierung in C? Prof. Dr. Nikolaus Wulff Objektbasiert entwickeln Ohne C++ wird meist C im alten Stil programmiert. => Ein endlose while-schleife mit
3 Objektorientierte Konzepte in Java
3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine
Grundlagen von Python
Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren
Klassenbeziehungen & Vererbung
Klassenbeziehungen & Vererbung VL Objektorientierte Programmierung Raimund Kirner teilweise nach Folien von Franz Puntigam, TU Wien Überblick Arten von Klassenbeziehungen Untertypen versus Vererbung in
SEP 114. Design by Contract
Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit
Bedienung von BlueJ. Klassenanzeige
Im Folgenden werden wichtige Funktionen für den Einsatz von BlueJ im Unterricht beschrieben. Hierbei wird auf den Umgang mit Projekten, Klassen und Objekten eingegangen. Abgeschlossen wird dieses Dokument
Deklarationen in C. Prof. Dr. Margarita Esponda
Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.
Java: Vererbung. Teil 3: super() www.informatikzentrale.de
Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und
SWE5 Übungen zu Software-Engineering
1 Übungen zu Software-Engineering 1) Klassen und Objekte 2) Telefonanlage 3) Objekt- und Klassendiagramme 4) Assoziationen 5) Telefonanlage (Erweiterung) 6) Fahrzeuge 7) Familien 2 Aufgabe 1: Klassen und
OO Softwareentwicklung
OO Softwareentwicklung Objektorientierung Prof. Dr. Bernhard Schiefer 1 OO als Ansatz zur Verbesserung der Software-Qualität Modellierung der Welt als selbständig agierende Objekte. Gemeinsame Beschreibung
Objektorientierte Programmierung
Programmierkurs C++ Kapitel 7:Objektorientierte Programmierung Seite 1 Objektorientierte Programmierung If programming in PASCAL is like put in a straightjacket, then programming in C is like playing with
1 Mathematische Grundlagen
Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.
Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek
Programmieren I Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2008/2009 1 / 22 2 / 22 Strategie zum Entwurf von Klassen Beispiele Objektorientierte Sichtweise: Mit welchen Objekten habe ich es
Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Einleitende Bemerkungen
Einleitende Bemerkungen Einleitende Bemerkungen Ideen hinter der objektorientierten Programmierung Objekte (/* Instanzen einer Klasse */) im Mittelpunkt Objekte bilden Einheit aus Daten (/* Attributen,
4 Vererbung, Polymorphie
4 Vererbung, Polymorphie Jörn Loviscach Versionsstand: 21. März 2014, 22:57 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work
Software Engineering Interaktionsdiagramme
Software Engineering Interaktionsdiagramme Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Nachrichtenaustausch Welche Nachrichten werden ausgetauscht? (Methodenaufrufe)
Prinzipien Objektorientierter Programmierung
Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................
Vererbung & Schnittstellen in C#
Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung
II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:
Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen
Erstellen einer digitalen Signatur für Adobe-Formulare
Erstellen einer digitalen Signatur für Adobe-Formulare (Hubert Straub 24.07.13) Die beiden Probleme beim Versenden digitaler Dokumente sind einmal die Prüfung der Authentizität des Absenders (was meist
Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen
Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als
Überblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse
Ü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
Von der UML nach C++
22 Von der UML nach C++ Dieses Kapitel behandelt die folgenden Themen: Vererbung Interfaces Assoziationen Multiplizität Aggregation Komposition Die Unified Modeling Language (UML) ist eine weit verbreitete
Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.
Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.
Kapitel 6. Vererbung
Kapitel 6 Vererbung Vererbung 1 Ziele Das Vererbungsprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen
Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl
Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt
Kapitel 6. Vererbung
1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben
Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind
Templates und Containerklassen Ziel, Inhalt Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen 1 Ziel, Inhalt
C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern
C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung Eltern Kind Kind Vererbung Definition von Klassen auf Basis von bestehenden Klassen. Implementierung von ist ein. bildet ein hierarchisches
Software Engineering Klassendiagramme weiterführende Konzepte
Software Engineering Klassendiagramme weiterführende Konzepte Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Klassenattribut: static Implementierung in Java public
1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung
K05 Vererbung & Polymorphie in C++ 1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung 2 Vererbung in C++: Grundlagen Analog zu Java unterstützt C++ das Konzept der Vererbung:
Einführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In
Primzahlen und RSA-Verschlüsselung
Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also
Folge 18 - Vererbung
Workshop Folge 18 - Vererbung 18.1 Ein einfacher Fall der Vererbung Schritt 1 - Vorbereitungen Besorgen Sie sich - vielleicht aus einer der Übungen der Folge 17 - ein fertiges und lauffähiges Listenprojekt,
Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012
WS 2011/2012 Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 Prof. Dr. Robert Lorenz Musterlösung zur Vorlesung Informatik I, Extrablatt zu komplexen Datenstrukturen Aufgabe 45 **
2. Semester, 2. Prüfung, Lösung
2. Semester, 2. Prüfung, Lösung Name Die gesamte Prüfung bezieht sich auf die Programmierung in C++! Prüfungsdauer: 90 Minuten Mit Kugelschreiber oder Tinte schreiben Lösungen können direkt auf die Aufgabenblätter
Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...
Erste Schritte Dieser Teil der Veranstaltung gibt einen ersten Eindruck der Programmierung mit C++. Es wird ein erstes Gefühl von Programmiersprachen vermittelt, ohne auf die gezeigten Bestandteile genau
Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007
Fachhochschule Bonn-Rhein-Sieg University of Applied Sciences Fachbereich Informatik Prof. Dr. Peter Becker Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007
Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny 3. UML Klassendiagramm Nachtrag 3.1 Einführung UML UML ist eine standardisierte Sprache zur Modellierung von Systemen. In UML werden graphische
Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff
Programmieren in C Macros, Funktionen und modulare Programmstruktur Prof. Dr. Nikolaus Wulff Der C Präprozessor Vor einem Compile Lauf werden alle Präprozessor Kommandos/Makros ausgewertet. Diese sind
Klassendiagramm. (class diagram)
: Klassendiagramm http:///topic95.html Klassendiagramm (class diagram) Klassendiagramm Objektdiagramm Komponentendiagramm Kompositionsstrukturdiagramm Verteilungsdiagramm Einstieg Paketdiagramm Aufbau
BEISPIELKLAUSUR Softwareentwicklung:
Prof. Dr. Andreas Fink Institut für Informatik Fakultät für Wirtschafts- und Sozialwissenschaften Helmut-Schmidt-Universität / Universität der Bundeswehr Hamburg BEISPIELKLAUSUR Softwareentwicklung: Objektorientierte
Angewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Die Vererbung ermöglicht es, neue Klassen auf der Basis von schon
Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI
Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer
5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu
Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten
Zeichen bei Zahlen entschlüsseln
Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren
Programmieren Tutorium
Programmieren Tutorium Tom Schildhauer Tutorium 12 Universität Karlsruhe (TH) Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by Tom Schildhauer,
Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.
Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,
13 OOP MIT DELPHI. Records und Klassen Ein Vergleich
13 OOP MIT DELPHI Delphi war früher "Object Pascal". Dieser Name impliziert eine Funktionalität, welche in der Welt der Programmierung nicht mehr wegzudenken ist: die objektorientierte Programmierung,
1 topologisches Sortieren
Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung
5.2 Neue Projekte erstellen
5.2 Neue Projekte erstellen Das Bearbeiten von bestehenden Projekten und Objekten ist ja nicht schlecht wie aber können Sie neue Objekte hinzufügen oder gar völlig neue Projekte erstellen? Die Antwort
Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:
Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang
Objektorientierte Programmiersprachen
Objektorientierte Programmiersprachen 1960 Algol 1970 Simula Pascal 1980 Smalltalk C Ada 1990 C++ Eiffel Eine ovale Box symbolisiert eine objektorientierte Programmiersprache. Eine rechteckige Box steht
Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala
Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:
Factory Method (Virtual Constructor)
Factory Method (Virtual Constructor) Zweck: Definition einer Schnittstelle für Objekterzeugung Anwendungsgebiete: Klasse neuer Objekte bei Objekterzeugung unbekannt Unterklassen sollen Klasse neuer Objekte
Step by Step Webserver unter Windows Server 2003. von Christian Bartl
Step by Step Webserver unter Windows Server 2003 von Webserver unter Windows Server 2003 Um den WWW-Server-Dienst IIS (Internet Information Service) zu nutzen muss dieser zunächst installiert werden (wird
Innere Klassen in Java
Innere Klassen in Java SS 2012 Prof. Dr. Margarita Esponda Innere Klassen Klassen- oder Interfacedefinitionen können zur besseren Strukturierung von Programmen verschachtelt werden Eine "Inner Class" wird
Leichte-Sprache-Bilder
Leichte-Sprache-Bilder Reinhild Kassing Information - So geht es 1. Bilder gucken 2. anmelden für Probe-Bilder 3. Bilder bestellen 4. Rechnung bezahlen 5. Bilder runterladen 6. neue Bilder vorschlagen
Javakurs 2013 Objektorientierung
Javakurs 2013 Objektorientierung Objektorientierte Programmierung I Armelle Vérité 7 März 2013 Technische Universität Berlin This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
