Algorithmen und Datenstrukturen 07
Stefan Ploner
5. Dezember 2011
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7
1 Besprechung Blatt 6 Fragen
2 Vererbung Allgemein abstract Interfaces
3 Unified Modeling Language (UML) Ablaufdiagramme
Klassendiagramme
Anwendungsfalldiagramme 4 Vorbereitung Blatt 7
Anmerkungen
Algorithmen und Datenstrukturen 07 Stefan Ploner
Fragen zu Blatt 6?
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7 Allgemein
Allgemein
• in Java erben alle Klassen von der Klasse Object
• Schl¨usselwort extends
class A extends Object { ... } class B extends A { ... }
• da alle Klassen, wenn nicht anders angegeben, von Object erben, wirdextends Object weggelassen
class A { ... }
• Erben von mehreren Klassen in Java nicht m¨oglich
Algorithmen und Datenstrukturen 07 Stefan Ploner
Unterklassen k¨onnen auf
• alle Attribute und Methoden der Klasse selbst und
• alle sichtbaren Attribute und Methoden der Oberklassen zugreifen
Oberklassen k¨onnen
• nur auf Attribute und Methoden der Oberklasse zugreifen
• die Oberklasse weiß nicht, ob und wieviele Unterklassen existieren ⇒ entsprechend keinerlei Zugriff
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7 Allgemein
class A {
public String name;
private String blubb;
}
class B extends A { public int zahl;
public void toString() {
System.out.println(name + ": " + zahl);
} }
• in B.toString() kann blubbnicht ausgegeben werden, da die Variable dort nicht sichtbar ist
• die toString()-Funktion w¨urde in Klasse A nicht funktionieren, da zahl dort nicht zugreifbar ist
Algorithmen und Datenstrukturen 07 Stefan Ploner
Konstruktoren
• Konstruktoren werden nicht vererbt
• Konstruktoren rufen automatisch den parameterlosen Konstruktor der Oberklasse auf
• wenn dieser nicht existiert, muss mit superein bestimmter Konstruktor aufgerufen werden
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7 Allgemein
class Fahrzeug { protected speed;
public Fahrzeug(int speed) { this.speed = speed;
} }
class Auto extends Fahrzeug { public void Auto(int speed) {
// super-Aufruf ist immer die erste Anweisung super(speed);
// setzt oft private Variablen der Oberklasse ...
} }
Algorithmen und Datenstrukturen 07 Stefan Ploner
Type-Casting
public static void main(String[] args) { Fahrzeug f1 = new Fahrzeug();
Auto a1 = new Auto();
Fahrzeug f2 = new Auto(); // impliziter Cast // Auto ist ein Fahrzeug - ok
Auto a2 = new Fahrzeug(); // Fehler: Oberklasse // kann nicht in Unterklasse konvertiert werden Auto a3 = (Auto)f2; // expliziter Cast
// Fahrzeuge sind nicht zwangslaeufig Autos Auto a4 = (Auto)f1; // ClassCastException // f1 ist kein Auto, im Prinzip wie a2 }
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7 Allgemein
Statischer und dynamischer Typ
• statischer Typ = Variablentyp
• dynamischer Typ = Typ der Referenzierten Instanz public static void main(String[] args) {
Fahrzeug f1 = new Fahrzeug();
Auto a1 = new Auto();
// a1: statischer und dynamischer Typ Auto Fahrzeug f2 = new Auto(); // impliziter Cast // f2: statisch: Fahrzeug, dynamisch: Auto Auto a3 = (Auto)f2; // expliziter Cast // a3: statisch und dynamsich Auto }
“return this;” ?
Algorithmen und Datenstrukturen 07 Stefan Ploner
Uberladen (in Java: bei allen Methoden m¨¨ oglich)
• ein Methodenname, mehrere Parameter
• hat nichts mit Vererbung zu tun Uberschreiben (in Java: Instanzmethoden)¨
• Methode in einer Unterklasse mit selbem Namen und Signatur wie eine Methode der Oberklasse
• Methodenaufruf nach dynamischem Typ Verdecken (in Java: Statische Methoden, Attribute)
• Methode in einer Unterklasse mit selbem Namen und Signatur wie eine Methode der Oberklasse
• Methodenaufruf nach statischem Typ
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7 abstract
abstract
• abstrakte Klassen k¨onnen nicht instanziiert werden
• erbende Klassen m¨ussen auch abstract sein oder alle abstrakten Methoden ¨uberschreiben
Fahrzeug fahren() : void
Auto fahren() : void
Boot fahren() : void
Flugzeug fahren() : void
• die Methode fahren() ist in Auto, Boot und Flugzeug anders, daher ist eine Definition in Fahrzeug nicht sinnvoll
• nur Fahrzeuge, die fahren k¨onnen (die die Methode fahren
¨
uberschrieben haben), k¨onnen instanziiert werden
Algorithmen und Datenstrukturen 07 Stefan Ploner
abstract class Fahrzeug {
private Fahrzeug[] alleFahrzeuge;
protected speed;
public abstract void fahren();
public void alleFahren() {
for (Fahrzeug f : alleFahrzeuge)
f.fahren(); // alle Fahrzeugtypen!
} }
class Auto extends Fahrzeug { public void fahren() {
// brumm brumm }
}
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7 Interfaces
Interfaces
• Interfaces bestehen aus Methodensignaturen
• Klassen k¨onnen beliebig viele Interfaces implementieren
• alle Interfacemethoden m¨ussen in der Klasse vorhanden sein
• Interfacemethoden sind immer public interface Comparable {
int compareTo(Object o);
}
class Datum implements Comparable {
public int compareTo(Object o) { ... } }
Algorithmen und Datenstrukturen 07 Stefan Ploner
Interfaces
• Klassen k¨onnen auf den “Interface-Typ” gecastet werden
• dann k¨onnen nur die Instanz Methoden ausgef¨uhrt werden
Anwendung:
• viele Sortierfunktionen verwenden das Comparable Interface
• sie k¨onnen dadurch alle Klassen sortieren, die dieses Interface implementieren -ohne deren Inhalt zu kennen!
Bestandteile eines Flussdiagramms
1 abgerundetes Rechteck: Startpunkt und Endpunkte
2 Rechteck: Anweisungen
3 Raute: Bedingungen - die ausgehenden Pfeile m¨ussen mit dem entsprechendem Fall beschriftet sein
Die Bestandteile werden mit Pfeilen in Flussrichtung verbunden.
Schleifen in Anwendungsfalldiagrammen:
• ein Zweig der Bedingung f¨uhrt nach Anweisungen (Schleifeninhalt) wieder zur¨uck zur Bedingung
• der andere Zweig f¨uhrt zu den Anweisungen nach der Schleife
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7 Klassendiagramme
Aufbau einer “Klassenbox”
<<stereotyp>>
Klassenname Variablen Methoden
Stereotypen:
• <<interface>> Interface
• <<abstract>> Abstrakte Klasse
Abstrakte Klassen / Methoden k¨onnen auch durch kursiv-schreiben des Namens verdeutlicht werden.
Algorithmen und Datenstrukturen 07 Stefan Ploner
Inhalt von Klassen
UML-Darstellung Repr¨asentiert var : final float Variable
blubb() Funktion
bla(blubb : int) : int Funktion mit Parameter und R¨uckgabetyp
<<abstract>>
Kuh - milch : float + melken() : float + schlachten() : void
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7 Klassendiagramme
Sichtbarkeitsmodifikatoren in UML-Diagrammen
Modifikator UML-Repr¨asentation
private -
default (nichts) protected #
public +
final (beim Typ dazuschreiben) abstract kursiv
static unterstrichen
instanz (nicht unterstrichen)
Bei final-Funktionen ohne R¨uckgabewert final void verwenden
Algorithmen und Datenstrukturen 07 Stefan Ploner
Assoziationen
3 Typen:
1 (normale) Assoziation (Linie): normale Beziehung
2 Aggregation (unausgef¨ullte Raute beim Beh¨alter):
Teil-Ganzes-Beziehung (Teil kann auch unabh¨angig existieren)
3 Komposition (ausgef¨ullte Raute beim Beh¨alter): strenge Teil-Ganzes-Beziehung (immer genau ein Beh¨alter, nicht null) Beispiele:
• Assoziation: Beziehung zwischen Konto und Kunde
• Aggregation: Ein Student ist Teil einer Vorlesung - kann aber auch ohne diese existieren
• Komposition: Raum ist immer Bestandteil von genau einem Geb¨aude, Geb¨aude weg⇒ Raum auch weg
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7 Klassendiagramme
Assoziationen
Konto
Kunde
Vorlesung
Student
Gebaeude
Raum
-kunde -konto
-student -vorlesung
-raum -gebaeude
Bei Referenztypen werden Attribute nicht in die Klasse geschrieben
⇒Variable, mit der die Klasse referenziert wird, an die Klasse Die Variablen, die in der Klasse enthalten sind, stehen am anderen Ende!
Algorithmen und Datenstrukturen 07 Stefan Ploner
Multiplizit¨ aten
• an Assoziationen werden neben den beteiligten Klassen ihre Multiplizit¨aten angegeben
• diese geben an, wie viele Objekte einer Beziehung zugeordnet werden (und daher in der anderen Klasse gespeichert werden)
• Darstellung x..y, x Unter-, y Obergrenze, * ⇒beliebig
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7 Klassendiagramme
Multiplizit¨ aten
Konto
Kunde
Vorlesung
Student
Gebaeude
Raum
-kunde 1
-konto 0..*
-student 1..*
-vorlesung 0..*
-raum 1..*
-gebaeude 1
• Beziehungen werden in Java zu Attributen (Variablen)
• f¨ur Kardinalit¨aten>1 ben¨otigt man Arrays oder Listenklassen
Algorithmen und Datenstrukturen 07 Stefan Ploner
Vererbungsbeziehungen
• normale Vererbung (extends): Durchgezogene Linie mit unausgemalter Dreiecksspitze bei Oberklasse
• “implements”-Beziehung: Gestrichelte Linie mit unausgemalter Dreiecksspitze bei Oberklasse
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7 Klassendiagramme
Beispiel: Bauernhof
EierLegend eier : int
eierSammeln() : int
MilchErzeugend milch : float
melken() : float WolleGebend
wolle : double scheren() : double
«interface»
SchlachtVieh schlachten() : void
Huhn eierSammeln() : int schlachten() : void
Sau
schlachten() : void Kuh
melken() : float schlachten() : void
Schaf melken() : float schlachten() : void zaehlen() : int
Algorithmen und Datenstrukturen 07 Stefan Ploner
Beispiel: Bauernhof
EierLegend eier : int
eierSammeln() : int
MilchErzeugend milch : float
melken() : float WolleGebend
wolle : double scheren() : double
«interface»
SchlachtVieh schlachten() : void
Huhn eierSammeln() : int schlachten() : void
Sau
schlachten() : void Kuh
melken() : float schlachten() : void
Schaf melken() : float schlachten() : void zaehlen() : int
EierlegendeWollmilchsau melken() : float schlachten() : void eierSammeln() : int scheren() : double
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7 Anwendungsfalldiagramme
Komponenten eines Anwendungsfalldiagramms
Akteur
Anwendungsfall Systemkontext
Anwendungsfall
Algorithmen und Datenstrukturen 07 Stefan Ploner
Beispiel: Flughafen
Kunde
Kundenbetreuer Buchungssystem
Buchen
Stornieren
Administrieren Flugbuchung
Buchen
Stornieren
Administrieren
Besprechung Blatt 6 Vererbung Unified Modeling Language (UML) Vorbereitung Blatt 7 Anmerkungen
UML-Tools und -Dokumente
Erstellen von UML-Diagrammen
• Google Text & Tabellen (docs.google.com)
• Dia (live.gnome.org/Dia)
• Papyrus UML (eclipse.org/papyrus)
N¨utzlich, da Klassen noch verschoben werden k¨onnen!
Dokumentation des UML-Standards
• de.wikipedia.org/wiki/Unified Modeling Language
• uml.org
Algorithmen und Datenstrukturen 07 Stefan Ploner