OOMPA 2D359 Föreläsning 5 Objektorienterad Modellering Programmering och Analys Innehåll Klassdiagram med Klassbeskrivningar l klasser, arv, attribut, operationer l relationer, associationer, restriktioner stereotyper abstrakta klasser, gränssnitt - - Klassdiagram l centralt i i stort sett alla objektorienterade metoder l beskriver dom olika typerna av objekt i systemet samt deras inbördes statiska relationer l ett klassdiagram visar två olika typer av statiska relationer subtyper l en bil är ett fordon associationer l en bil har en ägare l ett klassdiagram visar också klassernas attribut operationer restriktioner på hur olika objekt kan förbindas - 2 -
Klass l En klass är en uppsättning objekt med gemensam struktur, gemensamt beteende, gemensamma relationer och gemensam semantik l Klasser hittas hittas genom att användningsfall, sekvensdiagram, sammarbetsdiagram och CRC-kort analyseras och används l En klass ritas i UML som en rektangel med tre olika delar l Klasser skall helst namnges med hjälp av den vokabulär som används i den aktuella domänen - 3 - Klassdiagram: notation Klass Klassnamn attribut : Typ = initialtvärde operation(argumentlista) : returtyp Klassnamn klassbox, lång form klassbox, kort form Generalisering Supertyp superklass (basklass) subklass (härledd klass) Subtyp Subtyp2-4 - 2
Klass: attribut l Strukturen av en klass representeras av attribut l Attributen kan hittas genom att utforska klassdefinitioner, från kravspecifikationen och med hjälp av domänkunskap Varje kurs har ett nummer, en plats för där den genomförs och en tid då den går CourseOffering number location time - 5 - Exempel: Klassen med två instanser Rita en klass med hjälp av a) ett klassdiagram med attributen name: String och age: Integer b) två instanser av klassen Klass name : String age : Integer Instanser : name = Kalle age = 25-6 - : name = Lisa age = 23 3
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 (0, 0) b) "rita" också två instanser FärgatObjekt color : Color = röd position : Point = (0, 0) defaultvärden eget namn (frivilligt) geo: FärgatObjekt color = röd position = (0, 0) geo2: FärgatObjekt color = röd position = (30, 50) - 7 - Exempel: klassen Point med två instanser - 8-4
Arv l Arv är en relation mellan en superklass och dess subklasser l Det finns två huvudtyper av arv generalisering specialisering l Gemensamma attribut, operationer och/eller relationer brukar skrivas så högt upp i hierarkin som möjligt - 9 - Exempel: Generalisering Konstruera ett klassdiagram med två subklasser Student och Teacher till superklassen. Student courses : Vector group : String Teacher courses : Vector salary : Money - 0-5
Association Klass A roll A roll B Klass B Multiplicitet Klass exakt en Klass noll eller flera 0.. Klass noll eller en m..n Klass numeriskt specificerad - - Relationer mellan klasser l Relationer mellan klasser kan hittas genom att samarbetsdiagram undersöks (se nästa föreläsning f6) Om två objekt behöver utbyta information måste en väg för informationsutbyte finnas l Ett annat sätt är att CRC-kort används för att identifiera samarbete - 2-6
Exempel: association Antag att en har precis ett jobb men att ett företag kan ha noll eller flera anställda personer. Gör ett klassdiagram över detta. Company Sätt ut lämpliga rollnamn på associationerna i diagrammet. 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.. boss employee worker employer Company - 3 - En association kan ha ett namn namn 0.. boss Works-for employee employer worker Company Manages För att förtydliga kan vi sätta ut riktning 0.. boss Works-for4 employee employer worker Company Manages4-4 - 7
Kvalifikationer En vanlig association där ett attribut unikt definierar det associerade objektet i mängden 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. Employee number Company - 5 - Exempel: kvalifikationer Till varje möjligt kontonummer finns noll eller en innehavare. Varje person kan inneha flera kontonummer Bank account # 0.. Inom en katalog finns en fil med ett visst namn Directory filename File - 6-8
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) Country name : String :Country name= Sverige :Country name= Norge capital City name : String :City name = Stockholm :City name = Oslo - 7 - 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 - 8-9
Aggregat l Ett specialfall av association där relationen kan ses som en sammansättning ("består av") Document Figure Paragraph Line - 9 - Exempel: aggregat Component Leaf Leaf2 Shape Composite.. Rectangle Ellipse Group - 20-0
Exempel: aggregat och operationer l Det är vanligt att operationerna propageras från helheten till delarna. print print Document print Figure Paragraph print Line - 2 - Riktade associationer l För att förtydliga relationer kan riktade associationer användas genom att en pil används l 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 l 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 {private B _assocb;} A B class B {private A _assoca;} A B class B {private Vector _assoca;} - 22 -
Exempel: riktad association Subject observers Observer attach(observer) detach(observer) notify() for all o in observers { o.update() } update() ConcreteSubject subject ConcreteObserver subjectstate observerstate getstate() update() - 23 - Restriktioner l 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, {} Order Customer datereceived isprepaid number: String price : Money dispatch() close() {if Order.customer.creditRating is "poor" then Order.isPrepaid must be true} name address creditrating() : String - 24-2
restriktioner l Restriktioner kan också anges för associationer Ordnade Employee salary 0.. boss {salary <= boss.salary} Contains4 3.. Polygon Point {ordered} eller Account {or} Corporation - 25 - Exempel: restriktioner - 26-3
Aggregat som komposition - 27 - Modifierare 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 +publikt_attribut #protected_attribut -privat_attribut klassvariabel +publik_operation() #protected_operation() -privat_operation() klassmetod() - 28 - om visibility inte sätts ut betyder det bara att den inte visas (inte att den är privat eller publik) 4
Exempel: modifierare # name : String # dateofbirth : Date - pincode : Integer + name() : String + age() : Integer + equals() : boolean # name(string) + create(name : String, dateofbirth : Date) : - hashcode() : Integer - 29 - Högre ordningens associationer - 30-5
Exempel: högre ordningens association Supplier Part Shipment Customer Quantity - 3 - Härledda attribut och associationer - 32-6
Perspektiv l Konceptuellt I detta perspektiv ritar man digram över koncept i domänen. Dessa koncept avbildas ofta på klasser som implementerar dem, men ofta är så inte fallet. En konceptuell modell ritas med liten eller ingen hänsyn till den mjukvara som skall användas vid implementationen l Specifikations I detta perspektiv tittar vi i första hand på gränssnitten för mjukvaran, inte implementationen. Vi tittar snarare på typer än klasser l Implementations I detta perspektiv har vi verkligen klasser och implementationen görs tydlig - 33 - Exempel : olika detaljnivå utan detaljer implementationsnivå analysnivå - 34-7
Stereotyper En stereotyp indikerar på en hög nivå rollen som ett visst objekt spelar - 35 - Exempel: stereotyper - 36-8
Komposition, alternativa former - 37 - Exempel : Diagram med bla kvalificerat- och länkattribut Bank accountnumber : Integer 0.. customer ismarried : Boolean isunemployed : Boolean birthdate : Date age : Integer firstname : String lastname : String sex : enum{ male, female} income (Date) : Integer husband 0.. manager 0.. Company managedcompanies name : String numberofemployees : Integer employee 0.. employer 0.. stockprice( ) wife 0.. Marriage place : String date : Date Job title : String startdate : Date salary : Integer - 38-9
Multipel klassificering Särskiljande drag (discriminator) Doctor Surgeon Female Male sex {mandatory} Patient role patient Nurse Physiotherapist Family Doctor Ett objekt kan kombinera dessa typer tex (Male, Patient, Nurse) eller (Male, Patient), (Female, Doctor, Surgeon) - 39 - Abstrakt klass l En abstrakt klass utrycks genom att klassnamnet skrivs kursivt man kan också använda restriktionen {abstract} Shape {abstract}.. Rectangle Ellipse Group - 40-20
Exempel: abstrakt klass Windows95 Text Editor Window {abstract} tofront() toback() X tofront() toback() tofront() toback() Mac - 4 - tofront() toback() Gränssnitt l Ett gränssnitt beskriver det protokoll en viss klass skall uppfylla InputStream {abstract} «interface» DataInput OrderReader DataInputStream - 42-2
... kort form l Ett gränssnitt kan skrivas på mer kompakt form (med s.k. klubb-notation, eng. lollipop notation) DataInput gränssnitt OrderReader DataInputStream InputStream - 43 - Var hittar jag mer info l I Fowler finns det referenser till kommande böcker l http://www.rational.com här kan man hitta l dokumentation och specifikation. Speciellt notation guide (i pdf-format) är nyttig l CASE-verktyg (demoversion för Windows) - 44-22