Vorlesung Informatik II

Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für...
30 downloads 0 Views 395KB Size
Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012

Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz

Lehrprofessur für Informatik

04. UML – Objekte und Klassen 1

Motivation UML bietet die Möglichkeit, programmiersprachenunabhängig strukturierte Datentypen, sog. Klassen, zu definieren

Die Variablen eines solchen Datentyps heißen Objekte Klassen und Beziehungen zwischen Klassen lassen sich grafisch im sog. Klassendiagramm darstellen  Das Klassendiagramm dient als statisches Modell der Strukturierung der Daten einer Anwendung

2

Motivation  Wir werden die Begriffe Objekt, Klasse und Klassendiagramm jetzt so präzise wie möglich (wie gesagt unabhängig von Irgendeiner Programmiersprache) klären  Wir werden allerdings nicht alle Details von Klassendiagrammen betrachten, sondern nur die wichtigsten Aspekte  Später sehen wir, wie man ein Klassendiagramm in Java implementieren kann

3

Objekte Ein Objekt ist ein Gegenstand des Interesses Objekte können Dinge, Personen und Begriffe sein Objekte besitzen einen Zustand

Objekte reagieren mit definiertem Verhalten auf ihre Umgebung Jedes Objekt besitzt eine Identität 4

Objekte Der Zustand eines Objekts wird beschrieben durch die Ausprägungen (Werte) seiner Eigenschaften (=Attribute)

Attribute modellieren die (Software-interne) Datenstruktur Es werden nur diejenigen Eigenschaften eines Objekts, die für die Anwendung relevant sind, modelliert Attributwerte unterliegen Änderungen und repräsentieren die aktuellen (Software-internen) Daten

5

Objekte Beispiel: Kreis (mit Attributen Mittelpunkt und Radius) Mittelpunkt = (0,10) Radius = 30 Beispiel: Menge (mit Attribut Groesse und Elemente) Groesse = 1 Elemente = {5} Beispiel: Student (mit Attributen Name, Matrikelnummer,...) Name = „Huber“ Matrikelnummer = „1076894“ ... 6

Objekte Objekt-Identitäts-Prinzip Ein Objekt ist unabhängig von seinen konkreten Attributwerten von allen anderen Objekten eindeutig zu unterscheiden Objekte können also gleich, aber nicht identisch sein (zwei Objekte sind gleich, wenn sie dieselben Attribute haben und im selben Zustand sind)

7

Objekte Das Verhalten eines Objekts wird beschrieben durch eine Menge von Operationen

Operationen ermöglichen den Zugriff auf die (die Verwaltung der) Daten durch Abfragen und Ändern von Attributwerten (Getter/Setter)

Erzeugen von Objekten (Konstruktoren) Manipulieren von Beziehungen zwischen Objekten Berechnungen

… 8

Objekte Das Verhalten eines Objekts wird beschrieben durch eine Menge von Operationen

Operationen dienen wie Funktionen der funktionalen Abstraktion: Man legt zuerst nur fest, was berechnet werden soll In späteren Modellierungsschritten wird Top-Down festgelegt, wie die Berechnung erfolgt (dazu stehen andere Diagrammtypen zur Verfügung: z.B. Sequenzdiagramme, Aktivitätsdiagramme, Zustandsautomaten, …)

9

Objekte Beispiel: Kreis setPosition(neuerMittelpunkt) setRadius(neuerRadius) ... Beispiel: Menge istElement(einObjekt):boolean einfuegen(einObjekt) ... Beispiel: Student getName():Zeichenkette ... 10

Objekte Geheimnisprinzip: Abfragen oder Änderungen von Attributwerten sind nur mittels der Operationen möglich Also: kein direkter Zugriff auf Attributwerte  Verwirklicht Prinzip der Einkapselung von Modulen Vorteile:  Sicherstellen von Datenstruktur-Invarianten  Datenstruktur mit weniger Aufwand änderbar

11

Klassen 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 Jedes Objekt gehört zu genau einer Klasse Klassen werden (grafisch) beschrieben durch einen Namen, eine Liste von Attributen und eine Liste von Operationen 12

Klassen Grafische Darstellung von Klassen Namensfel d Attributlist e

Operationslist e

...

...

Ein Klassenname ist ein Substantiv im Singular, beginnend mit einem Großbuchstaben [Attribute und Operationen: folgende Folien] 13

Klassen Beispiel: Kreis und Punkt Kreis

Punkt

position:Punkt radius:integer ...

x:integer y:integer ...

setPosition(in neuePosition:Punkt) getPosition():Punkt ... berechneFlaeche():double

setX(in x:integer) getX():integer ...

14

Klassen Objekt-Klassen-Prinzip Ein Objekt ist ein zur Ausführungszeit des Programms vorhandenes Exemplar einer Klasse, allokiert Speicher,

verhält sich entsprechend dem Schema der Klasse. Eine Klasse ist nur eine Vereinbarung, allokiert keinen Speicher Attributwerte sind individuell 15

Klassen Kohärenz-Prinzip Jede Klasse soll genau für einen (sachlogischen) Aspekt des Gesamtsystems verantwortlich sein Die zu einem Verantwortlichkeitsbereich gehörenden Eigenschaften und Operationen sollen nicht auf mehrere Klassen aufgeteilt sein

Eine Klasse soll keine Eigenschaften und Operationen enthalten, die nicht zu dem Verantwortlichkeitsbereich gehören Zusammensetzung von Software nach dem Baukastenprinzip 16

Exkurs: 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

17

Attribute Attribute

haben einen Namen sind von bestimmtem Typ

können einen Anfangswert besitzen können Multiplizität haben (mehrere Komponenten)

können Einschränkungen unterworfen sein (DatenstrukturInvarianten) 18

Attribute Namen Klassen definieren einen Namensraum für Attribut- und Operationsnamen  Attributnamen müssen pro Klasse eindeutig sein  Verschiedene Klassen können identische Attribute haben  Zugriff mittels . Attributnamen beginnen mit einem Kleinbuchstaben und werden nach fachlichen Gesichtspunkten gewählt

19

Attribute Beispiel: Kreis und Rechteck Kreis

Rechteck

position radius ...

position laenge breite ...

... ...

20

Attribute Attribut-Typen: Legen den Wertebereich eines Attributs fest (wie VariablenTypen in C) Dienen der möglichst präzisen Beschreibung der Daten aus fachlicher Sicht

21

Attribute Mögliche Attribut-Typen: Datentypen Primitive UML-Datentypen: Boolean, String, Integer, UnlimitedNatural oder selbst definiert Strukturierter Datentyp Aufzählungstyp Klassen

22

Attribute Datentypen vs. Klassen (Strukturierte) Datentypen können wie Klassen Attribute und Operationen besitzen Objekte eines Datentyps besitzen aber keine Identität (gleiche Attributwerte = gleiches Objekt)  Existieren nur als Komponenten von Klassenobjekten  Dienen der besseren Strukturierung Sind Objekte an sich für die Funktionalität interessant  Wenn ja: Klassen, wenn nein: Datentyp 23

Attribute Grafische Darstellung von Datentypen ähnlich wie die von Klassen Unterschiede:

Dem Namen wird bei primitiven Datentypen das Schlüsselwort vorangestellt Dem Namen wird bei strukturierten Datentypen das Schlüsselwort vorangestellt

24

Attribute Beispiel: Student und Adresse Student

name:String adresse:Adresse ...

Adresse Ort:String Strasse:String ...

... ...

Angabe von Typen nach dem Attributnamen, abgetrennt durch einen Doppelpunkt : 25

Attribute Anfangswert Der Anfangswert legt fest, welchen Wert ein neu erzeugtes Objekt für ein Attribut annimmt Der Anfangswert kann zur Laufzeit des Programms beliebig geändert werden Angabe nach dem Namen, abgetrennt durch ein Gleichheitszeichen =

26

Attribute Multiplizität Die Multiplizität legt die Anzahl der Werte (Komponenten) eines Attributs fest Angabe nach dem Namen in der Form

[n..m]

mindestens n und höchstens m Werte

[0..m]

Optionales Attribut, höchstens m Werte

[n..*]

beliebig viele Werte, mindestens n Werte

[n]

Genau n Werte

[1]

Voreinstellung 27

Attribute Multiplizität Attribute mit Multiplizität ungleich [1] kann man sich als Felder vorstellen

28

Attribute Einschränkungen Sind Aussagen über Attributwerte, die immer wahr sein müssen Geben Datenstruktur-Invarianten an Angabe nach dem Namen in geschweiften Klammern als prädikatenlogische Formel (oder auch umgangssprachlich)

29

Attribute Beispiel: Mengen ganzer Zahlen Menge

groesse :Integer =0 elemente :Integer [0..*] {Anzahl der Werte von elemente = Wert von groesse} ... ...

30

Attribute Klassenattribute Haben nur einen 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 Zugriff mittels . Angabe wir normale Attribute, allerdings unterstrichen

31

Attribute Beispiel: Student Student

name:String adresse:Adresse anzahl :Integer =0 {anzahl>=0} ... ...

Speicherung der Anzahl der erzeugten Objekte

32

Operationen Operationen

haben einen Namen können Ein- und Ausgabeparameter haben

können einen Rückgabetyp haben

33

Operationen Namen Klassen definieren einen Namensraum für Attribut- und Operationsnamen  Operationsnamen müssen pro Klasse eindeutig sein  Verschiedene Klassen können identische Operationen haben (die aber unterschiedlich implementiert werden)  Zugriff mittels . Operationsnamen beginnen mit einem Kleinbuchstaben und werden nach fachlichen Gesichtspunkten gewählt Der Operationsname soll ausdrücken, was die Operation leistet: Er enthält in der Regel ein Verb (was wird gemacht?) 34

Operationen Namen Operationsnamen können innerhalb einer Klasse mehrfach verwendet werden, wenn sie sich durch ihre Parameter unterscheiden (dieselbe Aufgabe mag von unterschiedlichen Parametern abhängen)  Das nennt man Überladen von Operationen

35

Operationen Beispiel: Kreis und Rechteck Kreis

Rechteck

...

...

anzeigen() ...

anzeigen() speichern() speichern(in dateiname:String) ...

36

Operationen Parameter Parameter definieren Ein- und Ausgabedaten von Operationen  sich wiederholende Aufgaben, die sich nur durch unterschiedliche Werte oder Objekte unterscheiden, können verallgemeinert beschrieben werden  Die sich unterscheidenden Informationen werden als Parameter formalisiert

37

Operationen Parameter Ein Parameter besteht aus der Angabe von Name Typ (optional) Multiplizität (optional) Anfangswert (optional) Richtung Name, Typ, Multiplizität und Anfangswert werden wie bei Attributen gewählt und angegeben 38

Operationen Parameter: Richtung Ein Parameter kann folgende Richtungen haben: in

reiner Eingabeparameter Zugriff nur lesend

out

reiner Ausgabeparameter Wertzuweisung erst in der Operation

inoutEin- und Ausgabeparameter Wertänderung in der Operation

Angabe vor dem Namen 39

Operationen Rückgabetyp Gibt den Typ des Werts an, der zurückgegeben wird Angabe nach dem Namen mit vorangestelltem : Wird weggelassen, falls es keinen Rückgabewert gibt

40

Operationen Rückgabetyp Rückgabewert vs. Ausgabeparameter: Es kann maximal einen Rückgabewert geben Für Spezifikation der Änderung von Werten mehrerer Objekte durch eine Funktion braucht man Ausgabeparameter

41

Operationen Getter und Setter

Um Daten zu lesen/zu schreiben benutzt man sog. getter- und setter-Operationen. Für jedes Attribut wird eine zugehörige getter- und eine zugehörige setter-Operation eingeführt Eine setter-Operation setzt den Wert eines Attributs mittels eines Eingabeparameters neu Prototyp: set(in ) Eine getter-Operation liest den Wert eines Attributs und gibt diesen zurück Prototyp: get(): 42

Operationen Zugriff auf mehrwertige Attribute Für mehrwertige Attribute wird zusätzlich/ersatzweise ermöglicht, auf deren einzelne Werte zuzugreifen (hier ersetzt der setter alle Werte und der getter liest alle Werte auf einmal): add(in ) delete(in ) get(in p:Integer):

43

Operationen Konstruktoren Konstruktoren sind Operationen zur Erzeugung und Initialisierung von Objekten Konstruktoren heißen immer wie die Klasse. Sonst Angabe wie bei Operationen Es kann mehrere Konstruktoren von Objekten einer Klasse mit unterschiedlichen Parameterlisten geben  diese Konstruktoren führen also unterschiedliche Initialisierungen durch 44

Operationen Konstruktoren Konstruktoren initialisieren Attribute durch Zuweisung von Werten jedem Attribut mit Multiplizität [1..n] oder [1..*] sollte ein Wert zugewiesen werden (soll-Attribute)  wird bei Attributen ohne Anfangswert durch Parameter übergeben  oder es wird ein Standardwert genommen jedem Attribut mit Multiplizität [0..n] oder [0..*] kann ein Wert zugewiesen werden (kann-Attribute) 45

Operationen Klassenoperationen Klassenoperationen sind der jeweiligen Klasse zugeordnet und nicht auf ein einzelnes Objekt der Klasse anwendbar  Zugriff mittels . Angabe wir normale Operationen, allerdings unterstrichen  Für den Zugriff auf Klassenattribute  Für Berechnungen, die sich auf mehrere Objekte einer Klasse beziehen 46

Operationen Beispiel: Student Student matrikelnummer:String Adresse:Adresse [0..1] anzahl :Integer =0 {anzahl>=0} ... Student(in matrikelnummer:String) Student(in matrikelnummer:String, in adresse:Adresse) sortieren() getAnzahl():Integer ...

47

Operationen Operationen vs. Funktionsaufrufe Operationen und Daten bilden eine (inhaltliche) Einheit Operationen lassen sich nur über das Objekt ansprechen Gleichnamige Operationen können für unterschiedliche Objekte verschieden implementiert sein

48

Wie findet man Klassen? Dokumentenanalyse: Formulare, Bedienungsanleitungen, Fragebögen, …

Re-Engineering: Anleitungen, Hilfesystem, Bildschirmmasken, Benutzerdialoge, Funktionalität, … Nach Kategorien: Konkrete Dinge/Objekte, Personen, Rollen, Orte, Organisationen, Behälter, Dinge in einem Behälter, Kataloge, Verträge, Informationen über Aktionen, Ereignisse Pflichtenheft, Beschreibung der Systemidee in 5-20 Sätzen, … 49

Wie kombiniert man Objekte/Klassen? (Ausblick) Ein System besteht aus vielen Objekten/Klassen, die geeignet kombiniert werden müssen für eine erwünschte Funktionalität Nachrichtenaustauschprinzip Objekte sind eigenständige Einheiten, deren Zusammenarbeit mit Hilfe von Nachrichten bewerkstelligt wird, die sich Objekte untereinander zusenden  Eine solche Nachricht ist ein Operationsaufruf  Der Sender muss mit den eigenen Berechnungen auf die Bearbeitung der aufgerufenen Operation warten 50