Objekte wie Hund und Katz

Größe: px
Ab Seite anzeigen:

Download "Objekte wie Hund und Katz"

Transkript

1 Objekte wie Hund und Katz Wir wollen den Titel wörtlich nehmen und Hunde sowie Katzen als neue C++ Objekte (= eigener Datentyp) definieren. Dazu gibt es in C die Struktur (struct), in C++ zusätzlich die Klasse (class). In C++ ist der Unterschied zwischen beiden Varianten nicht sehr groß! Objekte in C können nur Daten (sog. Attribute) als Bestandteile haben (etwa den Namen des Hundes), in C++ können auch Funktionen zum Objekt gehören. Solche Funktionen nennt man Methoden. Unser Objekt Hund soll einen Namen besitzen (Attribut std::string name), sowie "sprechen" können (Methode void spricht()). Ein erster Versuch wäre class Hund bzw. struct Hund std::string name; std::string name; void spricht(); void spricht(); // der Strichpunkt ist Wichtig!!!! // der Strichpunkt ist Wichtig!!!! Damit ist das Objekt schon definiert, obwohl der Code für die Methode spricht() noch gar nicht programmiert wurde. Solange diese Methode nicht verwendet wird, beschwert C++ sich nicht. Ein kleines Hauptprogramm dazu könnte lauten: int main() Hund h; h.name = "Waldi"; return EXIT_SUCCESS; Man sieht, dass auf die Bestandteile der Objektinstanz h vom Typ Hund mit dem Punkt- Operator zugegriffen wird (h.name = ). Definiert man das Objekt als Klasse (linke Variante), gibt C++ eine Fehlermeldung aus (name ist private). Verwendet man ein struct (rechte Variante), ist alles in Ordnung! Konvention: Klassennamen und Strukturnamen sollten mit einem Großbuchstaben beginnen, Attribute und Methoden mit einem Kleinbuchstaben. Das ist kein Muss sondern anerkannte Praxis. Zugriffsschutz und Zugriffsrechte: Die Bestandteile eines Objekts (struct wie class, Attribute wie Methoden) besitzen immer einen Zugriffsschutz, der eine der 3 Stufen public, private, protected ist.

2 Jede Funktion im gesamten Programm kann das Attribut lesen und schreiben bzw. die Methode aufrufen. Nur die Methoden der Klasse sowie Funktionen, die in der Klasse als Freund (friend) deklariert sind, dürfen diese Attribute verwenden/methoden aufrufen. protected: Nur die Methoden der Klasse und deren Nachkommen sowie Funktionen, die in der Klasse als Freund (friend) deklariert sind, dürfen diese Attribute verwenden bzw. diese Methoden aufrufen. Beim Zugriff auf die Attribute unterscheidet man nicht zwischen Lesen und Schreiben, d.h. man kann nicht eines erlauben und das andere verbieten. struct und class unterscheiden sich nur in der Default-Einstellung des Zugriffsschutzes. Beim struct ist der Defaultwert public (deshalb hier auch keine Fehlermeldung), bei class ist der Defaultwert private. Die meist richtige Empfehlung lautet: Attribute sollen private, Methoden public sein. Außerdem sollten alle Berechtigungen explizit vergeben werden: class Hund bzw. struct Hund std::string name; std::string name; void spricht(); void spricht(); Eine explizite Berechtigung (wie ) gilt so lange, bis sie durch eine andere Berechtigungsangabe widerrufen wird. Theoretisch könnte man beliebig viele etc. in der Klasse haben, in der Praxis sollte jede Berechtigung maximal einmal vorkommen (wobei protected: meistens fehlt). Mit diesen Änderungen verhalten sich nun struct und class gleich, sodass ab jetzt nur noch die class Version weiter ausgebaut wird. Beide erzeugen nun dieselbe Fehlermeldung (name ist private, d.h. main() darf nicht darauf zugreifen).

3 Zugriff auf die "verbotenen" Attribute: Da nur Klassenmethoden (und als friend deklarierte Funktionen) auf die privaten Attribute zugreifen können, muss man solche Methoden schreiben, um auch von außerhalb zugreifen zu können. Man wählt oft die Namen get für Lesezugriffe, set für Schreibzugriffe. In unserem Fall bräuchten wir eine Methode std::string getname(), die den Namen des Objekts zurückgibt, und eine Methode void setname(const char* neuername), die den Namen des Objektes setzt. Unser Programm lautet nun class Hund std::string name; void spricht(); std::string getname(); void setname(const char* neuername); int main() Hund h; h.setname("waldi"); h.spricht(); return EXIT_SUCCESS; C++ beanstandet jetzt "nur noch", dass die zwei in main() verwendeten Klassenmethoden noch gar nicht programmiert sind. Wo und wie programmiert man die Klassenmethoden? 1) (von Stil-Puristen verschmäht!): innerhalb der Klassendefinition. Man ersetzt die Deklaration der Methoden durch deren Programmcode. Das ist nur bei sehr kurzen Funktionen sinnvoll, Puristen wollen selbst das nicht. 2) Außerhalb der Klassendefinition (für Stil-Puristen das einzig Wahre), bei größeren Projekten in einer eigenen.cpp Datei. Damit C++ weiß, dass es sich um die Methode setname() der Klasse Hund handelt (und nicht um eine Klassenmethode der Klasse Katze oder um eine normale Funktion, die zu keiner Klasse gehört), muss man hier die Funktion mit ihrem Scope angeben: Hund::setName():

4 Variante 1 führt zu: class Hund string name; void spricht() cout << name << " bellt wauwau!\n"; string getname() return name; void setname(const char* neuername) name = neuername; Variante 2 führt zu: class Hund string name; void spricht(); string getname(); void setname(const char* neuername); void Hund::spricht() cout << name << " bellt wauwau!\n"; void Hund::setName(const char* neuername) name = neuername; string Hund::getName() return name; Konstante Klassenmethoden: Methoden, die das Objekt nicht verändern, sollten als konstante Klassenmethoden definiert. Von unseren 3 Methoden kommen getname() und spricht() dafür in Frage. Ihnen

5 stellt man ein const nach. Diesen Zusatz muss man sowohl in der Klasse als auch (bei Variante 2) bei der Funktionsdefinition machen. Vergisst man das, erinnert C++ mit einigen Fehlermeldungen daran! Variante 1: class Hund string name; void spricht() const cout<<name << " bellt wauwau!\n"; string getname() const return name; void setname(const char* neuername) name = neuername; Variante 2: class Hund string name; void spricht() const; string getname() const; void setname(const char* neuername); void Hund::spricht() const cout << name << " bellt wauwau!\n"; void Hund::setName(const char* neuername) name = neuername; string Hund::getName() const return name;

6 Konstruktoren und Destruktoren Wann immer man in C++ ein Objekt definiert, d.h. eine Variable vom Typ des Objekts anlegt (der Fachausdruck dafür ist instanziert), ruft C++ an genau dieser Stelle eine spezielle Klassenmethode auf, einen Konstruktor. Jeder Konstruktor heißt gleich wie die Klasse, verschiedene Konstruktoren müssen sich daher in der Argumentliste unterscheiden. Wann immer in C++ ein Objekt vernichtet wird, ruft C++ an genau dieser Stelle eine spezielle Klassenmethoden auf, den Destruktor. Der Destruktor (es gibt nur einen) hat den Namen ~Klasse() und keine Argumente. Sehen wir uns das Hauptprogramm an: int main() Hund h; // Konstruktoraufruf h.hund() h.setname("waldi"); h.spricht(); return EXIT_SUCCESS; // Destruktoraufruf h.~hund() Bis jetzt haben wir weder Konstruktoren noch den Destruktor deklariert oder programmiert. Aber hier hilft C++ weiter: 1) besitzt ein Objekt keinen einzigen Konstruktor (und es wird einer benötigt), so fügt C++ einen ganz einfachen public Konstruktor zur Klasse hinzu: Hund() 2) besitzt ein Objekt keinen Destruktor (und es wird einer benötigt), so fügt C++ einen ganz einfachen public Destruktor zur Klasse hinzu: ~Hund() Konstruktoren haben weder einen Typ (also kein void voranstellen), noch hat ein Destruktor ein Argument (auch hier bitte kein void). Natürlich könnte man selbst solche einfachen Methoden schreiben, aber wozu, wenn die C++ Varianten ausreichend sind.

7 Wozu benötigt man überhaupt Konstruktoren und Destruktoren? Man benutzt die Automatik von C++, um Objekte richtig zu initialisieren oder um Ressourcen zu allozieren oder zu deallozieren, ohne dass diese Funktionen explizit aufgerufen werden müssen. Hier könnte man z.b. einen Konstruktor schreiben, der einen Namen vollautomatisch setzt (dann könnte man z.b. die setname()-methode einsparen, außer man möchte einen Hund später umbenennen). Dieser Konstruktor lautet folgerichtig Hund(const char* neuername). Variante 1: (in der Klasse) Hund(const char* neuername) name = neuername; Variante 2: In der Klasse Außerhalb: Hund(const char* neuername); Hund::Hund(const char* neuername) name = neuername; Allerdings erzeugen beide Varianten nun eine Fehlermeldung in der Zeile Hund h; C++ will/muss hier einen Konstruktor aufrufen, und zwar den Konstruktor ohne Argumente. Und diesen gibt es nun nicht mehr, da die Klasse einen selbstgeschriebenen Konstruktor besitzt und C++ daher diesen nicht mehr dazugibt. 2 Auswege: Man fügt zur Klasse den Konstruktor ohne Argumente (= Default Konstruktor) selbst hinzu oder aber man erzeugt h mit dem einzigen jetzt existierenden Konstruktor. Folgende Varianten sind hier möglich und fast immer äquivalent: Hund h("waldi"); // String-Argument in Klammern () Hund h = "Waldi"; // das ist keine Zuweisung Hund h = "Waldi" // das ist keine Zuweisung (C++11) Hund h "Waldi" // String-Argument in Klammern (C++11)

8 Rekursive Konstruktor- und Destruktoraufrufe: Alle Konstruktoren und auch der Destruktor haben folgende Automatik eingebaut: Ist ein Klassenattribut selbst ein Objekt (also kein Pod = plain old data, wie int, double, Pointer ), so wird VOR dem Konstruktorcode ein Konstruktor für dieses Attribut aufgerufen (Im Destruktor wird NACH dem Destruktorcode der Destruktor für dieses Attribut aufgerufen). Enthalten diese Attribute selbst wieder Objekte, setzt sich die Aufrufkette fort. Unser Hund besitzt ein solches Attribut (std::string ist selbst eine Klasse), sodass vor dem Konstruktorcode von Hund() der std::string-konstruktor für name aufgerufen wird (der name als leeren String erzeugt). Wenn der Programmierer nichts anderes vorsieht, wird jeweils der Default Konstruktor der Attribute aufgerufen (s.u.) Der Destruktor ~Hund()ruft nach seinem Code den std::string-destruktor für name auf, der den dafür reservierten Speicher zurückgibt. Initialisierungslisten: Bei Konstruktoren kann der Programmierer selbst bestimmen, welchen Konstruktor er für seine Attribute aufrufen will (er kann aber den Konstruktoraufruf NIE verhindern!). Das geschieht durch sog. Initialisierungslisten. Nach einem Doppelpunkt listet man alle Attribute und den dafür vorgesehenen Konstruktoraufruf auf, bei mehreren Attributen mit Beistrich getrennt. Für fehlende Attribute wird, wie gehabt, deren Defaultkonstruktor aufgerufen. Variante 1: (in der Klasse): Es gibt 2 Syntax-Varianten Hund(const char* neuername) : name(neuername) Hund(const char* neuername) : nameneuername Variante 2: (außerhalb der Klasse): Es gibt 2 Syntax-Varianten Hund::Hund(const char* neuername) : name(neuername) Hund::Hund(const char* neuername) : nameneuername Selbst Pods können mit dieser Syntax initialisiert werden. Hätte unser Hund ein Attribut int kinder, so könnte man z.b. den Konstruktor so schreiben: Hund::Hund(const char* neuername) : name(neuername), kinder0 oder auch: Hund::Hund(const char* neuername) : name(neuername), kinder

9 Konventionen: Die Verwendung von Initialisierungslisten ist der Verwendung von Zuweisungen vorzuziehen. Verwendet man eine Initialisierungsliste, sollte man möglichst alle Attribute explizit anführen, also auch jene, für die man den Default-Konstruktor aufrufen möchte: meinattibut() oder besser meinattribut Verpflichtend: Verwendet man eine Initialisierungliste, so sind die Attribute in derselben Reihenfolge anzugeben, wie sie in der Klassendefinition deklariert sind. Wir füttern unseren Hund Wir wollen unseren Hund auch noch füttern. Dazu schreiben wir eine Funktion void fuettere(const Hund& h), in der wir unserem Hund sein Lieblingsfutter verabreichen. Da verschiedene Hunde verschiedene Vorlieben haben, speichern wir im neuen Attribut std::string futter die Lieblingsmarke unseres Hundes. Das Setzen dieses Attributs übernehmen wir im Konstruktor, der nun ein zweites Argument wieder ein String-Literal - bekommt. Aus der Werbung wissen wir, dass Hunde am liebsten Chappy futtern, sodass wir diese Marke als Default-Argument einrichten. Außerdem geben wir aus, dass der Hund kreiert wurde. Zudem schreiben wir noch einen Destruktor für die Klasse. Dieser heißt wie die Klasse mit einer Tilde vorangestellt und hat KEINE Argumente: ~Hund(). Dafür entfernen wir die eigentlich nicht mehr benötigte Methode setname(). Ab jetzt aus Platzgründen nur mehr die Variante a: class Hund string name, futter; Hund(const char* Name, const char* Futter = "Chappy") : namename, futterfutter cout << "Hund " << name << "betritt das Programm.\n"; ~Hund() cout << "Hund " <<name<< " verlaesst das Programm.\n"; void spricht() const cout<< name<< " bellt wauwau!\n"; string getname() const return name; void fuettere(const Hund& h) cout << h.getname() << " bekommt " << h.futter << '\n'; h.spricht(); // Als Dank bellt er dann

10 int main() Hund h1"pongo", // "Pongo" mag "Chappy" h2"perdita", "Pedigree" // "Perdita" steht auf "Pedigree" fuettere(h1); fuettere(h2); return EXIT_SUCCESS; Das Füttern funktioniert noch nicht, da ich hier auf das private Attribut futter zugreife. Man beachte, dass ich statt des (ebenfalls nicht erlaubten) Zugriffs auf name die Methode getname() verwende, die ist. Man könnte (und sollte) natürlich eine analoge Funktion getfutter() schreiben. Aus didaktischen Gründen (um dieses Feature zu demonstrieren) mache ich die Funktion fuettere() zu einem Freund der Klasse Hund, sodass sie tatsächlich auch auf die privaten Dinge zugreifen darf. Die Klassendefinition wird nun zu: class Hund string name, futter; friend void fuettere(const Hund& h); Hund(const char* Name, const char* Futter = "Chappy") : namename, futterfutter cout << "Hund " << name << "betritt das Programm.\n"; ~Hund() cout << "Hund " <<name<< " verlaesst das Programm.\n"; void spricht() const cout<< name<< " bellt wauwau!\n"; string getname() const return name; Natürlich dürfte die Funktion void fuettere() jetzt auch auf name direkt zugreifen, ohne dafür getname() zu verwenden. Achtung: Bei der friend-definition muss der Funktionskopf exakt übereinstimmen, selbst das const ist wichtig! (die Funktionen void fuettere(const Hund& h) und void fuettere(hund& h) sind unterschiedlich!!!!)

11 Konstruktoren sind manchmal unerwünschte Typumwandler Konstruktoren mit nur einem Argument (oder die für die restlichen Argumente Defaultwerte vereinbart haben) werden von C++ auch als Typumwandlungsfunktionen verwendet. Hund(const char* neuername, const char* neuesfutter = "Chappy") Dieser Konstruktor erfüllt genau diese Voraussetzungen (das Futter hat einen Defaultwert) und ist deshalb auch eine Typumwandlung von const char* nach Hund. Die Anweisung in z.b. main(): h1 = "Kunigunde"; würde funktionieren: Zunächst handelt es sich dabei um den Zuweisungsoperator der Klasse Hund, den C++ automatisch erstellt, wenn keiner definiert wurde und wenn einer verwendet wird. Dieser weist einer Instanz vom Typ Hund einen Ausdruck vom Typ Hund zu. Rechts vom = steht zwar kein Ausdruck vom Typ Hund sondern ein C-String. Durch obigen Konstruktor kann dieser jedoch in einen Hund umgewandelt und zugewiesen werden, was C++ auch macht. C++ führt hier also die Anweisung h1 = Hund"Kunigunde" aus. Ebenso würde fuettere("reinhard Stix"); in fuettere( Hund"Reinhard Stix" ); umgewandelt und ausgeführt werden. Ein solches Verhalten ist oft unerwünscht (ich bin definitiv kein Hund). Verhindern kann man das mit dem Schlüsselwort explicit bei der Konstruktordefinition: explicit Hund(const char* neuername, Obiger Konstruktor wird nicht mehr implicit eingesetzt: h1 = Hund"Kunigunde" // erlaubt, da expliziter Aufruf h1 = "Kunigunde"; // Fehler, rechts steht kein Hund Zum Hund eine Katz Wenn zu unseren Hunden noch eine Katze (etwa "Garfield", der "Lasagne" mag) hinzukommt, wird unser Programm kompliziert. Am einfachsten ist noch das Hauptprogramm:

12 int main() Hund h1"pongo", // "Pongo" mag "Chappy" h2"perdita", "Pedigree" // "Perdita" steht auf "Pedigree" Katze k"garfield", "Lasagna" // was sonst fuettere(h1); fuettere(h2); fuettere(k); return EXIT_SUCCESS; Damit das alles funktioniert, müssen wir 1) entweder die Klasse Katze analog zur Klasse Hund erstellen sowie die neue Funktion void fuettere(const Katze& g) schreiben, die bis auf die Typangaben absolut gleich aussieht. Überhaupt stellt man fest, dass der Code der beiden Klassen fast völlig übereinstimmt. 2) versuchen, möglichst wenig Code zu duplizieren. Dazu kreieren wir eine neue Superklasse Haustier, die den gemeinsamen Code enthält und konstruieren die Klassen Hund und Katze als Varianten davon: Variante 1: class Hund string name, futter; friend void fuettere(const Hund& h); Hund(const char* Name, const char* Futter = "Chappy") : namename, futterfutter class Katze string name, futter; friend void fuettere(const Katze& h); Katze(const char* Name, const char* Futter = "Chappy") : namename, futterfutter

13 void fuettere(const Hund& h) cout << h.name << " bekommt " << h.futter << '\n'; h.spricht(); // Als Dank bellt er dann void fuettere(const Katze& k) cout << k.name << " bekommt " << k.futter << '\n'; k.spricht(); // Als Dank miaut sie dann Variante 2: (funktioniert noch nicht ganz) Zunächst bestimmen wir die Gemeinsamkeiten von Hund und Katze und machen daraus das Haustier. Diese Teile entfernen wir aus unseren 2 alten Klassen und ersetzen das durch die Vererbung: class Hund : public Haustier etc. class Haustier string name, futter; friend void fuettere(const Haustier& h); Haustier(const char* Name, const char* Futter = "Chappy") : namename, futterfutter cout << "HT " << name << "betritt das Programm.\n"; ~Haustier() cout << "HT " << name << " verlaesst das Programm.\n"; void spricht() const cout << name << "???????!\n"; string getname() const return name; class Hund : public Haustier // Hund IST EIN Haustier: Vererbung explicit Hund(const char* Name, const char* Futter = "Chappy"): namename, futterfutter cout << "Hund " << name << "betritt das Programm.\n"; ~Hund() cout << "Hund " <<name<< " verlaesst das Programm.\n";

14 class Katze : public Haustier // Katze IST EIN Haustier: Vererbung explicit Katze(const char* Name, const char* Futter = "Kitekat") : HaustierName, Futter cout << "Katze " << name << "betritt das Programm.\n"; ~Katze() cout << "Katze "<<name<< " verlaesst das Programm.\n"; Dass Hund von Haustier abgeleitet ist, bedeutet dass Hund ein Haustier ist und alle dessen Teile erbt: name, futter, getname(). Insbesondere sind die Aufrufe fuettere(h1) und fuettere(k) korrekt, da Hunde (und Katzen) eben auch Haustiere sind. Trotzdem erhalten wir Fehlermeldungen: Hund::spricht()greift auf name zu, welches jetzt aber ein Attribut von Haustier ist. Abgeleitete Klassen dürfen nicht auf die privaten Dinge der Basisklasse zugreifen! (Wäre das schön, wenn Kinder nicht auf die privaten Dinge der Eltern zugreifen dürften ). Wir ändern daher diese Berechtigungen auf protected: class Haustier protected: // jetzt duerfen auch Hund und Katze darauf zugreifen string name, futter; friend void fuettere(const Haustier& h); Allerdings bellen und miauen unsere Tiere nicht, sondern zeigen nur Fragezeichen??????? an. Sollen Methoden in den abgeleiteten Klassen anders funktionieren als in der Basisklasse, muss man sie dort neu definieren. Wir fügen also unsere alten spricht()- Methoden wieder zu den Klassen Hund und Katze hinzu. Das funktioniert zwar in expliziten Aufrufen (z.b. in main(): h1.spricht(); ) Allerdings bellen und miauen unsere Tiere nicht nach dem Füttern und zeigen dort nur Fragezeichen???????. fuettere() ruft natürlich die Methode Haustier::spricht() und nicht etwa Hunde::spricht() oder Katze::spricht() auf, da das Argument ja eine Haustier-Referenz ist. Das ändern wir, indem wir in der Klassendefinition von Haustier diese Methode als virtual definieren.

15 Da das mit den virtuellen Methoden eine ziemlich schwierige Sache ist, empfiehlt C++11, in den abgeleiteten Klassen diese Methoden mit override zu kennzeichnen. Dann überprüft C++ auch, ob diese tatsächlich die virtuelle Basismethode überlagern. Technische Erläuterung: Virtuelle Methoden werden nicht direkt aufgerufen sondern durch einen Aufruf über eine Sprungtabelle. Diese Sprungtabelle wird nur erzeugt, wenn virtuelle Funktionen in der Basisklasse vorhanden sind und sie enthält auch nur diese virtuellen Funktionen. In unserem Beispiel ist es nur die Funktion spricht(), die virtuell ist. Wird ein Haustier-Objekt erzeugt, zeigt der Eintrag in der Sprungtabelle auf Haustier::spricht(), bei einem Hund aber auf Hund::spricht(),bei einer Katze auf Katze::spricht(). So wird selbst bei einer Referenz auf die Basisklasse die Methode der abgeleiteten Klasse aufgerufen. Klassenhierarchien mit virtuellen Methoden (und auch andere Klassenhierarchien ebenso) sollten immer auch den Destruktor der Basisklasse virtuell machen. Man kann dieses Problem so demonstrieren: Haustier* h = new Hund"Waldi" delete(h); Dadurch würde h zu einem Pointer auf ein Haustier werden, der aber eigentlich auf einen frisch erzeugten Hund zeigt. Der Aufruf delete(h) verwendet den Typ von h und würde daher den Destruktor von Haustier ( h->~haustier()) aufrufen und nicht den eigentlich richtigen Destruktor von Hund ( h->~hund()). Diesen Fehler vermeidet man durch die Definition eines virtuellen Destruktors. Der Aufwand ist nur dann nötig, wenn der Destruktor der abgeleiteten Klasse wirklich etwas anderes machen muss als jener der Basisklasse. Ich will hier noch daran erinnern, dass der Destruktor von Hund auch jenen der Basisklasse Haustier aufruft, d.h. es werden jetzt beide Destruktoren nacheinander abgearbeitet. Abstrakte Klassen Wollen wir zudem verhindern, dass Objekte vom Typ Haustier erzeugt werden können, können wir die Basisklasse zu einer "abstrakten Klasse" machen. Diese lässt sich nicht instanzieren. Das erreicht man, indem man eine Methode der Basisklasse als "= 0", definiert, hier am besten die eh nicht benötigte virtuelle Methode Haustier::spricht(). Die endgültigen Klassen Haustier und Hund: class Haustier protected: // jetzt duerfen auch Hund und Katze zugreifen string name, futter; friend void fuettere(const Haustier& h);

16 Haustier(const char* Name, const char* Futter = "Chappy") : namename, futterfutter cout << "HT " << name << "betritt das Programm.\n"; virtual ~Haustier() cout << "HT " << name << " verlaesst das Programm.\n"; virtual void spricht() const = 0; // dadurch abstrakte Klasse string getname() const return name; class Hund : public Haustier // Hund IST EIN Haustier: Vererbung explicit Hund(const char* Name, const char* Futter = "Chappy") : namename, futterfutter cout << "Hund " << name << "betritt das Programm.\n"; ~Hund() cout << "Hund " <<name<< " verlaesst das Programm.\n"; void spricht() const override cout << name << " bellt wauwau!\n"; // Katze analog

Java Einführung Methoden in Klassen

Java Einführung Methoden in Klassen Java Einführung Methoden in Klassen Lehrziel der Einheit Methoden Signatur (=Deklaration) einer Methode Zugriff/Sichtbarkeit Rückgabewerte Parameter Aufruf von Methoden (Nachrichten) Information Hiding

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22

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

Mehr

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

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

Mehr

3 Objektorientierte Konzepte in Java

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

Mehr

GetName(), GetName(), GetGeschlecht() und AelterWerden().

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

Mehr

Vererbung & Schnittstellen in C#

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

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Konstruktor, Statische Methoden Packages Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Initialisierung von Datenstrukturen

Mehr

Angewandte Mathematik und Programmierung

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

Mehr

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only Methoden Wie Konstruktoren und Destruktoren zum Auf- und Abbau von Objekten definiert werden, Wie inline-methoden Methoden,, Zugriffsmethoden und Read-Only Only- Methoden einzusetzen sind, Der this-pointer

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 02: Klassen & Objekte Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Klassen Grundstruktur einer Java-Klasse Eigenschaften (Attribute) Variablen

Mehr

Klassenbeziehungen & Vererbung

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

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

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,

Mehr

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 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

Mehr

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ Objektorientierte Programmierung Objektorientierte Programmierung Eine Einführung mit BlueJ stellt die Daten, ihre Struktur und ihre Beziehungen zueinander in den Vordergrund. Weniger im Blickpunkt: die

Mehr

10. Klassen. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

10. Klassen. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04) 10. Klassen Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Objektorientierte Programmierung!Das Konzept der Klassen!Members!Objekte!Konstruktoren und Destruktoren!this-Pointer!Public und Private

Mehr

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung PIWIN I Kap. 7 Objektorientierte Programmierung - Einführung 28 Testklasse public class TestGirokonto { public static void main(string[] args) { // erzeuge neues Konto Girokonto einkonto = new Girokonto();

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java Bisherige Beobachtungen zu Objekten: werden in Klassen zusammengefasst besitzen Eigenschaften und Verhalten verbergen private Informationen werden geboren, leben und

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

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

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

Programmieren in Java

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

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

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

Mehr

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003 Test zu Grundlagen der Programmierung Leitung: Michael Hahsler 1. November 00 Name Martrikelnummer Unterschrift Bitte kreuzen Sie das Studium an, für das Sie diese Prüfung ablegen: O Bakkalaureat Wirtschaftsinformatik

Mehr

Objektorientierte Programmierung

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

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

Mehr

Einführung in die. objektorientierte Programmierung

Einführung in die. objektorientierte Programmierung Einführung in die objektorientierte Programmierung Teil 3 Vererbung Modul WI111: Objektorientierte Programmierung Fachrichtung Wirtschaftsinformatik Prof. Dr. Gert Faustmann Fachbereich Berufsakademie

Mehr

5.5.8 Öffentliche und private Eigenschaften

5.5.8 Öffentliche und private Eigenschaften 5.5.8 Öffentliche und private Eigenschaften Schnittstellen vs. Implementierungen: Schnittstelle einer Klasse beschreibt, was eine Klasse leistet und wie sie benutzt werden kann, ohne dass ihre Implementierung

Mehr

Objekt-Orientierte Programmierung

Objekt-Orientierte Programmierung Objekt-Orientierte Programmierung Ein OO-Programm modelliert eine Anwendung als eine Welt von Objekten, die miteinander in Beziehung stehen ( später). Ein Objekt kann andere Objekte erzeugen. Ein Objekt

Mehr

Objektorientierte Programmierung

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

Mehr

Software Engineering Klassendiagramme Einführung

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

Mehr

5.4 Klassen und Objekte

5.4 Klassen und Objekte 5.4 Klassen und Objekte Zusammenfassung: Projekt Figuren und Zeichner Figuren stellt Basisklassen für geometrische Figuren zur Verfügung Zeichner bietet eine übergeordnete Klasse Zeichner, welche die Dienstleistungen

Mehr

4 Vererbung, Polymorphie

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

Mehr

2. Semester, 2. Prüfung, Lösung

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

Mehr

1 Polymorphie (Vielgestaltigkeit)

1 Polymorphie (Vielgestaltigkeit) 1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

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.

Mehr

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

C++ - Operatoren. Eigene Klassen mit neuen Funktionen C++ - Operatoren Eigene Klassen mit neuen Funktionen Übersicht Klassen bisher Eigene Operatoren definieren 2 Bisher Durch Kapselung, Vererbung und Polymorphy können nun eigene Klassen definiert werden,

Mehr

Grundlagen von Python

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

Mehr

Vorkurs C++ Programmierung

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:

Mehr

Objektorientierte Programmierung. Kapitel 16: Pakete, Zugriffsschutz

Objektorientierte Programmierung. Kapitel 16: Pakete, Zugriffsschutz Stefan Brass: OOP (Java), 16. Pakete, Zugriffsschutz 1/30 Objektorientierte Programmierung Kapitel 16: Pakete, Zugriffsschutz Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2013/14

Mehr

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure 7. Objektorientierte Softwareentwicklung/3 Informatik II für Verkehrsingenieure Überblick FOLGENDE BEGRIFFE/PRINZIPIEN SOLLTEN BEKANNT SEIN Objekte Klasse Attribute Fähigkeiten ZIEL DER HEUTIGEN LEHRVERANSTALTUNG

Mehr

Java für Computerlinguisten

Java für Computerlinguisten Java für Computerlinguisten 2. Objektorientierte Programmierung Christian Scheible Institut für Maschinelle Sprachverarbeitung 28. Juli 2009 Christian Scheible Java für Computerlinguisten 28. Juli 2009

Mehr

Folge 18 - Vererbung

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,

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

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/

Mehr

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12 EINI WiMa/LW Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 11/12 Fakultät für Informatik Technische Universität Dortmund lars.hildebrand@udo.edu http://ls1-www.cs.uni-dortmund.de

Mehr

Objektorientierte Programmierung mit C++ Vector und List

Objektorientierte Programmierung mit C++ Vector und List Vector und List Ziel, Inhalt Wir lernen die Klassen vector und list aus der Standard-C++ Library kennen und anwenden. In einer Übung wenden wir diese Klassen an um einen Medienshop (CD s und Bücher) zu

Mehr

3. Konzepte der objektorientierten Programmierung

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

Mehr

10 Objektorientierte Programmierung, Teil 1

10 Objektorientierte Programmierung, Teil 1 10 Objektorientierte Programmierung, Teil 1 Wir lernen nun eine andere Technik (vor allem: eine andere Sichtweise) kennen, um unsere Programm zu organisieren, nämlich mittels Klassen und Objekten 184 Objekte,

Mehr

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

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

Mehr

Objektorientierung: Klassen und Objekte

Objektorientierung: Klassen und Objekte Vorlesung und Übung Universität Paderborn Wintersemester 2015/2016 Dr. Peter Pfahler Objektorientierung: Klassen und Objekte EWS, WS 2015/16, Pfahler L-1 Objektorientierung behandelt in "Einführung in

Mehr

C vs. C++ Sebastian Meyer. Proseminar C - Grundlagen und Konzepte. Universität Hamburg

C vs. C++ Sebastian Meyer. Proseminar C - Grundlagen und Konzepte. Universität Hamburg C vs. C++ Sebastian Meyer Universität Hamburg Proseminar C - Grundlagen und Konzepte 2013 1 / 31 Gliederung 1 Einführung 2 Vergleich der Spracheigenschaften 3 Neue Sprachelemente in C++ 4 Fazit 5 Zusammenfassung

Mehr

Tutorium Java Ein Überblick. Helge Janicke

Tutorium Java Ein Überblick. Helge Janicke Tutorium Java Ein Überblick Helge Janicke 26. Oktober 2000 1 VORRAUSSETZUNGEN ZUM PROGRAMMIEREN MIT JAVA. 1 1 Vorraussetzungen zum Programmieren mit Java. Was braucht man, wenn man mit Java programmieren

Mehr

Alltagsnotizen eines Softwareentwicklers

Alltagsnotizen eines Softwareentwicklers Alltagsnotizen eines Softwareentwicklers Entkoppeln von Objekten durch Callbacks mit c++-interfaces oder boost.function und boost.bind Tags: c++, entkoppeln, objekt, oop, callback, boost.bind, boost.function,

Mehr

Der C++ Crashkurs v1.0

Der C++ Crashkurs v1.0 Der C++ Crashkurs v1.0 Daniel Stöckel, M. Sc. October 14, 2013 1 Grundlegendes 1.1 Das erste Programm Wir beginnen mit einem einfachen Hello world Programm. Listing 1: hello world.cpp // Einbinden der

Mehr

Teil 9: Vererbung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

Teil 9: Vererbung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Teil 9: Vererbung Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Inhaltsverzeichnis 9 Vererbung... 3 9.1 Motivation... 3 9.2 Deklaration und Zugriffsrechte...

Mehr

Objektorientierung: Klassen und Objekte

Objektorientierung: Klassen und Objekte Objektorientierung: Klassen und Objekte Klasse: Beschreibung für eine Menge von Objekten Schablone, Bauplan abstrakte Form Objekt: Instanz einer Klasse konkreter Inhalt (Werte) Klassen bestehen aus Attributen

Mehr

OOP mit C# 1.0 und 1.1

OOP mit C# 1.0 und 1.1 Jürgen Bayer OOP mit C# 1.0 und 1.1 Von einfachen Klassen zum Polymorphismus Inhaltsverzeichnis 1 Klassen und Strukturen 1 2 Die Strukturierung einer Anwendung 3 3 Einfache Klassen und deren Anwendung

Mehr

13. Vererbung. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012)

13. Vererbung. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012) 13. Vererbung Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012) Vererbung Konzept Protected Section Virtuelle Mitgliedsfunktionen Verwendung von Vererbung Vererbung Vererbung ist ein Mechanismus,

Mehr

Von der UML nach C++

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

Mehr

Eine Einführung in C-Funktionen

Eine Einführung in C-Funktionen Eine Einführung in C-Funktionen CGK-Proseminar 2014 Philip Gawehn 04.07.2014, Hamburg Inhaltsverzeichnis 1 Einleitung 2 2 Grundlagen 2 2.1 Der Aufbau einer Funktion....................... 2 2.2 Schlüsselwörter.............................

Mehr

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung

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:

Mehr

C#-Workshop, Teil 2: C#-Objekte im Praxiseinsatz

C#-Workshop, Teil 2: C#-Objekte im Praxiseinsatz ITMAGAZINE C#-Workshop, Teil 2: C#-Objekte im Praxiseinsatz 15. Juni 2001 - Der zweite Teil des C#-Workshops beschäftigt sich mit der Erstellung und Behandlung von Objekten und zeigt, wie die Leistungsfähigkeit

Mehr

Kapitel 10: Subklassen / Vererbung

Kapitel 10: Subklassen / Vererbung 10. Subklassen/Vererbung 10-1 Objektorientierte Programmierung (Winter 2006/2007) Kapitel 10: Subklassen / Vererbung Deklaration von Subklassen Vererbung von Daten und Funktionen Überschreiben/Redefinition,

Mehr

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

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:

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

Klassen in Java. Klassen

Klassen in Java. Klassen Klassen in Java Klassen Klassen beschreiben Objekte, die abstakte oder konkrete Sachverhalte modellieren. Objekte sind durch einen Status gekennzeichnet (State). Der Status eines Objektes ergibt sich aus

Mehr

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler Inhaltsverzeichnis Grundbegriffe der C-Programmierung 1. Grundsätzliches... 2 1.1 Darstellung von Werten... 2 1.1.1 Dezimale Zahlendarstellung... 2 1.1.2 Binäre Zahlendarstellung... 3 1.1.3 Hexadezimale

Mehr

Es gibt zwei verschiedene Arten, wie Programme auf dem Rechner ausgeführt werden:

Es gibt zwei verschiedene Arten, wie Programme auf dem Rechner ausgeführt werden: 3 Grundlagen 3.1 Starten eines C++ Programms Es gibt zwei verschiedene Arten, wie Programme auf dem Rechner ausgeführt werden: 1. Programme, die vom Interpreter der Programmiersprache Zeile für Zeile interpretiert

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

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

Mehr

Meeting C++ C++11 R-Value Referenzen

Meeting C++ C++11 R-Value Referenzen Meeting C++ Detlef Wilkening http://www.wilkening-online.de 09.11.2012 Inhalt Motivation L-Values und R-Values R-Value Referenzen Move Semantik std::move Funktionen mit R-Value-Referenz Parametern Fazit

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 04 Referenzen, Overloading, Klassen(hierarchien) Clemens Lang T2 18. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/13 Organisatorisches Nächster Übungstermin

Mehr

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden VIII: Vererbung Unterklassen einer Klasse Vererbung von Methoden und Instanzvariablen Überschreiben von Methoden Vererbung als Realisierung einer is-a Beziehung. Informatik I VIII: Vererbung 259 Beispiel:

Mehr

13. Tutorium zu Programmieren

13. Tutorium zu Programmieren 13. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2009 by IPD Snelting

Mehr

Teil 6: Klassenkonzept. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

Teil 6: Klassenkonzept. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Teil 6: Klassenkonzept Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Inhaltsverzeichnis 6 Klassenkonzept...3 6.1 Was ist eine Klasse?... 3 6.2

Mehr

Programmieren - Vererbung & Polymorphie

Programmieren - Vererbung & Polymorphie Programmieren - Vererbung & Polymorphie Reiner Nitsch r.nitsch@fbi.h-da.de Vererbung - Was ist das? Vererbung ist ein wichtiges Konzept zur Unterstützung der Wiederverwendbarkeit, wenn auch nicht das Wichtigste.

Mehr

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04) 12. Vererbung Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Vererbung Konzept!Protected Section!Virtuelle Mitgliedsfunktionen!Verwendung von Vererbung Copyright: M. Gross, ETHZ, 2003 2 Vererbung!

Mehr

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung. Vererbung Unterklassen einer Klasse Vererbung von Methoden und Instanzvariablen Überschreiben von Methoden Vererbung als Realisierung einer is-a Beziehung. Informatik II: Objektorientierte SW-Entwicklung,

Mehr

Zusammengesetzte Datentypen -- Arrays und Strukturen

Zusammengesetzte Datentypen -- Arrays und Strukturen Zusammengesetzte Datentypen -- und Strukturen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14

Mehr

Kapitel 6. Vererbung

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

Mehr

C/C++-Programmierung

C/C++-Programmierung 1 C/C++-Programmierung new/delete, virtual, Typumwandlungen Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 new/delete

Mehr

Abschnitt 9: Schnittstellen: Interfaces

Abschnitt 9: Schnittstellen: Interfaces Abschnitt 9: Schnittstellen: Interfaces 9. Schnittstellen: Interfaces 9.1 Die Idee der Schnittstellen 9.2 Schnittstellen in Java 9.3 Marker-Interfaces 9.4 Interfaces und Hilfsklassen 9.5 Zusammenfassung

Mehr

5. Abstrakte Klassen

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,

Mehr

11. Klassen. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012)

11. Klassen. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012) 11. Klassen Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012) Objektorientierte Programmierung Das Konzept der Klassen Members Objekte Konstruktoren und Destruktoren this-pointer Public und

Mehr

Javakurs 2013 Objektorientierung

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

Mehr

In der Computersprache C ist die Standardmethode zur Behandlung von Matrizen durch

In der Computersprache C ist die Standardmethode zur Behandlung von Matrizen durch Kapitel Matrizen in C++ In der Computersprache C ist die Standardmethode zur Behandlung von Matrizen durch 1 const int n=10; 3 double a[n][n]; gegeben. Allerdings gibt es bei dieser Methode eine Reihe

Mehr

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Übung 1 mit C# 6.0 MATTHIAS RONCORONI Übung 1 mit C# 6.0 MATTHIAS RONCORONI Inhalt 2 1. Überblick über C# 2. Lösung der Übung 1 3. Code 4. Demo C# allgemein 3 aktuell: C# 6.0 mit.net-framework 4.6: Multiparadigmatisch (Strukturiert, Objektorientiert,

Mehr

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

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:

Mehr

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

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

Mehr

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging. Algorithmische Kernsprache Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging. Ausdrücke Anweisungen Ausdrücke bezeichnen einen Wert Kontext stellt Werte von Variablen Werte

Mehr

Liebe Leserin, lieber Leser, in der ersten Auflage von Programmieren lernen mit Java von Hans- Peter Habelitz sind einige Fehler zu korrigieren.

Liebe Leserin, lieber Leser, in der ersten Auflage von Programmieren lernen mit Java von Hans- Peter Habelitz sind einige Fehler zu korrigieren. Liebe Leserin, lieber Leser, in der ersten Auflage von Programmieren lernen mit Java von Hans- Peter Habelitz sind einige Fehler zu korrigieren. Niemand bedauert diese Fehler mehr als der Autor selbst.

Mehr

2.2 Prozesse in Java

2.2 Prozesse in Java 2.2 Prozesse in Java! Java sieht kein Schlüsselwort für Prozesse vor, sondern bestimmte Klassen und Schnittstellen. Mit anderen Worten: der Prozessbegriff wird mit Mitteln der Objektorientierung eingeführt.

Mehr

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek Proseminar C-Programmierung Strukturen Von Marcel Lebek Index 1. Was sind Strukturen?...3 2. Padding 5 3. Vor- und Nachteile von Padding..8 4. Padding gering halten 9 5. Anwendungsgebiete von Strukturen.11

Mehr

Tutorium Rechnerorganisation

Tutorium Rechnerorganisation Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Mehr

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl PROGRAMMIEREN MIT C Allgemeine hinweise Alles was hier beschrieben wird, soll auch ausprobiert werden. Warum C? Weil die coolen Dinge mit C am einfachsten gehen. Das werden wir in den folgenden Übungen

Mehr

C++-Zusammenfassung. H. Schaudt. August 18, 2005

C++-Zusammenfassung. H. Schaudt. August 18, 2005 C++-Zusammenfassung H. Schaudt August 18, 2005 1 Datentypen 1.1 Grunddatentypen int (-32xxx bis +32xxx, implementerungs-abhängig) char -128 bis +128 float double bool (C++) int und char sind austauschbar:

Mehr

Innere Klassen in Java

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

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

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

Mehr

C# im Vergleich zu Java

C# im Vergleich zu Java C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung

Mehr

MotorBoot. - leistung: int - geschwindigkeit: int - ankeranzahl: int - satellitennavigation: boolean - radar: boolean

MotorBoot. - leistung: int - geschwindigkeit: int - ankeranzahl: int - satellitennavigation: boolean - radar: boolean Inhalt 9 Klassen... 9-2 9.1 Instanzvariablen und Instanzmethoden... 9-2 9.1.1 Vereinbarung... 9-2 9.1.2 this - Selbstreferenz... 9-5 9.1.3 tostring()... 9-5 9.2 Klassenvariablen und Klassenmethoden...

Mehr

1. Von der Idee zur Software 2. Funktionen und Datenstrukturen Lehrbuch: 4.3 3. Organisation des Quellcodes 4. Werte- und Referenzsemantik

1. Von der Idee zur Software 2. Funktionen und Datenstrukturen Lehrbuch: 4.3 3. Organisation des Quellcodes 4. Werte- und Referenzsemantik 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

Mehr