30.01.2014 Aufrufe

Präsentation zur Lehrveranstaltung "Software Engineering"

Präsentation zur Lehrveranstaltung "Software Engineering"

Präsentation zur Lehrveranstaltung "Software Engineering"

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Software</strong> Engineering<br />

Studiengang Betriebsinformatik<br />

Sommersemester 2012<br />

Vorlesung : 5 Veranst. á 2 DS<br />

Praktikum : 2 Veranst. á 3 DS<br />

= 20 Unterrichtsstunden<br />

= 12 Unterrichtsstunden<br />

1


Inhalt<br />

1. Einführung: Ziele und Arbeitsmethoden der <strong>Software</strong>technologie<br />

2. Objektorientierte Modellierung<br />

Unified Modeling Language (UML 2)<br />

3. Implementation von UML-Modellen<br />

4. Systemarchitekturen<br />

5. Der <strong>Software</strong>-Entwicklungsprozess<br />

6. Wiederverwendung<br />

2


Literatur<br />

H. Balzert: Lehrbuch der Objektmodellierung. Analyse und Entwurf<br />

mit der UML 2.<br />

Spektrum Akademischer Verlag, 2004<br />

M. Fowler, K. Scott: UML konzentriert. Eine Einführung in die Standard-<br />

Objektmodellierungssprache.<br />

Addison-Wesley, 2. Aufl., 2000<br />

C. Rupp, S. Queins, B. Zengler:<br />

UML 2 glasklar, Praxiswissen für die UML-Modellierung<br />

Carl Hanser Verlag, 3. Aufl., 2007<br />

W. Pree: Komponentenbasierte <strong>Software</strong>entwicklung mit Frameworks.<br />

dpunkt.verlag, 1997<br />

I. Sommerville: <strong>Software</strong> Engineering.<br />

Addison-Wesley, 8. Aufl. 2007<br />

3


1 Einführung: Ziele und Arbeitsmethoden der<br />

<strong>Software</strong>technologie<br />

• <strong>Software</strong>produktion<br />

• Lebenszyklusmodelle<br />

• Methodologie<br />

→ Objekttechnologie<br />

• von Algorithmen zu Domänen<br />

4


• „Große Systeme“:<br />

Entwicklergruppen über längere Zeit<br />

• Personen (Nutzer) agieren in Rollen<br />

offen für<br />

Fragestellungen<br />

• Entwicklung endet nicht mit der 1. Systemversion:<br />

Erweiterung und Anpassung („Wartung“)<br />

• Wiederverwendung beginnt nicht erst mit der<br />

eigenen Entwicklung<br />

• Bestimmte Entwicklungsmethoden führen zu<br />

bestimmten <strong>Software</strong>-Architekturen<br />

• Entwicklungsmethoden bedürfen einer<br />

rechentechnischen Unterstützung : CASE<br />

• Zweckbindung -> Musterarchitekturen<br />

5


Phasen im <strong>Software</strong>entwicklungsprozess:<br />

Analyse<br />

Anforderungsanalyse (Pflichtenheft)<br />

Anwendungsfallanalyse<br />

Problembereichsanalyse (Geschäftsklassen)<br />

Entwurf<br />

<strong>Software</strong>entwurf<br />

(Geschäftsklassen + Fachklassen)<br />

Algorithmenentwurf<br />

Komponenten-/Systementwurf<br />

Implementation<br />

Programmierung, weitestgehende Generierung<br />

Test<br />

Unittest, Integrationstest, Systemtest<br />

→ möglichst entwicklungsbegleitend<br />

6


Lebenszyklusmodelle:<br />

7


V-Modell<br />

9


Die Unified Modeling Language<br />

( G. Booch, J. Rumbough, I. Jacobson )<br />

► Diagramme visualisieren Ausschnitte aus bzw. Sichten auf<br />

Modelle<br />

– Diagrammtypen<br />

– Modelltypen<br />

– Eine grafische Sprache<br />

– Metamodellierung<br />

10


Diagrammtypen<br />

Strukturdiagramme<br />

• Klassen-Diagramm (class diagram)<br />

• Objekt-Diagramm (object diagram)<br />

• Paket-Diagramm (package diagram)<br />

• Kompositionsstruktur-Diagramm (composite structure diagram)<br />

• Komponenten-Diagramm (component diagram)<br />

• Verteilungs-Diagramm (deployment diagram)<br />

• Profil-Diagramm (ab UML 2.2) (profile diagram)<br />

Verhaltensdiagramme<br />

• Use-Case-Diagramm (use case diagram)<br />

• Zustands-Diagramm (state machine diagram)<br />

• Aktivitäten-Diagramm (activity diagram)<br />

• Sequenz-Diagramm (sequence diagram)<br />

• Kommunikations-Diagramm (communication diagram)<br />

• Zeitverlaufs-Diagramm (timing diagram)<br />

• Interaktionsübersichts-Diagramm (interaction overview diagram)<br />

11


UML – eine grafische Sprache<br />

Icons:<br />

Grafiken fester Größe und festen Inhalts<br />

2-d Symbole: variable Ausdehnung, beinhalten andere Symbole<br />

Pfade:<br />

Strings:<br />

Constraints:<br />

Folgen von Liniensegmenten, an beiden Enden<br />

mit grafischen Elementen verbunden<br />

mit Syntax, singulär oder anderen Elementen zugeordnet<br />

beschreiben semantische Beziehungen zwischen<br />

Modellelementen<br />

Kommentare:<br />

12


Metamodellierung<br />

► Die UML ist eine grafische formale Sprache<br />

=> Syntax + Semantik<br />

► Die Definition einer formalen Sprache erfolgt mit den Mitteln einer<br />

(formalen) Sprache<br />

=> Metasprache <strong>zur</strong> Definition einer Objektsprache<br />

Bsp.:<br />

EBNF <strong>zur</strong> Definition der Syntax von Programmiersprachen<br />

► UML <strong>zur</strong> Modellierung von UML-Konzepten<br />

=> Metamodelle (Definition der abstrakten Syntax der UML)<br />

13


2 Objektorientierte Modellierung<br />

• Klassen-Instanzen-Abstraktion<br />

• Attribute und Operationen<br />

• Sichtbarkeit und Lebensdauer<br />

• Assoziationen und Verknüpfungen<br />

• Aggregation und Komposition<br />

• Generalisierung und Spezialisierung<br />

• Vererbung und Delegation<br />

• Polymorphie<br />

• Abstrakte und konkrete Klassen<br />

• Instanzen als Laufzeitobjekte<br />

• Statechart-Modelle<br />

• Aktivitäten-Diagramme<br />

14


Klassen-Instanzen-Abstraktion<br />

Objekt<br />

ist ein (abstrakter) Gegenstand oder ein Konzept mit klarer Abgrenzung und<br />

präziser Bedeutung.<br />

Beispiele: Kommissar Rex, das Fenster links oben im Haus, Herr Lutze,<br />

Mediatec GmbH, ein bestimmter Button auf der GUI des Finanzprogrammes,<br />

...<br />

Klasse<br />

umfasst eine Menge von Objekten, die<br />

• ähnliche Struktur und ähnliche Merkmale (Attribute) besitzen,<br />

• ähnliches Verhalten zeigen (Operationen bzw. „Methoden“),<br />

• in Relationen zu Objekten anderer Klassen oder der gleichen Klasse stehen.<br />

Eine Klasse kann durch Aufzählung der Objekte oder durch<br />

die Definition der Eigenschaften der Objekte (Klassendefinition) beschrieben<br />

werden.<br />

Zu einer Klasse gehörige Objekte werden als Instanzen, Instanzobjekte oder<br />

auch Exemplare der Klasse bezeichnet. Klassen werden benannt.<br />

Beispiele: Hund, Fenster, Person, Firma, Button, ...<br />

15


Objekte<br />

• sind immer Instanzen einer bestimmten Klasse und<br />

• besitzen eine Identität und eine Lebensdauer.<br />

Jedes Objekt kennt die Klasse, zu der es gehört.<br />

Die Identifizierung und Benennung von Objekten hilft, die zu modellierende Welt<br />

zu verstehen. Objekte sind Ausgangspunkt für Implementierungen auf<br />

Computern.<br />

Eine Klassendefinition umfasst (evtl. implizit) eine Vorschrift <strong>zur</strong> Erzeugung von<br />

Instanzen („Konstruktor“).<br />

Klassenbildung ist Abstraktion<br />

( bei einer Abstraktion werden unwesentliche Eigenschaften weggelassen;<br />

sprich: es wird von unwesentlichen Eigenschaften abstrahiert ).<br />

Abstraktion ist ein mächtiges Mittel <strong>zur</strong> Bewältigung von Komplexität.<br />

Art und Weise der Zerlegung eines Problems bzw. einer Domäne in<br />

Klassen/Objekte ist subjektiv<br />

16


Attribute und Operationen<br />

Attribut :<br />

Merkmal mit einer Ausprägung (Datenwert)<br />

Jedes Attribut besitzt einen Wert aus dem Wertebereich für jedes Objekt.<br />

Jedes Objekt einer Klasse kann für dasselbe Attribut zum selben Zeitpunkt<br />

einen anderen Wert besitzen<br />

-> „Instanzvariable“<br />

Operation : Funktion, die auf Objekte einer Klasse angewendet werden kann.<br />

Alle Objekte einer Klasse haben die gleichen Operationen.<br />

Implementierung der Operation in Programmiersprache -> „Methode“<br />

Beispiel:<br />

Person<br />

name:string<br />

vorname:string<br />

geschlecht:char<br />

geburtsjahr:int<br />

+alter:int<br />

Max:Person<br />

Moritz:Person<br />

17<br />

Mit Topcased erstellt


• Die Gesamtheit der Werte (d.h. der Ausprägungen) aller Attribute<br />

eines Instanzobjektes bestimmt den Zustand des Objekts<br />

zu einem bestimmten Zeitpunkt.<br />

• In Operationen kann auf Werte von Attributen zugegriffen werden. Das<br />

Verhalten eines Objekts wird auch durch seinen Zustand mit bestimmt<br />

(im Unterschied zu einer Prozedur).<br />

• Die Verhaltensbeschreibung existiert unabhängig von der Anzahl vorhandener<br />

Instanzen je Klasse nur einmal und ist der Klasse zugeordnet.<br />

18


Klassendiagramme (eigentlich: Klassenstrukturdiagramme)<br />

formale grafische Notation für die Modellierung von Objekten, Klassen und Relationen,<br />

wird durch Entwicklungswerkzeuge unterstützt.<br />

Klassen<br />

klassenname<br />

[visibility] attributname : datentypname [ = default-wert ]<br />

…<br />

[visibility] operationsname ( argumentliste ) : ergebnistypname<br />

…<br />

19


Instanzen<br />

[ instanzname ] : klassenname<br />

attributname = wert<br />

…<br />

Instanziierungsrelation<br />

klassenname<br />

[instanzname] : klassenname<br />

Klassen- u. Instanzensymbole können bei manchen Werkzeugen innerhalb eines<br />

Klassendiagramms verwendet werden (z.B. Topcased).<br />

20


Person<br />

name:string<br />

vorname:string<br />

geschlecht:char<br />

geburtsjahr:int<br />

+alter:int<br />

Max:Person<br />

Moritz:Person<br />

Unterscheiden:<br />

→ Wert einer Instanzvariablen name<br />

→ Name (Benennung) eines Objekts, z.B. Moritz<br />

21


Sichtbarkeit und Lebensdauer<br />

►<br />

Konstruktoren sind spezielle Operationen <strong>zur</strong> Erzeugung von Objekten. Objekte<br />

existieren solange, solange sie referenzierbar sind bzw. bis sie explizit aus der<br />

Objektwelt entfernt werden (durch Destruktoren).<br />

► Durch Benennungen werden Objekten Namen (in einer Umgebung) zugeordnet.<br />

► Objekte besitzen einen zeitlich veränderlichen Zustand<br />

-> bestimmt durch die Werte aller Instanzvariablen (Ausprägungen aller Attribute)<br />

► Sichtbarkeit (visibility) für Attribute und Operationen:<br />

+ public von überall sichtbar<br />

# protected nur eigene Klasse und<br />

abgeleitete (spezialisierte) Klassen<br />

- private nur eigene Klasse<br />

~ (oder keine Angabe) package wide nur Klassen innerhalb eines Package<br />

22


Unterscheidung:<br />

instance scope -> „Instanzvariablen“, „Methoden“<br />

class scope -> „Klassenvariablen“, „Klassenmethoden“<br />

(Syntax: Name und Typ werden unterstrichen)<br />

23


Assoziationen und Verknüpfungen<br />

Assoziation:<br />

abstrakte, nicht näher charakterisierte Beziehung zwischen<br />

zwei (binäre A.) oder<br />

mehr (ternäre A. bzw. Assoziation höherer Ordnung) Klassen.<br />

Notation: binäre Ass.: Linie, die zwei Klassensymbole verbindet.<br />

A. höherer Ordn.: Rhombus, der durch Linien mit den<br />

Klassensymbolen verbunden ist.<br />

Beispiel:<br />

24


Verknüpfung: Element einer Assoziation. Setzt eine Anzahl von Objekten<br />

( „Link“ ) in Beziehung<br />

25


Ein Pfad einer Assoziation kann an jedem Ende eine Beschriftung tragen.<br />

Arten der Beschriftung (Auswahl):<br />

Multiplizität<br />

untere_grenze .. obere_grenze<br />

0 .. *<br />

Ordnung<br />

geordnete Elemente werden durch {ordered} spezifiziert<br />

Rollenname<br />

spezifiziert die Rolle, die die Klasse am Ende des Pfades spielt<br />

Aggregationsindikator<br />

hohler/ausgefüllter Rhombus<br />

26


Aggregation und Komposition<br />

Aggregation: bezeichnet die „Teil-Ganzes“-Relation<br />

(„ist Teil von“ bzw. „besteht aus“)<br />

Objekte, die die Komponenten einer Sache repräsentieren, sind mit einem Objekt verknüpft,<br />

das die Komponentengruppe repräsentiert.<br />

Notation:<br />

Ein Objekt der Klasse1 repräsentiert die Komponentengruppe,<br />

Objekte der Klasse2 repräsentieren die Komponenten<br />

28


Eigenschaften:<br />

• Eine Aggregation ist eine Sonderform der Assoziation mit zusätzlicher Semantik<br />

• Einschränkung auf Beziehung zwischen einer Komponentengruppenklasse und<br />

einer Komponentenklasse<br />

(eine Komponentengruppe mit Komponenten verschiedener Typen hat<br />

entsprechend viele Aggregationsrelationen)<br />

• Eine Aggregation ist transitiv und antisymmetrisch<br />

• einige Eigenschaften der Komponentengruppe pflanzen sich auf die Komponenten fort<br />

29


Beispiel: Ein Dokument besteht aus mehreren Absätzen, die ihrerseits aus mehreren<br />

Sätzen bestehen.<br />

Beispiel: In der Programmiersprache C sind ein Name, eine Argumentliste und eine<br />

Verbundanweisung Teile einer Funktionsdefinition.<br />

30


Feststellungen:<br />

Komponentenobjekte können unabhängig vom Komponentengruppenobjekt existieren.<br />

Beispiel: Teile eines Computers<br />

Die Existenz eines Komponentenobjektes kann von der Existenz des<br />

Komponentengruppenobjektes abhängen, zu dem es gehört.<br />

Beispiel: Die Leimung ist Teil eines Buches zu dem sie gehört.<br />

Komposition - bezeichnet eine „enge“ Aggregation.<br />

- konstituiert eine Verbindung der Teile mit dem Ganzen auch<br />

hinsichtlich der „Lebenslinie“.<br />

31


Beispiel:<br />

32


Generalisierung/Spezialisierung und Vererbung<br />

Spezialisierung:<br />

Bezeichnungen<br />

Beziehung zwischen einer Klasse und einer oder mehrerer<br />

verfeinerter (speziellerer) Versionen davon.<br />

Gegenrichtung: Generalisierung<br />

Oberklasse<br />

(Superklasse)<br />

die Klasse, die verfeinert wird<br />

Unterklasse<br />

(Subklasse)<br />

jede Klasse, die eine verfeinerte Version ist<br />

Inklusionsrelation<br />

(„is a“-Relation)<br />

Spezialisierungsbeziehung zwischen Klassen<br />

Eigenschaften: transitiv, antisymmetrisch<br />

33


Vererbung:<br />

• „Merkmale“, die der Oberklasse zugeordnet sind, werden an die Unterklassen<br />

weitergegeben und von den Unterklassen genutzt, sie gelten auch für die<br />

Unterklassen und müssen dort nicht erneut angegeben werden.<br />

entlang der Inklusionsrelation werden „Merkmale“ vererbt.<br />

• Unterklassen können Merkmale spezialisieren, d.h.<br />

– zusätzliche Attribute<br />

– zusätzliche Operationen<br />

– für geerbte Operationen spezielle Realisierungen vorsehen<br />

– Default-Werte für geerbte Attribute neu festlegen<br />

• die Begriffe Vorfahre und Nachkomme beschreiben Generalisierung/Spezialisierung<br />

(und Vererbung) über mehrere Ebenen hinweg<br />

• eine Instanz einer Unterklasse ist gleichzeitig eine Instanz aller ihrer<br />

Vorfahrenklassen<br />

34


Beispiel:<br />

• jedes Buch,<br />

• jedes Fachbuch,<br />

• jedes Informatik-Fachbuch<br />

besitzt einen Autor und eine ISBN<br />

• jedes Fachbuch,<br />

• jedes Informatik-Fachbuch,<br />

• jedes Medizin-Fachbuch<br />

besitzt ein Literaturverzeichnis<br />

35


Constraints:<br />

neben dem Dreieck in geschweiften Klammern notiert.<br />

overlapping, falls ein Nachkomme von mehr als einer Subklasse<br />

abgeleitet werden kann, andernfalls disjoint<br />

complete, falls die Anordnung der Subklassen vollständig ist,<br />

andernfalls incomplete<br />

36


Ein Diskriminator<br />

kennzeichnet eine Partitionierung der Subklassen.<br />

(es wird nach verschiedenen Gesichtspunkten spezialisiert)<br />

-> an die Linie neben dem Dreieck notiert<br />

Mehrfachvererbung:<br />

Klassenhierarchie:<br />

Klassenheterarchie:<br />

eine Klasse kann mehrere Subklassen,<br />

aber nur eine Superklasse besitzen.<br />

eine Klasse kann mehrere Subklassen und<br />

mehrere Superklassen besitzen.<br />

Besitzt eine Klasse mehrere Superklassen, spricht man von Mehrfachvererbung.<br />

Die Klasse erbt Merkmale von allen Superklassen.<br />

Ein Merkmal aus der gleichen Vorfahrenklasse, das in mehr als einem Pfad<br />

gefunden wird, wird nur einmal geerbt.<br />

Es können Mehrdeutigkeiten auftreten.<br />

38


Vererbung und Delegation<br />

Mittels Aggregation + Delegation kann (in der Programmiersprache)<br />

fehlende Mehrfachvererbung umgangen werden.<br />

Delegation: eine Klasse A hat ein Attribut mit Wertebereich Klasse B.<br />

(Instanzen von A besitzen für das Attribut als Wert einen Verweis<br />

auf eine Instanz von B)<br />

= Implementierungsmechanismus, mittels dessen ein Objekt eine<br />

Operation auffängt und an ein Objekt entsprechend der Aggregation<br />

sendet.<br />

Operationen werden aber nicht automatisch über die Aggregation hinweg vererbt!<br />

Beispiel :<br />

40


Beispiel: Realisierungsmöglichkeiten bei fehlender Mehrfachvererbung<br />

41


Polymorphie<br />

• wörtlich: „Vielgestaltigkeit“.<br />

• hier: eine durch Namen und Signatur spezifizierte Operation kann in<br />

unterschiedlichen abgeleiteten Klassen durch unterschiedliche Methoden<br />

implementiert sein.<br />

Signatur: Anzahl und Typen der Parameter einer Operation sowie ggf.<br />

Typ des Rückgabewertes<br />

statische Polymorphie vs. dynamische Polymorphie<br />

gleichnamige Operationen mit<br />

unterschiedlichen Parametertypen<br />

„späte Bindung“<br />

45


Beispiel:<br />

Statische<br />

Polymorphie<br />

Dynamische<br />

Polymorphie<br />

= späte Bindung, dynamische Bindung<br />

46


Beispiel: Baumklassen<br />

47


Rekursive Definition:<br />

Ein Mobile ist<br />

- ein Gewicht oder<br />

- ein Gestänge mit Mobiles an beiden Enden<br />

50


Abstrakte und konkrete Klassen<br />

Abstrakte Klasse:<br />

Klasse, die selbst keine direkten Instanzen besitzt,<br />

deren Nachkommen aber direkte Instanzen besitzen.<br />

Konkrete Klasse:<br />

Klasse, die direkte Instanzen besitzen kann<br />

(„Instanziierbare Klasse“)<br />

Nur konkrete Klassen können Blattklassen im Vererbungsbaum sein!<br />

Eine abstrakte Klasse kann sowohl abstrakte Operationen als auch nicht abstrakte<br />

Operationen definieren.<br />

Abstrakte Operation:<br />

Eine Klasse kann nur das Protokoll einer Operation definieren,<br />

ohne eine entsprechende Methode zu implementieren.<br />

51


Kennzeichnung abstrakter Operationen:<br />

{ abstract } oder Signatur in italics<br />

Ist eine Operation nicht als abstract gekannzeichnet, muß die Operation implementiert werden.<br />

52


Parametrisierte Klassen<br />

Parameter<br />

Klasse mit gebundenem Parameter<br />

53


D<br />

D<br />

y<br />

y<br />

n<br />

n<br />

a<br />

a<br />

m i<br />

i<br />

s<br />

s<br />

c<br />

c<br />

h<br />

h<br />

e<br />

e<br />

M o<br />

o<br />

d<br />

d<br />

e<br />

e<br />

l l<br />

l<br />

i<br />

i<br />

e<br />

e<br />

r<br />

r<br />

u<br />

u<br />

n<br />

n<br />

g<br />

g<br />

Instanzen als Laufzeitobjekte<br />

• Instanzobjekt ist Laufzeitobjekt (Ebene M0),<br />

belegt Speicherplatz, besitzt Identität und Lebensdauer<br />

• Klassen können auch Laufzeitobjekte sein ( -> Klassenobjekt)<br />

Objekte können benannt werden (Sichtbarkeitsbereiche)<br />

– global (Klassen)<br />

– Paket-lokal (Klassen)<br />

– Klassen-lokal<br />

– Methoden-lokal<br />

Typkompatibilität:<br />

Mit einem Namen kann zeitlich wechselnd<br />

- ein Objekt der definierten Klasse oder<br />

- ein Objekt einer der Subklassen dieser Klasse<br />

assoziiert sein<br />

54


Objekte befinden sich in Zuständen<br />

= Vereinigung der Werte aller Attribute zu einem bestimmten Zeitpunkt<br />

Objekte können untereinander mittels Nachrichten kommunizieren<br />

• Methodenaufrufe<br />

• Ereignisse<br />

(mit Antwort)<br />

(ohne Antwort, Antworten sind selbst<br />

Ereignisse)<br />

Bei der Abarbeitung von Methoden oder der Reaktion auf Ereignisse<br />

(in sog. Handlern) können Objekte ihren Zustand ändern.<br />

Ereignisse und Zustände<br />

Ereignis:<br />

• etwas, das in einem bestimmten Augenblick passiert. Ein Ereignis hat keine Dauer.<br />

• Übertragung von Informationen von einem Objekt zu einem anderen.<br />

Ereignisse können in Ereignisklassen gruppiert werden.<br />

55


Beispiele:<br />

Ereignisklassen mit Attributen<br />

Telefonhörer abgehoben.<br />

Ziffer gewählt (Ziffer).<br />

Maustaste gedrückt (Taste, Ort).<br />

Flug fliegt ab (Datum, Fluglinie, Flugnummer).<br />

Instanzen der Ereignisklassen<br />

Telefonhörer abgehoben.<br />

Ziffer gewählt (4).<br />

Maustaste gedrückt (ShiftKey, (100,100))<br />

Flug fliegt ab (15 Jan, Dresden-Bonn, LH1319)<br />

Zustand:<br />

• entspricht der Zeitspanne zwischen zwei von einem Objekt empfangenen<br />

Ereignissen. Zustände repräsentieren Zeitspannen.<br />

Der Zustand eines Objekts bestimmt die Reaktion des Objekts auf ankommende Ereignisse.<br />

Reaktionen können Aktionen und/oder Zustandsänderungen sein.<br />

56


Szenario:<br />

Folge von Ereignissen, die bei einer ganz bestimmten Ausführung<br />

eines Systems auftritt.<br />

• kann alle Ereignisse eines Systems betreffen<br />

• kann Ereignisse betreffen, die bestimmte Objekte eines Systems beeinflussen<br />

oder von bestimmten Objekten erzeugt werden.<br />

Ein Szenario erhält man durch Aufzeichnung bei der Ausführung eines Systems oder<br />

durch gedankliche Vorausplanung der Aufzeichnung.<br />

Ereignispfad:<br />

zu einem Szenario werden Sender- und Empfängerobjekte<br />

zu jedem Ereignis bestimmt und mit den Ereignissen entsprechend der<br />

Ereignisreihenfolge in einem Ereignispfad-Diagramm dargestellt.<br />

Merke:<br />

Ein Szenario ist für ein dynamisches Modell das gleiche, wie ein Instanzendiagramm<br />

für ein Objektmodell!<br />

57


Ein Sequenzdiagramm zeigt das Verhalten von Objekten und berücksichtigt<br />

die Interaktion mit anderen Objekten durch Austausch von Nachrichten.<br />

-> zeigt Objekte mit Lebenslinie und Nachrichtenaustausch<br />

-> Interaktionen gehen stets von Objekten bzw. Prozessen aus<br />

60


Statechart-Modelle/-Diagramme<br />

Zustand: (state) ist die Verfassung (im Verlaufe des Lebens) eines Objekts, in der es<br />

• einer Bedingung genügt<br />

• eine Aktivität ausführt (andauernd)<br />

• auf ein Ereignis wartet<br />

Ein Zustand ist einer Klasse zugeordnet.<br />

Nicht jede Änderung eines Attributwertes wird als Zustandsänderung registriert.<br />

Transition: durch ein Ereignis verursachte Zustandsänderung eines Objekts (Zustands-<br />

Übergang). Wenn ein Ereignis empfangen wird, hängt der nächste Zustand<br />

sowohl vom aktuellen Zustand als auch vom empfangenen Ereignis ab.<br />

Zustandsautomat: Graph, bestehend aus Zuständen (Knoten) und Transitionen (Kanten),<br />

der die Reaktion eines Objekts einer Klasse auf den Empfang von „äußeren Stimuli“<br />

beschreibt. Zustandsautomat ist einer Klasse oder einer Operation zugeordnet.<br />

62


Notation:<br />

Startzustand<br />

Endzustand<br />

event(argument … ) [ bedingung ] / operation(argument … )<br />

Alle von einem Zustand ausgehenden Transitionen müssen unterschiedlichen<br />

Ereignissen entsprechen!<br />

Interpretation:<br />

• Wenn sich ein Objekt in einem Zustand befindet, und ein Ereignis tritt auf, mit dem<br />

eine seiner Transitionen beschriftet ist, geht das Objekt in den Zustand am Ende der<br />

Transition über: Die Transition feuert.<br />

• wenn ein Ereignis auftritt, für das es keine vom aktuellen Zustand ausgehende<br />

Transition gibt, wird das Ereignis ignoriert.<br />

63


Beispiel: Dusche-Badewanne<br />

64


Beispiel: Flug-Reservierung<br />

65


Beispiel: Klimaanlage<br />

66


Komposite Zustände:<br />

Ein Zustand kann dekomponiert werden<br />

• mittels and in parallele Teilzustände<br />

• mittels or in sich gegenseitig ausschließende Teilzustände<br />

Eine Verfeinerung ist nur auf einem dieser beiden Wege möglich.<br />

67


Unterzustände:<br />

- sind die in einem kompositen Zustand enthaltenen Zustände<br />

- können sein<br />

➔<br />

einfache Zustände,<br />

➔<br />

komposite Zustände oder<br />

➔ Pseudozustände<br />

Es entsteht ein Zustandsbaum (Hierarchie)<br />

Kompositum<br />

B<br />

C<br />

D<br />

E F G H<br />

69


Trigger – Events, die Transitionen auslösen<br />

70


► Trigger dienen als Auslöser für Transitionen<br />

Signal-Trigger:<br />

• A möchte eine asynchrone Nachricht an B übermitteln<br />

• SendInvocationEvent bei A → löst SignalEvent bei B aus<br />

Call-Trigger:<br />

• A möchte eine Operation bei B aufrufen<br />

• CallInvocationEvent bei A → löst CallEvent bei B aus<br />

Time-Trigger:<br />

• Auslösen einer Transition zu bestimmter Zeit oder nach<br />

• bestimmter Zeitdauer<br />

Change-Trigger:<br />

• Wird ausgelöst, wenn sich der Wert eines Change Expression<br />

von false auf true ändert. Die Transition wird bei Änderung des<br />

Wächters (guard) auf true ausgeführt<br />

Any-Trigger:<br />

• Zusammenfassung aller Trigger außer denen, die an den anderen<br />

ausgehenden Transitionen des betrachteten Zustandes existieren<br />

71


Pseudozustände<br />

●<br />

Komplexe Beziehungen zwischen Zuständen<br />

einfach darstellen<br />

●<br />

Transitionen dürfen über einen oder<br />

mehrere Pseudozustände gehen<br />

Beispiel:<br />

Beispiel:<br />

Wegsuche<br />

Wegsuche<br />

in<br />

in<br />

einem<br />

einem<br />

Labyrinth<br />

Labyrinth<br />

An<br />

An<br />

einer<br />

einer<br />

Kreuzung<br />

Kreuzung<br />

muss<br />

muss<br />

sich<br />

sich<br />

der<br />

der<br />

Läufer<br />

Läufer<br />

für<br />

für<br />

eine<br />

eine<br />

Richtung<br />

Richtung<br />

entscheiden:<br />

entscheiden:<br />

links,<br />

links,<br />

gerade,<br />

gerade,<br />

rechts,<br />

rechts,<br />

<strong>zur</strong>ück.<br />

<strong>zur</strong>ück.<br />

Nach<br />

Nach<br />

einer<br />

einer<br />

entsprechenden<br />

entsprechenden<br />

Drehung<br />

Drehung<br />

läuft<br />

läuft<br />

der<br />

der<br />

Läufer<br />

Läufer<br />

so<br />

so<br />

lange,<br />

lange,<br />

bis<br />

bis<br />

er<br />

er<br />

an<br />

an<br />

eine<br />

eine<br />

neue<br />

neue<br />

Kreuzung<br />

Kreuzung<br />

oder<br />

oder<br />

ans<br />

ans<br />

Ziel<br />

Ziel<br />

kommt.<br />

kommt.<br />

72


Pseudozustand „Kreuzung“<br />

73


Pseudozustand „Entscheidung“<br />

74


Aktivitäten-Diagramm<br />

75


Beispiel: Autovermietung<br />

Rücknahme<br />

78


3 Implementation von UML-Modellen<br />

Java-Applikationen<br />

Programme in einer virtuellen Maschinensprache: JVM<br />

Interpretative Verarbeitung<br />

java MyApplication<br />

Compilation: MyApplication.java MyApplication.class<br />

import java.io.*;<br />

javac MyApplication.java<br />

public class MyApplication{<br />

public static void main(String args[]){<br />

System.out.println("Hello World");<br />

for (int i = args.length -1; i>= 0; i--)<br />

System.out.println(args[i]); } }<br />

79


Interfaces in Java<br />

Syntaktisch analog Klassen<br />

(class → interface)<br />

Reine Schnittstellen, enthalten keine Implementationen<br />

Ausschließlich abstrakte Methoden und Konstanten<br />

Eine Klasse kann ein oder mehrere Interfaces durch Implementierung erben<br />

(Ersatz für Mehrfachvererbung)<br />

Wenn eine Klasse ein Interface implementiert, dann muss sie alle Methoden<br />

überschreiben<br />

Die Eigenschaft, ein Interface zu implementieren, wird an Nachfahren der Klasse vererbt.<br />

80


Implementation von Assoziationen und Aggregationen<br />

1:1 – Beziehungen: Instanzvariable, Typ ist Klasse der zu verwaltenden Objekte<br />

1:n – Beziehungen: Vektoren und Hashtabellen (java.util)<br />

Vector v = new Vector(10);<br />

Methoden:<br />

void addElement(Object o)<br />

void insertElement(Object o, int index)<br />

void removeElement(Object o)<br />

void removeElementAt(int index)<br />

int size()<br />

81


import java.applet.*;<br />

import java.awt.event.*;<br />

import java.awt.*;<br />

Event-Handling<br />

public class AcEvDemo2 extends Applet implements ActionListener{<br />

public void init() {<br />

System.out.println("Hello world!");<br />

Button bopen = new Button("open");<br />

Button bclose = new Button("close");<br />

bopen.addActionListener(this);<br />

bclose.addActionListener(this);<br />

add(bopen);<br />

add(bclose);<br />

System.out.println("I am waiting for events.");<br />

}<br />

public void actionPerformed(ActionEvent evt){<br />

if (evt.getActionCommand().equals("open")){<br />

System.out.println("action in open");<br />

}<br />

if (evt.getActionCommand().equals("close")){<br />

System.out.println("action in close");<br />

}<br />

}<br />

}<br />

82


4 Systemarchitekturen<br />

System<br />

Logische Struktur<br />

(Klassen, objektbasiert)<br />

Physische Struktur<br />

(Komponenten, nicht objektbasiert)<br />

Komponentenmodelle<br />

UML: Komponentendiagramme<br />

Subsystem :<br />

package<br />

84


Architekturentwurf<br />

(nach H. Balzert)<br />

► Grundlegende Entwurfsentscheidungen<br />

Wahl:<br />

- Plattform (BS)<br />

- Programmiersprache (OO)<br />

- GUI-System (Bibliotheken, z.B. AWT, Swing, SWT)<br />

- Datenhaltung / Datenbank<br />

► Schichtenarchitektur<br />

Drei-Schichten-Architektur<br />

- GUI-Schicht<br />

- Fachkonzeptschicht (Geschäftsklassen,<br />

Zugriffe auf die Datenhaltungsschicht)<br />

- Datenhaltungsschicht<br />

85


OK<br />

86


Verteilungsmodelle<br />

Modellierung verteilter Anwendungen: Auf Knoten laufen Prozesse ab<br />

87


5 Der <strong>Software</strong>entwicklungsprozess<br />

Anwendungsfallanalyse<br />

Ein Anwendungsfall (use case) beschreibt Interaktionen zwischen Anwendern und dem<br />

Anwendungssystem, die notwendig sind, um einen Arbeitsgang durchzuführen.<br />

es sind Anwendungsfälle und Akteure zu identifizieren.<br />

88


Methodische Aspekte der Modellierung<br />

In der Analysephase sind folgende Aktivitäten erforderlich:<br />

→ Zerlegung des Anwendungsbereiches in Unterbereiche<br />

→ Analyse und Spezifikation des geforderten Systemverhaltens<br />

Während der Problembereichsanalyse werden zunächst „Geschäftsklassen“ modelliert.<br />

„Fachklassen“ beschreiben im Unterschied dazu implementierungs-technische<br />

Sachverhalte.<br />

Zur Entwicklung eines Objektmodells wird von Rumbaugh folgendes Vorgehen empfohlen:<br />

► Objektklassen identifizieren<br />

► ein Data Dictionary vorbereiten<br />

► Assoziationen zwischen Objektklassen identifizieren<br />

► Attribute identifizieren und zu Objektklassen hinzufügen<br />

(Operationen erst spät beim Spezifizieren des Zustandsmodells hinzufügen)<br />

► Klassen mittels Vererbung organisieren<br />

► Zugriffspfade testen<br />

► das Gesamtmodell in einem iterativen Prozess verfeinern<br />

► Klassen zu Paketen (Teilsystemen) gruppieren<br />

91


Qualitätssicherung<br />

Die Qualitätssicherung umfasst<br />

● die Planung/Durchführung von Qualitätssicherungsmaßnahmen (QSM) ,<br />

● die Kontrolle der Einhaltung von Standards (ISO 9000, ... ) und<br />

● die Qualitätsbewertung anhand von Metriken.<br />

92


Projektmanagement & Prozessmodellierung<br />

• Maßnahmen <strong>zur</strong> Planung, Verfolgung und Qualitätssicherung einzelner Projekte und<br />

von Projektfamilien<br />

• Prozessmodellierung: Modellierung und Programmierung des <strong>Software</strong>-<br />

Entwicklungfsprozesses<br />

(Rollen, Aktivitäten, Dokumente, Ressourcen)<br />

93


Konfigurationsmanagement<br />

► Ziele des KM:<br />

● Im SEP entstehende Ergebnisse (Artefakte: Dokumente, Modelle, Code)<br />

sicher verwalten<br />

● Zugriffskontrolle für verteilt arbeitende Entwickler<br />

● Kontrolle über Veränderungen an Artefakten im Laufe der Entwicklung<br />

► Das KM umfasst Aufgaben wie<br />

● die Kontrolle der entwickelten Quellprogramme<br />

● die Bereitstellung von „Build“-Funktionalität<br />

● das Release-Engineering<br />

► KM = Regelwerk, mit dem KM-Prozess beschrieben wird<br />

96


Versionsverwaltungssysteme<br />

► Versionsverwaltungssysteme stellen dem KM-Prozess ein Repository<br />

<strong>zur</strong> Verfügung<br />

► ermöglichen die Aufzeichnung der Entwicklungsgeschichte von<br />

Programmdokumenten in Projekten und unterstützt die Gruppenarbeit<br />

(check-out – check-in).<br />

► Das Concurrent Versions System (CVS) ist ein System, das das Versions-<br />

Management auf der Ebene von Quellprogrammen unterstützt (Open Source).<br />

→<br />

→<br />

→<br />

keine Deltas auf der Ebene von Binaries!<br />

nur Dateien versionierbar, keine Verzeichnisse<br />

keine Unterstützung von Transaktionen<br />

► Subversion (Open Source) ist ein seit 2004 verfügbares Nachfolgesystem zu CVS.<br />

97


Client-Server-Architektur von Subversion:<br />

Abbildung nach G. Popp<br />

98


6 Wiederverwendung<br />

Die Verwendung objektorientierter PS allein garantieren keine Verbesserung der<br />

Wiederverwendbarkeit<br />

Framework:<br />

Sammlung individueller Komponenten mit definiertem Kooperationsverhalten<br />

<strong>zur</strong> Lösung einer Aufgabe<br />

Whitebox-Framework:<br />

Blackbox-Framework:<br />

Anpassung durch Subklassenbildung + Compilation<br />

Anpassung <strong>zur</strong> Laufzeit durch unterschiedliche<br />

Instanziierung<br />

99


Entwurfsmuster<br />

• Gamma et al. haben einen Katalog von 23 Entwurfsmustern beschrieben.<br />

• Entwurfsmuster sind typischerweise in Anwendungen vorkommende Kombinationen<br />

von Klassen zu größeren Einheiten, unabhängig von der Programmiersprache.<br />

100


101


102


103


104


Entwurfsmuster „Beobachter“<br />

105


Entwurfsmuster „Kompositum“<br />

106


Die Model-View-Controller-Architektur (MVC)<br />

View<br />

Model<br />

Controller<br />

• Modell-Objekt stellt das Anwendungsobjekt dar<br />

• View-Objekt stellt die Bildschirmrepräsentation dar<br />

• Controller-Objekt bestimmt die Reaktion auf Benutzereingaben<br />

→ Veränderung des Modells<br />

107

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!