Modellierung und Programmierung 1

Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut f¨ ur Informatik Universit¨ at Leipzig 16. Dezember 2...
Author: Bernt Lang
44 downloads 3 Views 2MB Size
Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut f¨ ur Informatik Universit¨ at Leipzig

16. Dezember 2015

Modellierung – Konzept Ein Modell ist die formale Darstellung eins Ausschnitts der realen Welt, der auf das Wesentliche reduziert ist. Entwurf- und Zerlegungstechniken I

zielgerichteter Entwurf top-down Analyse: schrittweise Vereinfachung eines Problems durch Zerlegung in Teilprobleme, Erstellen von Teilprogrammen zur L¨ osung von Teilproblemen, zusammenf¨ ugen der Teilprogramme zu einem Ganzen

I

kompositioneller Entwurf bottom-up Synthese: Zusammensetzen von Elementarkonstruktionen, sukzessive komplexere Konstruktionen, Ann¨ahern an die L¨ osung

I

objektorientierter Entwurf Synthese der Entwurfstrategien: Daten in Form von Klassen und Objekten als elementaren Einheiten, Funktionalit¨at durch Methoden, Komposition liefert die L¨ osung

Modellierung I

I

Objekte – Grundbausteine der objekorientierten Programmierung Aufbau: I I

Attributen: Daten – Strukturkomponenten Methoden: Operationen – Funktionskomponenten

I

Objekte kommunizieren u ¨ber Nachrichten (durch Aufrufen von Methoden)

I

sie senden, empfangen und reagieren auf Nachrichten

I

Attributen und Methoden sind im Objekt (allgem. Modul) gekapselt

I

Attribute sollten nicht o ugung stehen ¨ffentlich zur Verf¨ stattdessen bieten ¨ offentlich zug¨angliche Methoden Schnittstellen an

I

UML – Unified Modeling Language

ist eine umfangreiche, standardisierte, grafische Modellierungssprache zur Spezifikation, Konstruktion und Dokumentation von Software-Teilen und anderen Systemen. Dabei werden Begriffe und Beziehungen spezifiziert/modelliert und graphisch als Diagramme dargestellt. Wir beschr¨anken uns auf Klassendiagramme, sie stellen Klassen und ihre Beziehungen dar.

Klassendiagramme Klassen 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]) [: R¨ uckgabetyp] I Klassenmethoden unterstrichen Milchvieh

I

1 Klassenvariable

I

5 Instanzvariablen

I

1 Klassenmethode

I

3 Instanzmethoden

− anzahl: − rasse: − alter: − geschlecht: − masse: − impfungen: + getAnzahl(): + impfen(String[]): + fuettern(double): + verkaufen():

int String int char double String[] void void void void

Sichtbarkeit UML + # ∼ −

keyword public protected no modifier private

¨offentlich gesch¨ utzt Paket privat

class yes yes yes yes

package yes yes yes no

subclass yes yes no no

world yes no no no

abgeleitete Klassen – Spezialisierung I

u ¨bergeordnete 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 Klassendiagramm Superklasse Basisklasse

Objekt

Milchvieh − anzahl: − rasse: − alter: − geschlecht: − masse: − impfungen:

Peppi int String int char double String[]

+ getAnzahl(): + impfen(String[]): + fuettern(double): + verkaufen():

void void void void Generalisierung

Vererbung Spezialisierung Subklasse abgeleitete Klasse

− anzahl − rasse − alter − geschlecht − masse: − impfungen − milchleistung − milchqualitaet

Milchkuh 31 Holstein 15 Monate w 644 kg MKS, BTV 37,9 l 1

+ getAnzahl() + impfen() + fuettern() + verkaufen() + melken() + trockenstellen()

double int

+ melken() + trockenstellen()

double void

neue Attribute

ererbte Methoden

neue Methoden

Milchkuh − milchleistung: − milchqualitaet:

ererbte Attribute

Zenzi

Milchkuh

Friedl

Milchkuh

Resi

Milchkuh

Vererbung (inheritance) I

I I

I I

I

I I

abgeleitete Klassen erben von der Basisklasse alle f¨ ur sie sichtbaren (public and protected) Instanzvariablen und -methoden also, nicht Klassenvariablen, -methoden, Konstruktoren in der UML wird die Vererbungsbeziehung durch einen Pfeil mit einer leeren, dreieckigen Spitze dargestellt sie zeigt von der abgeleiteten Klasse zur Basisklasse Beispiel: Ein Objekt der Subklasse Milchkuh besitzt alle public und protected Attribute der Superklasse Milchvieh die Subklasse kann f¨ ur sie sichtbare Methoden (mit Ausnahme der Konstruktoren) der Superklasse ausf¨ uhren. in Java ist nur einfachen, (aber wiederholte) Vererbung erlauft 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 einen Konstruktor 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 aufrufen this( [Argument1],... [Argumentn] ); oder this( , [Argument2],... [Argumentn] );

Zugriff auf Attribute und Methoden der Superklasse I

Syntax: super.[Attribut] bzw. super.[Methode] auch m¨oglich: super.super.[Attribut|Methode]

¨ Uberschreiben von Methoden ¨ man spricht vom “Uberschreiben” einer Methode, wenn I

innerhalb einer Subklasse eine neue Methode mit identischem Namen und identischen Schnittstellen (d.h. R¨ uckgabetype 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 Superklasse

Milchvieh ...

Ueberschreiben der Methode fuettern()

+ fuettern(double):

void

mit 20 kg Heu

Subklasse Milchkuh ...

+ fuettern(double): mit 120 kg Gras

Kalb ...

void

+ fuettern(double): mit 8 l Milchersatz

Bulle ...

void mit 20 kg Heu

Polymorphimus und dynamische Bindung Polymorphismus, vom griechischen, dt. “Vielgestaltigkeit”; die M¨oglichkeit verschiedene Form oder Gestalt anzunehmen I

in der OOP: die F¨ahigkeit einer Variable auf verschiedene Objekte unterschiedlicher Klassen der selben Hirarchie zuzugreifen

I

Deklaration und Definition: Superklasse als Datentyp

I

Polymorphismus: in Superklasse und alle abgeleiteten Klassen

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 k¨ onnen keine Objekte dieser Klasse angelegt werden

I

stellen eine Zusammenfassung der Attribute und Methoden dar, die allen Subklassen gmein sind

I

abstrakte Methoden m¨ ussen deklariert aber noch nicht definiert sein

I

Wozu? um zu erzwingen, dass Subklassen entsprechende Methoden definieren abstrakte Klassen werden in UML gekennzeichnet durch

I

I

I

kursiver Schriftschnitt f¨ ur Klassenname, Variablen und Methoden oder das Wort abstract in geschweiften Klammern unterhalb des Klassennamens

Drei Beispiel

I

TestDerived aus Ivor Horton’s Beginning Java 7, Kapitel 6, pages 226-236 I

I

AnimalFriends von Prof. Sonja Prohaska I I I

I

gutes Einstiegsbeispiel

Erweiterung des obigen Beispiels ohne Dokumentation mit n¨ utzlichen Kommentaren

Boote von Dr. Monika Meiler, passen zum Skript I I

gutes Beispiel f¨ ur abstrakte Klassen sehr gutes Beispiel f¨ ur 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 zur¨ uck: [Name der Klasse]@[HashCode]

I

der besondere Nutzen besteht darin, die Methode zu u ¨berschreiben, und eine eigene Stringrepresentation von Objekten der Klasse zu erzeugen

Schlagen sie selbst folgende Methoden der Klasse Object nach I I

getClass() getName()

Klassenbeziehungen darstellen mit UML Vererbung (Generalisierung) I

Objekte gehen aus anderen Objekte durch Generalisierung oder Spezialisierung hervor. Attribute und Methoden werden vererbt.

I

UML: ein Pfeil mit offener Pfeilspitze zeigt in Richtung generellerer Klasse

Assoziation I

Objekte stehen miteinander in Beziehung und k¨ onnen miteinander kommunizieren.

I

UML: eine verbindende Linie (evtl. mit Pfeilspitze)

I

Aggregation und Komposition sind Spezialf¨alle der Assoziation

Klassenbeziehungen darstellen mit UML Komposition I

(Teil)objekte sind existenzabh¨angig vom aggregierten Objekt (dem Ganzen)

I

UML: verbindende Linie, ausgef¨ ullte Raute auf seiten des aggregierten Objekts

I

hier ist die Multiplizit¨at immer 1

Aggregation I

(Teil)objekte stehen lose mit dem aggregierten Objekt in Verbindung

I

UML: verbindende Linie, offene Raute auf seiten des aggregierten Objekts

Multiplizit¨at

Die Enden der Assoziationsbeziehungen k¨ onnen mit Multiplizit¨aten dekoriert werden. Multiplizit¨ at 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

N¨utzliches Package erstellen I

Unterverzeichnis [Paketname] anlegen

I

alle Klassen eines Paketes in dieses Verzeichnis kopieren

I

In alle Datein an oberster Stelle “pakage [Paketname];” einf¨ ugen

I

u ¨bersetzung der Klassen wie u ¨blich: javac [Hauptprogramm].java

Dokumentation erstellen javadoc Konsolenoutput umlenken java [Programm] > [OutputFile]