UML Eine kurze Einführung Programmiermethodik Eva Zangerle Universität Innsbruck
Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle Themen Generische Programmierung Java Collection-Framework Streams Unit-Tests Entwurfsmuster - Eine Einführung GUI-Programmierung Java Virtual Machine Ausblick Allgemeine Grundlagen Objekte und Klassen Klassen, Objekte und Methoden in Java String-Klasse Wrapper-Klassen UML Eine kurze Einführung Programmiermethodik - Objektorientierung 2
Modell und Diagramm Ein Modell stellt Abstraktion eines Realitätsausschnitts dar. Um Informationen verständlicher darzustellen Analog zum Erstellen von Bauplänen von Gebäuden Um essentielle Systemaspekte aufzuzeigen Zur Kommunikation Mit Projektmitarbeitern Mit Kunden Um komplexe Architekturen darstellen zu können Ein Diagramm ist die grafische Repräsentation eines Modells. Sicht Modell Sicht Realitätsausschnitt Programmiermethodik - Objektorientierung 3
Unified Modeling Language (UML) Die Unified Modeling Language (UML) ist eine standardisierte ausdruckstarke Modellierungssprache. Mit Hilfe der UML können Softwaresysteme besser entworfen, analysiert und dokumentiert werden. Begriff Unified bedeutet Unterstützung des gesamten Entwicklungsprozesses. Unabhängigkeit von Entwicklungswerkzeugen, sowie Programmiersprachen oder auch Anwendungsbereichen. Die UML ist aber nicht ein Allheilmittel und vollständig, ein vollständiger Ersatz für eine Textbeschreibung, eine Methode oder Vorgehensmodell. Programmiermethodik - Objektorientierung 4
Diagrammarten (1) Etliche unterschiedliche Diagrammarten Klassendiagramm (in dieser Vorlesung) Beschreibt den strukturellen Aspekt (Klassen, Interfaces, Beziehungen). Sequenzdiagramm (in der Vorlesung über Entwurfsmuster) Beschreibt komplexe Interaktionen zwischen Objekten in bestimmten Rollen. Beschreibt die zeitliche Abfolge dieser Interaktionen. viele mehr (z.b. Business Prozesse, Use Case-Diagramme, etc.) Programmiermethodik - Objektorientierung 5
Diagrammarten (2) Grafik übernommen von http://de.wikipedia.org/wiki/unified_modeling_language Programmiermethodik - Objektorientierung 6
Notation für Klassen (Übersicht) Klasse Sprachkonzept Klasse mit Abschnitten Notation Name Name Attribut1 Attribut2 Operation1 Operation2 Programmiermethodik - Objektorientierung 7
Klassen (Attribute) Sichtbarkeit für Attribute und Operationen + = public # = protected - = private ~ = default Instanzattribute oder Klassenattribute Klassenattribute werden unterstrichen Zusätzliche Eigenschaften angeben <<readonly>> <<ordered>> <<unique>> <<redefines <Operationsname>>> Programmiermethodik - Objektorientierung 8
Klassen (Multiplizität) Multiplizität von Attributen Spezifiziert wie viele Werte ein Attribut aufnehmen kann. Attribut:Typ[a..b] a..b mindestens a.. höchstens b a und b sind natürliche Zahlen * statt b bedeutet beliebig viele Beispiele 1..1 genau ein (entspricht 1) 0..1 Null oder ein 0..* beliebig viele (entspricht *) 1..* beliebig viele aber zumindest ein Programmiermethodik - Objektorientierung 9
Beispiele -max_size : int -top : int -stackarr : int [0..*] S tack <<constructor>>+s tack( max_size : int ) +push( element : int ) +pop() : int +ise mpty() : boolean +length() : int Alle Attribute sind privat User -name : S tring [1] -key : P asswo rd [1..*] User kann mehrere Passwörter haben Bereiche (hier Operationen) können auch leer bleiben Alle Operationen sind öffentlich <<enumerat ion>> RED B LUE GRE EN B LACK Color Datentypen oder Enumerations Programmiermethodik - Objektorientierung 10
Klassen (Operationen) Obligate Angabe einer (eventuell leeren) Parameterliste für jede Operation. Für jeden Parameter muss zumindest der Name und sein Typ angegeben werden (auch Multiplizität). Auch Rückgabetyp möglich (wenn nichts angegeben void). Unterstreichen kennzeichnet Klassenoperationen. Sichtbarkeit wie bei Attributen Zusätzliche Eigenschaften <<abstract>> (oder kursiv geschrieben) <<leaf>> (wenn final) <<raisedexception>> (wie throws) <<enumeration>> <<constructor>> Hinweise auf Algorithmen können in einer Notiz angefügt werden. Programmiermethodik - Objektorientierung 11
Assoziation Grundform (binäre Assoziation) A B Zusätzliche Angaben Benennung In der Mitte der Kante (Anzeigen der Leserichtung durch Pfeil möglich) Rollen (an den Enden der Assoziation, spezifische Funktion angeben) Multiplizitäten (an den Enden, wie bei Attributen) Angabe von Eigenschaften {ordered} {unique} Navigationsangaben Zulässige Navigationsrichtung (durch Pfeil) Keine Navigation erlaubt (durch X) Programmiermethodik - Objektorientierung 12
Beispiele User has P assword User has * -key P assword User -owner 1 has * -key P assword Reflexive Assoziation S ortedintlist <<c ons truc tor>>+s ortedintlis t() +insert( element : int ) +print() * -firs t 0..1 Node -data : int <<constructor>>+node( data : int ) * -next 0..1 Programmiermethodik - Objektorientierung 13
Beispiel (Java Umsetzung) Borr ower -c urrentb orrower 0..1 borrows -borrowedbooks 5 Book public class Borrower{ private Book[] borrowedbooks; private int numbooks;... public Borrower(){ numbooks = 0; borrowedbooks = new Book[5]; } public class Book{ private Borrower currentborrower;... public void setborrower(borrower bw){ currentborrower = bw; } } } public void borrowbook(book b){... borrowedbooks[numbooks] = b; numbooks++; b.setborrower( this );... } Programmiermethodik - Objektorientierung 15
Aggregation Ist eine spezielle Assoziation (Teile-Ganzes-Beziehung). Komposition ist eine speziellere (strengere) Form der Aggregation mit folgenden Einschränkungen. Ein Teil darf Kompositionsteil höchstens eines Ganzen sein. Multiplizität 1 bedeutet, dass das Teil nur solange existiert wie sein Ganzes. Ganzes ist verantwortlich für die Erzeugung der Teile. Beispiele Company 1 has 1..* Div ision Aggregation Inv oice 1 has 1..* Inv oice line item Komposition Rechnungsposition existiert nur mit Programmiermethodik - Objektorientierung der Rechnung 16
Beispiel (Java Umsetzung) Car has -wheels 4 W heel Car has -fixedwheels 4 W heel public class Car { private Wheel[] wheels;... public Car(Wheel r1, Wheel r2, ) { wheels = new Wheel[4]; wheels[0] = r1; wheels[1] = r2; } } public class Car { private Wheel[] fixedwheels;... public Car(){ fixedwheels = new Wheel[4]; fixedwheels [0] = new Wheel(); fixedwheels [1] = new Wheel(); }... } Programmiermethodik - Objektorientierung 17
Vererbung, Schnittstellen Programmiermethodik - Objektorientierung 18
Programmiermethodik - Objektorientierung 19