OOMPA 2D1359 & 2D1360 Innehåll UML Olika typer av diagram Att läsa Föreläsning 2 Innehåll UML Till vad? Byggstenar Olika typer av diagram Att läsa Läs Bruegge kapitel 2-2.3.5 och 2.4
UML UML är ett språk UML är ett språk för att visualisera UML är ett språk för att specificera UML är ett språk för att konstruera UML är ett språk för att dokumentera
UML: konceptuell modell UMLs byggstenar Saker Strukturella Beteende Gruppering Noteringar Relationer Beroenden Associationer Generaliseringar Diagram Klassdiagram, objektdiagram, användningsfallsdiagram, interaktionsdiagram (sekvens- och samarbetsdiagram), tillståndsdiagram, aktivitetsdiagram, komponentdiagram, leveransdiagram
Strukturella saker Klass Gränssnitt Samarbete Aktiv klass Komponent Window Chain of responsibility origin size ISpelling open() close() move() display() Aktiv klass Komponent EventManager orderform.java suspend() flush() Användningsfall Nod Place order Server
Beteendemässiga, grupperande och noterande saker Meddelande Paket display Business rules Tillstånd Notis Waiting return copy of self
Relationer i UML Beroende Association Generalisering Realisering 0..1 * employer employee Generalisering Realisering
Användningsfallsdiagram Sätt gränser Uppdatera konto Redovisnings- system Analysera risker Chefsförhandlare «uses» Prisför- handla «uses» Värdera aktör Handlare Slut avtal «extends» Försäljare användningsfall Gränserna överskridna
Klassdiagram
...Klassdiagram
Sekvensdiagram
... Sekvensdiagram
Tillståndsdiagram: exempel
Aktivitetsdiagram, notation [Villkor-a] [villkor-c] Aktivitet [Villkor-b] [villkor-d] Aktivitet Aktivitet [synkroniserings- villkor] ^objekt.Meddelande för alla * Aktivitet
Exempel: "Person::ordna dryck" Hitta dryck [inget kaffe] [ingen cola] [kaffe hittat] [cola hittat] Kaffe i filtret Häll i vatten Hämta koppar Filtret i bryggaren Hämta cola Slå på bryggaren ^kaffepanna.slåPå slå av lampan Brygg Drick Häll upp kaffe
Exempel: klocka Användningsfallsdiagram Paket SimpleWatch ReadTime SetTime WatchUser WatchRepairPerson ChangeBattery
… Klassdiagram SimpleWatch 1 1 1 1 2 1 2 1 PushButton state push() release() LCDDisplay Battery load() Time now() blinkIdx blinkSeconds() blinkMinutes() blinkHours() stopBlinking() referesh()
... Sekvensdiagram blinkHours() blinkMinutes() incrementMinutes() refresh() commitNewTime() stopBlinking() pressButton1() pressButton2() pressButtons1And2() :WatchUser :Time :LCDDisplay :SimpleWatch
... Tillståndsdiagram button1&2Pressed button1Pressed button2Pressed Increment Minutes Hours Blink Seconds Stop Blinking button1&2Pressed
Klass En klass är en uppsättning objekt med gemensam struktur, gemensamt beteende, gemensamma relationer och gemensam semantik Klasser hittas hittas genom att användningsfall, sekvensdiagram, samarbetsdiagram och CRC-kort analyseras och används En klass ritas i UML som en rektangel med tre olika delar Klasser skall helst namnges med hjälp av den vokabulär som används i den aktuella domänen
Klassdiagram centralt i i stort sett alla objektorienterade metoder beskriver dom olika typerna av objekt i systemet samt deras inbördes statiska relationer ett klassdiagram visar två olika typer av statiska relationer subtyper en bil är ett fordon associationer en bil har en ägare ett klassdiagram visar också klassernas attribut operationer restriktioner på hur olika objekt kan förbindas
Klassdiagram: notation klassbox, lång form Klass Klassnamn attribut : Typ = initialtVärde operation(argumentlista) : returTyp klassbox, kort form Klassnamn superklass (basklass) Supertyp Generalisering subklass (härledd klass) Subtyp1 Subtyp2
Klass: attribut Strukturen av en klass representeras av attribut Attributen kan hittas genom att utforska klassdefinitioner, från kravspecifikationen och med hjälp av domänkunskap Varje kurs har ett nummer, en plats där den genomförs och en tid då den går CourseOffering number location time
Exempel: Klassen Person med två instanser Rita en klass Person med hjälp av a) ett klassdiagram med attributen name: String och age: Integer b) två instanser av klassen Klass Person name : String age : Integer Instanser : Person name = Kalle age = 25 : Person name = Lisa age = 23
Exempel: Färgat geometriskt objekt, med defaultvärden Rita ett klassdiagram med med ett geometriskt objekt a) där defaultvärdet för färgen är röd och för positionen är (10, 10) b) "rita" också två instanser FärgatObjekt color : Color = röd position : Point = (10, 10) defaultvärden eget namn (frivilligt) geo1: FärgatObjekt color = röd position = (10, 10) geo2: FärgatObjekt color = röd position = (30, 50)
Exempel: klassen Point med två instanser
Arv Arv är en relation mellan en superklass och dess subklasser Det finns två huvudtyper av arv generalisering specialisering Gemensamma attribut, operationer och/eller relationer brukar skrivas så högt upp i hierarkin som möjligt
Exempel: Generalisering Konstruera ett klassdiagram med två subklasser Student och Teacher med superklassen Person. Person Student Teacher courses : Vector group : String courses : Vector salary : Money
Association Multiplicitet Klass A Klass B Klass exakt en Klass roll B Klass A Klass B roll A Multiplicitet 1 Klass exakt en * Klass noll eller flera 0..1 Klass noll eller en m..n Klass numeriskt specificerad
Relationer mellan klasser Relationer mellan klasser kan hittas genom att samarbetsdiagram undersöks Om två objekt behöver utbyta information måste en väg för informationsutbyte finnas Ett annat sätt är att CRC-kort används för att identifiera samarbete
Exempel: association Antag att en Person har precis ett jobb men att ett företag kan ha noll eller flera anställda personer. Gör ett klassdiagram över detta. * 1 Person Company Sätt ut lämpliga rollnamn på associationerna i diagrammet. * 1 Person Company employee employer Inför i diagrammet att varje person kan ha noll eller en chef och att varje chef kan ha noll eller flera underställda. 0..1 * 1 Person Company boss employee employer * worker
En association kan ha ett namn 0..1 * Works-for 1 namn Person Company boss employee employer * worker Manages För att förtydliga kan vi sätta ut riktning 0..1 * Works-for 1 Person Company boss employee employer * worker Manages
Användningsfall (eng. Use Case) Jacobson 1992 Har snabbt utvecklats till en populär teknik Fokusering på användaren Enkel teknik som låter användaren delta på ett tidigt stadium Ger analytikern möjlighet att på ett tidigt stadium uppmärksamma specifika behov hos användaren Passar bra vid inkrementell lösningsprocess Utifrån och in
Vad är det? Jacobson beskriver Use Case så här: A behaviourally related sequence of interactions performed by an actor in dialogue with the system to provide some measurable value to the actor. Beskriver ett sätt att använda systemet Tekniken kan användas för alla typer av system Funktionaliteten hos systemet ska ge något av värde för användaren Ska inte vara för detaljerat
... Aktör Användningsfall människa eller annat system kommunicerar med ett system, vilket kan beskrivas med ett användningsfall Aktör Användningsfall är en mall för en sekvens av interaktioner mellan en aktör och ett system Användningsfall
Användningsfallsdiagram Sätt gränser Uppdatera konto Redovisnings- system Analysera risker Chefsförhandlare «includes» Prisför- handla «includes» Värdera Handlare Slut avtal aktör Försäljare «extends» användningsfall Gränserna överskridna
Identifiera användningsfall Arbetsgång Identifiera aktörer Identifiera användningsfall beskriv informellt beskriv i tabellform beskriv i diagramform vidareutveckla detaljer undersök relationer mellan olika användningsfall
Exempel: Banksystem Kontouttag Överföring Kund Banksystem Insättning
...användningsfallet kontouttag När kund sätter in kort i bankomaten, läs koden från kortet och kontrollera dess giltighet Om kortet ok så begär 4-siffrig kod av kunden. Om fyra siffror matats in så fortsätt annars mata ut kortet Kontrollera koden. Om koden giltig så fråga efter typ av transaktion annars mata ut kortet. När kunden valt kontantuttag, fråga efter belopp ....
Användningsfall kan ordnas i hierarkier Korttransaktion «includes» «includes» «includes» Kontouttag Överföring Insättning «extends» Hjälp
Hello world-exempel import java.awt.Graphics; class Hello extends java.applet.Applet { public void paint(Graphics g) { g.drawString(”Hallå!”, 10, 10); }
… Hello klassdiagram ... Hello g.drawString(”Hallå!”, 10, 10); paint()
… Hello ... Applet Hello paint() Graphics
… Hello ... ImageObserver Object Component Container Panel Applet
… Hello paketering ... java Hello applet awt lang
… Hello sekvensdiagram ... :Thread :Toolkit :ComponentPeer target:Hello run run callbackLoop handleExpose paint
… Hello komponenter Hello.class Hello.java Hello.html Hello.jpg -----
Kvalifikationer En vanlig association där ett attribut unikt definierar det associerade objektet i mängden * 1 Employee Company number En kvalifikation är ett attribut för association. En kvalifikation särskiljer ett visst associerat objekt ur mängden av associerade objekt. 1 Employee Company number
Exempel: kvalifikationer Till varje möjligt kontonummer finns noll eller en innehavare. Varje person kan inneha flera kontonummer Bank account # * 0..1 Person Inom en katalog finns en fil med ett visst namn Directory filename 1 File
Exempel: fler associationer a) Rita ett klassdiagram där ett land associeras med en huvudstad b) Gör ett instansdiagram med följande associationer (Sverige, Stockholm) och (Norge, Oslo) capital Country City 1 name : String name : String 1 :Country :City name= Sverige name = Stockholm 1 :Country :City name= Norge name = Oslo
Länkattribut Det är ofta naturligare att placera informationen om en viss relation i associationen än hos någon av dom associerade objekten. Vi kan lägga till attribut, operationer och andra finesser till associationen mha ett så kallat länkattribut eller associerad klass associerad klass
Aggregat Ett specialfall av association där relationen kan ses som en sammansättning ("består av") 1 1 * * Document Paragraph Line 1 * Figure
Exempel: aggregat Component Leaf1 Leaf2 Composite Shape Rectangle * Leaf1 Leaf2 Composite 1..* Shape Rectangle Ellipse Group
Exempel: aggregat och operationer Det är vanligt att operationerna propageras från helheten till delarna. print print Document * Paragraph * Line 1 1 print 1 print * Figure
Riktade associationer För att förtydliga relationer kan riktade associationer användas genom att en pil används Om man inte sätter ut pil så säger inte UML om associationen är enkel eller dubbelriktad Detta får man själv (inom projektet) bestämma Riktad association med pil En riktad association utrycker att klassen vid pilens start har ansvar för relationen med klassen vid pilspetsen Man kan navigera från A till B men inte från B till A class A {public B _assocB;} A B class B {private A _assocA;} * 1 A B class B {private Vector _assocA;}
Exempel: riktad association observers * Subject Observer attach(Observer) detach(Observer) notify() update() for all o in observers { o.update() } 1 subject ConcreteSubject ConcreteObserver subjectState observerState getState() update()
Restriktioner För att förtydliga eller reglera en klass beteende kan restriktioner användas en restriktion är ett villkor som skrivs inom ett par måsvingar, {} * 1 Order Customer dateReceived isPrepaid number: String price : Money name address creditRating() : String dispatch() close() {if Order.customer.creditRating is "poor" then Order.isPrepaid must be true}
… restriktioner Restriktioner kan också anges för associationer Employee 0..1 boss salary * {salary <= boss.salary} Contains 3..* Polygon Point {ordered} Person Account {or} Corporation
Exempel: restriktioner
Aggregat som komposition
Modifierare Klassnamn visibility name : type-expression = initial-value { property-string } där visibility någon av: + public visibility (dvs alla kan använda det) # protected visibility (dvs endast synlig i klassen eller dess subklasser) - private visibility (endast synlig i klassen) understruken betyder klassmetoder och attribut Klassnamn om visibility inte sätts ut betyder det bara att den inte visas (inte att den är privat eller publik) +publikt_attribut #protected_attribut -privat_attribut klassvariabel +publik_operation() #protected_operation() -privat_operation() klassmetod()
Exempel: modifierare Person # name : String # dateOfBirth : Date - pinCode : Integer + name() : String + age() : Integer + equals(Person) : boolean # name(String) + create(name : String, dateOfBirth : Date) : Person - hashCode() : Integer
Högre ordningens associationer
Exempel: högre ordningens association * Supplier Shipment * * Part Customer Quantity
Härledda attribut och associationer