Ohjelmoinnin perusteet - Savonia
Download
Report
Transcript Ohjelmoinnin perusteet - Savonia
Ohjelmistotekniikka ja
projektinhallinta, 4 op
1
UML-KIELI
SEPPO RÄSÄNEN
SAVONIA-AMMATTIKORKEAKOULU
TERVEYSALA, KUOPIO
29.8.2008
UML-kieli
2
• UML on oliokeskeisen ohjelmistotuotannon mallinnukseen liittyvä
kuvauskieli
• UML (Unified Modeling Language) on standardoitu mallinnuskieli:
•
•
alunperin mm. ohjelmistojen kuvaamiseen ja dokumentointiin
sitten käyttöalue laajentunut mm. liiketoimintaprosessien mallinnukseen
• Mallinnusohjelmia on runsaasti tarjolla
•
Rational Rose (www.rational.com)
System Architect (www.popkin.com)
Visual UML (www.visualobject.com)
Poseidon (www.download.com/Poseidon-for-UML-CommunityEdition/3000-2212_4-10342659.html)
Prosa (http://www.prosa.fi/)
Jotkin piirto-ohjelmat tukevat UML-notaatiota
•
Tässä opintojaksossa käytetään MS-Visio –nimistä ohjelmaa
•
•
•
•
•
UML-kieli
3
Structured Analysis (SA) De Marcon mukaan
Tietovuokaavioita, 1980 -luvulla
Structured Analysis and Design For Real Time
Systems , SA/SD/RT
Coad/Yordon
Ohjaus-tietomuunnokset tulivat mukaan kaavioihin
Reaaliaikaisia sovelluksia
1980-luvun lopussa
Object Modeling Technique, OMT
Oliomallinnus
1990-luvun alussa
UML-kieli
4
Unified Modeling Language, UML
1990-luvun lopussa
UML on kolmen 90-luvun alkupuolen suosituimman
oliomallinnusmenetelmän pohjalta rakennettu tämän hetken
suosituin oliomallinnuskieli.
James Rumbaughin kehittämän OMT:n , Grady Boochin Boochmenetelmän sekä Ivar Jacobsonin OOSE:n
Rumbaugh, Booch ja Jacobson johtavat UML:n kehitystä
Rational Software –yrityksen palveluksessa, mutta UML:n
standardoinnista vastaa nykyisin yli 800 ohjelmistoyrityksen
yhteenliittymä, Object Management Group (OMG).
http://www.uml.org/ osoitteessa tarkat kuvaukset ja
standartointi
UML-kieli
5
Olio (object)
On ohjelmiston perusyksikkö
sisältää joukon loogisesti yhteenkuuluvaa tietoa ja toiminnallisuutta
kommunikoi keskenään lähettämällä ja vastaanottamalla viestejä. Viestin vastaanottaminen
suorittaa määritellyn toiminnon vastaanottavassa oliossa
käytetään ohjelmistosuunnittelussa esittämään jonkun abstraktin tai reaalimaailman käsitteen
ilmentymää ohjelmistossa
Luokka (class)
määrittelee jonkun tietyn oliojoukon yhteiset piirteet
olio on luokan ilmentymä, instanssi
Perintä (inheritance)
mahdollistaa uusien luokkamääritysten tekemisen vanhojen määritysten pohjalta
periyttämisen ansiosta on mahdollista käyttää uudestaan jo tehtyä ohjelmakoodia uusien luokkien
pohjana
Moniperintä (multiple inheritance)
mahdollistaa uuteen luokkaan periyttämisen useista kantaluokista.
moniperintä ei ole mahdollista kaikissa oliokielissä, esimerkiksi C++-kielessä se on tuettu.
UML-kieli
6
Kapselointi (encapsulation) -termiä käytetään kahdessa merkityksessä
kapseloinnin ideana on datan ja käyttäytymisen kokoaminen yhteen yksikköön, olioon
merkitys lisää tähän vielä tiedonpiilotuksen: olion sisäisiin muuttujiin ei
(pääsääntöisesti)päästä suoraan käsiksi olion ulkopuolelta, jolloin
ohjelmointivirheiden määrä vähenee
Metodi (method), jäsenfunktio (member function) tai operaatio (operation)
tarkoittaa luokassa määriteltyä aliohjelmaa, joka käsittelee olion tietoa
Attribuutti (attribute), jäsenmuuttuja (member variable) tai kenttä (field)
tarkoittaa luokassa oliolle määriteltyä muuttujaa, joka tallentaa jonkun olioon liittyvän
tietoalkion
Rakentaja, muodostin (constructor)
on metodi, jota kutsutaan oliota luotaessa
alustaa olion jäsenmuuttujien alkuarvot
Hajottaja, tuhoaja tai purkaja (destructor)
on metodi, jota kutsutaan olion tuhoamiseksi
vapauttaa olion varaamat resurssit (keskusmuisti)
UML-kieli
7
class cAsiakas
{
public:
void KysyNimi();
void KysyPuhNo();
private:
char etunimi[20], sukunimi[20], puhNo[15];
};
//luokan määritys
class cLuottoAsiakas : public cAsiakas
{
public:
cLuottoAsiakas(long, long);
~cLuottoAsiakas();
long HaeLuottoraja();
long KysyEraantyneet();
void AsetaEraantyneet(long);
private:
long eraantyneet, luottoraja;
};
…………………………..
//periytyminen
//metodi
//kapselointia
//attribuutteja
//muodostin
//tuhoaja
UML-kieli
8
void cAsiakas::KysyNimi()
//metodin toteutus
{
cout << "Anna asiakkaan nimi (etunimi sukunimi): ";
cin >> etunimi >> sukunimi;
}
……………………………………..
int main(int argc, char* argv[])
// pääohjelma
{
………………..
cAsiakas olio1;
//luokan instanssi, olio
olio1.KysyNimi();
//metodikutsu
// esim. olio1.nimi=”Ville”; EI TOIMI, kun attribuutti on kapseloinnin avulla piilotettu
……………………………..
return 0;
}
UML-kieli
9
• UML kaavioita (diagram) on määritetty kahdeksan
Use Case
Käyttötapauskaavio: kuvaa ulkoiset toimijat ja heidän yhteydet sovelluksen
käyttötapauksiin
Sequence
Viestiyhteyskaavio: kuvaa olioiden välistä dynaamista viestinvälitystä (=mitä
viestejä olioiden välillä on, kun toteutetaan eri toimintoja)
Class
Luokkakaavio: kuvaa järjestelmän luokkarakenteen ja luokkien väliset yhteydet
(luokka=järjestelmän käsittelemä asia)
State
Tilakaavio: täydentää luokan kuvausta, kuvaa luokan kaikki mahdolliset tilat,
joihin luokan ilmentymä (=olio) joutuu sekä kuvaa tilasiirtymän (=mikä aiheuttaa
olion siirtymisen tilasta toiseen)
Activity
Toimintokaavio: kuvaa tapahtumien kulun aikajärjestyksessä, käytetään
operaatioon liittyvien tapahtumien kuvaamisessa (vastaavanlainen kuin
uimaratamallin kaavio)
Collaboration
Yhteistyökaavio: kuvaa luokkien välistä yhteistyötä, viestien välitystä (kuvaa
samaa asiaa kuin viestiyhteyskaavio)
Component
Komponenttikaavio: kuvaa lähdekoodin fyysisen rakenteen (lähdekoodi
muodostuu useista eri komponenteista ja niiden välisistä suhteista)
Deployment
Käyttöönottokaavio: kuvaa järjestelmän laitteiston ja ohjelmiston fyysisen
arkkitehtuurin
UML-kieli
10
Tavoitenäkökulma (Käyttötapauskaaviot)
Kuvaukset käyttäjän/asiakkaan/liiketoimintaprosessin
näkökulmasta
Sovelluksen suhde ympäristöönsä
Toimintonäkökulma (Vuorovaikutuskaaviot)
Kuvaukset ohjelmiston toiminnallisuuden ja hajautuksen
näkökulmasta
Informaationäkökulma (Luokka- ja
tilakaaviot, er-kaaviot) :
Kuvaukset ohjelmiston tietosisällön näkökulmasta.
Mitä tietoa sovellus käsittelee?
UML-kieli
11
Rakennenäkökulma (Komponentti- ja
sijoittelukaaviot)
Kuvaukset ohjelmiston rakenteen eli arkkitehtuurin
näkökulmasta
Liitäntä tietojenkäsittelyresursseihin
Tekniikkanäkökulma
Kuvaukset toteutustekniikan ja testauksen
näkökulmasta.
Teknologiavalinnat, testitapaukset
UML-kieli
12
Iteratiivinen prosessi
1. Mallinnuskierros -> ohjelmiston toteutusta (v. 0.1)
Käyttötapaukset (Use Case Diagram)
Luokkakaaviot (Class Diagram)
Yhteistoimintakaaviot (Collaboration Diagram)
2. Mallinnuskierros -> ohjelmiston toteutusta (v. 0.2)
Luokkakaaviot (Class Diagram)
Tilakaaviot (State Chart Diagram)
Sekvenssikaaviot (Message Sequence Diagram)
3. Mallinnuskierros -> ohjelmiston toteutusta (v. 0.3)
Käyttötapaukset (Use Case Diagram)
Luokkakaaviot (Class Diagram)
Sekvenssikaaviot (Message Sequence Diagram)
4. Mallinnuskierros -> ohjelmiston toteutusta (v. 0.4)
Komponenttikaaviot (Component Diagram)
Sijoittelukaaviot (Deployment Diagram)
UML-kieli
13
Elinkaaren vaiheet ja UML-kaaviot?
OOA (Object Oriented Analysis) - määrittely
OOD (Object Oriented Design) - suunnittelu
Käyttötapauskaaviot (use case diagram)
Luokkakaaviot (class diagram)
Tilakaaviot (statechart diagram)
Yhteistoimintakaaviot (collaboration diagram)
Luokkakaaviot (detailed class diagram)
Tilakaaviot (detailed statechart diagram)
Sekvenssikaaviot (sequence diagram)
Sijoittelukaaviot (deployment diagram)
Komponenttikaaviot (component diagram)
OOP (Object Oriented Programming) - toteutus
Rajapintakuvaukset , lähdekoodi, teknologia,...
UML-kieli
14
Ohjelmistokehitys
Korkean tason toiminnalisuus
Käyttötapauskaaviot
Sijoittelukaaviot
Oliokaaviot
Sekvenssikaaviot
Yhteistyökaaviot
Luokkakaaviot
Tilakaaviot
Aktiviteettikaaviot
Komponenttikaaviot
Rakenne
Staattinen malli
Käyttäytyminen
Dynaaminen malli
UML-kieli
15
http://ta.ramk.fi/~aku.kesti/ohjelmistotekniikka/teoria+harkat/5-Johdanto_UMLaan/UML.pdf
UML-kieli
16
http://ta.ramk.fi/~aku.kesti/ohjelmistotekniikka/teoria+harkat/5-Johdanto_UMLaan/UML.pdf
UML-kieli
17
http://ta.ramk.fi/~aku.kesti/ohjelmistotekniikka/teoria+harkat/5-Johdanto_UMLaan/UML.pdf
UML-kieli
18
http://ta.ramk.fi/~aku.kesti/ohjelmistotekniikka/teoria+harkat/5-Johdanto_UMLaan/UML.pdf
UML-kieli
19
Miten olion tai luokan tunnistaa?
Oliot ovat ohjelman osia
Oliot ovat luokan ilmentymiä
Luokat muodostuvat käsitteistä (substantiivit)
”Miesasiakas ostaa ruusukimpun. Asiakkaan nimi on
Ville. Ruusukimppu sisältää 4 punaista ruusua…
Asiakkaita ovat yksittäiset henkilöt ja yritykset….”
Luokkia: asiakas, henkilö, yritys, ruusukimppu
Periytyminen: henkilö ja yritys periytyvät asiakkaasta
Attribuutteja: sukupuoli, nimi, ruusujen määrä, ruusujen väri
Olioita: Ville (henkilöluokasta)
Metodeja: ostaa(kukka, määrä)
UML-kieli
20
Use Case diagram, käyttötapauskaavio
Koostuu käyttäjistä sekä käyttötapauksista käyttäjien ja
järjestelmän välillä
Suunnittelun lähtökohtana käyttäjän näkökulma ( käyttäjän
rooli erittäin tärkeä)
Selkeä ja helppo ymmärtää
suunnittelija, asiakas ja järjestelmän käyttäjät ymmärtävät
yhteinen työväline asioiden tarkentamiseksi (iterointi)
Kuvaus toimii toteutuksen rajauksena!!!!
Jäsentää ja pilkkoo toteutusta
UML-kieli
21
UML-kieli
22
Use Case
Käyttäjä, rooli – Actor:
• Kuvataan ”tikku-ukkona”
• Käyttäjät eivät ole tietojärjestelmän osia
• Käyttäjä voi syöttää tietoa järjestelmään /
vastaanottaa tietoa järjestelmästä
• Voi olla henkilö, laite tai toinen sovellus
• Käyttäjä on aina sovelluksen ulkopuolinen olio, joka
käyttää kohdesovelluksen palveluja
UML-kieli
23
Use Case
Käyttötapaus – Use Case:
• Kuvataan ovaalina
• Käyttötapaus kuvaa toimintaa tai toiminnan osaa
• Käyttötapaus voi olla myös tapahtuma, johon tulee reagoida
• Kuvaa käyttäjän ja tietojärjestelmän välistä vuorovaikutusta
• Käyttötapaus voi olla laaja kokonaisuus tai pieni yksityiskohta
• Käyttötapaus on kerralla suoritettava toimintoketju alusta
loppuun (työnkulku)
• Käyttötapauksella on määritelty lopputulos
UML-kieli
24
Use Case
Yhteystyypit
UML-kieli
25
Use Case
• Yksisuuntainen kommunikointisuhde käyttäjän ja
käyttötapauksen välillä kuvataan siis yksisuuntaisella nuolella
• Kaksisuuntainen kommunikointisuhde kuvataan joko
pelkällä viivalla tai sitten kaksisuuntaisella nuolella
• Nuolen suunta kertoo, kumpi osapuoli käynnistää
kommunikoinnin (käynnistäjästä poispäin)
UML-kieli
26
Use Case
Käyttötapaus alkaa jonkun käyttäjän aloitteesta ja päättyy, kun järjestelmä on
tuottanut lisäarvoa käyttäjälleen
Hyvän käyttötapauksen ominaisuuksia:
ymmärrettävyys: asiakkaan ja järjestelmän tulevien käyttäjien tulee
ymmärtää ne. Kuvausten oltava mahdollisimman konkreettisia
kuvaa asiakasvaatimuksia: vältetään ottamasta kantaa toteutukseen.
”käyttäjä identifioi itsensä” on parempi kuin ”käyttäjä identifioi itsensä
syöttämällä kuusi kirjaamisen käyttäjätunnuksen ja nelinumeroisen
salasanan.
testattavuus: käyttötapaukset muodostavat perustan järjestelmätestaukselle.
Käyttötapauksen oltava kokonaisuus, joka voidaan testata testausvaiheessa
koko: ei saa olla liian laaja. A4-arkillinen on riittävä koko. Käyttötapausten
määrä 5-9; ihmissilmä havainnoi vielä tämän määrän kerralla
sopiva tarkkuus: kattavat tärkeimmät osat toteutuksesta. Kaikkia
yksityiskohtia ei voi ottaa mukaan. Lisäksi käyttötapausten tarkkuuden
oltava samalla tasolla.
UML-kieli
27
Use Case
Käyttötapausten tarkoitus on siis toimia asiakasvaatimusten
kartoittamisen apuvälineenä
Käyttötapaukset eivät korvaa toiminnallisessa määrittelyssä
esitettäviä järjestelmän toiminnan kuvauksia
käyttötapausten ei tarvitse kattaa järjestelmän koko
toiminnallisuutta
kaikista ominaisuuksista ei kannata edes tehdä
käyttötapauksia
yhden käyttötapauksen suorittaminen voi vaatia useamman
järjestelmän tarjoaman toiminnon suorittamisen
UML-kieli
28
Use Case
1.
2.
3.
4.
5.
6.
Valitse käyttötapaukset
tehtäväkokonaisuudet (esim. laskun maksu)
Valitse roolit
käyttäjät (esim. kassan hoitaja)
Yhdistä roolit, käyttötapaukset ja kuvaukset
Vain keskeiset toiminnot
5-9 käyttötapausta per kaavio
Määrittele käyttötapaukset (taulukko, sanallinen
kuvaus)
UML-kieli
29
UML-kieli
30
Nimi:
Hoitojen informointi, versio 1.0
Suorittajat:
Asiakas
Esiehdot:
Informoija on kirjannut eri hoidoista tietoja.
Kuvaus:
1. Asiakas siirtyy www-osoitteeseen xxxx.fi
2. Asiakas selaa eri hoitoja
3. Asiakas lisää sopivan hoidon / hoidot ostoskoriin
Poikkeukset:
Hoito-organisaation www-palvelin ei toimi.
Hoidosta ei ole kirjoitettu informaatiotietoja
Lopputulos:
Asiakas saa tiedot eri hoidoista.
Asiakas lisää sopivat hoidot ostoskoriin.
Muut
vaatimukset
WWW-sivujen toimittava IE, Opera ja FireFox selaimilla
1024x768 resoluutiolla.
Esimerkki käyttötapauksen määrittelystä
UML-kieli
31
Class diagram, luokkakaavio
Luokkakaavio on UML-kaavioista laajin ja monipuolisin,
yleisimmin käytetty
Kaaviossa esitetään luokkien välisiä suhteita (relaatiot) ja
luokkien ominasuuksia (attribuutit) ja operaatioita (metodit)
tietosisältö ja toiminnot
Kuvaa siis ohjelmiston staattista rakennetta
Käytetään myös tietokannan kuvaamiseen (luokka=taulu)
Luokkakaaviossa on erilaisia rakenteita:
yhteysrakenne eli assosiaatio
koosterakenne eli aggregaatti
periytymisrakenne eli hierarkia
UML-kieli
32
Class Diagram
• Yhteysrakenteella
(assosiaatio) kuvataan
kahden olion välisiä suhteita
• Koosterakenteella (aggregaatti) kuvataan
olioita, jotka koostuvat toisista olioista.
• Jos olion olemassaolo riippuu toisesta
oliosta, maalataan vinoneliö mustaksi,
muodoste (komposiitti)
UML-kieli
33
Class Diagram
Periytymisrakenteella (hierarkia) kuvataan yliluokkia ja niistä
periytettyjä aliluokkia
Aliluokat perivät kaikki yliluokan ominaisuudet ja toiminnot
UML-kieli
34
State Chart diagram, tilakaavio
Kuvaa olioiden, järjestelmien ja alijärjestelmien elinkaaret
Kuvaa missä tiloissa oli voi olla ja mikä tapahtuma aiheuttaa
tilan vaihtumisen
Lasku (olio) on maksettu (tila) tai maksamatta (tila)
Olio vaihtaa tilaansa, kun jotain tapahtuu; tähän liittyy kaksi
tasoa:
1.
2.
Ulkoiset vuorovaikutukset: Ulkoiset vuorovaikutukset kuvailevat
olion ulkoista toimintaa ja sen yhteistyötä muiden olioiden
kanssa
Sisäiset tilasiirtymät: Sisäiset siirtymät kuvaavat olioiden
vaihtelevia tiloja (esim. olion attribuuttien arvojen muuttumista)
UML-kieli
35
Tilakaavio
alkutila
tila
siirtymä
ehto, päätös
lopputila
UML-kieli
36
Tilakaavio
Esimerkki tilakaaviosta
http://www.stm.fi/Resource.phx/vastt/tietoh/reseptikilpailut
us.htx.i1077.pdf (sähköinen lääkemääräys vaatimusmäärittely
UML-kieli
37
Collaboration diagram, yhteistoimintakaavio
Näyttää kommunikoivien olioiden suhteet kuvaa olioiden välistä
vuorovaikutusta
Kertoo olioiden roolit vuorovaikutusketjussa
Kertoo palvelupyynnöt olioiden välillä
Ei näytä aikaulottuvuutta
Luokkataso, instanssitaso
Esitetään kuten luokkakaavio lisättynä palvelupyyntöja roolimäärityksillä
Olioiden yhteydet kuvataan viivoilla
Kontrollin kulun suunta ilmaistaan nuolella
Sanomien ajallinen järjestys kuvataan numeroina monitasoinen
numerointi: sisäkkäiset operaatiokutsut
UML-kieli
38
UML-kieli
39
Sequence-diagram, viestiyhteyskaavio, sekvenssikaavio
Kuvaa joidenkin olioiden välistä viestiliikennettä
(olioiden välistä yhteyttä)
Kuvaa olion elinkaarta (milloin muodostuu ja milloin
tuhoutuu)
Kuvaa, mitä viestiä kutsutaan miltäkin oliolta
Tämän kuvauksen pohjalta on jo helppo kirjoittaa
ohjelmakoodi. Tätä harjoitellaan sitten ohjelmointiopintojaksolla enemmän
UML-kieli
40
Sequence-diagram
Olio
Aikajana
Viesti
Paluuviesti
UML-kieli
41
Sequence-diagram
Esimerkki uuden asiakkaan tallentamisesta
UML-kieli
42
Deployment-diagram
Kuvaa järjestelmän laitteistojen ja ohjelmien osien
(komponentti) väliset suhteet
Kuvaa tietojärjestelmää fyysisenä kuvauksena
Kuvauksen perusteella saadaan kokonaiskuva
tietojärjestelmän toteutuksesta
UML-kieli
43
Deployment-diagram
Laite
Sovelluksen osa
Yhteys
UML-kieli
44
Deployment-diagram
UML-kieli
45
Kysymyksiä
Kommentteja
UML-kaavioiden piirtäminen MS-Visiolla
Use Case UML-käyttötapaus
Class diagram UML-staattinen rakenne
Tilakaavio UML-tilakaavio
(Sequence diagram UML-sarja)
(Deployment diagram UML-käyttöönotto
Pakettikaavio UML-staattinen rakenne
Aktiviteettikaavio UML-tilakaavio
Yhteistoimintakaavio UML-vuorovaikutuskaavio
Komponenttikaavio UML-käyttöönottokaavio)
Kiitokset Kalevi Kolehmaiselle materiaaliin liittyvästä yhteistyöstä.