Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
TIE-20200 Samuel Lahtinen
Lyhyt UML-opas
UML -pikaesittely
TIE-20200 Samuel Lahtinen
UML, Unified Modeling
Language
• Standardoitu, yleiskäyttöinen mallinnuskieli, jota ylläpitää/hallitsee (Object Management Group) OMG
• Historiaa: 90-luvulla oli paljon kilpailevia mallinnuskieliä, ”kolmen kaveruksen” (”Three amigos” Jacobson, Booth, Rumbauch) johdolla päästiin yksimielisyyteen ja päätettiin tuottaa UML…
• Ideana kieli, joka ei ole riippuvainen mallinnusohjelmiston jne. toimittajasta
• 1997 UML 1.0, 1.1
• ISO/IEC standardi UML 1.4.2
• 2005 UML 2.0
• Uusin versio 2.5
TIE-20200 Samuel Lahtinen
UML
• Yhdistelmä erilaisia mallinnusmenetelmiä/mallinnuskieliä
• Standardoidut kaavioiden tuhrustustekniikat, määritelty ulkonäkö eri komponenteille, tiedon siirto mallien välillä
• Levinnyt laajalle
• Ohjelmointikieli- ja ohjelmointiprosessiriippumaton
• Eri kielet/mallit soveltuvat eri tarkoituksiin:– Rakenne: luokka-, olio-, paketti-, komponentti- (kaaviot)
– Käyttäytyminen/toiminnallisuus: tila-, sekvenssi-, käyttötapaus-, aktiviteetti-(kaaviot)
• UML antaa säännöt mallien rakentelulle ja tarjoaa mahdollisuuden laajentaa ja muokata perus-UML:ää(profiilit, metamallit)
TIE-20200 Samuel Lahtinen
Eri kaaviotyypit
http://www.uml-diagrams.org/uml-25-diagrams.html
TIE-20200 Samuel Lahtinen
Luokkakaavio: perusjutut
• Yleisin kaaviotyyppi, käytetään vaikka
mihin…
<<stereotype>>
Class
+operation1() : ReturnValueType
+operation2() : int
-attribute : Type
Luokan nimi
stereotyyppi
Jäsenmuuttujat/attribuutit
Jäsenfunktiot/operaatiot
näkyvyys:
(+) public
(-) private
(#) protected
TIE-20200 Samuel Lahtinen
UML ja suhteet
• Dependency/riippuvuus: heikoin suhde (esim. A käyttää
B:tä jossakin jäsenfunktiossaan)
• Assosiaatio (kaksisuuntainen). A tarvitsee B:tä ja
päinvastoin.
• Assosiaatio (yksisuuntainen) A tarvitsee B:tä, mutta B:n
ei tarvitse tietää mitään A:sta.
• Kooste(aggregation): Esimerkiksi joukkue koostuu pelaajista (tietty minimi- ja maksimimäärä, pelaaja voi vaihtaa joukkueesta toiseen.
• Muodoste (composition): rakennus-kerros, jäsenoliot
(esim. henkilö ja syntymäaika)
• Koosteet, muodosteet, assosiaatiot voivat olla
yksisuuntaisia tai kaksisuuntaisia.
• Assosiaatio, vahvempi suhde kuin edellinen (määrittelemätön assosiaatio)
TIE-20200 Samuel Lahtinen
Assosiaatiot ja nuolet
7
Ruksilla kerrotaan
yksisuuntaisuudesta
TIE-20200 Samuel Lahtinen
Kooste, aggregation ja koodi
class Team{public:
Team( string name ): name_( name ),players_(){}~Team(){};void print();void addPlayer( Player p );
private:string name_;vector<Player*> players_;
};
class Player{public:
Player(string name,unsigned int age,unsigned int number);~Player();void print() const;void setName( string name );
private:string name_;unsigned int age_;unsigned int number_;
};
TIE-20200 Samuel Lahtinen
Lukumääräsuhteet
• Assosiaatiolla, koosteilla, muodostumisilla
lukumääräsuhteet
• Kiinteä lukumääräsuhde kertoo vakiona
pysyvästä suhteesta (esim. shakkilaudan
ruudut, pelaajien määrä shakissa)
• Vaihtelevat lukumääräsuhteet, vaihteluväli
– esim. joukkueella pitää olla 11-20 pelaajaa. Pelaaja
voi olla joko ilman joukkuetta tai kuulua yhteen
joukkueeseen.
• Assosiaatioilla voi olla nimi
• Assosiaation päähän voi liittyä roolinimi
TIE-20200 Samuel Lahtinen
Periytymiseen liittyvät
suhteet
TIE-20200 Samuel Lahtinen
Abstrakti kantaluokka &
virtuaalifunktiot
• Abstrakti kantaluokka: nimi italics/kursiivilla tai
kertomalla luokalle ”abstract” classifier
• Rajapinnan (interface) voi dokumentoida samoin
• Puhtaasti virtuaaliset/abstraktit funktiot: kursiivilla
TIE-20200 Samuel Lahtinen
tapahtumasekvenssikaaviot
TIE-20200 Samuel Lahtinen
Korjaa tää
TIE-20200 Samuel Lahtinen
Tilakaaviot
TIE-20200 Samuel Lahtinen
Luokkakaavio, oliokaavio
• Oliokaavio on luokkakaavion yksi ilmentymä…• Luokkakaavio kertoo rajoitteet, joita olikaavion täytyy noudattaa.(Luokkakaavio kertoo suunnittelun suuntaviivat, jonka mukaan ohjelma
toteutetaan->ohjelma noudattaa luokkakaavion sääntöjä)
• Oliokaavion elementtejä ovat oliot ja linkit
Onko alla esitetty oliokaavio laillinen?
TIE-20200 Samuel Lahtinen
Metamallit, mitä ihmettä…?
• Meta, tietoa tiedosta…
• Missä määritellään säännöt luokkakaaviolle? Mitä saa piirtää, miten elementit liittyvät toisiinsa jne.?
• UML:n metamalli kertoo, mitä kussakin mallissa voidaanpiirrustella (samaan tapaan puhtaissa oliokielissä on metataso)
• MOF, metamalli , luokkakaavio ja oliotaso
• Miten näkyy oliokielissä? (luokkataso vs. oliotaso)
malli
(mallitaso)
oliot
(hetki
Ohjelman ajon
aikana)
metamalli
(metataso)
M3: MOF
(metametataso)
M2: metamalli
(metataso)
M1: malli
(mallinnus)
M0: runtime
(todelliset
oliot)
TIE-20200 Samuel Lahtinen
Rajoitteet sun muut
lisäkikat
OCL (Object Constraint Language ) (OMG:n standardi) :• Formaali kieli, määritelty semantiikka+syntaksi• Osa OMG:n laajaa standardikokoelmaa• Kohtuullisen helposti luettavissa ja ymmärrettävissä• Voidaan määritellä tarkempia sääntöjä ja rajoituksia
• Mopolla saa ajella vain 15 vuotta täyttäneet:• context: Moped• inv: self.driver.age >= 15
• Markun mopon täytyy olla pinkki:• context: Person• inv: self.name = ”Markku” implies self.vehicle.color = Pink
TIE-20200 Samuel Lahtinen
TYökaluja
• Magic Draw UML, Otupk/OTM:n sivuilta lisätietoja http://www.cs.tut.fi/software/win32/MagicDraw
• Harkkatyön kaaviot piirtää käsin tai netissä: – https://www.draw.io/
– http://alexdp.free.fr/violetumleditor/page.php
– http://www.gliffy.com/
• StarUML http://staruml.sourceforge.net/en/
• Umbrello http://uml.sourceforge.net/
• Software Ideas Modeler http://www.softwareideas.net/en/Default.aspx
TIE-20200 Samuel Lahtinen
Ohjelman suunnittelu
• Ohjelman suunnittelu projektin vaikein osuus
(toteuttaminen vaatii lopulta vain
suoraviivaista työtä, huono suunnitelma,
paljon työtä)
• Miten löytää oikeat oliot ja luokat?
• Miten muodostaa hyvästä yleisen tason
oliorakenteesta järkeviä rajapintoja?
• Miten varmistua, että toteutettava ohjelma
vastaa suunnitelmaa?
TIE-20200 Samuel Lahtinen
Oliomäärittelyä
• Asiakasvaatimusten havainnollistaminen ja selvittely– Käyttötapaukset (yksi käyttötapaus sisältää usein useita toimintoja)
– Sama toiminto voi esiintyä useassa käyttötapauksessa
– yhdistellään ja jaotellaan toimintoja
• Etsitään järjestelmän oliot, mietitään mihin mikäkin toiminto kuuluu
• Mietitään olioiden väliset yhteydet
• Olioista luokiksi, tehdään oliomäärittelystä jossa vastuita/toiminnallisuutta jne. luokkakaavio, joka konkretisoi em. Vastuut
• Mietitään yhteydet, tarkastellaan yhteisiä toiminnallisuuksia, lisätään perintää, hajotetaan isompia kokonaisuuksia osiin / päinvastoin
…
• Määritellään luokkien rajapinnat
• Toteutetaan rajapinnat
TIE-20200 Samuel Lahtinen
Yhteenveto
• UML sopii ohjelmien dokumentointiin,
suunnitelmien konkretisointiin,
suunnitteluvaiheessa kannattaa käyttää jotain
abstraktimpaa (tekniikkaa/tapaa)
• UML:n luokkakaavio lähellä kooditasoa, koodin
tuottaminen jne. mahdollista kaavion pohjalta
(samoin sekvenssikaavioiden tuottaminen
koodista/ohjelman ajosta jne onnistuu)
• Käsitteistöä, metaluokka, luokka, oliot