You are on page 1of 58

Java-Grundlagen Vorlesung “Informatik 2”

Zeichensätze und Unicode

Vorlesung Informatik 2
(Sommersemester 2017)
Kapitel 5: UML - Objekte und Klassen

Robert Lorenz, Lehrprofessur für Informatik

Universität Augsburg
Fakultät für Angewandte Informatik

04.05.2017 / 09.05.2017

156 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”

1. Organisatorisches

2. Softwareentwurf

3. Programmstruktur

4. Java-Grundlagen

5. UML - Objekte und Klassen

6. UML - Klassendiagramm

157 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”

Motivation

UML bietet die Möglichkeit, programmiersprachenunabhängig


anwendungsspezifische strukturierte Datentypen, sog.
Klassen, zu definieren
Die Variablen eines solchen Datentyps heißen Objekte
(Exemplare, Instanzen)
Klassen und sog. Beziehungen zwischen Klassen lassen sich
grafisch im sog. Klassendiagramm darstellen

Definition 5.1 (Klassendiagramm)


Das Klassendiagramm dient als statisches Modell der
Datenstruktur einer Anwendung.

158 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Objekte

5. UML - Objekte und Klassen


5.1 Objekte
5.2 Klassen
5.3 Attribute
5.4 Operationen
5.5 Konstruktoren
5.6 Sichtbarkeiten (vereinfacht)
5.7 Implementierung in Java

159 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Objekte

Was sind Objekte?

Objekte repräsentieren zusammengehörige Daten einer


Anwendung (Objekte können z.B. Dinge, Personen, Begriffe sein)

Definition 5.2 (Objekt)


Ein Objekt ist ein Gegenstand des Interesses einer Anwendung.
Objekte haben (für die Anwendung relevante) Eigenschaften,
sog. Attribute (das sind die Datenkomponenten)
Der Zustand eines Objekts wird beschrieben durch die
Ausprägungen (Werte) seiner Attribute
Jedes Objekt besitzt eine (von seinen Attribut-Werten
unabhängige) Identität (Objekt-Identitäts-Prinzip)
Das Verhalten eines Objekts wird beschrieben durch die
Prototypen der Operationen zur Verwaltung der Attributwerte

160 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Objekte

Wie findet man Objekte?

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

161 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Objekte

Beispiele für 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.

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

Beispiele für 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.

Beispiele Operationen / Verhalten von Kreis-Objekten:


Radius-Wert lesen:
getRadius():Integer
Fläche berechnen:
getArea():Real

163 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Objekte

Beispiele für Objekte


Mac Kontakte-App
Objekte: Kontakte mit Attributen
Vorname
Nachname
Telefon(mehrwertig)
E-Mail (mehrwertig)
Klingelton
Hinweiston
Homepage (mehrwertig)
Geburtstag
Adresse (mehrwertig)
...
164 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg
UML - Objekte und Klassen Vorlesung “Informatik 2”
Objekte

Beispiele für Objekte

Mac Kontakte-App

Objekt-Verhalten:
Telefon (mehrwertig)
Neue Telefonnummer
hinzufügen:
addTelephone(in
telephone:String)
{IllegalArgumentException}

Telefonnummer löschen:
deleteTelephone(in
telephone:String)
{IllegalArgumentException}

Alle Telefonnummern abfragen:


getTelephone():String[0..*]

165 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Klassen

5. UML - Objekte und Klassen


5.1 Objekte
5.2 Klassen
5.3 Attribute
5.4 Operationen
5.5 Konstruktoren
5.6 Sichtbarkeiten (vereinfacht)
5.7 Implementierung in Java

166 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Klassen

Was sind Klassen?

Definition 5.3 (Klasse)


Objekte mit gleichen Attributen und Operationen werden zu
Klassen zusammengefasst.
Eine Klasse ist ein Schema zur Spezifikation von
Gemeinsamkeiten einer Menge von Objekten mit denselben
Eigenschaften und demselben Verhalten.
Eine Klasse ist eine Vereinbarung einer Datenstruktur

Definition 5.4 (Objekt-Klassen-Prinzip)


Ein Objekt ist ein zur Ausführungszeit des Programms
vorhandenes Exemplar einer Klasse, für das Speicher
reserviert wird.
Jedes Objekt gehört zu genau einer Klasse.

167 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Klassen

Wie werden Klassen dargestellt?

Klassen - Grafische Darstellung


Klassen werden (grafisch) dargestellt durch
einen Namen
eine Liste von Attributen
eine Liste von Operationen (inkl. Konstruktoren)

168 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Klassen

Beispiele für Klassen

169 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Klassen

Beispiele für Klassen

170 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Klassen

Namen

Namen in UML-Modellen werden nach fachlichen


Gesichtspunkten (aus Sicht des Benutzers) gewählt

Namen für Klassen


Ein Klassenname ist ein Substantiv im Singular, beginnend mit
einem Großbuchstaben

Namen für Attribute


Ein Attributname beginnt mit einem Kleinbuchstaben

Namen für Operationen


Ein Operationsname beginnt mit einem Kleinbuchstaben und
enthält in der Regel ein Verb (was wird gemacht?). Er soll
ausdrücken, was eine Operation leistet.

171 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Klassen

Namen

Definition 5.5 (Namensraum)


Ein Namensraum ist ein Bereich (eines Modells), in dem jedes
Element einen eindeutigen Namen besitzen muss.

In unterschiedlichen Namensräumen kann der gleiche Name in


unterschiedlicher Bedeutung verwendet werden
Klassen definieren einen Namensraum für Attributnamen
Operationsnamen können innerhalb einer Klasse mehrfach
verwendet werden, wenn sie sich durch ihre Parameter
unterscheiden (Überladen von Operationen)

172 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Attribute

5. UML - Objekte und Klassen


5.1 Objekte
5.2 Klassen
5.3 Attribute
5.4 Operationen
5.5 Konstruktoren
5.6 Sichtbarkeiten (vereinfacht)
5.7 Implementierung in Java

173 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Attribute

Darstellung von Attributen

Allgemeine Form Objekt-Attribut:


<Sichtbarkeit> <Name> :<Typ> =<Wert>
[<Multiplizität>] {Einschränkungen}
Allgemeine Form Klassen-Attribut:
<Sichtbarkeit> <Name> :<Typ> =<Wert>
[<Multiplizität>] {Einschränkungen}

In Informatik 2
In dieser Vorlesung sollen grundsätzlich immer alle diese Angaben
für ein Attribut gemacht werden.

174 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Attribute

Attribut-Typen

<Sichtbarkeit> <Name> :<Typ> =<Wert>


[<Multiplizität>] {Einschränkungen}
Was ist der Typ eines Attributs?
Legt den Wertebereich eines Attributs fest (wie Datentypen in C)
Dient der möglichst präzisen Beschreibung der Daten aus
fachlicher Sicht (Benutzersicht)

Mögliche UML-Attribut-Typen
Primitiver UML-Datentyp
Strukturierter UML-Datentyp
Aufzählungs-Datentyp (Übung)

175 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Attribute

Primitive UML-Typen
Primitive Typen sind atomar, d.h. haben keine Komponenten

Vorgegebene primitive UML-Datentypen


Es existieren folgende vorgegebene primitive UML-Typen:
Boolean, String, Integer, UnlimitedNatural,
Real

Selbst definierte primitive UML-Datentypen


Primitive Typen können selbst definiert werden. Die grafische
Darstellung ist ähnlich wie die von Klassen, aber ohne Attribute und
Operationen. Dem Namen wird das Schlüsselwort «primitive»
vorangestellt.

«primitive»
Char

176 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Attribute

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

177 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Attribute

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

Strukturierter Datentyp vs. Klasse


Sind Objekte an sich für die Funktionalität interessant?
Wenn ja: Klasse
Wenn nein: strukturierter Datentyp

178 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Attribute

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

<Sichtbarkeit> <Name> :<Typ> =<Wert>


[<Multiplizität>] {Einschränkungen}
Was ist die Multiplizität eines Attributs?
Attribute haben eine Multiplizität
Die Multiplizität legt die erlaubte Anzahl der Werte (Elemente)
eines Attributs fest durch Angabe einer Unter- und einer
Obergrenze für die Anzahl in Form
[Untergrenze..Obergrenze]
Die Obergrenze * bedeutet: Anzahl nach oben nicht beschränkt
Die Standardeinstellung [1..1] kann weggelassen werden
Statt [m..m] schreibt man auch kurz [m] (genau m Werte)

180 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Attribute

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..*].

181 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Attribute

Einschränkungen

<Sichtbarkeit> <Name> :<Typ> =<Wert>


[<Multiplizität>] {Einschränkungen}
Was sind Einschränkungen eines Attributs?
Einschränkungen sind Aussagen über Attribute, die immer wahr sein
müssen, geben also Datenstruktur-Invarianten an. Sie werden als
prädikatenlogische Formeln oder natürlichsprachlich angegeben.

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

182 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Attribute

Klassenattribute

Definition 5.6 (Klassenattribut)


Klassenattribute haben nur einen gemeinsamen Wert für alle
Objekte einer Klasse, existieren also nur einmal pro Klasse
Klassenattribute existieren auch dann, wenn es für eine Klasse
(noch) keine Objekte gibt
Klassenattribute speichern Informationen über eine
(Teil-)Menge von Objekten oder eine Information über die
Klasse selbst

Beispiel
Speicherung der Anzahl count aller erzeugten Objekte

183 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Operationen

5. UML - Objekte und Klassen


5.1 Objekte
5.2 Klassen
5.3 Attribute
5.4 Operationen
5.5 Konstruktoren
5.6 Sichtbarkeiten (vereinfacht)
5.7 Implementierung in Java

184 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Operationen

Darstellung von Operationen

Allgemeine Form Objekt-Operation:


<Sichtbarkeit> <Name> (<Parameterliste>)
:<Typ> [<Multiplizität>] {Ausnahmenliste}
Allgemeine Form Klassen-Operation:
<Sichtbarkeit> <Name> (<Parameterliste>)
:<Typ> [<Multiplizität>] {Ausnahmenliste}

In Informatik 2
In dieser Vorlesung sollen grundsätzlich immer alle diese Angaben
für eine Operation gemacht werden.

185 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Operationen

Parameterliste

<Sichtbarkeit> <Name> (<Parameterliste>) :<Typ>


[<Multiplizität>] {Ausnahmenliste}

Was ist die Parameterliste?


Die Parameterliste definiert Ein- und Ausgabedaten von Operationen und besteht
aus einer Liste von durch Komma getrennten Parametern

Wie werden einzelne Parameter angegeben?


<Richtung> <Name> :<Typ> [<Multiplizität>]
<name>: Name des Parameters
<Typ>: Datentyp des Parameters
[<Multiplizität>]: Multiplizität des Parameters
<Richtung>: Richtung des Parameters
Name, Typ und Multiplizität haben die gleiche Bedeutung wie bei Attributen.

186 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Operationen

Parameterliste

Was ist die Richtung eines Parameters?


<Richtung> <Name> :<Typ> =<Wert>
[<Multiplizität>] {Ausnahmenliste}
Ein Parameter kann folgende Richtungen haben
in reiner Eingabeparameter
Zugriff nur lesend
out reiner Ausgabeparameter
Wertzuweisung erst in der Operation
(über Call-by-Reference)
inout Ein- und Ausgabeparameter
Wertänderung in der Operation

187 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Operationen

Rückgabetyp

<Sichtbarkeit> <Name> (<Parameterliste>) :<Typ>


[<Multiplizität>] {Ausnahmenliste}

Was ist der Rückgabetyp?


Gibt den Datentyp der Werte an, die zurückgegeben werden
Die Multiplizität gibt die erlaubte Anzahl der Rückgabewerte an (Unter- und
Obergrenze, wie bei Attributen)
Wird weggelassen, falls die Operation keine Rückgabewerte hat

Rückgabewert vs. Ausgabeparameter


Es kann maximal ein Datentyp für Rückgabewerte angegeben werden
Um zu spezifizieren, dass Werte verschiedenen Datentyps in einer Operation
geändert werden, braucht man Ausgabeparameter

188 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Operationen

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)

190 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Operationen

Klassenoperationen

Definition 5.7 (Klassenoperation)


Eine Klassenoperation ist der jeweiligen Klasse zugeordnet und
nicht auf ein einzelnes Objekt der Klasse anwendbar.
Für den Zugriff auf Klassenattribute
Für Berechnungen, die sich auf mehrere Objekte einer Klasse
beziehen

Wieso keine setCount-Methode?


count wird indirekt bei jedem Konstruktor-Aufruf erhöht und sollte
nicht direkt gesetzt werden können!

191 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Konstruktoren

5. UML - Objekte und Klassen


5.1 Objekte
5.2 Klassen
5.3 Attribute
5.4 Operationen
5.5 Konstruktoren
5.6 Sichtbarkeiten (vereinfacht)
5.7 Implementierung in Java

192 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Konstruktoren

Darstellung von Konstruktoren


<Sichtbarkeit> <Klassenname>(<Parameterliste>)
{Ausnahmenliste}
Definition 5.8 (Konstruktor)
Ein Konstruktor ist eine Operation ohne Rückgabetyp zur
Erzeugung eines Objekts und zur Initialisierung der Attribute des
erzeugten Objekts gemäß den für die Eingabeparameter
übergebenen Werten. Erzeugt ggf. eine Ausnahme bei ungültigen
Initialisierungswerten.
Konstruktoren heißen immer wie die Klasse selbst
Sichtbarkeit und Parameterliste werden wie bei Operationen
angegeben, allerdings haben Parameter keine Richtung
Es kann mehrere Konstruktoren mit unterschiedlichen
Parameterlisten geben: diese Konstruktoren führen
unterschiedliche Initalisierungen der Attribute durch
193 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg
UML - Objekte und Klassen Vorlesung “Informatik 2”
Konstruktoren

Regeln für das Setzen von Attributwerten

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.

Beispiele für Konstruktoren aus Klasse Circle


Circle(position:Point,radius:Integer)
{IllegalArgumentException}
Position und Radius werden durch Benutzer festgelegt
Circle(position:Point) {IllegalArgumentException}
Radius muss bei Erzeugung einen Standardwert bekommen

194 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Sichtbarkeiten (vereinfacht)

5. UML - Objekte und Klassen


5.1 Objekte
5.2 Klassen
5.3 Attribute
5.4 Operationen
5.5 Konstruktoren
5.6 Sichtbarkeiten (vereinfacht)
5.7 Implementierung in Java

195 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Sichtbarkeiten (vereinfacht)

Sichtbarkeiten von Klassen

Sichtbarkeiten
Für Klassen, Attribute und Operationen werden die Sichtbarkeiten +
oder - vorangestellt, die deren Benutzbarkeit durch andere
Modellelemente einschränkt.

In welchen anderen Klassen stehen Objekte der Klasse zur


Verfügung?
+ in allen anderen Klassen
Übliche Einstellung
Ausnahmen z.B. sog. innere Klassen (später)
- nur in Klassen im selben Paket
UML-Pakete behandeln wir nicht

196 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Sichtbarkeiten (vereinfacht)

Sichtbarkeiten von Attributen

Sichtbarkeiten
Für Klassen, Attribute und Operationen werden die Sichtbarkeiten +
oder - vorangestellt, die deren Benutzbarkeit durch andere
Modellelemente einschränkt.

In welchen anderen Klassen kann man direkt auf den Attributwert


ohne Operationen zugreifen?
+ in allen anderen Klassen
Ausnahmen z.B. sog. innere Klassen (später)
- in keiner anderen Klasse
Übliche Einstellung zum Schutz von Datenstruktur-
Invarianten (Einkapselung)

197 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Sichtbarkeiten (vereinfacht)

Sichtbarkeiten von Operationen

Sichtbarkeiten
Für Klassen, Attribute und Operationen werden die Sichtbarkeiten +
oder - vorangestellt, die deren Benutzbarkeit durch andere
Modellelemente einschränkt.

In welchen anderen Klassen kann die Operation aufgerufen werden?


+ in allen anderen Klassen
Kann man durch Aufruf Datenstrukturinvarianten zerstören?
Ist die Aufrufbarkeit von außerhalb nötig oder erwünscht?
- in keiner anderen Klasse
z.B. für Hilfsoperationen

198 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

5. UML - Objekte und Klassen


5.1 Objekte
5.2 Klassen
5.3 Attribute
5.4 Operationen
5.5 Konstruktoren
5.6 Sichtbarkeiten (vereinfacht)
5.7 Implementierung in Java

199 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

Übersetzung von Klassen, Datentypen und Sichtbarkeiten

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

200 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

Übersetzung von Attributen


UML Java
Attribut Attribut gleichen Namens
Sichtbarkeit zugehörige Java-Sichtbarkeit (vo-
rige Folie)
einwertiger Datentyp zugehöriger Java-Datentyp (vori-
ge Folie)
begrenzter mehrwertiger Daten- Feldtyp
typ
unbegrenzter mehrwertiger Da- passende API-Collection-Klasse
tentyp
Anfangswert Wertzuweisung in Deklaration
Klassenattribut static
Einschränkungen Implementierung in einer check-
Funktion + Überprüfung in set-
Funktion
201 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg
UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

Übersetzung von Operationen (inkl. Konstruktoren)


UML Java
Operation Operation gleichen Namens
Sichtbarkeit zugehörige Java-Sichtbarkeit (vo-
rige Folie)
Parameter: Name und Datentyp wie bei Attributen (vorige Folie)
Parameter: Richtung Vorgabe für die Implementierung:

in: Zugriff nur lesend


out: Übergabe eines
leeren Objekts (z.B. leere
Liste)

Rückgabe-Datentyp wie bei Attributen (vorige Folie)


Klassenoperation static
Ausnahmeliste throws <Ausnahmeliste>
202 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg
UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

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)
{. . .}

203 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

Implementierung von mehrwertigen get-Operationen


Komplette Liste zurückgeben: Immer Kopie zurückgeben, sonst
kann die Liste mit ArrayList-Operationen verändert werden (d.h.
kein Schutz mehr von Datenstrukturinvarianten)
1 public ArrayList<String> getTelephone() {
2 ArrayList<String> copy = new ArrayList<String>();
3 for (String number : this.telephone) {
4 copy.add(number);
5 }
6 return copy;
7 }

Zeile 3: Spezielle for-Schleife für API-Collections. Mit <Typ>


<Objekt> : <Collection> werden alle Objekte der
Collection durchlaufen (undefinierte Reihenfolge)
Zeile 4: Mit <Objekt> kann in der Schleife auf das aktuelle
Objekt zugegriffen werden

204 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

Implementierung von mehrwertigen get-Operationen

Einzelnes Listenelement zurückgeben: Ausnahme


IndexOutOfBoundsException der Operation get wird
weitergereicht, falls der p-te Wert nicht existiert.
1 public String getTelephone(int p) throws
IndexOutOfBoundsException {
2 return this.telephone.get(p);
3 }

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.

205 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

Implementierung von add - Operationen


Erzeuge eine Ausnahme, falls:
Übergebener Wert ungültig (Zeilen 2+3)
Übergebener Wert schon in der Liste vorhanden (Zeilen 4+5)
1 public void addTelephone(String telephone) throws
IllegalArgumentException {
2 if (!checkTelephone(telephone))
3 throw new IllegalArgumentException("Telefon ungueltig"
);
4 if (this.telephone.contains(telephone)) {
5 throw new IllegalArgumentException("Telefon schon
vorhanden");
6 }
7 this.telephone.add(telephone);
8 }

Zeile 5: Die contains-Funktion überprüft, ob in der Collection


schon ein Objekt mit dem gleichen Inhalt vorhanden ist.
206 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg
UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

Implementierung von delete - Operationen


Erzeuge eine Ausnahme, falls übergebener Wert nicht in der Liste
vorhanden (Zeilen 2+3)
1 public void deleteTelephone(String telephone) throws
IllegalArgumentException {
2 if (!this.telephone.contains(telephone)) {
3 throw new IllegalArgumentException("Telefon nicht
vorhanden");
4 }
5 this.telephone.remove(telephone);
6 }

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.

207 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

Implementierung von Konstruktoren

this: Referenz auf das betroffene Objekt (das durch den


Konstruktor erzeugt wird)
Wert immer über set-Operationen setzen (Überprüfung der
Datenstrukturinvarianten)
Ausnahmen immer weiterreichen: Tritt eine Ausnahme auf, so
können beim Aufrufer des Konstruktors durch das Abfangen der
Ausnahme weitere Zugriffe auf das Objekt verhindert werden.
Zeile 4: count liefert die Anzahl der erzeugten Objekte. Diese
wird nur erhöht, falls keine Ausnahme auftritt.

1 public Circle(double radius, Point position) throws


IllegalArgumentException {
2 this.setRadius(radius);
3 this.setPosition(position);
4 ++count;
5 }

208 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

Implementierung von Konstruktoren

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 }

209 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

Literatur

[Ullemboom] Java ist auch eine Insel


Kapitel 5.1 - 5.6 (Eigene Klassen in Java mit Attributen und Mehtoden)
(ohne 5.3.3 - 5.3.6, 5.4.2 - 5.4.3, 5.5.7, 5.6.4 - 5.6.6)
Kapitel 6.1.1 - 6.1.4 (Grundlagen Ausnahmen)
Kapitel 11.1 (Übersicht Java-API)
[Helmut Balzert] Grundlagen der Informatik
Kapitel 2.10 (Attribute), 2.11 (Operationen)
Anhänge A-2, A-3, A-4, A-5, A-15 (Checklisten)
[Oesterreich] Objektorientierte Softwareentwicklung
Kapitel 2.1 - 2.5: Objektorientierung für Anfänger
Kapitel 5.4.1 (nur einfache Klassen), 5.4.2 (Objekte)
Kapitel 5.4.3 (Attribute), 5.4.4 (Operationen)
Kapitel 5.4.5 (Verantwortlichkeit), 5.4.8 (Einschränkung), 5.4.14
(Paket)
*Weiterführend: Kapitel 3.1 - 3.10 (Anforderungsanalyse)

210 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

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)

211 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

Take Home Messages

Objekte sind Gegenstand des Interesses einer Anwendung und


fassen zusammengehörige Daten zusammen
Eine Klasse ist ein Schema zur Spezifikation von
Gemeinsamkeiten gleichartiger Objekte
Ein Objekt ist ein zur Ausführungszeit des Programms
vorhandenes Exemplar einer Klasse, das Speicher allokiert
Eine Klasse besteht aus Attributen, Konstruktoren und
Operationen
Ein Attribut hat Sichtbarkeit, Typ, Anfangswert, Multiplizität und
Einschränkungen
Eine Operation hat Sichtbarkeit, Typ, Multiplizität, Parameter
und eine Ausnahmeliste

212 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg


UML - Objekte und Klassen Vorlesung “Informatik 2”
Implementierung in Java

Take Home Messages

Zu jedem Attribut werden Standard-Verwaltungsoperationen


angelegt
Ein- und mehrwertige Attribute haben unterschiedliche
Verwaltungs- Operationen und Implementierungen in Java
Einschränkungen von Attributen werden in der Implementierung
der Verwaltungsoperationen berücksichtigt.
Konstruktoren dienen der Erzeugung von Objekten und der
Initialisierung von Attributen
Man unterscheidet kann- von soll-Attributen
Sichtbarkeiten regeln die Benutzbarkeit von Klassen, Attributen
und Operationen in anderen Modellelementen
Die Implementierung von Attributen, Verwaltungsoperationen
und Konstruktoren erfolgt weitgehend nach einem festgelegten
Schema
213 / 261 Robert Lorenz, Lehrprofessur für Informatik, Universität Augsburg