Objektorientierte Programmierung (mit Java) Praktikum

Größe: px
Ab Seite anzeigen:

Download "Objektorientierte Programmierung (mit Java) Praktikum"

Transkript

1 Objektorientierte Programmierung (mit Java) Praktikum Klassen und Vererbung 1

2 Inhalt (1) Wiederholung (2) Beziehungen zwischen Klassen (1) Assoziation (2) Aggregation (3) Komposition (4) Vererbung (3) Klassen (4) Vererbung (5) Die Klase Object (6) Besondere Formen von Klassen, Methoden und Variablens 2

3 Klassen allgemein Funktionen heißen innerhalb von Klassen Methoden. Variablen werden als Eigenschaften oder Instanzvariablen bezeichnet. Die folgende Abbildung zeigt die grafische Darstellung einer Klasse in der der UML-Notation name alter BAWPerson geburtstag() heiraten(bawperson,date) 3

4 Beziehungen zwischen Klassen Zwischen Klassen können unterschiedliche Beziehungen bestehen. Objekte der einen Klasse haben dabei eine Beziehung zu Objekten einer anderen Klasse oder der gleichen Klasse. Unterscheidung der folgenden Beziehungsarten: Benutzungsbeziehungen (user relation): Ein Objekt benutzt ein anderes Objekt. hat-ein-beziehung (has-a-relation): In diesem Fall besitzt ein Objekt eine Referenz auf ein anderes Objekt. Es ist somit eine besondere Benutzungsbeziehung. Teil-von-Beziehung (part-of-relation): In diesem Fall bezeichnet man das referenzierte Objekt als (physikalischen) Teil des referenzierenden Objekts (Beispiel: Motor eines Autos). Dies ist eine besondere Form der hat-ein-beziehung. Erreichbarkeitsbeziehung: Ein Objekt erreicht ein anderes Objekt, wenn man durch wiederholtes Selektieren eines Attributs von X nach Y kommt (Auto.rad1.felge) Ist-ein-Beziehung (is-a-relation): Jedes Objekt einer speziellen Klasse ist auch ein Objekt aller seiner allgemeinen Klassen, z. B. ist ein Holzblasinstrument ein Blasinstrument oder eine Quadrat ist auch eine Raute. 4

5 Beziehungen zwischen Klassen Assoziation Aggregation Komposition Vererbung horizontale Beziehungen hierarchische Beziehungen 5

6 Assoziation Instanzen einer Klasse können Verbindungen zu anderen Instanzen der gleichen oder andere Klassen eingehen. Diese Beziehungen werden Assoziationen genannt. Am Beispiel im Bestellwesen soll dies verdeutlicht werden: Einzelposten Produkt menge istgeliefert preis() bezeichnung einkaufspreis verkaufspreis Assoziationen werden in der UML durch eine Verbindungslinie zwischen den beteiligten Klassen angezeigt. 6

7 Multiplizität von Assoziationen (1/2) Ein Assoziationsende besitzt in der Regel eine Multiplizität, welche eine untere und eine obere Grenze für die Anzahl der jeweils verbundenen Instanzen angibt genau eine verbundene Instanz 0..* beliebig viele verbundene Instanzen (0..n) 0..1 ein oder keine verbundene Instanz 1..* unbegrenzt viele verbundene Instanzen, aber mindestens eine (1..n) 3 genau drei verbundene Instanzen 7

8 Multiplizität von Assoziationen (2/2) Einzelposten menge istgeliefert preis() produkt 0..* 1..1 Produkt bezeichnung einkaufspreis verkaufspreis 8

9 Hinweise zur Multiplizität Interpretation: Zu jedem Einzelposten einer Bestellung gehört genau Produkt Zu jedem Produkt kann es beliebig viele Einzelposten geben (also auch keine). Abkürzungen: * * Assoziationen können Namen besitzen. 9

10 Navigierbare Assoziationen Stehen zwei Klassen miteinander in Beziehung, dann müssen die Instanzen nicht unbedingt Kenntnis von der jeweils anderen Instanz haben. In diesem Fall spricht man von navigierbaren (unidirektionalen) Assoziationen. Haben beide Seiten Kenntnis voneinander, spricht man von bidirektionalen Assoziationen. 10

11 Beispiel für f r navigierbare Assoziationen Einzelposten menge istgeliefert preis() produkt 0..* 1..1 Produkt bezeichnung einkaufspreis verkaufspreis Interpretation Der Einzelposten einer Bestellung kennt zwar sein Produkt. Ein Produkt kennt in der Regel in der Beziehung der Bestellung seine Einzelposten nicht. Hinweis: Für Assoziationen müssen bei der Implementierung der Klassen Instanzvariablen angelegt werden, die häufig in der Modellierung nicht angegeben werden. 11

12 Aggregation Bei Aggregationen handelt es sich Assoziationen mit speziellen Eigenschaften: Es besteht dabei ein Teil-Ganzes-Verhältnis zwischen den verbundenen Instanzen. Die Ganz-Instanz hat dabei eine Verantwortung für die Teil- Instanz: z.b. beim Löschen des Ganz-Instanz müssen u. U. auch die Teilinstanzen gelöscht werden. 12

13 Beispiel für f Aggregationen Bestellung eingangsdatum rechnungsdatum nummer bestellwert erledigen() abschliessen() 1 * 1 bestellungen Kunde name adresse bonität() bestellposten 1..* Einzelposten menge istgeliefert preis() * 1 produkt Produkt bezeichnung einkaufspreis verkaufspreis 13

14 Komposition Kompositionen sind Aggregationen mit bestimmten Einschränkungen: Teilobjekte einer Komposition dürfen nur von Operationen der Ganzes-Klasse entfernt oder in ihrer Identität verändert (d.h. ausgetauscht) werden. Teilobjekte dürfen nicht Teil anderer Kompositionen sein. Teilobjekte einer Komposition werden beim Zerstören des Ganzen automatisch (kaskadierend) zerstört. 14

15 Darstellung von Kompositionen Hand 1 5 Finger 15

16 Vererbung - Definition Allgemeine Definition: Eine Übertragung bestimmter Eigenschaften von vorhandenen auf neue Klassen wird in Anlehnung an die Vererbungslehre der Biologie als Vererbung bezeichnet. Übertragung auf die Objektorientierung: Unter Vererbung wird die Fähigkeit einer Klasse verstanden, Eigenschaften und Methoden automatisch von einer Klasse zu übernehmen. 16

17 Bezeichnungen Die vererbende Klasse wird Basisklasse oder Oberklasse oder Superklasse genannt. Die erbende Klasse wird als abgeleitete Klasse oder Unterklasse oder Subklasse bezeichnet. 17

18 UML-Darstellung der Vererbung name BAWPerson setname() getname() kredit BAWSparer getkredit() setkredit() 18

19 Beispielaufgabe Stellen Sie diese Klassen in einer Vererbungshierarchie dar. Fortbewegungsmittel Fahrrad Fahrzeug Motorboot PKW Farbe Baujahr Farbe ändern fahren Farbe Baujahr Typ Farbe ändern Typ ändern fahren Farbe Baujahr Leistung Farbe ändern fahren Farbe Baujahr Leistung Länge Farbe ändern fahren Länge anzeigen Farbe Baujahr Leistung Sitzplätze Farbe ändern fahren Sitzplätze angeben 19

20 Lösung der Beispielaufgabe Oberklasse Fortbewegungsmittel Farbe Baujahr Farbe ändern fahren Oberklasse Unterklasse Leistung Fahrzeug Typ Fahrrad Typ ändern Unterklasse Sitzplätze PKW Sitzplätze angeben Länge Motorboot Länge anzeigen 20

21 Generalisierung und Spezialisierung Spezialisierung (Top down): Klassen einer höheren Abstraktionsebene werden in konkreteren Klassen verfeinert/ spezialisiert. Spezielle neue Eigenschaften werden einer Subklasse hinzugefügt. Dies können neue Eigenschaften, neue Methoden oder weiter verfeinerte Methoden sein. Generalisierung (Bottom Up): Gemeinsamkeiten existierender Klassen werden in einer Basisklasse zusammengefasst/ abstrahiert. Die Unterschiede in dieser Klasse werden unterdrückt. Beispiele für eine Generalisierung: Studenten, Angestellte, Lehrer sind allesamt Personen. Sie besitzen jeweils einen Namen, eine Anschrift, ein Geschlecht, etc. Sie unterscheiden sich aber in ihren speziellen Klassen Beispiel für Spezialisierungen: Rauten und Parallelogramme sind spezielle Vierecke. Ein Quadrat ist ein spezielles Rechteck. 21

22 Vorteile der Vererbung Vererbung ist eine Schlüsseltechnik für die Wiederverwendung von Programmbausteinen. Die Methoden und Attribute von Oberklassen können in abgeleiteten Unterklassen genutzt werden, ohne dass sie neu definiert werden müssen. In Unterklassen können Erweiterungen hinzugefügt werden. In Unterklassen können Verfeinerungen vorgenommen werden. Die Funktionalität einer Oberklasse kann von der Unterklasse überschrieben werden. 22

23 Definition einer Klasse in Java name alter BAWPerson geburtstag() heiraten(bawperson,date) public class BAWPerson { String name; int alter; void geburtstag() { alter ++;}; void heiraten (BAWPerson ehepartner, Date datum) {... }; } 23

24 Hinweise zum Umgang mit Klassen Attribute können von beliebigen Typen oder Klassen sein. Innerhalb einer eigenen Klasse kann man auf Instanzvariablen mit Hilfe des Schlüsselworts this auf das eigene Objekt zugreifen. public class BAWZahl { int zahl; public setzahl(int zahl) { this.zahl = zahl; } } 24

25 Parameterlisten mit Datentypen (1/2) Methoden können Parameterlisten mitgegeben werden. Parameter (also auch mit primitiven Datentypen) werden in JAVA per call by value übergeben. Beim Aufruf einer Methode wird also der aktuelle Wert in die Parametervariable kopiert und an die Methode übergeben. Veränderungen der Parametervariablen innerhalb der Methode bleiben lokal und wirken sich nicht auf den Aufrufer aus. 25

26 Beispiel für f r die Parameterübergabe 1 public void print(int wieoft) 2 { 3 while (wieoft-- > 0) { 4 System.out.print(wieoft)); 5 } 6 System.out.println() 7 } 8 9 void aufrufen() { 10 int a = 3; 11 this.print (a); 12 this.print (a); 13 this.print (a); 14 } 26

27 Ausgabe des Beispiels

28 Parameterübergaben mit Objekten Anders verhalten sich übergebene Objekte. Dies werden nicht kopiert, sondern vielmehr die Referenz auf das Objekt wird kopiert. Änderungen an den Objekten werden auch in der aufgerufenen Methode wirksam 28

29 Beispiel für f r die Parameterübergabe mit Objekten 1 public class BAWZaehler { 2 int zahl; 3 public BAWZaehler() { zahl = 3; } 4 static public void dec(bawzaehler obj) {obj.zahl--;} 5 static public void main(string[] args) { 6 BAWZaehler zaehler = new BAWZaehler(); 7 System.out.println(zaehler.zahl); // 3 8 BAWZaehler.dec(zaehler); 9 System.out.println(zaehler.zahl); // 2 10 BAWZaehler.dec(zaehler); 11 System.out.println(zaehler.zahl); // 1 12 } 13 } 29

30 Instanzen von Klassen (1/2) Klassen verhalten sich ähnlich wie Typen, d.h. durch die Definition wird grundsätzlich noch kein Speicherplatz reserviert. Es existieren noch keine Instanzen dieser Klasse. Bei Typen wird erst durch Anlegen von Variablen Speicherplatz reserviert. Entsprechend wird bei Klassen erst durch Anlage von Instanzen Speicher reserviert. 30

31 Instanzen von Klassen (2/2) In Java kann man sehr leicht Variablen zu Klassen anlegen: BAWKlasse variable; Durch das Anlegen einer Variablen wurde aber immer noch kein Objekt dieser Klasse erzeugt. Die Erzeugung einer Instanz erfolgt JAVA durch den Befehl new und der Angabe eines Konstruktors: meinobjekt = new BAWKlasse(); Der Zugriff auf die Eigenschaften und Methoden kann auf eine Instanz durchgeführt werden. Dies erfolgt über den Operator. wie folgt: meinobjekt.name = Hans // Zugriff auf eine // Instanzvariable 31

32 Zugriffsattribute (1/3) Was sind Zugriffsattribute? Zugriffsattribute steuern den Zugriff auf die Eigenschaften und Methoden einer Klasse. JAVA kennt drei Schutzebenen oder Zugriffsattribute: public öffentlich Alle Instanzen können auf diese Eigenschaften und Methoden zugreifen. Sie sind von außerhalb der Klasse aufrufbar und stellen somit die Schnittstelle der Klasse nach außen dar. private privat Auf diese Teile können nur Methoden, die innerhalb der Klasse liegen, zugreifen. Instanzen können in der Regel nicht auf diese Methoden und Attribute zugreifen. Instanzvariablen sollten dieses Attribut besitzen. Mit Hilfe von öffentlichen Getter- und Setter-Methoden sollten die Attribute geändert werden. protected geschützt Auf diese Teile kann nicht von Instanzen anderer Klassen zugegriffen werden. Methoden der von dieser Klasse abgeleiteten Klassen haben jedoch Zugriff (vgl. Kapitel Vererbung). Instanzen der Klasse können nur innerhalb des gleichen Package auf diese Elemente zugreifen. 32

33 Zugriffsattribute (2/3) Damit sollte eine Methode bzw. Instanzvariablendefintion immer wie folgt aussehen: [<Schutzattribut>] <Klasse/Typ> <Bezeichner> [= <Ausdruck> ]; [<Schutzattribut>] <Klasse/Typ> <Methodenname> ([Parameterliste]]) {[<Anweisungsliste>]}; Wird das Schutzattribut nicht angegeben, sind die Methoden bzw. Attribute automatisch von der Art public. 33

34 Zugriffsattribute (3/3) Ein weiteres Zugriffsattribut für einen besonderen Gebrauch ist das Attribut package. Es regelt den Zugriff auf die Klassen. Öffentliche Klassen sind immer im gleichen Package sichtbar und nutzbar. Sollten Klassen aus anderen Packages genutzt werden, müssen diese mit import <Packagename>.<Klassenname> für eine spezielle Klasse oder mit import <Packagename>.* für alle Klassen des Package angemeldet werden. Definition des Packages der Klasse am Anfang der Datei mit package <Packagename> Je Package dürfen die Namen der öffentlichen Klassen nur einmal vorkommen. 34

35 Hinweise zum Umgang mit den Schutzmechanismen Attribute können beliebige Datenstrukturen und Objekte von Klassen sein. Attribute sollten nach Möglichkeit nie im public-bereich deklariert werden. Methoden sollten nur im public-bereich deklariert werden, wenn diese für den Benutzer notwendig sind und somit eine öffentliche Schnittstelle darstellen. Methoden der eigenen Klassen können auf alle Attribute und Methoden ihrer Klasse, unabhängig von der Schutzebene (public, protected oder private) zugreifen. Instanzen (dynamisch oder statisch) können nur auf die öffentlichen Methoden oder Eigenschaften (Schutzebende public) einer Klasse zugreifen. 35

36 Konstruktoren Ein Konstruktor wird automatisch aufgerufen, wenn ein Objekt/ eine Instanz der Klasse erzeugt wird. Dies geschieht durch Anlage mit Hilfe des Operators new. Der Konstruktor dient der Initialisierung der Eigenschaften einer Klasseninstanz. Sie sind somit besondere Methoden, welche nur bei der Erzeugung von Objekten, nicht jedoch innerhalb von Methoden aufgerufen werden können. Innerhalb von Methoden können nur neue Instanzen angelegt werden. In diesem Fall wird dann ein neues Objekt mit dem Operator new angelegt. 36

37 Hinweise zu Konstruktoren (1/2) Jede Klasse hat mindestens einen Konstruktor. Wenn kein Konstruktor deklariert ist, wird der Standardkonstruktor aufgerufen, der "nichts tut". Dieser ist parameterlos. Konstruktoren haben keinen Rückgabewert (auch nicht void). Konstruktoren werden in der public-schutzebene einer Klasse deklariert. Ein Konstruktor kann nicht explizit aufgerufen werden (z.b. zum Zweck der Reinitialisierung). 37

38 Hinweise zu Konstruktoren (2/2) Konstruktoren können überladen werden, d.h. mit unterschiedlichen Parameterlisten versehen werden. public class AClass { public AClass() { }; public AClass(int aint) { }; public AClass(double adouble) { }; public AClass(String astring,double adouble) { }; } Wird mindestens ein expliziter Konstruktor deklariert, so muss auch der Standardkonstruktor deklariert/ definiert werden (Prinzip "alle oder keiner"). Konstruktoren sind nicht auf die Initialisierung von Attributen beschränkt, sie können beliebige Operationen ausführen. 38

39 Konstruktoren und this Andere Konstruktoren innerhalb einer Klasse können mit Hilfe des Operators this verwendet werden, d.h. Konstruktoren können sich gegenseitig aufrufen: public class BAWNote { private int note; public BAWNote(int anote) { this.note = anote; } public BAWNote() { this(0); } } Dabei muss der Aufruf eines anderen Konstruktors die erste Anweisung innerhalb des Konstruktors sein. Ein Aufruf aus normalen Methoden ist nicht gestattet. 39

40 Klasseninitialisierung Bei der Klasseninitialisierung gilt folgenden Reihenfolge: zuerst werden alle Instanzvariablen erzeugt und ggf. initialisiert. Nicht initialisierte Instanzvariablen können in einen Initialisierungsblock initialisiert werden. Nun wird der Konstruktor der Klasse aufgerufen. 40

41 Beispiel für f r eine Klasseninitialisierung 1 public class BAWTest { 2 public int value = 0; 3 public BAWTest() { 4 value = 2; 5 System.out.println("value = "+value); 6 } 7 public static void main(string[] args) { 8 BAWTest test = new BAWTest(); 9 } { 12 System.out.println("value = "+value); 13 value = 1; 14 System.out.println("value = "+value); 15 } 16 } 41

42 Destruktoren Was ist ein Destruktor Der Destruktor wird beim Zerstören eines Objekts aufgerufen. dient zum Aufheben der Zuordnung aller Ressourcen, die während der Lebenszeit des Objekts getroffen worden sind, z.b.: Dateien müssen noch geschlossen werden. Es müssen noch Logging-Informationen geschrieben werden. Dynamischer Speicher muss noch freigegeben werden (in C). u. v. m. 42

43 Destruktoren in Java JAVA besitzt keine Destruktor in diesem Sinne. Es gibt eine Methode finalize, die ähnliches bewirkt public void finalize() {}; JAVA kennt einen so genannten Garbage Colletor, der in unregelmäßigen Abständen den Speicher aufräumt und dann nicht mehr referenzierte Objekte löscht. In diesem Zusammenhang wird die Methode finalize aufgerufen und zwar kurz vor dem Entfernen des Objekts aus dem Speicher. Die JAVA-Spezifikation garantiert nicht, wann die Methode finalize aufgerufen wird und ob sie überhaupt aufgerufen wird. Die Reihenfolge der Aufrufe von finalize mehrerer Objekte ist willkürlich. Diese Methode sollte niemals direkt aufgerufen werden. Aufrufe des Garbage Collectors können erzwungen werden. 43

44 Garbage Collector Aufrufe des Garbage Collectors können erzwungen werden. System.runFinalizersOnExit(true) Beim Beenden der virtuellen Maschine werden alle finalize-methoden aufgerufen. Die Standardeinstellung ist false. Ab JDK ist diese Methode als deprecated markiert, d. h. die Methode sollte nicht mehr verwendet werden. System.runFinalization() Dies ist eine neue Version der obigen Methode (ab JDK 1.3). System.gc() Die ruft den Garbage Collector zur Laufzeit auf. Für alle nicht mehr referenzierten Objekte wird finalize ausgeführt. Tipp für JAVA-Programmierer: Implementieren Sie sich eine Methode public void dispose(), die Sie immer selbstständig vor dem Freigeben eines Objekts aufrufen. dispose ist der Standardname in JAVA. 44

45 Statische Elemente von Klassen Allgemeines zu statischen Methoden und Variablen: Statische Variablen und Methoden sind nicht an die Existenz eines Objekts einer Klasse gebunden. Sie können jederzeit über den Klassennamen (ohne dass ein Objekt der Klasse existiert) auf statische Methoden oder Variablen der Klasse zugreifen (mit Operator. ): <Klassenname>.<Methodenname>([<Parameterliste>]) <Klassenname>.<Variablenname> Statische Methoden können nur mit statischen Variablen und Methoden arbeiten. Das Attribut static kann nur im Zusammenhang mit Variablen und Methoden genutzt werden, dies funktioniert nicht in Kombination mit Klassen: static public int eins; static public int getwert(); Die bekannteste statische Methode ist die Methode static public void main(string[] args), mit der man eine Klasse ausführen kann. 45

46 Klassenvariablen Variablen, die innerhalb einer Klasse mit dem Attribut static versehen werden, nennt man Klassenvariablen. Im Gegensatz zu den Instanzvariablen, die an ein Objekt gebunden sind, existieren Klassenvariablen unabhängig von einem Objekt. Jede Klassenvariable wird nur einmal angelegt. Sie kann von allen Methoden der Klasse aufgerufen werden. Da sich alle Methoden die Variable»teilen«, sind Veränderungen, die eine Instanz vornimmt, auch in allen anderen Instanzen sichtbar. Klassenvariablen sind daher vergleichbar mit globalen Variablen, denn ihre Lebensdauer erstreckt sich auf das gesamte Programm. Namenskollisionen können allerdings nicht auftreten, denn der Zugriff von außen erfolgt durch Qualifizierung mit dem Klassennamen in der Form Klassenname.Variablenname. 46

47 Beispiel für f r den Gebrauch von Klassenvariablen Beispiel: Instanzenzähler einer Klasse einzubauen. /* Testauto.java */ public class Testauto { static private int objcnt = 0; public Testauto() { objcnt ++; ; } static void main(string args[]) { Testauto auto1; Testauto auto2 = new Testauto(); System.out.println("Anzahl Testauto-Objekte: " + Testauto.objcnt); } } 47

48 Klassenmethoden Klassenmethoden sind Methoden, die unabhängig von einer bestimmten Instanz existieren. Klassenmethoden werden ebenfalls mit Hilfe des static-attributs deklariert und - analog zu Klassenvariablen - durch Voranstellen des Klassennamens aufgerufen. Da Klassenmethoden unabhängig von konkreten Instanzen ihrer Klasse existieren, ist ein Zugriff auf Instanzvariablen nicht möglich. Diese Trennung äußert sich darin, dass Klassenmethoden keinen this-zeiger besitzen. 48

49 Vererbung Basisklasse eigenschaft1 methode (); public class Basisklasse protected int eigenschaft1; public int methode() { eigenschaft1 = 27; return eigenschaft1; } } AbgeleiteteKlasse eigenschaft2 methode (); public class AbgeleiteteKlasse extends Basisklasse { private int eigenschaft2; public int methode() { eigenschaft2 = 3; return super.methode()+eigenschaft2; } } extends zeigt die Vererbung an 49

50 Wichtige Hinweise zur Vererbung Solle beide Klassen verwendet werden, so müssen diese öffentlich sein (Schutzattribut public). Da jede öffentliche Klasse in einer eigenen.java-datei abgelegt werden muss, ergeben sich zwei Dateien. Mit Hilfe von super kann auf die namensgleiche Methode der Oberklasse zugegriffen werden. super verweist somit auf die eigene Instanz bezogen auf die Oberklassen. Zuerst wird in der direkten Oberklasse nach der Methode oder Eigenschaft gesucht. Wird hier nichts gefunden, wird anschließend in der Vererbungshierarchie nach oben weitergesucht. Mit Hilfe des Schlüsselwortes this wird auf die eigene Instanz verwiesen. Es wird zuerst in der eigenen Klasse nach einer Methode oder Eigenschaft gesucht. Anschließend wird in der Vererbungshierarchie nach oben gesucht. 50

51 Beispiel für f r den Gebrauch von this und super 1 public class Eins { 2 public int methode1() {return 1;} 3 public int methode2() {return 2;} 4 } 5 public class Zwei extends Eins{ 6 public int methode1() {return 3;} 7 public int methode3() {return 4;} 8 } 9 public class Drei extends Zwei{ 10 public int methode1() {return 5;} 11 public int methode2() {return 6;} 12 public int methode4() {return super.methode1();} 13 public int methode5() {return this.methode1();} 14 public int methode6() {return this.methode2();} 15 public int methode7() {return super.methode2();} 16 public int methode8() {return super.methode3();} 17 public int methode9() {return this.methode3();} 18 } 51

52 Was liefern die folgenden Methodenaufrufe? 19 Eins eins = new Eins(); 20 Zwei zwei = new Zwei(); 21 Drei drei = new Drei(); 22 eins.methode1(); 23 eins.methode2(); zwei.methode1(); 26 zwei.methode2(); 27 zwei.methode3(); drei.methode1(); 30 drei.methode2(); 31 drei.methode3(); 32 drei.methode4(); 33 drei.methode5(); 34 drei.methode6(); 35 drei.methode7(); 36 drei.methode8(); 37 drei.methode9(); 52

53 Was liefern die folgenden Methodenaufrufe? 19 Eins eins = new Eins(); 20 Zwei zwei = new Zwei(); 21 Drei drei = new Drei(); 22 eins.methode1(); // 1 23 eins.methode2(); // zwei.methode1(); // 3 26 zwei.methode2(); // 2 27 zwei.methode3(); // drei.methode1(); // 5 30 drei.methode2(); // 6 31 drei.methode3(); // 4 32 drei.methode4(); // 3 33 drei.methode5(); // 5 34 drei.methode6(); // 6 35 drei.methode7(); // 2 36 drei.methode8(); // 4 37 drei.methode9(); // 4 53

54 Weitere Beispielaufrufe Die folgende Definition ist in Klasse Drei nicht möglich: public int methode10() { return super.methode4();} Dies ist nicht möglich, da in keiner Superklasse die Methode methode4 definiert worden ist. Allerdings ist eine folgende Deklaration möglich: public int methode11(int i) { if(i==1) return 1 else return this.methode11(--i); } Man spricht in diesem Fall von einer Rekursion. Eine Rekursion sollte immer einen Abbruch-Fall aufweisen, bei der die eigene Methode nicht mehr aufgerufen wird. Dieser Abbruch-Fall muss auch vom Programmfluss erreicht werden, da es ansonsten zu einer Endlosrekursion kommt. Dies führt ansonsten zu einem Speicherüberlauf beim Ausführen des Programms. 54

55 Die Klasse Object Jede Klasse, die in JAVA vorhanden ist bzw. vom Programmierer neu erzeugt wird und dabei von keiner Klasse abgeleitet worden ist, besitzt unsichtbar die Superklasse Object. Diese Angabe kann bei der Klassendefinition weggelassen werden. public Neu [extends Object] Die Klasse Object besitzt mehre Methoden, die aufgrund ihrer Vererbung somit in allen Klassen in JAVA sichtbar sind und aufgerufen werden können. 55

56 Methoden der Klasse Object (1/3) boolean equals(object o): Diese Methode überprüft, ob der Inhalt eines Objekts identisch mit den Inhalt eines anderen Objekts ist. Die Methode muss in abgeleiteten Klassen überschrieben werden, wenn Sie auf inhaltliche Gleichheit eines Objekts testen wollen (mit Hilfe des Operators ==). Ansonsten wird überprüft, ob es sich um dieselbe Referenz auf das entsprechende Objekt handelt (Standard-Implementation). Beispiel: Objekt: 1 1 Variable: a b c Somit liefern die folgenden Vergleiche a==b // true a==c // false 56

57 Methoden der Klasse Object (2/3) Object clone(): Die Methode clone erzeugt ein neues Objekt als (möglichst) exakte Kopie des aktuellen Objekts Achtung: Bei Nutzung der Standardimplementation gilt nach clone: class Neu{ }; Neu eins,zwei; eins = new Neu(); zwei = eins.clone(); eins == zwei // liefert false!! String tostring(): Die Methode liefert eine String-Repräsentation des Objekts. 57

58 Methoden der Klasse Object (1/3) Bei der Implementierung der Methode equals sollten Sie immer prüfen, ob das Objekt von der gleichen Klasse ist. Hierfür gibt des das Konstrukt instanceof: public class BAWKlasse { public int data; public boolean equals(object o) { if(!(o instanceof BAWKlasse)) return false; return (((BAWKlasse)o).data == this.data); // (BAWKlasse) wandelt Objekte abgeleiteter // Klassen in ein Objekt der // Klasse BAWKlasse um Casting } } 58

59 Besondere Formen Finale Klassen, Methoden und Attribute Elemente, die das Attribut final besitzen, können nicht mehr modifiziert werden. Bei Variablen werden so Konstanten erzeugt final public float PI = 3.14f; Bei Methoden dürfen diese nicht mehr überladen werden, d.h. eine abgeleitete Klasse darf diese Methode nicht mehr überschreiben. Genauso gibt es finale Klassen. Von diesen Klassen dürfen keine abgeleiteten Klassen mehr erzeugt werden, d.h. final class BAWFinal { } class BAWNichtErlaubt extends BAWFinal { } nicht erklaubt // ist 59

60 Besondere Formen - Abstrakte Klassen und Methoden Abstrakte Klassen sind Klassen, die als Vorlage für andere Klassen dienen. Von abstrakten Klassen dürfen keine Instanzen gebildet werden. Somit stellen sie sicher, dass abgeleitete Klassen die Methoden überladen, welche in abstrakten Klassen definiert werden. Eine abstrakte Klasse wird definiert, indem die Klasse als abstrakt gekennzeichnet wird oder eine abstrakte Methode definiert wird. (Die Klasse muss dann als abstract deklariert werden). abstract class <Klassenname> { }; public abstract <Typ/Klasse> <Methodenname>(<Parameterliste>) [{ }] Die Methoden können einen Rumpf besitzen. Dieser ist optional. Sofern eine Nutzungsgrundlage für die Methode gegeben werden soll, die mit super aufgerufen werden soll, kann dies sinnvoll sein. Es können Variablen von abstrakten Klassen erzeugt werden. 60

61 Beispiel für f r abstrakte Klassen abstract class BAWAbstract { public abstract String getname(); } public final class BAWFinal extends BAWAbstract { public String getname() { return BAWFinal ;} } public class BAWAbgeleitet extends BAWAbstract { public String getname() { return BAWAbgeleitet ;} } BAWAbstract arr[] = new BAWAbstract[2]; arr[0] = new BAWFinal(); arr[1] = new BAWAbgeleitet(); for( int i=0; i<arr.length;i++) System.out.println(arr[i].getName()) 61

62 Wrapper-Klassen bilden Hüllen um Klassen oder Objekte liefern eine einheitliche Schnittstelle nach außen, wenn die internen Klassen oder Objekte andere Schnittstellen (APIs) besitzen. Wrapper-Klassen sind besonders dienlich, wenn Klassen von anderen Herstellern in das eigene Umfeld mit festgelegten Namenskonventionen übernommen werden. BubbleSort WrapperBubbleSort makebubblesort QuickSort sort WrapperQuickSort Wrapper- Klassen makequicksort sort 62

63 Wrapper-Klassen für r primitive Datentypen Primitiver Datentyp void byte short int long float double boolean char Wrapper-Klasse Void Byte Short Integer Long Float Double Boolean Character 63

64 Hinweise zu den Wrapper-Klassen für r die primitiven Datentypen Vereinfachte Darstellung der Klasse: Integer private int intvalue Hinweise zum Gebrauch Die Klassen befinden im Package java.util. Instanziierung mit Integer anint = new Integer(19); 64

65 Typische Methoden der Wrapper-Klassen zu den primitiven Datentypen Integer(int value) Integer(String value) Short(int value) intvalue() shortvalue() longvalue() parseint(string value) Konstruktor zum Erzeugen eines Objekts liefert den gespeichert int-, short-, long-wert zurück. versucht einen String in einen int-wert zu konvertieren. tostring() liefert einen String zurück, der den gespeicherten Wert repräsentiert valueof(string value) erzeugt ein Integer-, Byte-, Long-, -Objekt mit dem Wert von value und liefert dieses zurück 65

66 Konstanten für f r numerische Wrapper- Klassen So gibt es in jeder Die Klassen Byte, Short, Integer, Long, Float und Double kennen die Konstanten MIN_VALUE (kleinste Element des Wertbereichs) MAX_VALUE (größte Element des Wertbereichs) In den Klassen Float und Double gibt es zusätzlich die Konstanten NEGATIVE_INFINITY (minus unendlich), POSITIVE_INFINITY (plus unendlich) und NaN (undefiniert). 66

67 Die Klasse Math Die Klasse Math stellt zahlreiche mathematische Rechenalgorithmen zur Verfügung. Die Klasse Math liegt im Standard-Package java.lang. Sie braucht somit nicht eingebunden wird. Folgende Konstanten existieren: static double E static double PI die Basis des natürlichen Algorithmus e Die Zahl Pi. 67

68 Methoden der Klasse Math (1/3) static double abs(double a) static float abs(float a) static int abs(int a) static long abs(long a) static double acos(double a) static double asin(double a) static double atan(double a) static double atan2(double y, double x) static double ceil(double a) static double cos(double a) static double exp(double a) liefert den Betragswert der Zahl a liefert den arc coninus des Winkels im Bereich von 0.0 bis PI. liefert den arc sinus des Winkels im Bereich von PI/2 bis PI/2. liefert den arc tangenz des Winkels im Bereich von PI/2 bis PI konvertiert die rectangularen Koordinaten (x,y) zu einem Polaren Winkel. Beispiel: Math.toDegrees(Math.atan2(1.0,1.0)) ==1 liefert die kleinste Ganzzahl (als double-wert), die größer als die Zahl a ist liefert den cosinus der Zahl a liefert die Potenz der Zahl a zur eulerschen Zahl e 68

69 Methoden der Klasse Math (2/3) static double floor(double a) static double log(double a) static double max(double a, double b) static float max(float a, float b) static int max(int a, int b) static long max(long a, long b) static double min(double a, double b) static float min(float a, float b) static int min(int a, int b) static long min(long a, long b) liefert die größte Ganzahl (als double-wert), die nicht größer als das Argument a ist. liefert den natürlichen Logarithmus (zur Basis e)der Zahl a liefert das Maximum der beiden Zahlen liefert das Minimum der beiden Zahlen 69

70 Methoden der Klasse Math (3/3) static double pow(double a, double b) static double random() static double rint(double a) static long round(double a) static int round(float a) liefert die b-te Potenz zur Basis a liefert einen Zufallszahl im Bereich 0.0 x < 1.0 liefert eine ganzzahlige Zufallszahl im Bereich 0 x < a Rundet den Wert a auf eine Ganzzahl static double sin(double a) static double sqrt(double a) static double tan(double a) static double todegrees(double angrad) static double toradians(double angdeg) liefert den cosinus der Zahl a liefert die Quadratwurzel der Zahl a liefert das Ergebnis der Tangenzfunktion der Zahl a liefert den Grad-Wert der Zahl angrad liefert den Randiant-Wert des Winkel angdeg 70

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

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

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

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

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

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

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

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

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

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Klassendiagramme Ein Klassendiagramm dient in der objektorientierten Softwareentwicklung zur Darstellung von Klassen und den Beziehungen,

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

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

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005 Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

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

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7 Java Einführung Umsetzung von Beziehungen zwischen Klassen Kapitel 7 Inhalt Wiederholung: Klassendiagramm in UML Java-Umsetzung von Generalisierung Komposition Assoziationen 2 Das Klassendiagramm Zweck

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

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

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Objektorientierte Programmierung OOP

Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Ronja Düffel WS2012/13 08. Oktober 2013 Objektorientierte Programmierung OOP Objektorientierte Programmierung Objektorientierte

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

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

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

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

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

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

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

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

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

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

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

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

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6 Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in

Mehr

Klassendiagramm. Kurzer Überblick über UML - Stand 2006. BlaBla

Klassendiagramm. Kurzer Überblick über UML - Stand 2006. BlaBla BlaBla Diese Kennzeichnungen sind nur Erläuterungen und nicht Bestandteil des Diagramms Quelle: P.Grässle, H.Baumann, P.Baumann, UML projektorientiert, Galileo Verlag, 2003 21 Primäre Begriffe Kapselung

Mehr

Software Engineering Interaktionsdiagramme

Software Engineering Interaktionsdiagramme Software Engineering Interaktionsdiagramme Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Nachrichtenaustausch Welche Nachrichten werden ausgetauscht? (Methodenaufrufe)

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

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

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny 3. UML Klassendiagramm Nachtrag 3.1 Einführung UML UML ist eine standardisierte Sprache zur Modellierung von Systemen. In UML werden graphische

Mehr

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:

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

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

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000 Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000 A. Beschreibung der Projektarbeit. Welche Aufgabe haben Sie im Rahmen der Projektarbeit gelöst? 2. Mit welchen Tools bzw. Programmen (Anwendung,

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

5.6 Vererbung. Vererbung

5.6 Vererbung. Vererbung 5.6 Vererbung Klassen können zueinander in einer "ist ein"- Beziehung stehen Beispiel: Jeder PKW ist ein Kraftfahrzeug, jedes Kraftfahrzeug ist ein Transportmittel aber: auch jeder LKW ist ein Kraftfahrzeug

Mehr

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2 EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0 EDV Kurs 13/2 Inhaltsverzeichnis 1 Objekte... 1 2 Klassen... 3 2.1 Beziehungen zwischen Klassen... 4 2.1.1 Vererbung... 4 2.1.2

Mehr

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

Programmieren Tutorium

Programmieren Tutorium Programmieren Tutorium Tom Schildhauer Tutorium 12 Universität Karlsruhe (TH) Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by Tom Schildhauer,

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

Software Engineering Klassendiagramme weiterführende Konzepte

Software Engineering Klassendiagramme weiterführende Konzepte Software Engineering Klassendiagramme weiterführende Konzepte Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Klassenattribut: static Implementierung in Java public

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren

Mehr

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java Klausur zur Einführung in die objektorientierte Programmierung mit Java im Studiengang Informationswissenschaft Prof. Dr. Christian Wolff Professur für Medieninformatik Institut für Medien-, Informations-

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

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

Algorithmen und Datenstrukturen 07

Algorithmen und Datenstrukturen 07 5. Dezember 2011 1 Besprechung Blatt 6 Fragen 2 Vererbung Allgemein abstract Interfaces 3 Unified Modeling Language (UML) Ablaufdiagramme Klassendiagramme Anwendungsfalldiagramme 4 Vorbereitung Blatt 7

Mehr

5. Tutorium zu Programmieren

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

Mehr

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Sichtbarkeit & statische Methoden Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Nicht sichtbare Methoden Wollen Eltern bestimmte Methoden vor den

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

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)

Mehr

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

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

Übungsblatt 3: Algorithmen in Java & Grammatiken

Übungsblatt 3: Algorithmen in Java & Grammatiken Humboldt-Universität zu Berlin Grundlagen der Programmierung (Vorlesung von Prof. Bothe) Institut für Informatik WS 15/16 Übungsblatt 3: Algorithmen in Java & Grammatiken Abgabe: bis 9:00 Uhr am 30.11.2015

Mehr

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

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16 Kapitel 5 Arithmetische Operatoren Seite 1 von 16 Arithmetische Operatoren - Man unterscheidet unäre und binäre Operatoren. - Je nachdem, ob sie auf einen Operanden wirken, oder eine Verknüpfung zweier

Mehr

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen Programmieren 10. Tutorium 4./ 5. Übungsblatt Inhalt I. Übungsblatt 4 II. III. - Rückgabe und Besprechung - Vorbereitung auf Wiederholung/ Nachtrag - Operatorpräzedenzen IV. Übungsblatt 5 - Vorstellung

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Kostenstellen verwalten. Tipps & Tricks

Kostenstellen verwalten. Tipps & Tricks Tipps & Tricks INHALT SEITE 1.1 Kostenstellen erstellen 3 13 1.3 Zugriffsberechtigungen überprüfen 30 2 1.1 Kostenstellen erstellen Mein Profil 3 1.1 Kostenstellen erstellen Kostenstelle(n) verwalten 4

Mehr

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Abschnitt 12: Strukturierung von Java-Programmen: Packages Abschnitt 12: Strukturierung von Java-Programmen: Packages 12. Strukturierung von Java-Programmen: Packages 12.1 Strukturierung durch Packages 12.2 Zugriffsspezifikationen 12.3 Zusammenfassung 12 Strukturierung

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

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags Pommes... Praktikum A 230 C 207 (Madeleine) F 112 F 113 (Kevin) E

Mehr

Tevalo Handbuch v 1.1 vom 10.11.2011

Tevalo Handbuch v 1.1 vom 10.11.2011 Tevalo Handbuch v 1.1 vom 10.11.2011 Inhalt Registrierung... 3 Kennwort vergessen... 3 Startseite nach dem Login... 4 Umfrage erstellen... 4 Fragebogen Vorschau... 7 Umfrage fertigstellen... 7 Öffentliche

Mehr

Arbeiten mit UMLed und Delphi

Arbeiten mit UMLed und Delphi Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf

Mehr

Objektbasierte Entwicklung

Objektbasierte Entwicklung Embedded Software Objektbasierte Entwicklung Objektorientierung in C? Prof. Dr. Nikolaus Wulff Objektbasiert entwickeln Ohne C++ wird meist C im alten Stil programmiert. => Ein endlose while-schleife mit

Mehr

Tutorium Informatik 1. Aufgabe 2: Formatierte Ein- und Ausgabe

Tutorium Informatik 1. Aufgabe 2: Formatierte Ein- und Ausgabe Tutorium Informatik 1 Aufgabe 2: Formatierte Ein- und Ausgabe Fachbereich: Elektrotechnik Inhaltsverzeichnis 1 Aufgabe 1 2 Benötigte Funktionen und Schlüsselwörter 2 Robert Halas / FH Regensburg - 2003

Mehr

EasyWk DAS Schwimmwettkampfprogramm

EasyWk DAS Schwimmwettkampfprogramm EasyWk DAS Schwimmwettkampfprogramm Arbeiten mit OMEGA ARES 21 EasyWk - DAS Schwimmwettkampfprogramm 1 Einleitung Diese Präsentation dient zur Darstellung der Zusammenarbeit zwischen EasyWk und der Zeitmessanlage

Mehr

Java Einführung Collections

Java Einführung Collections Java Einführung Collections Inhalt dieser Einheit Behälterklassen, die in der Java API bereitgestellt werden Wiederholung Array Collections (Vector, List, Set) Map 2 Wiederholung Array a[0] a[1] a[2] a[3]...

Mehr

Liste Programmieren Java Überblick

Liste Programmieren Java Überblick Liste Programmieren Java Überblick 1 Was ist Java? 2 Klassen und Objekte 3 Vererbung 4 Schnittstellen 5 Innere Klassen 6 Exceptions 8 Datenstrukturen und Algorithmen 9 Ein-/Ausgabe 10 Threads 11 GUI-Programmierung

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

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Klassendiagramm. (class diagram)

Klassendiagramm. (class diagram) : Klassendiagramm http:///topic95.html Klassendiagramm (class diagram) Klassendiagramm Objektdiagramm Komponentendiagramm Kompositionsstrukturdiagramm Verteilungsdiagramm Einstieg Paketdiagramm Aufbau

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

Java Einführung Abstrakte Klassen und Interfaces

Java Einführung Abstrakte Klassen und Interfaces Java Einführung Abstrakte Klassen und Interfaces Interface Interface bieten in Java ist die Möglichkeit, einheitliche Schnittstelle für Klassen zu definieren, die später oder/und durch andere Programmierer

Mehr

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten In dem Virtuellen Seminarordner werden für die Teilnehmerinnen und Teilnehmer des Seminars alle für das Seminar wichtigen Informationen,

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

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang sysplus.ch outlook - mail-grundlagen Seite 1/8 Outlook Mail-Grundlagen Posteingang Es gibt verschiedene Möglichkeiten, um zum Posteingang zu gelangen. Man kann links im Outlook-Fenster auf die Schaltfläche

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

188.154 Einführung in die Programmierung für Wirtschaftsinformatik

188.154 Einführung in die Programmierung für Wirtschaftsinformatik Beispiel 1 Vererbung (Liste) Gegeben sind die beiden Klassen ListNode und PersonNode. 188.154 Einführung in die Programmierung für Wirtschaftsinformatik Wiederholung, Prüfungsvorbereitung Monika Lanzenberger

Mehr

Bedienung von BlueJ. Klassenanzeige

Bedienung von BlueJ. Klassenanzeige Im Folgenden werden wichtige Funktionen für den Einsatz von BlueJ im Unterricht beschrieben. Hierbei wird auf den Umgang mit Projekten, Klassen und Objekten eingegangen. Abgeschlossen wird dieses Dokument

Mehr

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

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich 13 OOP MIT DELPHI Delphi war früher "Object Pascal". Dieser Name impliziert eine Funktionalität, welche in der Welt der Programmierung nicht mehr wegzudenken ist: die objektorientierte Programmierung,

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

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

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

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Assoziation und Aggregation

Assoziation und Aggregation Assoziation und Aggregation Martin Wirsing in Zusammenarbeit mit Matthias Hölzl, Nora Koch 05/03 2 Ziele Verstehen der Begriffe Assoziation und Aggregation Implementierung von Assoziationen in Java schreiben

Mehr

Große Übung Praktische Informatik 1

Große Übung Praktische Informatik 1 Große Übung Praktische Informatik 1 2005-12-08 fuessler@informatik.uni-mannheim.de http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,

Mehr

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können. Tutorial: Wie erfasse ich einen Termin? In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können. Neben den allgemeinen Angaben zu einem

Mehr

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x),

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x), Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. August 2014 Programmier-Labor 04. + 05. Übungsblatt Aufgabe 21: a) Schreiben Sie eine Methode

Mehr