Tafelübung 07 Algorithmen und Datenstrukturen

Ähnliche Dokumente
Algorithmen und Datenstrukturen 07

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Repetitorium Informatik (Java)

Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

3 Objektorientierte Konzepte in Java

Kapitel 6. Vererbung

Probeklausur: Programmierung WS04/05

Kapitel 6. Vererbung

Probeklausur: Programmierung WS04/05

Kapitel 6. Vererbung

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Programmieren I. Kapitel 8. Vererbung

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

Einstieg in die Informatik mit Java

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Javakurs für Anfänger

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

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

Software Engineering Klassendiagramme Einführung

Theorie zu Übung 8 Implementierung in Java

Java Schulung (Java 2 Java Development Kit 5 / 6)

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Java Einführung Methoden in Klassen

Faustregeln zu Zusicherungen

3 Objektorientierte Konzepte in Java

Java Einführung Abstrakte Klassen und Interfaces

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

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

Javakurs für Anfänger

Programmierkurs C++ Abstrakte Klassen und Methoden

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

Präsentation Interfaces

5.6 Vererbung. Vererbung

Programmieren in Java

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Java für Computerlinguisten

Vererbung. Martin Wirsing. Ziele. Vererbung

AuD-Tafelübung T-B5b

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Einführung in die Programmierung

Objektorientierte Programmierung. Kapitel 12: Interfaces

Informatik II Übung 6 Gruppe 7

1 Polymorphie (Vielgestaltigkeit)

Javakurs 2013 Objektorientierung

Java Vererbung. Inhalt

Einführung in die Informatik

Vererbung & Schnittstellen in C#

Interfaces und Vererbung

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

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Java I Vorlesung 6 Referenz-Datentypen

Algorithmen und Datenstrukturen

5.5.8 Öffentliche und private Eigenschaften

Institut fu r Informatik

Überschreiben von Methoden

Wiederholung zur Vorlesung Programmieren

Teil 2: OOP und JAVA (Vorlesung 11)

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

Klassenbeziehungen & Vererbung

JAVA - Methoden

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Javakurs für Anfänger

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

5. Abstrakte Klassen

Methoden (fortgeschritten) in C# - 1

Programmieren in Java

Informatik II Prüfungsvorbereitungskurs

Java, OO und UML Fortsetzung

Klassen mit Instanzmethoden

Java Einführung Klassendefinitionen

3. Konzepte der objektorientierten Programmierung

Java. Prof. Dr. Stefan Enderle NTA Isny

Einführung in die Programmierung mit Java

5.4 Klassen und Objekte

Übersicht. Vorstellung des OO-Paradigmas

JAVA - Methoden - Rekursion

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

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

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

13. Tutorium zu Programmieren

Objektorientierte Programmierung

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

Objektorientierte Programmierung

Prinzipien Objektorientierter Programmierung

SWE1 / Übung 9 ( )

Einstieg in die Informatik mit Java

Vorkurs C++ Programmierung

Java I Vorlesung Vererbung und Sichtbarkeit

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Javakurs zu Informatik I. Henning Heitkötter

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Schnittstellen implementieren am Beispiel Suchbaum

2. Vererbung und Polymorphie. Vererbung (1/2) Beispiel (1/2) Vererbung (2/2) Eine Unterklasse wird folgendermaßen definiert

4. AuD Tafelübung T-C3

Praktische Softwaretechnologie Vorlesung 3

Transkript:

Tafelübung 07 Algorithmen und Datenstrukturen Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018

Übersicht Vererbung Grundlagen Abstrakte Klassen Interfaces Polymorphie Einführung Statischer Dynamischer Typ Überladen & Überschreiben Objekte vergleichen Vergleichsoperatoren Comparable und Comparator UML-Klassendiagramme Motivation Klassenkarten Beziehungen AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 2 / 51

Vererbung

Vererbung: Grundlagen (I) Vererbung Relation zwischen zwei Klassen Unterklasse erbt von einer Oberklasse wird manchmal auch als ist-ein-beziehung bezeichnet eine Unterklasse... übernimmt alle Methoden und Attribute ihrer Oberklasse kann aber auf private Methoden und Attribute nicht zugreifen kann eigene Methoden und Attribute definieren kann damit auch Methoden ihrer Oberklasse überschreiben (s.u.) ein Objekt der Unterklasse ist auch ein Objekt der Oberklasse an allen Stellen, an denen ein Objekt der Oberklasse erwartet wird, kann auch ein Objekt der Unterklasse verwendet werden (s.u.) AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 4 / 51

Vererbung: Grundlagen (I) Vererbung Relation zwischen zwei Klassen Unterklasse erbt von einer Oberklasse wird manchmal auch als ist-ein-beziehung bezeichnet eine Unterklasse... übernimmt alle Methoden und Attribute ihrer Oberklasse kann aber auf private Methoden und Attribute nicht zugreifen kann eigene Methoden und Attribute definieren kann damit auch Methoden ihrer Oberklasse überschreiben (s.u.) ein Objekt der Unterklasse ist auch ein Objekt der Oberklasse an allen Stellen, an denen ein Objekt der Oberklasse erwartet wird, kann auch ein Objekt der Unterklasse verwendet werden (s.u.) AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 4 / 51

Vererbung: Grundlagen (I) Vererbung Relation zwischen zwei Klassen Unterklasse erbt von einer Oberklasse wird manchmal auch als ist-ein-beziehung bezeichnet eine Unterklasse... übernimmt alle Methoden und Attribute ihrer Oberklasse kann aber auf private Methoden und Attribute nicht zugreifen kann eigene Methoden und Attribute definieren kann damit auch Methoden ihrer Oberklasse überschreiben (s.u.) ein Objekt der Unterklasse ist auch ein Objekt der Oberklasse an allen Stellen, an denen ein Objekt der Oberklasse erwartet wird, kann auch ein Objekt der Unterklasse verwendet werden (s.u.) AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 4 / 51

Vererbung: Grundlagen (II) Vererbung ermöglicht Generalisierung bzw. Spezialisierung Unterklasse ist Spezialisierung der Oberklasse Oberklasse ist Generalisierung der Unterklasse(n) Beispiel jede Eiche ist ein Baum aber nicht jeder Baum ist eine Eiche (denn es gibt noch Buchen, Birken,...) Eiche kann man als Unterklasse von Baum implementieren jeder Baum ist eine Pflanze aber nicht jede Pflanze ist ein Baum (denn es gibt noch Blumen, Moose,...) Baum kann man als Unterklasse von Pflanze implementieren AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 5 / 51

Vererbung: Grundlagen (II) Vererbung ermöglicht Generalisierung bzw. Spezialisierung Unterklasse ist Spezialisierung der Oberklasse Oberklasse ist Generalisierung der Unterklasse(n) Beispiel jede Eiche ist ein Baum aber nicht jeder Baum ist eine Eiche (denn es gibt noch Buchen, Birken,...) Eiche kann man als Unterklasse von Baum implementieren jeder Baum ist eine Pflanze aber nicht jede Pflanze ist ein Baum (denn es gibt noch Blumen, Moose,...) Baum kann man als Unterklasse von Pflanze implementieren AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 5 / 51

Vererbung: Grundlagen (II) Vererbung ermöglicht Generalisierung bzw. Spezialisierung Unterklasse ist Spezialisierung der Oberklasse Oberklasse ist Generalisierung der Unterklasse(n) Beispiel jede Eiche ist ein Baum aber nicht jeder Baum ist eine Eiche (denn es gibt noch Buchen, Birken,...) Eiche kann man als Unterklasse von Baum implementieren jeder Baum ist eine Pflanze aber nicht jede Pflanze ist ein Baum (denn es gibt noch Blumen, Moose,...) Baum kann man als Unterklasse von Pflanze implementieren AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 5 / 51

Vererbung in Java Umsetzung des Konzepts der Vererbung in Java: Vererbung mittels extends bei der Klassendefinition jede Klasse erbt von genau einer anderen Klasse falls nicht explizit angegeben, ist die Oberklasse Object alle Klassen in Java erben direkt oder indirekt von Object Einfachvererbung führt zu einer sog. Monohierarchie Zugriff auf Methoden oder Attribute der Oberklasse mittels super notwendig, falls Unterklasse Teile der Oberklasse überschreibt falls die Oberklasse keinen Standard-Konstruktor hat: expliziter Aufruf eines Oberklasse-Konstruktors in jedem Konstruktor der Unterklasse notwendig AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 6 / 51

Vererbung in Java Umsetzung des Konzepts der Vererbung in Java: Vererbung mittels extends bei der Klassendefinition jede Klasse erbt von genau einer anderen Klasse falls nicht explizit angegeben, ist die Oberklasse Object alle Klassen in Java erben direkt oder indirekt von Object Einfachvererbung führt zu einer sog. Monohierarchie Zugriff auf Methoden oder Attribute der Oberklasse mittels super notwendig, falls Unterklasse Teile der Oberklasse überschreibt falls die Oberklasse keinen Standard-Konstruktor hat: expliziter Aufruf eines Oberklasse-Konstruktors in jedem Konstruktor der Unterklasse notwendig AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 6 / 51

Vererbung in Java Umsetzung des Konzepts der Vererbung in Java: Vererbung mittels extends bei der Klassendefinition jede Klasse erbt von genau einer anderen Klasse falls nicht explizit angegeben, ist die Oberklasse Object alle Klassen in Java erben direkt oder indirekt von Object Einfachvererbung führt zu einer sog. Monohierarchie Zugriff auf Methoden oder Attribute der Oberklasse mittels super notwendig, falls Unterklasse Teile der Oberklasse überschreibt falls die Oberklasse keinen Standard-Konstruktor hat: expliziter Aufruf eines Oberklasse-Konstruktors in jedem Konstruktor der Unterklasse notwendig AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 6 / 51

Vererbung in Java Umsetzung des Konzepts der Vererbung in Java: Vererbung mittels extends bei der Klassendefinition jede Klasse erbt von genau einer anderen Klasse falls nicht explizit angegeben, ist die Oberklasse Object alle Klassen in Java erben direkt oder indirekt von Object Einfachvererbung führt zu einer sog. Monohierarchie Zugriff auf Methoden oder Attribute der Oberklasse mittels super notwendig, falls Unterklasse Teile der Oberklasse überschreibt falls die Oberklasse keinen Standard-Konstruktor hat: expliziter Aufruf eines Oberklasse-Konstruktors in jedem Konstruktor der Unterklasse notwendig AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 6 / 51

Vererbung: Beispiel Geometrische Formen class Form { protected double x; protected double y; public Form ( double x, double y) { this.x = x; this.y = y; } } class Rechteck extends Form { // jedes Rechteck ist auch eine Form protected double breite ; protected double hoehe ; public Rechteck ( double x, double y, double breite, double hoehe ) { super (x, y); // Aufruf des Konstruktors der Oberklasse this. breite = breite ; this. hoehe = hoehe ; } } class Kreis extends Form { // jeder Kreis ist auch eine Form protected double radius ; public Kreis ( double x, double y, double radius ) { super (x, y); // Aufruf des Konstruktors der Oberklasse this. radius = radius ; } } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 7 / 51

Hinweise zum Beispiel Geometrische Formen class Form { /*... */ } class Rechteck extends Form { /*... */ } class Kreis extends Form { /*... */ } Rechteck und Kreis sind Spezialisierungen von Form Form ist Generalisierung von Rechteck und Kreis Oberklasse Form hat keinen Standard-Konstruktor expliziter Konstruktor-Aufruf in den Konstruktoren der Unterklassen nötig Attribute x und y in Form haben Sichtbarkeit protected Zugriff aus Unterklassen ist erlaubt AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 8 / 51

Hinweise zum Beispiel Geometrische Formen class Form { /*... */ } class Rechteck extends Form { /*... */ } class Kreis extends Form { /*... */ } Rechteck und Kreis sind Spezialisierungen von Form Form ist Generalisierung von Rechteck und Kreis Oberklasse Form hat keinen Standard-Konstruktor expliziter Konstruktor-Aufruf in den Konstruktoren der Unterklassen nötig Attribute x und y in Form haben Sichtbarkeit protected Zugriff aus Unterklassen ist erlaubt AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 8 / 51

Hinweise zum Beispiel Geometrische Formen class Form { /*... */ } class Rechteck extends Form { /*... */ } class Kreis extends Form { /*... */ } Rechteck und Kreis sind Spezialisierungen von Form Form ist Generalisierung von Rechteck und Kreis Oberklasse Form hat keinen Standard-Konstruktor expliziter Konstruktor-Aufruf in den Konstruktoren der Unterklassen nötig Attribute x und y in Form haben Sichtbarkeit protected Zugriff aus Unterklassen ist erlaubt AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 8 / 51

Abstrakte Klassen eine abstrakte Klasse......kann nicht instanziiert werden es können also keine Objekte direkt von dieser Klasse erzeugt werden, sondern nur von (nicht-abstrakten) Unterklassen dieser Klasse...kann aber als statischer Typ einer Referenz-Variable verwendet werden später mehr dazu... in Java: Deklaration einer abstrakten Klasse mittels abstract AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 9 / 51

Abstrakte Klassen eine abstrakte Klasse......kann nicht instanziiert werden es können also keine Objekte direkt von dieser Klasse erzeugt werden, sondern nur von (nicht-abstrakten) Unterklassen dieser Klasse...kann aber als statischer Typ einer Referenz-Variable verwendet werden später mehr dazu... in Java: Deklaration einer abstrakten Klasse mittels abstract AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 9 / 51

Abstrakte Klassen: Beispiele Geometrische Formen abstract class Form { /*... */ } class Rechteck extends Form { /*... */ } class Kreis extends Form { /*... */ } eine Form alleine zu erzeugen, ist nicht sinnvoll Klasse Form abstrakt definieren Rechteck und Kreis sind selber nicht abstrakt können wie bekannt instanziiert werden AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 10 / 51

Abstrakte Klassen: Beispiele Geometrische Formen abstract class Form { /*... */ } class Rechteck extends Form { /*... */ } class Kreis extends Form { /*... */ } eine Form alleine zu erzeugen, ist nicht sinnvoll Klasse Form abstrakt definieren Rechteck und Kreis sind selber nicht abstrakt können wie bekannt instanziiert werden Beispiel: Bäume Einen Baum, der weder Eiche, Buche, Birke, noch sonst irgendwas ist, gibt es nicht. Baum würde man als abstrakte Klasse definieren gleiches gilt für Pflanze AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 10 / 51

Abstrakte Methoden abstrakte Klassen können abstrakte Methoden deklarieren legen lediglich die Signatur fest, nicht die Implementierung Methoden ohne Rumpf alle Unterklassen der abstrakten Oberklasse......müssen alle diese abstrakten Methoden implementieren, oder...müssen selbst abstrakt sein Sinn!? Mit abstrakten Methoden lässt sich festlegen, dass alle Objekte (von Unterklassen) der abstrakten Klasse eine bestimmte Methode haben müssen, auch wenn die konkrete Implementierung in der abstrakten Klasse auf Grund der Generalisierung nicht möglich ist. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 11 / 51

Abstrakte Methoden abstrakte Klassen können abstrakte Methoden deklarieren legen lediglich die Signatur fest, nicht die Implementierung Methoden ohne Rumpf alle Unterklassen der abstrakten Oberklasse......müssen alle diese abstrakten Methoden implementieren, oder...müssen selbst abstrakt sein Sinn!? Mit abstrakten Methoden lässt sich festlegen, dass alle Objekte (von Unterklassen) der abstrakten Klasse eine bestimmte Methode haben müssen, auch wenn die konkrete Implementierung in der abstrakten Klasse auf Grund der Generalisierung nicht möglich ist. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 11 / 51

Abstrakte Methoden abstrakte Klassen können abstrakte Methoden deklarieren legen lediglich die Signatur fest, nicht die Implementierung Methoden ohne Rumpf alle Unterklassen der abstrakten Oberklasse......müssen alle diese abstrakten Methoden implementieren, oder...müssen selbst abstrakt sein Sinn!? Mit abstrakten Methoden lässt sich festlegen, dass alle Objekte (von Unterklassen) der abstrakten Klasse eine bestimmte Methode haben müssen, auch wenn die konkrete Implementierung in der abstrakten Klasse auf Grund der Generalisierung nicht möglich ist. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 11 / 51

Abstrakte Methoden: Geometrische Formen (I) jede Form soll seine eigene Fläche berechnen können aber: Berechnung der Fläche ist abhängig von der konkreten Form Fläche eines Rechtecks berechnet sich anders als Fläche eines Kreises nur die Unterklassen wissen, wie die Berechnung der Fläche zu implementieren ist in der Klasse Form eine abstrakte Methode flaeche() deklarieren...... und in den Unterklassen jeweils passend implementieren AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 12 / 51

Abstrakte Methoden: Geometrische Formen (I) jede Form soll seine eigene Fläche berechnen können aber: Berechnung der Fläche ist abhängig von der konkreten Form Fläche eines Rechtecks berechnet sich anders als Fläche eines Kreises nur die Unterklassen wissen, wie die Berechnung der Fläche zu implementieren ist in der Klasse Form eine abstrakte Methode flaeche() deklarieren...... und in den Unterklassen jeweils passend implementieren AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 12 / 51

Abstrakte Methoden: Geometrische Formen (II) Geometrische Formen abstract class Form { //... public abstract double flaeche (); } class Rechteck extends Form { //... public double flaeche () { return this. breite * this. hoehe ; } } class Kreis extends Form { //... public double flaeche () { return this. radius * this. radius * Math. PI; } } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 13 / 51

Interfaces Interface Schnittstelle: Sammlung von nicht-implementierten Methoden ein Interface deklariert ausschließlich abstrakte Methoden Ähnlichkeit zu abstrakten Klassen: ein Interface...... kann selber nicht instanziiert werden... kann aber als statischer Typ verwendet werden Interface Abstrakte Klasse mit ausschließlich abstrakten Methoden eine Klasse kann beliebig viele Interfaces implementieren und muss damit alle geforderten Methoden implementieren in Java: Definition eines Interface mittels interface (statt class) Implementieren eines Interface durch eine Klasse mittels implements AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 14 / 51

Interfaces Interface Schnittstelle: Sammlung von nicht-implementierten Methoden ein Interface deklariert ausschließlich abstrakte Methoden Ähnlichkeit zu abstrakten Klassen: ein Interface...... kann selber nicht instanziiert werden... kann aber als statischer Typ verwendet werden Interface Abstrakte Klasse mit ausschließlich abstrakten Methoden eine Klasse kann beliebig viele Interfaces implementieren und muss damit alle geforderten Methoden implementieren in Java: Definition eines Interface mittels interface (statt class) Implementieren eines Interface durch eine Klasse mittels implements AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 14 / 51

Interfaces Interface Schnittstelle: Sammlung von nicht-implementierten Methoden ein Interface deklariert ausschließlich abstrakte Methoden Ähnlichkeit zu abstrakten Klassen: ein Interface...... kann selber nicht instanziiert werden... kann aber als statischer Typ verwendet werden Interface Abstrakte Klasse mit ausschließlich abstrakten Methoden eine Klasse kann beliebig viele Interfaces implementieren und muss damit alle geforderten Methoden implementieren in Java: Definition eines Interface mittels interface (statt class) Implementieren eines Interface durch eine Klasse mittels implements AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 14 / 51

Interfaces Interface Schnittstelle: Sammlung von nicht-implementierten Methoden ein Interface deklariert ausschließlich abstrakte Methoden Ähnlichkeit zu abstrakten Klassen: ein Interface...... kann selber nicht instanziiert werden... kann aber als statischer Typ verwendet werden Interface Abstrakte Klasse mit ausschließlich abstrakten Methoden eine Klasse kann beliebig viele Interfaces implementieren und muss damit alle geforderten Methoden implementieren in Java: Definition eines Interface mittels interface (statt class) Implementieren eines Interface durch eine Klasse mittels implements AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 14 / 51

Interfaces: Sinn!? Der Sinn von Interfaces Definition von Schnittstellen, die i.a. orthogonal zu der Vererbungs-Hierarchie sind Schnittstelle soll von mehreren Klassen implementiert werden, die sich nicht (sinnvoll) gegenseitig in eine Generalisierungsbeziehung setzen lassen Interface kann man als statischen Typ einer Referenzvariable verwenden (s.u.) man kann auf die im Interface definierten Methoden zugreifen welche Klasse sich tatsächlich dahinter befindet, ist irrelevant AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 15 / 51

Interfaces: Beispiel (I) Geräusche interface KannGeraeuschMachen { String machegeraeusch (); } class Hund implements KannGeraeuschMachen { //... public String machegeraeusch () { return " Wau!"; } } class Auto implements KannGeraeuschMachen { //... public String machegeraeusch () { return " Brumm!"; } } Hinweise zu dem Beispiel Hund und Auto lassen sich eher schwer in eine explizite Vererbungs-Beziehung setzen (je nach Anwendung vermutlich keine sinnvolle gemeinsame Oberklasse), sollen aber beide die Methode machegeraeusch() zur Verfügung stellen und überall dort verwendet werden können, wo lediglich diese Methode benötigt wird. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 16 / 51

Interfaces: Beispiel (II) Sammlerstück interface Sammlerstueck { int wert (); } interface Fortbewegungsmittel { int maximalgeschwindigkeit (); } class Oldtimer implements Sammlerstueck, Fortbewegungsmittel { //... public public int int wert () { /*... */ } maximalgeschwindigkeit () { /*... */ } } Hinweise zu dem Beispiel Ein Oldtimer ist sowohl ein Sammlerstueck, als auch ein Fortbewegungsmittel, und soll an allen Stellen verwendet werden können, an denen ein Sammlerstueck oder ein Fortbewegungsmittel verlangt ist. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 17 / 51

Polymorphie

Polymorphie: Einführung Polymorphie: aus dem Griechischen für Vielgestaltigkeit ein und dieselbe Sache kann verschiedene Gestalten haben hier: derselbe Name kann verschiedene Dinge meinen konkrete Bedeutung ist abhängig vom jeweiligen Kontext polymorphe Variablen: dynamischer und statischer Typ können sich unterscheiden polymorphe Methoden: Überschreiben einer Methode in einer Unterklasse Überladen einer Methode AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 19 / 51

Polymorphie: Einführung Polymorphie: aus dem Griechischen für Vielgestaltigkeit ein und dieselbe Sache kann verschiedene Gestalten haben hier: derselbe Name kann verschiedene Dinge meinen konkrete Bedeutung ist abhängig vom jeweiligen Kontext polymorphe Variablen: dynamischer und statischer Typ können sich unterscheiden polymorphe Methoden: Überschreiben einer Methode in einer Unterklasse Überladen einer Methode AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 19 / 51

Polymorphie: Einführung Polymorphie: aus dem Griechischen für Vielgestaltigkeit ein und dieselbe Sache kann verschiedene Gestalten haben hier: derselbe Name kann verschiedene Dinge meinen konkrete Bedeutung ist abhängig vom jeweiligen Kontext polymorphe Variablen: dynamischer und statischer Typ können sich unterscheiden polymorphe Methoden: Überschreiben einer Methode in einer Unterklasse Überladen einer Methode AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 19 / 51

Haben wir alle schon benutzt... Beispiel int foo = 13 + 3; String bar = " Hallo, " + " Welt "; Was ist hier polymorph? AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 20 / 51

Haben wir alle schon benutzt... Beispiel int foo = 13 + 3; String bar = " Hallo, " + " Welt "; Polymorphie im Beispiel Der +-Operator ist polymorph, denn in der ersten Zeile meint er die Integer-Addition, in der zweiten Zeile hingegen die String-Konkatenation. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 20 / 51

Statischer Typ Dynamischer Typ eine Referenzvariable hat immer zwei Typen: statischer Typ: Typ, der bei der Deklaration der Variable angegeben wird zur Übersetzungszeit bekannt ändert sich nicht dynamischer Typ: tatsächlicher Typ der Instanz, auf welche die Referenz verweist im Allgemeinen erst zur Laufzeit des Programms bekannt kann sich i.a. bei der Programmausführung ändern Kandidaten für den dynamischen Typ: falls statischer Typ eine Klasse ist: statischer Typ oder Unterklasse falls statischer Typ ein Interface ist: implementierende Klasse AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 21 / 51

Statischer Typ Dynamischer Typ eine Referenzvariable hat immer zwei Typen: statischer Typ: Typ, der bei der Deklaration der Variable angegeben wird zur Übersetzungszeit bekannt ändert sich nicht dynamischer Typ: tatsächlicher Typ der Instanz, auf welche die Referenz verweist im Allgemeinen erst zur Laufzeit des Programms bekannt kann sich i.a. bei der Programmausführung ändern Kandidaten für den dynamischen Typ: falls statischer Typ eine Klasse ist: statischer Typ oder Unterklasse falls statischer Typ ein Interface ist: implementierende Klasse AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 21 / 51

Beispiel: Statischer Typ Dynamischer Typ Beispiel: Sammlerstück interface Sammlerstueck { /*... */ } class Oldtimer implements Sammlerstueck { /*... */ } class Briefmarke implements Sammlerstueck { /*... */ } // =================================== Sammlerstueck objekt = null ; // stat. Typ : Sammlerstueck, dyn. Typ : keiner objekt = new Oldtimer (); // stat. Typ : Sammlerstueck, dyn. Typ : Oldtimer objekt = new Briefmarke (); // stat. Typ : Sammlerstueck, dyn. Typ : Briefmarke AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 22 / 51

Zugriff auf Methoden und Attribute Achtung Es können nur auf die Methoden und Attribute des statischen Typs zugegriffen werden, da der dynamische Typ erst zur Laufzeit feststeht, der Compiler jedoch zur Übersetzungszeit garantieren muss, dass die entsprechende Methode bzw. das entsprechende Attribut tatsächlich existiert. Da der dynamische Typ immer mindestens der statische Typ ist, ist der Zugriff auf Methoden und Attribute des statischen Typs kein Problem, denn diese Methoden bzw. Attribute existieren garantiert auch im dynamischen Typ. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 23 / 51

Zugriff auf Methoden und Attribute Achtung Es können nur auf die Methoden und Attribute des statischen Typs zugegriffen werden, da der dynamische Typ erst zur Laufzeit feststeht, der Compiler jedoch zur Übersetzungszeit garantieren muss, dass die entsprechende Methode bzw. das entsprechende Attribut tatsächlich existiert. Da der dynamische Typ immer mindestens der statische Typ ist, ist der Zugriff auf Methoden und Attribute des statischen Typs kein Problem, denn diese Methoden bzw. Attribute existieren garantiert auch im dynamischen Typ. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 23 / 51

Beispiel: Zugriff auf nicht vorhandene Methode Beispiel: Tier abstract class Tier { //... public abstract void machelaut (); } class Hund extends Tier { //... public void fressehundefutter () { /*... */ } } class Katze extends Tier { /*... */ } // =================================== Tier tier ; // statischer Typ: Tier tier = new Katze (); tier. machelaut (); // in Ordnung, machelaut () ist Methode des statischen Typs tier = new Hund (); tier. machelaut (); // in Ordnung, machelaut () ist Methode des statischen Typs tier. fressehundefutter (); // Compiler - Fehler! // fressehundefutter () ist keine Methode des statischen Typs AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 24 / 51

Überladen von Methoden Überladen (Overloading): mehrere Methoden mit demselben Namen ( Polymorphie)......aber unterschiedlicher Signatur Methoden müssen sich in Anzahl/Typen der Parameter unterscheiden unterschiedliche Parameternamen und/oder unterschiedlicher Rückgabetyp alleine reicht nicht Methoden können in derselben Klasse oder in einer Unterklasse stehen Beispiel public static int mul( int a, int b) { return a * b; } public static float mul ( float a, float b) { return a * b; } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 25 / 51

Überladen von Methoden Überladen (Overloading): mehrere Methoden mit demselben Namen ( Polymorphie)......aber unterschiedlicher Signatur Methoden müssen sich in Anzahl/Typen der Parameter unterscheiden unterschiedliche Parameternamen und/oder unterschiedlicher Rückgabetyp alleine reicht nicht Methoden können in derselben Klasse oder in einer Unterklasse stehen Beispiel public static int mul ( int a, int b) { return a * b; } public static float mul ( float a, float b) { return a * b; } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 25 / 51

Überschreiben von Methoden Überschreiben (Overriding): Unterklasse re-definiert eine Methode der Oberklasse: gleicher Methodenname ( Polymorphie) und gleiche Signatur Welche Methode wird aufgerufen? Klassenmethode: Methode des statischen Typs sog. statische Bindung, Entscheidung zur Übersetzungszeit Instanzmethode: Methode des dynamischen Typs sog. dynamische Bindung, Entscheidung zur Laufzeit Verdecken Bei Klassenmethoden spricht man oft von Verdecken statt Überschreiben. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 26 / 51

Überschreiben von Methoden Überschreiben (Overriding): Unterklasse re-definiert eine Methode der Oberklasse: gleicher Methodenname ( Polymorphie) und gleiche Signatur Welche Methode wird aufgerufen? Klassenmethode: Methode des statischen Typs sog. statische Bindung, Entscheidung zur Übersetzungszeit Instanzmethode: Methode des dynamischen Typs sog. dynamische Bindung, Entscheidung zur Laufzeit Verdecken Bei Klassenmethoden spricht man oft von Verdecken statt Überschreiben. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 26 / 51

Überschreiben von Methoden Überschreiben (Overriding): Unterklasse re-definiert eine Methode der Oberklasse: gleicher Methodenname ( Polymorphie) und gleiche Signatur Welche Methode wird aufgerufen? Klassenmethode: Methode des statischen Typs sog. statische Bindung, Entscheidung zur Übersetzungszeit Instanzmethode: Methode des dynamischen Typs sog. dynamische Bindung, Entscheidung zur Laufzeit Verdecken Bei Klassenmethoden spricht man oft von Verdecken statt Überschreiben. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 26 / 51

Beispiel: Überschreiben von Methoden class Oberklasse { public static void klassenmethode () { System. out. println (" Klassenmethode der Oberklasse "); } public void instanzmethode () { System. out. println (" Instanzmethode der Oberklasse "); } } class Unterklasse extends Oberklasse { public static void klassenmethode () { System. out. println (" Klassenmethode der Unterklasse "); } public void instanzmethode () { System. out. println (" Instanzmethode der Unterklasse "); } } // =============================================== Oberklasse objekt ; objekt = new Oberklasse (); objekt. klassenmethode (); // -> Klassenmethode der Oberklasse objekt. instanzmethode (); // -> Instanzmethode der Oberklasse objekt = new Unterklasse (); objekt. klassenmethode (); // -> Klassenmethode der Oberklasse objekt. instanzmethode (); // -> Instanzmethode der Unterklasse AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 27 / 51

Verdecken von Attributen Verdecken von Attributen Unterklasse re-definiert ein (Klassen-/Instanz-)Attribut: gleicher Attributname ( Polymorphie) unterschiedlicher Datentyp möglich Welches Attribut wird verwendet? Klassenattribut und Instanzattribut: Attribut des statischen Typs statische Bindung, Entscheidung zur Übersetzungszeit Hinweis Vorlesungsfolie 8-97 liefert noch mal eine Übersicht, welche (Methoden-/Attribut-)Zugriffe statisch und welche dynamisch gebunden sind. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 28 / 51

Verdecken von Attributen Verdecken von Attributen Unterklasse re-definiert ein (Klassen-/Instanz-)Attribut: gleicher Attributname ( Polymorphie) unterschiedlicher Datentyp möglich Welches Attribut wird verwendet? Klassenattribut und Instanzattribut: Attribut des statischen Typs statische Bindung, Entscheidung zur Übersetzungszeit Hinweis Vorlesungsfolie 8-97 liefert noch mal eine Übersicht, welche (Methoden-/Attribut-)Zugriffe statisch und welche dynamisch gebunden sind. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 28 / 51

Verdecken von Attributen Verdecken von Attributen Unterklasse re-definiert ein (Klassen-/Instanz-)Attribut: gleicher Attributname ( Polymorphie) unterschiedlicher Datentyp möglich Welches Attribut wird verwendet? Klassenattribut und Instanzattribut: Attribut des statischen Typs statische Bindung, Entscheidung zur Übersetzungszeit Hinweis Vorlesungsfolie 8-97 liefert noch mal eine Übersicht, welche (Methoden-/Attribut-)Zugriffe statisch und welche dynamisch gebunden sind. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 28 / 51

Objekte vergleichen

Vergleiche bei primitiven Datentypen Java stellt Vergleichsoperatoren für primitive Datentypen bereit ==,!=, <, <=, >, >= diese implementieren Vergleich hinsichtlich natürlicher Ordnung bei ganzen Zahlen wie int beispielsweise nach der Wertigkeit Beispiel int a = 4711; int b = 42; int c = 42; System. out. println (a < b); // false System. out. println (b == c); // true AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 30 / 51

Vergleiche bei primitiven Datentypen Java stellt Vergleichsoperatoren für primitive Datentypen bereit ==,!=, <, <=, >, >= diese implementieren Vergleich hinsichtlich natürlicher Ordnung bei ganzen Zahlen wie int beispielsweise nach der Wertigkeit Beispiel int a = 4711; int b = 42; int c = 42; System. out. println (a < b); // false System. out. println (b == c); // true AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 30 / 51

Vergleiche bei Referenz-Typen für Referenztypen kennt Java nur die Operatoren == und!= vergleichen nur die Referenzen, kein inhaltlicher Vergleich! Beispiel BigInteger a = new BigInteger (" 42"); BigInteger b = new BigInteger (" 42"); System. out. println (a == b); // false Java erlaubt (leider?) kein Operator Overloading inhaltliche Vergleiche müssen auf Methodenaufrufe abgebildet werden AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 31 / 51

Vergleiche bei Referenz-Typen für Referenztypen kennt Java nur die Operatoren == und!= vergleichen nur die Referenzen, kein inhaltlicher Vergleich! Beispiel BigInteger a = new BigInteger (" 42"); BigInteger b = new BigInteger (" 42"); System. out. println (a == b); // false Java erlaubt (leider?) kein Operator Overloading inhaltliche Vergleiche müssen auf Methodenaufrufe abgebildet werden AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 31 / 51

Vergleiche bei Referenz-Typen für Referenztypen kennt Java nur die Operatoren == und!= vergleichen nur die Referenzen, kein inhaltlicher Vergleich! Beispiel BigInteger a = new BigInteger (" 42"); BigInteger b = new BigInteger (" 42"); System. out. println (a == b); // false Java erlaubt (leider?) kein Operator Overloading inhaltliche Vergleiche müssen auf Methodenaufrufe abgebildet werden AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 31 / 51

Inhaltlicher Vergleich von Objekten die Klasse Object beinhaltet die Methode equals() wird u.a. von der Java-API zum inhaltlichen Vergleich verwendet kann in Unterklassen überschrieben werden erlaubt eigene Definition von Gleichheit Beispiel public class Rechteck { private int breite ; private int hoehe ; //... public boolean equals ( Object other ) { if (!( other instanceof Rechteck )) { return false ; } Rechteck rechteck = ( Rechteck ) other ; return this. breite == rechteck. breite && this. hoehe == rechteck. hoehe ; } } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 32 / 51

Inhaltlicher Vergleich von Objekten die Klasse Object beinhaltet die Methode equals() wird u.a. von der Java-API zum inhaltlichen Vergleich verwendet kann in Unterklassen überschrieben werden erlaubt eigene Definition von Gleichheit Beispiel public class Rechteck { private int breite ; private int hoehe ; //... public boolean equals ( Object other ) { if (!( other instanceof Rechteck )) { return false ; } Rechteck rechteck = ( Rechteck ) other ; return this. breite == rechteck. breite && this. hoehe == rechteck. hoehe ; } } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 32 / 51

Ordnungsrelation definieren zwei Möglichkeiten zur Definition einer eigenen Ordnungsrelation: Interface Comparable implementieren fordert Methode compareto() wird i.d.r. für natürliche Ordnungsrelation benutzt externen Comparator zum Vergleich definieren wird außerhalb der zu vergleichenden Klasse definiert häufig zur Definition einer alternativen Ordnungsrelation AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 33 / 51

Rechteck: Comparable (I) Beispiel class Rechteck implements Comparable < Rechteck > { protected int breite ; protected int hoehe ; public Rechteck ( int breite, int hoehe ) { this. breite = breite ; this. hoehe = hoehe ; } public int flaeche () { return this. breite * this. hoehe ; } } public int compareto ( Rechteck other ) { // sortiert aufsteigend nach Flaeche return this. flaeche () - other. flaeche (); } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 34 / 51

Rechteck: Comparable (II) Beispiel class Rechteck implements Comparable < Rechteck > { //... public int compareto ( Rechteck other ) { // sortiert aufsteigend nach Flaeche } } Verwendung 1 Rechteck [] rechtecke ; //... Arrays. sort ( rechtecke ); Verwendung 2 Rechteck r1, r2; //... if ( r1. compareto ( r2) > 0) { /* r1 ist groesser als r2 */ } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 35 / 51

Rechteck: Comparable (II) Beispiel class Rechteck implements Comparable < Rechteck > { //... public int compareto ( Rechteck other ) { // sortiert aufsteigend nach Flaeche } } Verwendung 1 Rechteck [] rechtecke ; //... Arrays. sort ( rechtecke ); Verwendung 2 Rechteck r1, r2; //... if ( r1. compareto ( r2) > 0) { /* r1 ist groesser als r2 */ } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 35 / 51

Rechteck: Comparable (II) Beispiel class Rechteck implements Comparable < Rechteck > { //... public int compareto ( Rechteck other ) { // sortiert aufsteigend nach Flaeche } } Verwendung 1 Rechteck [] rechtecke ; //... Arrays. sort ( rechtecke ); Verwendung 2 Rechteck r1, r2; //... if ( r1. compareto ( r2) > 0) { /* r1 ist groesser als r2 */ } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 35 / 51

Rechteck: Comparator Beispiel class ComparatorBreite implements Comparator < Rechteck > { public int compare ( Rechteck r1, Rechteck r2) { // sortiert aufsteigend nach Breite return r1. breite - r2. breite ; } } Verwendung 1 Rechteck [] rechtecke ; //... Arrays. sort ( rechtecke, new ComparatorBreite ()); Verwendung 2 Rechteck r1, r2, ComparatorBreite comp ; //... if( comp. compare ( r1, r2) > 0) { /* r1 ist groesser als r2 */ } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 36 / 51

Rechteck: Comparator Beispiel class ComparatorBreite implements Comparator < Rechteck > { public int compare ( Rechteck r1, Rechteck r2) { // sortiert aufsteigend nach Breite return r1. breite - r2. breite ; } } Verwendung 1 Rechteck [] rechtecke ; //... Arrays. sort ( rechtecke, new ComparatorBreite ()); Verwendung 2 Rechteck r1, r2, ComparatorBreite comp ; //... if( comp. compare ( r1, r2) > 0) { /* r1 ist groesser als r2 */ } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 36 / 51

Rechteck: Comparator Beispiel class ComparatorBreite implements Comparator < Rechteck > { public int compare ( Rechteck r1, Rechteck r2) { // sortiert aufsteigend nach Breite return r1. breite - r2. breite ; } } Verwendung 1 Rechteck [] rechtecke ; //... Arrays. sort ( rechtecke, new ComparatorBreite ()); Verwendung 2 Rechteck r1, r2, ComparatorBreite comp ; //... if( comp. compare ( r1, r2) > 0) { /* r1 ist groesser als r2 */ } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 36 / 51

UML-Klassendiagramme

Klassendiagramme: Motivation bei großen Programmen: viele Klassen viele Beziehungen zwischen Klassen wird irgendwann unübersichtlich... Klassendiagramme als Werkzeug der Programmmodellierung zur Dokumentation zur Kommunikation (auch mit Programmierlaien ) es gibt Werkzeuge, die... aus Code Klassendiagramme erzeugen aus Klassendiagrammen Code erzeugen AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 38 / 51

Klassendiagramme: Motivation bei großen Programmen: viele Klassen viele Beziehungen zwischen Klassen wird irgendwann unübersichtlich... Klassendiagramme als Werkzeug der Programmmodellierung zur Dokumentation zur Kommunikation (auch mit Programmierlaien ) es gibt Werkzeuge, die... aus Code Klassendiagramme erzeugen aus Klassendiagrammen Code erzeugen AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 38 / 51

Klassendiagramme: Motivation bei großen Programmen: viele Klassen viele Beziehungen zwischen Klassen wird irgendwann unübersichtlich... Klassendiagramme als Werkzeug der Programmmodellierung zur Dokumentation zur Kommunikation (auch mit Programmierlaien ) es gibt Werkzeuge, die... aus Code Klassendiagramme erzeugen aus Klassendiagrammen Code erzeugen AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 38 / 51

Klassenkarten jede Klasse wird durch eine Klassenkarte dargestellt diese besteht aus drei Bereichen Klassenname (immer vorhanden) Attribute der Klasse (kann weggelassen werden) Methoden der Klasse (kann weggelassen werden) zwischen Klassenkarten werden Beziehungen eingezeichnet Vererbungsbeziehungen Referenzierungsbeziehungen... AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 39 / 51

Klassenkarten jede Klasse wird durch eine Klassenkarte dargestellt diese besteht aus drei Bereichen Klassenname (immer vorhanden) Attribute der Klasse (kann weggelassen werden) Methoden der Klasse (kann weggelassen werden) zwischen Klassenkarten werden Beziehungen eingezeichnet Vererbungsbeziehungen Referenzierungsbeziehungen... AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 39 / 51

Klassenkarten: Beispiel Beispiel class Kreis { private int radius ; public Kreis ( int radius ) { this. radius = radius ; } } public int getradius () { return this. radius ; } public void setradius ( int radius ) { this. radius = radius ; } AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 40 / 51

Klassenkarten: Beispiel Beispiel class Kreis { private int radius ; public Kreis ( int radius ) { this. radius = radius ; } } public int getradius () { return this. radius ; } public void setradius ( int radius ) { this. radius = radius ; } Klassenkarte zu Kreis Kreis -radius: int +Kreis(radius:int) +getradius(): int +setradius(radius:int) AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 40 / 51

Im Detail Variablen- Name Typ Sichtbarkeiten Kreis -radius: int +Kreis(radius:int) +getradius(): int +setradius(radius:int) Klassenname Attribute Methoden Methoden- Name Parameter- Liste Rückgabetyp (hier: void) AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 41 / 51

Sichtbarkeiten vor Attributen/Methoden wird die Sichtbarkeit angegeben: + public # protected private ~ paket-sichttbar ohne noch nicht festgelegt oder paket-sichttbar Sichtbarkeiten in Java Eigenschaft ist sichtbar aus/von Modifikator eigener Klasse selben Paket Unterklasse überall public ja ja ja ja protected ja ja ja nein ohne/paketsichtbar ja ja nein nein private ja nein nein nein AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 42 / 51

Sichtbarkeiten vor Attributen/Methoden wird die Sichtbarkeit angegeben: + public # protected private ~ paket-sichttbar ohne noch nicht festgelegt oder paket-sichttbar Sichtbarkeiten in Java Eigenschaft ist sichtbar aus/von Modifikator eigener Klasse selben Paket Unterklasse überall public ja ja ja ja protected ja ja ja nein ohne/paketsichtbar ja ja nein nein private ja nein nein nein AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 42 / 51

Abstrakte Klassen und Methoden drei Möglichkeiten für die Darstellung abstrakter Klassen 1. Klassennamen kursiv schreiben 2. unter dem Klassennamen: {abstract} (Kommentar) 3. über dem Klassennamen: «abstract» (Stereotyp) Tier Tier {abstract} <<abstract>> Tier AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 43 / 51

Abstrakte Klassen und Methoden drei Möglichkeiten für die Darstellung abstrakter Klassen 1. Klassennamen kursiv schreiben 2. unter dem Klassennamen: {abstract} (Kommentar) 3. über dem Klassennamen: «abstract» (Stereotyp) Tier Tier {abstract} <<abstract>> Tier zwei Möglichkeiten für die Darstellung abstrakter Methoden 1. Methoden-Namen kursiv schreiben 2. vor dem Methoden-Namen: «abstract» AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 43 / 51

Abstrakte Klassen und Methoden drei Möglichkeiten für die Darstellung abstrakter Klassen 1. Klassennamen kursiv schreiben 2. unter dem Klassennamen: {abstract} (Kommentar) 3. über dem Klassennamen: «abstract» (Stereotyp) Tier Tier {abstract} <<abstract>> Tier zwei Möglichkeiten für die Darstellung abstrakter Methoden 1. Methoden-Namen kursiv schreiben 2. vor dem Methoden-Namen: «abstract» Hinweis In Hausaufgaben und der Klausur bitte jeweils die erste Variante vermeiden. Das macht das Korrigieren deutlich leichter und Missverständnisse unwahrscheinlicher... AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 43 / 51

Interfaces Kennzeichung von Interfaces: Stereotyp «interface» <<interface>> Sammlerstueck AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 44 / 51

Statische Methoden und Attribute Kennzeichnung statischer Methoden und Attribute: Unterstreichen der Bezeichner Counter -globalcount: int -mycount: int +getglobalcount(): int +getmycount(): int Tipp Schaut genau hin, ob es sich um eine Klassen- oder Instanzvariable handelt. Manchmal versteckt sich die Unterstreichung nämlich nur knapp oberhalb des Trennstriches zwischen Attributen und Methoden. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 45 / 51

Statische Methoden und Attribute Kennzeichnung statischer Methoden und Attribute: Unterstreichen der Bezeichner Counter -globalcount: int -mycount: int +getglobalcount(): int +getmycount(): int Tipp Schaut genau hin, ob es sich um eine Klassen- oder Instanzvariable handelt. Manchmal versteckt sich die Unterstreichung nämlich nur knapp oberhalb des Trennstriches zwischen Attributen und Methoden. AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 45 / 51

Allgemeine Beziehungen Beispiel class Mutter { public Kind [] kinder ; } +mutter 1 Mutter class Kind { public Mutter mutter ; public Kind ( Mutter mutter ) { this. mutter = mutter ; } } +kinder 0..* Kind +Kind(mutter:Mutter) AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 46 / 51

Allgemeine Beziehungen Beispiel class Mutter { public Kind [] kinder ; } +mutter 1 Mutter class Kind { public Mutter mutter ; public Kind ( Mutter mutter ) { this. mutter = mutter ; } } +kinder 0..* Kind +Kind(mutter:Mutter) eine Mutter hat beliebig viele Kinder ein Kind hat genau eine Mutter kinder und mutter sind die sog. Rollennamen (entsprechen Attributnamen) Beziehungen können sog. Assoziationsnamen haben (hier nicht dargestellt) AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 46 / 51

Multiplizitäten die Multiplizität gibt an, wie viele Objekte einer Klasse...... mindestens und wie viele... maximal an der Assoziation teilnehmen gängige Multiplizitäten: 0..1 (maximal ein Objekt) 1 (genau ein Objekt) 0..* oder * (beliebig viele Objekte) 1..* (beliebig viele Objekte, aber mindestens eines) Umsetzung in Java: Multiplizitäten mit *: im einfachsten Fall mit Hilfe eines Arrays andere: einfache Referenzen AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 47 / 51

Multiplizitäten die Multiplizität gibt an, wie viele Objekte einer Klasse...... mindestens und wie viele... maximal an der Assoziation teilnehmen gängige Multiplizitäten: 0..1 (maximal ein Objekt) 1 (genau ein Objekt) 0..* oder * (beliebig viele Objekte) 1..* (beliebig viele Objekte, aber mindestens eines) Umsetzung in Java: Multiplizitäten mit *: im einfachsten Fall mit Hilfe eines Arrays andere: einfache Referenzen AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 47 / 51

Multiplizitäten die Multiplizität gibt an, wie viele Objekte einer Klasse...... mindestens und wie viele... maximal an der Assoziation teilnehmen gängige Multiplizitäten: 0..1 (maximal ein Objekt) 1 (genau ein Objekt) 0..* oder * (beliebig viele Objekte) 1..* (beliebig viele Objekte, aber mindestens eines) Umsetzung in Java: Multiplizitäten mit *: im einfachsten Fall mit Hilfe eines Arrays andere: einfache Referenzen AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 47 / 51

Direkte Beziehungen Beispiel class Lenkrad { } class Auto { private Lenkrad lenkrad = new Lenkrad (); } Auto -lenkrad 1 verbaut in Lenkrad AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 48 / 51

Direkte Beziehungen Beispiel class Lenkrad { } class Auto { private Lenkrad lenkrad = new Lenkrad (); } Auto -lenkrad 1 verbaut in Lenkrad ein Auto hat genau ein Lenkrad Pfeil deutet an, dass nur Auto Referenz auf Lenkrad hat (nicht umgekehrt) verbaut in ist der Assoziationsname hier nur im UML-Diagramm (manchmal auch als Kommentar im Code) AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 48 / 51

Vererbungs-Beziehung Beispiel Form abstract class Form { } class Rechteck extends Form { } class Kreis extends Form { } Rechteck Kreis AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 49 / 51

Implementierungs-Beziehung Beispiel interface Sammlerstueck { int wert (); } class Oldtimer implements Sammlerstueck { //... } class Briefmarke implements Sammlerstueck { //... } <<interface>> Sammlerstueck +wert(): int Oldtimer Briefmarke AuD Tafelübung 07 WS 2017/2018 Lehrstuhl für Informatik 2 (Programmiersysteme) 50 / 51

Fragen? Fragen! (hilft auch den anderen)