Objekte wie Hund und Katz
|
|
- Maya Linden
- vor 6 Jahren
- Abrufe
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 Lehrziel der Einheit Methoden Signatur (=Deklaration) einer Methode Zugriff/Sichtbarkeit Rückgabewerte Parameter Aufruf von Methoden (Nachrichten) Information Hiding
MehrWintersemester 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
MehrC++ - 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
Mehr3 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
MehrGetName(), 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
MehrVererbung & 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
MehrProgrammierkurs 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
MehrAngewandte 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
MehrMethoden. 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
MehrJavakurs 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
MehrKlassenbeziehungen & Vererbung
Klassenbeziehungen & Vererbung VL Objektorientierte Programmierung Raimund Kirner teilweise nach Folien von Franz Puntigam, TU Wien Überblick Arten von Klassenbeziehungen Untertypen versus Vererbung in
MehrEine 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,
MehrObjektorientierte 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
MehrObjektorientierte 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
Mehr10. 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
Mehreinkonto.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();
MehrProbeklausur: 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,
Mehr3 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
MehrJava 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 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
MehrProgrammieren 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
MehrII. 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
MehrTest 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
MehrObjektorientierte 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
MehrJava 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
MehrEinfü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
Mehr5.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
MehrObjekt-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
MehrObjektorientierte 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
MehrSoftware 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
Mehr5.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
Mehr4 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
Mehr2. 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
Mehr1 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
MehrDeklarationen 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.
MehrC++ - 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,
MehrGrundlagen 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
MehrVorkurs 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:
MehrObjektorientierte 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
Mehr7. 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
MehrJava 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
MehrFolge 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,
MehrObjektorientierte 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/
MehrEINI 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
MehrObjektorientierte 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
Mehr3. 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
Mehr10 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,
MehrProgrammieren 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
MehrObjektorientierung: 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
MehrC 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
MehrTutorium 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
MehrAlltagsnotizen 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,
MehrDer 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
MehrTeil 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...
MehrObjektorientierung: 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
MehrOOP 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
Mehr13. 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,
MehrVon 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
MehrEine 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.............................
Mehr1. 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:
MehrC#-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
MehrKapitel 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,
Mehr5. 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:
MehrComputeranwendung 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
MehrKlassen 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
MehrInhaltsverzeichnis. 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
MehrEs 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
MehrJava: 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
MehrMeeting 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
MehrAlgorithmen 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
MehrVIII: 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:
Mehr13. 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
MehrTeil 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
MehrProgrammieren - 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.
Mehr12. 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!
MehrVererbung. 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,
MehrZusammengesetzte 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
MehrKapitel 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
MehrC/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
MehrAbschnitt 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
Mehr5. 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,
Mehr11. 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
MehrJavakurs 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
MehrIn 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 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,
MehrVerhindert, 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:
MehrDrei-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
MehrAlgorithmische 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
MehrLiebe 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.
Mehr2.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.
MehrProseminar 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
MehrTutorium 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
MehrPROGRAMMIEREN 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
MehrC++-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:
MehrInnere 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
MehrJava 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
MehrC# 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
MehrMotorBoot. - 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...
Mehr1. 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