Algorithmen und Datenstrukturen 07

Größe: px
Ab Seite anzeigen:

Download "Algorithmen und Datenstrukturen 07"

Transkript

1 5. Dezember 2011

2 1 Besprechung Blatt 6 Fragen 2 Vererbung Allgemein abstract Interfaces 3 Unified Modeling Language (UML) Ablaufdiagramme Klassendiagramme Anwendungsfalldiagramme 4 Vorbereitung Blatt 7 Anmerkungen

3 Fragen Fragen zu Blatt 6?

4 Allgemein Allgemein in Java erben alle Klassen von der Klasse Object Schlüsselwort extends class A extends Object {... } class B extends A {... } da alle Klassen, wenn nicht anders angegeben, von Object erben, wird extends Object weggelassen class A {... } Erben von mehreren Klassen in Java nicht möglich

5 Allgemein Unterklassen können auf alle Attribute und Methoden der Klasse selbst und alle sichtbaren Attribute und Methoden der Oberklassen zugreifen Oberklassen können nur auf Attribute und Methoden der Oberklasse zugreifen die Oberklasse weiß nicht, ob und wieviele Unterklassen existieren entsprechend keinerlei Zugriff

6 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 blubb nicht ausgegeben werden, da die Variable dort nicht sichtbar ist die tostring()-funktion würde in Klasse A nicht funktionieren, da zahl dort nicht zugreifbar ist

7 Allgemein Konstruktoren Konstruktoren werden nicht vererbt Konstruktoren rufen automatisch den parameterlosen Konstruktor der Oberklasse auf wenn dieser nicht existiert, muss mit super ein bestimmter Konstruktor aufgerufen werden

8 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... } }

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

10 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;?

11 Allgemein Überladen (in Java: bei allen Methoden möglich) ein Methodenname, mehrere Parameter hat nichts mit Vererbung zu tun Überschreiben (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

12 abstract abstract abstrakte Klassen können nicht instanziiert werden erbende Klassen müssen auch abstract sein oder alle abstrakten Methoden überschreiben 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önnen (die die Methode fahren überschrieben haben), können instanziiert werden

13 abstract 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 } }

14 Interfaces Interfaces Interfaces bestehen aus Methodensignaturen Klassen können beliebig viele Interfaces implementieren alle Interfacemethoden müssen in der Klasse vorhanden sein Interfacemethoden sind immer public interface Comparable { int compareto(object o); } class Datum implements Comparable { public int compareto(object o) {... } }

15 Interfaces Interfaces Klassen können auf den Interface-Typ gecastet werden dann können nur die Instanz Methoden ausgeführt werden Anwendung: viele Sortierfunktionen verwenden das Comparable Interface sie können dadurch alle Klassen sortieren, die dieses Interface implementieren - ohne deren Inhalt zu kennen!

16

17 Ablaufdiagramme Bestandteile eines Flussdiagramms 1 abgerundetes Rechteck: Startpunkt und Endpunkte 2 Rechteck: Anweisungen 3 Raute: Bedingungen - die ausgehenden Pfeile müssen mit dem entsprechendem Fall beschriftet sein Die Bestandteile werden mit Pfeilen in Flussrichtung verbunden. Schleifen in Anwendungsfalldiagrammen: ein Zweig der Bedingung führt nach Anweisungen (Schleifeninhalt) wieder zurück zur Bedingung der andere Zweig führt zu den Anweisungen nach der Schleife

18 Klassendiagramme Aufbau einer Klassenbox <<stereotyp>> Klassenname Variablen Methoden Stereotypen: <<interface>> Interface <<abstract>> Abstrakte Klasse Abstrakte Klassen / Methoden können auch durch kursiv-schreiben des Namens verdeutlicht werden.

19 Klassendiagramme Inhalt von Klassen UML-Darstellung var : final float blubb() bla(blubb : int) : int Repräsentiert Variable Funktion Funktion mit Parameter und Rückgabetyp <<abstract>> Kuh - milch : float + melken() : float + schlachten() : void

20 Klassendiagramme Sichtbarkeitsmodifikatoren in UML-Diagrammen Modifikator UML-Repräsentation private - default (nichts) protected # public + final (beim Typ dazuschreiben) abstract kursiv static unterstrichen instanz (nicht unterstrichen) Bei final-funktionen ohne Rückgabewert final void verwenden

21 Klassendiagramme Assoziationen 3 Typen: 1 (normale) Assoziation (Linie): normale Beziehung 2 Aggregation (unausgefüllte Raute beim Behälter): Teil-Ganzes-Beziehung (Teil kann auch unabhängig existieren) 3 Komposition (ausgefüllte Raute beim Behälter): strenge Teil-Ganzes-Beziehung (immer genau ein Behälter, 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äude, Gebäude weg Raum auch weg

22 Klassendiagramme Assoziationen Konto -konto Vorlesung -vorlesung Gebaeude -gebaeude -kunde Kunde -student Student -raum Raum 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!

23 Klassendiagramme Multiplizitäten an Assoziationen werden neben den beteiligten Klassen ihre Multiplizitäten 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

24 Klassendiagramme Multiplizitäten Konto Vorlesung Gebaeude 0..* -konto 0..* -vorlesung 1 -gebaeude 1 -kunde Kunde 1..* -student Student 1..* -raum Raum Beziehungen werden in Java zu Attributen (Variablen) für Kardinalitäten >1 benötigt man Arrays oder Listenklassen

25 Klassendiagramme Vererbungsbeziehungen normale Vererbung (extends): Durchgezogene Linie mit unausgemalter Dreiecksspitze bei Oberklasse implements -Beziehung: Gestrichelte Linie mit unausgemalter Dreiecksspitze bei Oberklasse

26 Klassendiagramme Beispiel: Bauernhof EierLegend eier : int eiersammeln() : int Huhn eiersammeln() : int schlachten() : void Schaf melken() : float schlachten() : void zaehlen() : int Sau schlachten() : void «interface» SchlachtVieh schlachten() : void Kuh melken() : float schlachten() : void MilchErzeugend milch : float melken() : float WolleGebend wolle : double scheren() : double

27 Klassendiagramme Beispiel: Bauernhof EierLegend eier : int eiersammeln() : int Huhn eiersammeln() : int schlachten() : void Schaf melken() : float schlachten() : void zaehlen() : int Sau schlachten() : void EierlegendeWollmilchsau melken() : float schlachten() : void eiersammeln() : int scheren() : double «interface» SchlachtVieh schlachten() : void MilchErzeugend milch : float melken() : float Kuh melken() : float schlachten() : void WolleGebend wolle : double scheren() : double

28 Anwendungsfalldiagramme Komponenten eines Anwendungsfalldiagramms Systemkontext Akteur Anwendungsfall

29 Anwendungsfalldiagramme Beispiel: Flughafen Flugbuchung Buchen Kunde Stornieren Kundenbetreuer Administrieren Buchungssystem

30 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ützlich, da Klassen noch verschoben werden können! Dokumentation des UML-Standards de.wikipedia.org/wiki/unified Modeling Language uml.org