Objektorienterad analys och design Objektorienterad analys och design 1
Dagens föreläsning Första delen, innan rasten: Motivation och bakgrund Analys Funktioner Andra delen, efter rasten: Objektorienterade strukturer Bra design Objektorienterad analys och design 2
Motivation och bakgrund Antag att vi vill göra spelet Pong i C. Hur skulle ni göra? Vad skulle ni börja med? Hur många saker måste vi hålla reda på? Objektorienterad analys och design 3
Motivation och bakgrund (forts.) Ett kanske inte helt komplett(?) förslag på data för Pong: left_paddle_y, right_paddle_y, paddle_width, paddle_length ball_x, ball_y, ball_xspeed, ball_yspeed, ball_size upper_wall_y, lower_wall_y left_score, right_score Objektorienterad analys och design 4
Motivation och bakgrund (forts.) Pong är rätt simpelt (det kom ju redan på 70-talet). Antag att vi istället vill göra spelet World of Warcraft a. Hur ska vi ta hand om alla karaktärer? Hur många siffror måste vi hålla reda på? Kan vi göra på samma sätt som med Pong? a Bilden tagen från tillverkarens hemsida. Objektorienterad analys och design 5
Motivation och bakgrund (forts.) Ju mer information vi måste hålla reda på, desto mer vill vi dela in den i logiska och sammanhängande bitar (begreppet chunks kanske känns igen från kognitionsvetenskapen). Objektorienterad programmering handlar om att hitta lämpliga chunks och göra klasser av dem. Då blir till och med World of Warcraft enkelt att programmera... Objektorienterad analys och design 6
Analys Vi vill veta vad det är för data som systemet egentligen behandlar, och hur vi kan dela upp det i vettiga bitar. Vi skapar oss en modell. Hitta klasser vilka data behandlar systemet? Hitta händelser vad görs med klasserna? Tänk på vad som är viktigt ur systemets perspektiv! Objektorienterad analys och design 7
Hitta klasser Analysera problemområdet kravspecifikation I kravspecifikationen, hitta lämpliga artefakter (klasskandidater) En primitiv och ofta lämplig metod är att leta efter substantiv Objektorienterad analys och design 8
Hitta klasser (exempel) Resebyrån X vill beställa ett nytt system för bokning av resepaket (flygresa och hotellvistelse). Kunderna skall kunna boka resor, och systemet skall kunna ta betalt. Det finns hotell över hela Europa, främst i Spanien och dess öar. Kunderna skall kunna utvärdera resan när de kommit hem, och alla data om en kund (namn, tidigare resor, adress, etc.) skall sparas i systemet. Objektorienterad analys och design 9
Hitta klasser (exempel, forts.) Resebyrån X vill beställa ett nytt system för bokning av resepaket (flygresa och hotellvistelse). Kunderna skall kunna boka resor, och systemet skall kunna ta betalt. Det finns hotell över hela Europa, främst i Spanien och dess öar. Kunderna skall kunna utvärdera resan när de kommit hem, och alla data om en kund (namn, tidigare resor, adress, etc.) skall sparas i systemet. Objektorienterad analys och design 10
Några klasskandidater: Resepaket Flygresa Hotellvistelse Kund Betalning Hotell Utvärdering Datalagring Hitta klasser (exempel, forts.) Objektorienterad analys och design 11
Hitta händelser Vi vill veta vad som skall hända med datan i systemet. Hur påverkar klasserna varandra? I kravspecifikationen och med hjälp av klasskandidaterna, hitta hur artefakterna påverkar varandra Objektorienterad analys och design 12
Hitta händelser (exempel) Resebyrån X vill beställa ett nytt system för bokning av resepaket (flygresa och hotellvistelse). Kunderna skall kunna boka resor, och systemet skall kunna ta betalt. Det finns hotell över hela Europa, främst i Spanien och dess öar. Kunderna skall kunna utvärdera resan när de kommit hem, och alla data om en kund (namn, tidigare resor, adress, etc.) skall sparas i systemet. Objektorienterad analys och design 13
Hitta händelser (exempel, forts.) Resebyrån X vill beställa ett nytt system för bokning av resepaket (flygresa och hotellvistelse). Kunderna skall kunna boka resor, och systemet skall kunna ta betalt. Det finns hotell över hela Europa, främst i Spanien och dess öar. Kunderna skall kunna utvärdera resan när de kommit hem, och alla data om en kund (namn, tidigare resor, adress, etc.) skall sparas i systemet. Objektorienterad analys och design 14
Hitta händelser (exempel, forts.) Den ytterst knappa beskrivningen av systemet har gett oss följande händelser: Boka resa (Kund) Ta betalt (Betalning) Utvärdera resa (Kund) Spara kunddata (Kund, Datalagring) Vi kan tänka oss många fler (registrera kund, söka resa, visa information, etc.), men det här räcker för tillfället! Objektorienterad analys och design 15
Funktioner Ett konkretare sätt att se på händelserna vi just tagit fram, fokus ligger på information och dess behandling. Typer av funktioner Händelser består av många funktioner Objektorienterad analys och design 16
Typer av funktioner Uppdateringsfunktioner förändrar modellens tillstånd Signalleringsfunktioner modellen upplyser omgivningen om någon form av förändring av dess tillstånd Avläsningsfunktioner en aktör begär information om modellen Beräkningsfunktioner utför en beräkning för att leverera information till någon aktör Objektorienterad analys och design 17
Händelser består av många funktioner Alla händelser är en sekvens av någon eller några av de fyra funktionstyperna! En vettig klass tillhandahåller oss med en relevant uppsättning funktioner (som dock i objektorienterade språk brukar kallas metoder) Objektorienterad analys och design 18
Händelser och funktioner, exempel Händelse: Boka en resa. Funktioner: Hitta en lämplig ledig resa (avläsning) Välja resa för bokning (signallering) Avgöra totalkostnad för resa (beräkning) Markera resa som bokad (uppdatering) Informera om framgångsrik bokning (signallering) Objektorienterad analys och design 19
Efter rasten Använda vår analys för att skapa en design Skapa klasser med metoder Relatera klasserna till varandra med arv Visa sammansättning av klasser Visa beroenden mellan klasser Få några tips om hur man skapar bra design (fler kommer på föreläsningen om programvarukonstruktion, F12) Objektorienterad analys och design 20
Objektorienterade strukturer När vi har hittat lämpliga klasskandidater och bestämt vilka av dem som skall ingå i modellen, skall vi relatera dem till varandra på något sätt. Det finns olika typer av relationer, dessa är: Mellan klasser: Generalisering (Arv) en klass är en typ av en annan Kluster relaterade klasser samlas i grupp Mellan objekt: Aggregat ett objekt består av ett eller flera delobjekt Association en meningsfull relation mellan objekt Objektorienterad analys och design 21
Unified Modelling Language Unified Modelling Language (UML) är en notation (skrivsätt) för att uttrycka objektorienterad design. Det är inte bundet till något speciellt programspråk. Det är en allmänt vedertagen standard, och vi kommer att använda den under kursens gång. Alla kommande exempel är i UML-notation. Objektorienterad analys och design 22
Generalisering En generell klass (superklassen) beskriver egenskaper gemensamma för en mängd specialiserade klasser (subklasser). Exempel: Objektorienterad analys och design 23
Generalisering (forts.) Ofta är superklassen i sig inte meningsfull för systemet finns det något generellt däggdjur ute i naturen? Sådana klasser kallas för abstrakta klasser och inga objekt kan skapas från dem. De skrivs kursiverat, som i följande exempel: Objektorienterad analys och design 24
Kluster Stora system med många klasser delas upp i kluster, där varje kluster är en samling av relaterade klasser. I Java kallas kluster för paket. Exempel: Objektorienterad analys och design 25
Kardinalitet För relationer mellan objekt, måste vi ange hur många som ingår i relationen. Detta anges på följande vis: a..b Mellan minst a och maximalt b stycken objekt a.. Minst a stycken objekt ( betyder många ) a Förkortat skrivsätt för a..a Förkortat skrivsätt för 0.. Om vi inte anger någon kardinalitet antas den vara 1 (alltså 1..1). Objektorienterad analys och design 26
Aggregat Ett överordnat objekt (helheten) består av ett antal andra objekt (delarna). Exempel (lägg märke till kardinalitetssiffrorna och var de står): Objektorienterad analys och design 27
Aggregat (forts.) En speciell typ av aggregat är komposition. Den innebär samma sak som aggregatrelationen, med tillägg av att det överordnade objektet inte kan existera utan delobjekten. Finns konceptet schackbräde om vi inte har schackrutorna? Objektorienterad analys och design 28
Association En meningsfull relation mellan ett antal objekt. Används för att uttrycka att objekt av en klass påverkar objekt av en annan klass på något sätt. Exempel: Objektorienterad analys och design 29
Exempel Låt oss uttrycka följande i UML-notation: En student läser kurser vid datavetenskapliga institutionen. En kurs består av ett teorimoment och eventuellt ett praktiskt moment. Båda momenten betygsätts. Studentens slutgiltiga betyg är det sammanlagda betyget från momenten. Det praktiska momentet består i sin tur av ett antal laborationer (minst en). På kursen är såväl lärare som handledare anställda. Båda rättar laborationer. En kurs har en tentamen (ingår i det teoretiska momentet), som rättas av läraren. Objektorienterad analys och design 30
Exempel (forts.) Objektorienterad analys och design 31
Bra design Vad kännetecknar bra design? Vettig abstraktionsnivå Lös coupling klasserna är självständiga Hög cohesion klasserna är väl sammansatta internt Objektorienterad analys och design 32
Vettig abstraktionsnivå Beroende på hur systemet ser ut och vad det skall klara av är olika abstraktionsnivå nödvändig. Är en stol bara en stol, eller är den sammansättningen av ett till flera ben, en sittdyna och noll till ett ryggstöd (och skruvar där det verkar lämpligt)? I ett lagersystem för en möbelfirma kanske det senare, men i ett lagersystem för ett kontor kanske det första. Objektorienterad analys och design 33
Coupling Coupling (slående likt svenskans koppling ) är ett mått på hur tätt integrerade två komponenter eller klasser av ett system är. Hög coupling innebär att komponenterna är väldigt beroende av varandras inre struktur. Låg coupling (eftersträvansvärt) innebär att komponenterna inte vet något om hur de andra fungerar internt, men att de samarbetar via att skicka meddelanden till varandra. Hög coupling innebär att om man ändrar en av komponenterna så måste de andra komponenterna också eventuellt ändras. Med många komponenter blir det väldigt mycket extra jobb! Objektorienterad analys och design 34
Cohesion Cohesion är ett mått på hur väl funktionerna i en komponent eller klass är sammansatta. Låg cohesion innebär att funktionerna i stort sett bara av ren slump finns i en komponent. Exempel: en klass som kan räkna ut primtal, ta reda på vädret i Umeå och kolla kvällens TV-program. Hög cohesion innebär att funktionerna i komponenten är mycket relaterade till att lösa komponentens uppgift. Exempel: en klass som representerar en triangel, med funktioner för att räkna ut dess area, rita upp den i en bild, ändra färg för uppritning och så vidare. Objektorienterad analys och design 35