Академический Документы
Профессиональный Документы
Культура Документы
Vorlesung Informatik 2
(Sommersemester 2017)
Kapitel 5: UML - Objekte und Klassen
Universität Augsburg
Fakultät für Angewandte Informatik
04.05.2017 / 09.05.2017
1. Organisatorisches
2. Softwareentwurf
3. Programmstruktur
4. Java-Grundlagen
6. UML - Klassendiagramm
Motivation
In der Anforderungsanalyse
Dokumentenanalyse: Formulare, Bedienungsanleitungen,
Fragebögen, . . .
Re-Engineering: Anleitungen, Hilfesysteme,
Bildschirmmasken, Benutzerdialoge, Funktionalität, . . .
Kategorien: Konkrete Dinge/Objekte, Personen, Rollen, Orte,
Organisationen, Behälter und Sammlungen, Kataloge, Verträge,
Aktionen, Ereignisse, Fehler
Pflichtenheft: Ausführliche textuelle Beschreibung
In dieser Vorlesung
Kurze Beschreibung der Systemidee
Formulare, Bildschirmmasken, Kategorien
Objekte:
Kreise mit Attributen: Radius (radius:Integer), Position
(position:Point)
Rechtecke mit Attributen: Länge (length:Integer), Breite
(width:Integer), Position (position:Point)
Punkte sind keine Objekte, da ohne Identität
Zeichenfläche ist kein Daten-Objekt
162 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg
UML - Objekte und Klassen Vorlesung “Informatik 2”
Objekte
Grafischer Editor
Systemidee: Es soll ein grafischer Editor zum Zeichnen von Kreisen
und Rechtecken realisiert werden. Ein Kreis hat eine Position und
einen Radius. Rechtecke werden durch ihre Länge, Breite und
Position beschrieben. Positionen sind Punkte auf der
2-dimensionalen Zeichenfläche.
Mac Kontakte-App
Objekt-Verhalten:
Telefon (mehrwertig)
Neue Telefonnummer
hinzufügen:
addTelephone(in
telephone:String)
{IllegalArgumentException}
Telefonnummer löschen:
deleteTelephone(in
telephone:String)
{IllegalArgumentException}
Namen
Namen
In Informatik 2
In dieser Vorlesung sollen grundsätzlich immer alle diese Angaben
für ein Attribut gemacht werden.
Attribut-Typen
Mögliche UML-Attribut-Typen
Primitiver UML-Datentyp
Strukturierter UML-Datentyp
Aufzählungs-Datentyp (Übung)
Primitive UML-Typen
Primitive Typen sind atomar, d.h. haben keine Komponenten
«primitive»
Char
Strukturierte UML-Datentypen
Was ist ein strukturierter UML-Datentyp?
Strukturierte Datentypen können wie Klassen Attribute und Operationen
besitzen. Objekte eines strukturierten Datentyps besitzen aber keine Identität
(gleiche Attributwerte = gleiches Objekt):
Existieren nur als Komponenten von Klassenobjekten
Dienen der besseren Strukturierung
Grafische Darstellung ähnlich wie die von Klassen. Dem Namen wird das
Schlüsselwort «datatype» vorangestellt
Strukturierte UML-Datentypen
Anfangswert
<Sichtbarkeit> <Name> :<Typ> =<Wert>
[<Multiplizität>] {Einschränkungen}
Was ist der Anfangswert eines Attributs?
Der Anfangswert legt fest, welchen Wert ein neu erzeugtes
Objekt für ein Attribut annimmt
Soll ein Attribut zu Beginn einen (einheitlichen) Standardwert
erhalten, so wird dieser i.d.R. als Anfangswert spezifiziert
Der Anfangswert kann zur Laufzeit des Programms beliebig
geändert werden (außer bei konstanten Attributen)
Beispiele
Systembeschreibung: “Kreise können eine Linienfarbe haben. Die
Standardfarbe ist schwarz”
Folgerung: Attribut linecolor hat Anfangswert black
179 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg
UML - Objekte und Klassen Vorlesung “Informatik 2”
Attribute
Multiplizität
Multiplizität
Mehrwertige Attribute
Mehrwertige Attribute sind Attribute, deren Multiplizität eine Obergrenze größer
als 1 hat.
Beispiel: Attribut angle der Klasse triangle mit Multiplizität [3..3]
Soll-Attribute
Soll-Attribute sind Attribute, deren Multiplizität eine Unterrgrenze größer als 0 hat.
Beispiel: Attribut radius der Klasse Circle mit Multiplizität [1..1].
Kann-Attribute
Kann-Attribute (Optionale Attribute) sind Attribute, deren Multiplizität die
Untergrenze 0 hat.
Beispiel: Attribut telephone der Klasse Contact mit Multiplizität [0..*].
Einschränkungen
Beispiele
Der Radius radius eines Kreises ist immer nicht-negativ
(radius 0)
Geburtstage eines Kontaktes müssen immer in der Form
dd.mm.yyyy angegeben werden
Klassenattribute
Beispiel
Speicherung der Anzahl count aller erzeugten Objekte
In Informatik 2
In dieser Vorlesung sollen grundsätzlich immer alle diese Angaben
für eine Operation gemacht werden.
Parameterliste
Parameterliste
Rückgabetyp
Standardverwaltungsoperationen
Zu jedem Attribut fügt man dem Modell i.d.R. einige
Standardverwaltungsoperationen hinzu.
Für einwertige Attribute
attribut:T {Datenstrukturinvarianten}
getAttribut():T: Liefert den Wert des Attributs
(Get-Operation )
setAttribut(in attribut:T)
{IllegalArgumentException}: Setzt den Wert des
Attributs neu, falls der übergebene Wert angegebene
Datenstrukturinvarianten erfüllt (gültiger Wert), und erzeugt
ansonsten eine Ausnahme (Set-Operation)
checkAttribut(in attribut:T):Boolean: Überprüft
den übergebenen Wert auf Erfüllung der
Datenstrukturinvarianten (Check-Operation)
189 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg
UML - Objekte und Klassen Vorlesung “Informatik 2”
Operationen
Standardverwaltungsoperationen
Für mehrwertige Attribute mit n < m
attribut:T [n..m] {Datenstrukturinvarianten}
getAttribut():T [n..m]: Liefert alle Werte des Attributs
getAttribut(in p:Integer):T
{IndexOutOfBoundsException}: Liefert den p-ten Wert des Attributs,
und erzeugt eine Ausnahme, falls dieser nicht vorhanden ist
addAttribut(in attribut:T)
{IllegalArgumentException}: Fügt den übergebenen Wert des
Attributs hinzu, falls dieser gültig und noch nicht vorhanden ist und m nicht
überschritten wird, und erzeugt ansonsten eine Ausnahme (Add-Operation)
checkAttribut(in attribut:T):Boolean: Überprüft den
übergebenen Wert auf Erfüllung der Datenstrukturinvarianten
deleteAttribut(in attribut:T)
{IllegalArgumentException}: Löscht den übergebenen Wert des
Attributs, falls dieser vorhanden ist und n nicht unterschritten wird, und
erzeugt ansonsten eine Ausnahme (Delete-Operation)
Klassenoperationen
Parameternamen
Für jedes Attribut, das bei Konstruktion des Objekts einen durch den Benutzer
festgelegten Wert erhalten soll, erhält der Konstruktor einen gleichlautenden
Eingabeparameter für die Wertübergabe.
Soll-Attribute
Gibt es für ein Soll-Attribut keinen gleichlautenden Eingabeparameter, so wird für
dieses Attribut ein Anfangswert (=Standardwert) vorgesehen.
Sichtbarkeiten
Für Klassen, Attribute und Operationen werden die Sichtbarkeiten +
oder - vorangestellt, die deren Benutzbarkeit durch andere
Modellelemente einschränkt.
Sichtbarkeiten
Für Klassen, Attribute und Operationen werden die Sichtbarkeiten +
oder - vorangestellt, die deren Benutzbarkeit durch andere
Modellelemente einschränkt.
Sichtbarkeiten
Für Klassen, Attribute und Operationen werden die Sichtbarkeiten +
oder - vorangestellt, die deren Benutzbarkeit durch andere
Modellelemente einschränkt.
UML Java
Klasse Klasse gleichen Namens
Strukturierter Datentyp Klasse gleichen Namens
Integer int
Real double
Boolean boolean
String String, StringBuilder
+ public
- private
Namen von Datentypen werden aus UML übernommen, soweit
möglich bzgl. namensgleicher Bibliotheksklassen
Beispiele
UML Java
+ Circle public class Circle {. . .}
«datatype» Point public class Point {. . .}
- radius:Integer private int radius;
- telephone:String [0..*] private ArrayList<String>
telephone;
- count:Integer =0 private static int count =
{count >= 0} 0;
+ setPosition(in public void
position:Point) setPosition(Point
{IllegalArgumentException} position) throws
IllegalArgumentException
{. . .}
- checkRadius(in radius private static boolean
:integer):Boolean checkRadius(int radius)
{. . .}
Diskussion
Eine IndexOutOfBoundsException ist eine unchecked
Exception, die nicht im Prototyp genannt werden muss. Da wir aber
wie besprochen bis auf weiteres checked und unchecked Exceptions
erstmal nicht unterscheiden wollen, reichen wir sie hier weiter und
fangen sie später auch ab.
Diskussion
Beachten Sie, dass es sich hier nur um eine mögliche sinnvolle Implementierung
handelt. Auch eine Implementierung ohne das Erzeugen einer Ausnahme wäre
denkbar (z.B. wirft die Operation remove selbst keine Ausnahme, wenn der Wert
nicht vorhanden ist). Die Frage ist, ob man dem Benutzer zwingend die
Rückmeldung geben möchte, ob tatsächlich etwas gelöscht wurde, oder nicht - und
das ist anwendungsabhängig.
Für Attribute, für die kein Parameter übergeben wird, wird ein
Standardwert gesetzt:
Zeile 3: Bei einwertigen kann-Attributen darf dieser
Standardwert der Wert null sein (im Gegensatz zu
muss-Attributen)
Zeile 4: Bei mehrwertigen kann-Attributen mit beliebig vielen
Werten (Obergrenze der Multiplizität *) ist dieser Standardwert
i.d.R. eine leere Collection
1 public Contact(String name) throws
IllegalArgumentException {
2 setName(name);
3 this.birthday = null;
4 this.telephone = new ArrayList<String>();
5 }
Literatur
Literatur
*Weiterführend:
[Heide Balzert] Lehrbuch der Objektmodellierung
Kapitel 2.1 - 2.14 (Objekt, Klasse, Attribut, Operation in der
Analysephase)
Kapitel 4.4, 4.6, 4.10 (Checklisten in der Analysephase)