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ä.




