Modellierung und Programmierung 1
Prof. Dr. Sonja Prohaska
Computational EvoDevo GroupInstitut fur InformatikUniversitat Leipzig
16. Dezember 2015
Modellierung – KonzeptEin Modell ist die formale Darstellung eins Ausschnitts der realenWelt, der auf das Wesentliche reduziert ist.Entwurf- und Zerlegungstechniken
I zielgerichteter Entwurf
top-down Analyse: schrittweise Vereinfachung einesProblems durch Zerlegung in Teilprobleme, Erstellen vonTeilprogrammen zur Losung von Teilproblemen,zusammenfugen der Teilprogramme zu einem Ganzen
I kompositioneller Entwurf
bottom-up Synthese: Zusammensetzen vonElementarkonstruktionen, sukzessive komplexereKonstruktionen, Annahern an die Losung
I objektorientierter Entwurf
Synthese der Entwurfstrategien: Daten in Form von Klassenund Objekten als elementaren Einheiten, Funktionalitat durchMethoden, Komposition liefert die Losung
Modellierung
I Objekte – Grundbausteine der objekorientiertenProgrammierung
I Aufbau:I Attributen: Daten – StrukturkomponentenI Methoden: Operationen – Funktionskomponenten
I Objekte kommunizieren uber Nachrichten (durch Aufrufenvon Methoden)
I sie senden, empfangen und reagieren auf Nachrichten
I Attributen und Methoden sind im Objekt (allgem. Modul)gekapselt
I Attribute sollten nicht offentlich zur Verfugung stehen
I stattdessen bieten offentlich zugangliche MethodenSchnittstellen an
UML – Unified Modeling Language
ist eine umfangreiche, standardisierte, grafischeModellierungssprache zur Spezifikation, Konstruktion undDokumentation von Software-Teilen und anderen Systemen.Dabei werden Begriffe und Beziehungen spezifiziert/modelliertund graphisch als Diagramme dargestellt.Wir beschranken uns auf Klassendiagramme, sie stellen Klassenund ihre Beziehungen dar.
KlassendiagrammeKlassen werden durch Rechtecke dargestellt, die folgenden Rubriken,werden durch eine horizontale Linie abgetrennt:
I Klassenname (fett)
I Attribute
[Sichtbarkeit] [Variablenname][: Datentyp]
I Klassenattribute unterstrichen
I Methoden
[Sichtbarkeit] [Methodenname]([Parameterliste]) [: Ruckgabetyp]
I Klassenmethoden unterstrichen
I 1 Klassenvariable
I 5 Instanzvariablen
I 1 Klassenmethode
I 3 Instanzmethoden+ fuettern(double): void
− rasse:− anzahl:
− alter:
+ getAnzahl():
+ impfen(String[]):
+ verkaufen():
void
void
void
String
int
int
− geschlecht:
− masse:
char
double
Milchvieh
String[]− impfungen:
Sichtbarkeit
UML keyword class package subclass world+ public offentlich yes yes yes yes# protected geschutzt yes yes yes no∼ no modifier Paket yes yes no no− private privat yes no no no
abgeleitete Klassen – Spezialisierung
I ubergeordnete Klassen (Superklasse, Oberklasse, Elternklasse)
I untergeordnete Klassen (Subklasse, Unterklasse, Kindklasse)
I Deklaration einer abgeleiteten Klasse
I public class [Subklasse] extends [Superklasse] { ... }I Beispiel: public class Milchkuh exdends Milchvieh
I Superklasse → Subklasse: Spezialisierung
I Subklasse → Superklasse: Generalisierung
UML Darstellung
neue Attribute
neue Methoden
ererbte Attribute
ererbte Methoden
+ fuettern(double): void
− rasse:− anzahl:
− alter:
+ getAnzahl():
+ impfen(String[]):
+ verkaufen():
void
void
void
String
int
int
− geschlecht:
− masse:
char
double
Milchvieh
String[]− impfungen:
Generalisierung
Spezialisierung
Subklasseabgeleitete Klasse
− milchleistung:
− milchqualitaet:
double
int
Milchkuh
+ trockenstellen()
double+ melken()
void
SuperklasseBasisklasse
Klassendiagramm
Vererbung
− geschlecht
− masse:
− impfungen
MilchkuhPeppi
− milchleistung
− milchqualitaet
+ melken()
+ trockenstellen()
+ getAnzahl()
31Holstein
− anzahl− rasse
− alter 15 Monate
w
644 kg
MKS, BTV
1
37,9 l
+ impfen()
+ fuettern()
+ verkaufen()
Milchkuh
Friedl Milchkuh
Zenzi
Resi Milchkuh
Objekt
Vererbung (inheritance)
I abgeleitete Klassen erben von der Basisklasse alle fur siesichtbaren (public and protected) Instanzvariablen und-methoden
I also, nicht Klassenvariablen, -methoden, Konstruktoren
I in der UML wird die Vererbungsbeziehung durch einen Pfeilmit einer leeren, dreieckigen Spitze dargestellt
I sie zeigt von der abgeleiteten Klasse zur Basisklasse
I Beispiel: Ein Objekt der Subklasse Milchkuh besitzt allepublic und protected Attribute der Superklasse Milchvieh
I die Subklasse kann fur sie sichtbare Methoden (mit Ausnahmeder Konstruktoren) der Superklasse ausfuhren.
I in Java ist nur einfachen, (aber wiederholte) Vererbung erlauft
I die Klassenhierarchie ist eine Baumstruktur (beliebiger Tiefe)
super – Zugriff auf die Superklasse
Zugriff auf Konstruktor der Superklasse
I ein Konstruktor einer Subklasse muss als erstes einenKonstruktor der Superklasse aufrufen
I Syntax:
Superklasse: [Constructor]( [Parameter1],... [Parametern] )
Subklasse: super( [Argument1],... [Argumentn] );
I die Argumentenliste muss der Paramenterliste entsprechen
Hinweis: analog kann ein Konstruktor einen Konstruktor der selben Klasse aufrufenthis( [Argument1],... [Argumentn] ); oder this( , [Argument2],... [Argumentn] );
Zugriff auf Attribute und Methoden der Superklasse
I Syntax: super.[Attribut] bzw. super.[Methode]
auch moglich: super.super.[Attribut|Methode]
Uberschreiben von Methodenman spricht vom “Uberschreiben” einer Methode, wenn
I innerhalb einer Subklasse
eine neue Methode mit identischem Namen und identischenSchnittstellen (d.h. Ruckgabetype und Parameterliste)
zu einer bereits existierenden Methode aus der Superklasse
angelegt wird.
I Objekte der Superklasse rufen Methode der Superklasse auf
I Objekte der Subklasse, und davon abeleitete Klassen
rufen die Methode der Subklasse auf
...
+ fuettern(double): void
Milchkuh
...
+ fuettern(double): void
...
+ fuettern(double): void
...
Ueberschreiben
der Methode
fuettern()
Milchvieh
mit 20 kg Heu
mit 120 kg Gras
BulleKalb
mit 8 l Milchersatz
Superklasse
Subklasse
mit 20 kg Heu
Polymorphimus und dynamische Bindung
Polymorphismus, vom griechischen, dt. “Vielgestaltigkeit”; dieMoglichkeit verschiedene Form oder Gestalt anzunehmen
I in der OOP: die Fahigkeit einer Variable auf verschiedeneObjekte unterschiedlicher Klassen der selben Hirarchiezuzugreifen
I Deklaration und Definition: Superklasse als Datentyp
I Polymorphismus: in Superklasse und alle abgeleitetenKlassen
Abstrakte Klasse(wem’s noch nicht kompliziert genug ist)
I auch “Wurzelklasse” (engl. root class) genannt
I kann an oberster Stelle in der Hirarchie stehen
I ist nicht instanzierbar, d.h. es konnen keine Objekte dieserKlasse angelegt werden
I stellen eine Zusammenfassung der Attribute und Methodendar, die allen Subklassen gmein sind
I abstrakte Methoden mussen deklariert aber noch nichtdefiniert sein
I Wozu? um zu erzwingen, dass Subklassen entsprechendeMethoden definieren
I abstrakte Klassen werden in UML gekennzeichnet durchI kursiver Schriftschnitt fur Klassenname, Variablen und
Methoden oderI das Wort abstract in geschweiften Klammern unterhalb des
Klassennamens
Drei Beispiel
I TestDerived
aus Ivor Horton’s Beginning Java 7, Kapitel 6, pages 226-236I gutes Einstiegsbeispiel
I AnimalFriends
von Prof. Sonja ProhaskaI Erweiterung des obigen BeispielsI ohne DokumentationI mit nutzlichen Kommentaren
I Boote
von Dr. Monika Meiler, passen zum SkriptI gutes Beispiel fur abstrakte KlassenI sehr gutes Beispiel fur automatische Dokumentation
Methode toString()
I bisher: zum Umwandeln von primitiven Datentypen zu String
I Syntax: toString(x), wobei x von primitivem Datentyp
I bisher: impliziter Aufruf toString() durch print()
I Syntax: print(x) eigentlich print(toString(x))
I jetzt neu: zum Umwandeln von Objekten in String
I x.toString(), wobei x ein Objekt ist
I toString() ist eine Methode der universellen Superklasse
I sie wird an alle Klassen vererbt und gibt eine String zuruck:
[Name der Klasse]@[HashCode]
I der besondere Nutzen besteht darin, die Methode zuuberschreiben, und eine eigene Stringrepresentation von Objektender Klasse zu erzeugen
Schlagen sie selbst folgende Methoden der Klasse Object nach
I getClass()
I getName()
Klassenbeziehungen darstellen mit UMLVererbung (Generalisierung)
I Objekte gehen aus anderen Objekte durch Generalisierung oderSpezialisierung hervor. Attribute und Methoden werden vererbt.
I UML: ein Pfeil mit offener Pfeilspitze zeigt in Richtung generellererKlasse
Assoziation
I Objekte stehen miteinander in Beziehung und konnen miteinanderkommunizieren.
I UML: eine verbindende Linie (evtl. mit Pfeilspitze)
I Aggregation und Komposition sind Spezialfalle der Assoziation
Klassenbeziehungen darstellen mit UML
Komposition
I (Teil)objekte sind existenzabhangig vom aggregierten Objekt (demGanzen)
I UML: verbindende Linie, ausgefullte Raute auf seiten desaggregierten Objekts
I hier ist die Multiplizitat immer 1
Aggregation
I (Teil)objekte stehen lose mit dem aggregierten Objekt in Verbindung
I UML: verbindende Linie, offene Raute auf seiten des aggregiertenObjekts
Multiplizitat
Die Enden der Assoziationsbeziehungen konnen mit Multiplizitatendekoriert werden.
Multiplizitat
I Intervall von nicht-negativen, ganzen Zahlen,
I welches die untere und obere Schranke
I der Anzahl an Werten (bzw. Objekten) angibt
I Beispiele:
0..2 in der Mathematik [0, 2]
1..* in der Mathematik [1,∞]
Beispieldiagramm
Nutzliches
Package erstellen
I Unterverzeichnis [Paketname] anlegen
I alle Klassen eines Paketes in dieses Verzeichnis kopieren
I In alle Datein an oberster Stelle “pakage [Paketname];”einfugen
I ubersetzung der Klassen wie ublich:
javac [Hauptprogramm].java
Dokumentation erstellenjavadoc
Konsolenoutput umlenkenjava [Programm] > [OutputFile]