582104 - Ohjelmistojen mallintaminen, sekvenssikaaviot 1
Vuorovaikutussuunnittelu Oliojärjestelmän toiminta perustuu olioiden vuorovaikutukseen ja yhteistyöhön Olioiden yhteistyö toteutuu operaatioiden kautta Yhteistoimintakuvauksilla kuvataan, miten operaatioita käytetään Yhteistyökuvauksia voidaan määrittelyvaiheessa käyttää liiketoimintasääntöjen kuvaamiseen Olioiden yhteistoiminnan kuvaaminen on kuitenkin lähinnä suunnitteluvaiheen tehtävä 2
Vuorovaikutuksen mallintaminen UML:llä Kuvataan järjestelmän osien (olioiden) välistä kommunikointia Tarkoituksena tarkistaa ja täydentää luokkamallia & tarjota esimerkkitapauksia sen dynaamisesta soveltamisesta Vuorovaikutus esitetään viesteinä olioiden (tai niiden elinkaarta esittävien elämänviivojen, lifeline) välillä Painopiste on viestisekvenssin kuvaamisessa, ei viestien tietosisällössä Vuorovaikutus voi olla synkronista tai asynkronista 3
Vuorovaikutuskaaviot UML:ssä Sekvenssikaavio (sequence diagram) kuvaa operaatioiden tapahtumajärjestystä ja viestien kulkua olioiden välillä olioiden lisäksi toinen ulottuvuus on aika Kommunikointikaavio (communication diagram) painottaa olioiden välisiä kytkentöjä tunnettiin ennen UML 2.0:aa nimellä yhteistyörakennekaavio (collaboration diagram) 4
Sekvenssikaavio Havainnollistaa oliorakenteen toimintaa Laaditaan keskeisille operaatioille ja tilanteisiin, joissa kaavioiden käyttö edistää rakenteiden ymmärtämistä Kuvaa olion (tai järjestelmän) operaation (tiettyyn) suoritukseen liittyvän olioiden yhteistyön: operaation suoritukseen osallistuvat avustavat oliot mitä näiden operaatioita kutsutaan missä järjestyksessä operaatioita kutsutaan Vältä pitkiä kaavioita (harvoin havainnollisia) 5
Sekvenssikaavionotaatio 6
Sekvenssikaavion elämänpolku Tehtävän suoritukseen osallistuvat oliot kuvataan elämänpolkuna (lifeline) Oliolle ei tarvitse, mutta voi antaa nimen Luokan nimi yleensä mukana 7
Uusia olioita luodaan (instantioidaan) lähettämällä viesti konstruktorille Uusien olioiden luominen 8
Metodien aktivointi Palvelun suoritus kuvataan elämänpolun päälle sijoitettavalla suorakaiteella. Suorakaiteen korkeus kuvaa palvelun kestoa. Suorakaiteet kerrostuvat, jos palvelun suorituksessa käytetään avuksi jotain suorittavan olion omaa palvelua 9
Paluukutsut Kerrostumista esiintyy myös, jos avustava palvelu tekee ns. paluukutsun (callback) Viestit ovat synkronisia, lähettäjä siis odottaa, kunnes pyyntö on palveltu 10
Oliot ovat vuorovaikutuksessa viestien avulla Viesti voi olla synkroninen (esim. metodikutsu) tai asynkroninen (esim. säikeiden kautta). Synkroninen: kontrolli palaa kun palvelu päättyy paluuviestiä ei yleensä esitetä) Asynkroninen: Lähettäjä jatkaa toimintaansa jos lähettäjää informoidaan valmistumisesta tarvitaan, erillinen paluuviesti Viesti voi toteutua metodikutsuna, etäkutsuna, sanomanlähetyksenä, tapahtuman generointina 11
Sekvenssikaavioesimerkki 12
Käytössä oleva pinta-ala rajoittava tekijä Sekvenssikaaviota käytetään havainnollistamaan oliorakenteen toimintaa. Ei kannata laatia jokaiselle toiminnolle. Laaditaan keskeisille palveluille ja tilanteisiin, joissa kaavioiden käyttö edistää rakenteiden ymmärtämistä. Ei ole sääntöjä, kuinka pitkä yhteistyöketju kaaviossa tulisi esittää, mutta 3-4 viestiä pidemmät ketjut pikemminkin sotkevat kuin havainnollistavat mitään. 13
Viestit ja aktivaatiot olio1: Luokka olio2: Luokka [ehto] viesti (parametrit) viesti nimeää kutsuttavan operaation aika operaation aktivaatio eli suoritus (palkin pituus kuvaa sen kestoa) paluu operaation suorituksesta (jätetään usein merkitsemättä) 14 14/35
Sekvenssikaavioesimerkki (1/2) public class A { private B b; private C c; private D d;... public int doit() { b.assist1(); c.assist2(d); }... } public class B { private E e;... public void assist1() { e.domagic(); } } public class C { public void assist2(d d) { d.serviced() }... } 15
Sekvenssikaavioesimerkki (2/2) a: A b: B e: E c: C d: D doit assist1() domagic assist2(d) serviced 16
Sekvenssikaavio: olioiden elinkaaren merkitseminen m: MyMain create tmp: MyHelper use yksityiskohdat jätetty pois delete Huom. delete-operaatio voi olla eksplisiittinen (kuten C++:ssa) tai implisiittinen (kuten Javassa) 17
Sekvenssikaavio: silmukat (laajennos) *[ehto]palvelu * koottu koottua palvelujoukkoa pyydetään useilta 18
Sekvenssikaavio: jakaminen Käytettävää palvelua kuvaava erillinen alikaavio 19
Sekvenssikaavioesimerkki public class Tulostin { private String nimi; public Tulostin(String nimi) { this.nimi = nimi; } } public void sanoo(string str) { System.out.println(nimi + sanoo: + str); } 20
Osakaavio: metodi sanoo(string) 21
Pääohjelma public static void main(string args[]) { Tulostin kana, gorilla; kana = new Tulostin( kana ); gorilla = new Tulostin( gorilla ); } kana.sanoo( kot kot kot ); gorilla.sanoo( bundolo ); 22
Alikaavioiden käyttäminen 23
Asynkroniset metodikutsut mitä tulostaa? 24
Kommunikaatiokaavio Kuvaa miten, yhteistyö perustuu olioiden välisiin kytkentöihin 1: palvelu1 olio1 yhteys1 olio2 Järjestysnumero kuvaa suoritusjärjestyksen; numerointi voi olla monitasoinen 1.1: palvelu2 olio3 yhteys2 Käytettävä operaatio (viesti) 25
Kommunikaatiokaavioesimerkki doit a: A 1: assist1 b: B 2: assist2(d) 2.1: serviced d: D c: C 1.1: domagic e: E 26