Lyhyt UML-opas UML -pikaesittely
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
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)
Eri kaaviotyypit http://www.uml-diagrams.org/uml-25-diagrams.html
Luokkakaavio: perusjutut Yleisin kaaviotyyppi, käytetään vaikka mihin näkyvyys: (+) public (-) private (#) protected -attribute : Type <<stereotype>> Class +operation1() : ReturnValueType +operation2() : int stereotyyppi Luokan nimi Jäsenmuuttujat/attribuutit Jäsenfunktiot/operaatiot
UML ja suhteet Dependency/riippuvuus: heikoin suhde (esim. A käyttää B:tä jossakin jäsenfunktiossaan) Assosiaatio, vahvempi suhde kuin edellinen (määrittelemätön assosiaatio) Assosiaatio (yksisuuntainen) A tarvitsee B:tä, mutta B:n ei tarvitse tietää mitään A:sta. Assosiaatio (kaksisuuntainen). A tarvitsee B:tä ja päinvastoin. 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. TIE-20200 Samuel Lahtinen
Assosiaatiot ja nuolet Ruksilla kerrotaan yksisuuntaisuudesta 7
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_; };
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
Periytymiseen liittyvät suhteet
Abstrakti kantaluokka & virtuaalifunktiot Abstrakti kantaluokka: nimi italics/kursiivilla tai kertomalla luokalle abstract classifier Rajapinnan (interface) voi dokumentoida samoin Puhtaasti virtuaaliset/abstraktit funktiot: kursiivilla
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?
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 voidaan piirrustella (samaan tapaan puhtaissa oliokielissä on metataso) MOF, metamalli, luokkakaavio ja oliotaso Miten näkyy oliokielissä? (luokkataso vs. oliotaso) metamalli (metataso) malli (mallitaso) oliot (hetki Ohjelman ajon aikana) M3: MOF (metametataso) M2: metamalli (metataso) M1: malli (mallinnus) M0: runtime (todelliset oliot)
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
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
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?
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
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