Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

LTY/Tietotekniikan osasto

Samankaltaiset esitykset


Esitys aiheesta: "LTY/Tietotekniikan osasto"— Esityksen transkriptio:

1 LTY/Tietotekniikan osasto
Olio-ohjelmoinnin perusteet luento 1: Oliopohjaisuus ja oliopohjainen suunnittelu Sami Jantunen LTY/Tietotekniikan osasto Kalvojen lähteitä: Timothy Budd: Introduction to Object-Oriented Programming Juha Sorva (Helsinki University of Technology)

2 Käytännön asiat Luennoitsija: Sami Jantunen
Luennot: 7kpl yhteensä 21 tuntia. Ajat ja paikat: To klo 11-14, luokka 2310 Vastaanotto: Ke 14-15, 6729 Harjoitukset: Jani Rönkkönen

3 Kurssin tavoitteista  Tavoite  Ei!
Oppia ymmärtämään oliopohjainen ajattelutapa ja sen käsitteet ja soveltaa näitä käytännössä (esim. C++ avulla)  Ei! Oppia sujuvaksi C++:n syntaksissa, jotta voin jatkaa vanhaan tyyliin ohjelmoimista uudella kielellä.

4 Sisältö Johdanto oliomaailmaan Oliopohjaisia käsitteitä
Historiaa Oliopohjaisia käsitteitä Olio Luokka Perintä Toiminnon korvaaminen Abstraktio Oliopohjainen suunnittelu Mallintamisesta Suunnitteluprosessi Notaatio

5 Historiaa…. Ohjelmointitekniikoita: jäsentelemätön ohjelmointi
prosedulaarinen ohjelmointi modulaarinen ohjelmointi olio-ohjelmointi

6 Jäsentelemätön ohjelmointi
Sarja komentoja, jotka manipuloivat globaalia tietoa Ongelmia: Ei skaalaudu Sotkuista koodia

7 Prosedulaarinen ohjelmointi
Tehtävät, joita tarvitaan toistuvasti eriytetään omiksi aliohjelmiksi (procedures) Tietty toiminnallisuus kirjoitetaan vain yhteen paikkaan  ylläpidettävyys helpottuu Aliohjelmat tarjoavat mahdollisuuden tiedon piilottamiseen (information hiding) Riittää kun käyttää hyväksi aliohjelman funktiokutsua. Ei tarvetta ymmärtää aliohjelman sisälmyksiä

8 Prosedulaarinen ohjelmointi
Ohjelma voidaan nyt käsittää sarjana aliohjelmakutsuja. Pääohjelma välittää aina tarvittavan tiedon aliohjelmille Ongelmia: Kuinka aliohjelmia voidaan käyttää hyväksi muissa ohjelmissa? nimikonfliktit muuttujien näkyvyys

9 Modulaarinen ohjelmointi
Yleiskäyttöinen toiminnallisuus ryhmitelty omiin moduuleihin Ohjelma koostuu nyt useasta moduulista Kukin moduuli voi ylläpitää omia tietoja. Ongelmia: kutakin moduulia voi olla ohjelmassa maksimissaan 1 kpl. Esimerkki: Lista ja sen toiminnallisuus on toteutettu omassa moduulissa.  Ohjelmassa on mahdollista käyttää vain yhtä listaa

10 Perinteinen ohjelmointi
Perinteisessä ohjelmoinnissa ihminen pyrkii muokkaamaan ajatuksensa sellaiseksi käskysarjaksi, jonka kone osaa suorittaa. Program PaintScene { while (exists()) { draw_this(); draw_that(); } lääh lääh

11 Olio-ohjelmointi Voidaan myös lähteä liikkeelle siitä, miten ihminen hahmottaa ongelman, ja antaa jotain tämän hahmotelman kaltaista koneen käsiteltäväksi. Käytetään siis kieltä, joka on koneen käsiteltävissä, mutta muistuttaa ainakin osin ihmisen tapaa jäsentää maailmaa. Bee wings sting flyAbout() Plant grow() Tree leaves Flower blossom pollen class Bee { Coordinates location; Wing[] wings; flyAbout() { ... }

12 Missä mennään? Johdanto oliomaailmaan Oliopohjainen suunnittelu
Historiaa Oliopohjaisia käsitteitä Olio Luokka Perintä Toiminnon korvaaminen Abstraktio Oliopohjainen suunnittelu Mallintamisesta Suunnitteluprosessi Notaatio

13 Olio-ohjelmointi Mikä on yhteistä kalalle, trumpetille ja piipulle? Entäpä mitä on hyvyys ja kampela? Asioitapa tietenkin ovat ne. [...] Maailma on asioita pullollaan! Ultra Bra

14 Olio-ohjelmointi

15 Kukkakauppaesimerkki
Haluan lähettää kukkia ystävälleni (Miss Wang) Pekingiin Ratkaisutapa 1: Kerään kukat ja vien ne itse (huomaavaista, mutta epäkäytännöllistä) Ratkaisutapa 2: Menen paikalliseen kukkakauppaan, kerron kukkien tyypit ja lukumäärät ja pyydän toimittamaan Ms. Wangin osoitteeseen

16 Kukkakauppaesimerkki jatkuu…
Ratkaisin ongelman löytämällä asiamiehen (paikallinen kukkakauppias) ja välitin hänelle pyynnön Kukkakauppiaan tehtävä on suorittaa pyytöni Pyynnön suorittamiseen liittyy joku toimintatapa (algoritmi).

17 Kukkakauppaesimerkki jatkuu…
Minun ei tarvitse tietää miten kukkakauppias suorittaa tehtävänsä.  Tiedon piilotus (Information hiding) Jos tutkisin kukkakauppiaan suoriutumista tehtävästään, huomaisin, että hän lähettää hieman erilaisen viestin toiselle kukkakauppiaalle Ms. Wangin kotikaupunkiin Pekingiin.

18 Kukkakauppaesimerkki jatkuu…
Pekingin kukkakauppias puolestaan ottaa yhteyttä lähettiin, joka suorittaa varsinaisen kukkien toimituksen Ms. Wangin kukkakauppias on saanut kukkansa tukkumyyjältä, joka puolestaan on asioinut kasvattajien kanssa.

19 Kukkakauppaesimerkki jatkuu…
Ongelmani siis ratkaistiin usean asiamiehen avulla. Ilman heidän apuaan ongelma ei olisi ratkennut helposti Puutarhuri Minä Ms. Wang Kukkakimpun kokoaja Kukkien kasvattaja Lappeenrannan kukkakauppias Juoksupoika Tukkumyyjä Pekingin Kukkakauppias

20 Viestejä välittävät oliot
Lappeenrannan kukkakauppiaalle esittämäni pyyntöni aiheutti ketjureaktion viestejä. Tämän lopputuloksena Ms. Wang sai lopulta kukat Näemme siis, että tämän yhteisön jäsenet kommunikoivat keskenään lähettämällä pyyntöjä toisilleen Toiminto aloitettiin lähettämällä viesti sille asiamiehelle joka on vastuussa halutusta toiminnallisuudesta

21 Olioista Oliopohjainen tietokoneohjelma rakentuu vuorovaikutteisten olioiden varaan Oliot “tietävät” kuinka selviytyä tehtävistään Oliot suorittavat tehtäviään vain jos joku toinen olio pyytää sitä Kullakin oliolla on oma roolinsa. Kukin olio tarjoaa palveluja, suorittaa toimenpiteidtä

22 Olioiden väliset viestit
Lähetettävään viestiin sisältyy pyynnettävä toiminnallisuus ja sen suorittamiseen tarvittava tieto (argumentit) Jos viestin vastaanottava olio hyväksyy viestin, se myös hyväksyy vastuun suoriutua kyseisestä tehtävästä Viestin seurauksena, vastaanottaja suorittaa toiminnallisuutta, mikä toteuttaa viestin mukana tulleen pyynnön

23 Olioiden väliset viestit jatkuu…
Viestillä on nimetty vastaanottaja Viestin tulkinta saattaa olla erilainen riippuen viestin vastaanottajasta Monimuotoisuus (Polymorphism) Jos pyytäisin hammaslääkäriäni lähettämään kukkia Ms. Wangille, hänellä ei luultavasti ole keinoa ratkaista ongelmaa ja luultavasti kieltäytyisi tehtävästä

24 Viestivät oliot 1. 9. 8. 2. 3. 7. 4. 6. 5. OK, onnistuin.
object opiskelijaolio#1 { String nimi = ”T. Teekkari”; String ammatti = ”opiskelija”; String koulutusohjelma = ”S”; int opiskelijanumero = 12345; Kurssi[] kurssit = ...; ilmoittaudu { ... } } OK, onnistuin. 9. T. Teekkari, ilmoittaudu kurssille X 1. Hyvä, lisäänpä kurssilistaani. 8. X , ilmoita T. Teekkari (itseesi). 2. OK, onnistui. 7. Mahtuukohan se opetuspaikkaani? 3. object kurssiolio#1 { String koodi = ”X ”; int opintoviikot = 3; Opiskelija[] ilmoittautuneet = ...; Sali opetuspaikka = saliolio#1; ilmoitaOpiskelija { ... } } Sali A23, kerro paikkojesi määrä. 4. Hmm, 31<50, joten mahtuu. Lisätään listaan. 6. object saliolio#1 { String nimi = ”Sali A23”; int paikkojenMaara = 50; kerroPaikkojenMaara { ... } } 50. 5.

25 Olioiden toiminnallisuudesta
Olion toiminnallisuutta on yleensä: konstruktiot: -olioiden luonti käskyt: -olion tilan muutos kyselyt: -vastauksen antaminen olion tilatietojen perusteella ESIMERKKI: Roskakorin toiminnallisuutta on mm.: Konstruktio: luonti Käskyt: lisää roskia, tyhjennä Kyselyt: onko kansi auki? onko roskakori täynnä?

26 Olion sisältämistä tiedoista
Olion sisältämät tiedot määrittelevät kuinka olio toimii Olion sisältämät tiedot voivat olla: attribuutteja: asioita, mitkä kuvaavat oliota komponentteja: asioita, jotka ovat osa oliota assosiaatioita: asioita, joista olio on tietoinen, mutta mitkä eivät ole osa oliota

27 Olion sisältämistä tiedoista
Roskakorin sisältämää tietoa on mm.: Attribuutit: väri, materiaali, haju Komponentit: kansi, roskapussi, roskat Assosiaatiot: roskakori voi olla assosioitu huoneeseen missä se sijaitsee

28 Löydä olioita luentosalista
Mitä toiminnallisuutta niissä on? Mitä tietoa ne sisältää?

29 Luokista Ymmärrän minkälaista toiminnallisuutta voin odottaa kun kävelen kukkakauppaan esittämään pyyntöni Pystyn tekemään oletuksia, sillä tiedän kukkakauppiaista yleisellä tasolla ja oletan että Lappeenrannan kukkakauppias toimii samalla tavalla Voimme käyttää “Kukkakauppias” –luokkaa kuvaamaan kaikkia kukkakauppiaita. Lappeenrannan kukkakauppias on yksi ilmentymä (olio) kukkakauppias-luokasta

30 Luokat ja oliot ASUNTO KATUOS.: ______ NIMI: __________
IHMINEN #A03 NIMI: Joonatan SILMÄT: ruskeat IKÄ: 17v. KOTI: asunto #B01 ASUNTO KATUOS.: ______ POSTIOS.: _____ KOKO: ___m2 ASUKKAAT: NIMI: __________ IHMINEN SILMÄT:________ IKÄ: __v. KOTI: asunto #___ ASUNTO #B01 KATUOS.: Rosvokuja 1 POSTIOS.: 010 KDM KOKO: 70 m2 ASUKKAAT: ihminen #A02, ihminen #A03 ASUNTO #B02 KATUOS.: Kaitapolku 7 POSTIOS.: 012 KDM KOKO: 25 m2 ASUKKAAT: ihminen #A01 IHMINEN #A01 NIMI: Kasper SILMÄT: siniset IKÄ: 21v. KOTI: asunto #B02 IHMINEN #A02 NIMI: Jesper IKÄ: 19v. SILMÄT: vihreät KOTI: asunto #B01

31 Perintä (Inheritance)
Kukkakauppias on myös kauppias Tiedän siis, että hän todennäköiseti pyytää rahaa pyyntöni toteutuksesta ja että rahan vastaanoton yhteydessä hän todennäköisesti antaa minulle kuitin. Näin toimivat myös muunkin alan kauppiaat Kukkakauppias on siis erikoistuneempi muoto kauppiaasta. Kukkakauppiaalla pitää olla kaikki ne toiminnat mitä kauppiaalla yleisesti ottaen kuuluu olla.

32 Perintä jatkuu… Eräs tapa ajatella perintää on organisoida tietoni kukkakauppiaasta hierarkiseksi rakenteeksi: Kukkakauppias on erikoistunut kauppias Kauppias on ihminen

33 Perintä jatkuu…. Perintä tarkoittaa periaatetta siitä, että yleisempi määrittely on myös voimassa erikoistuneissa olioissa Sanomme, että kukkakauppias perii myös kauppiaan ja ihmisen toiminnallisuuden Ihminen Kauppias Kukkakauppias

34 Perintä jatkuu…. Perinnän idea:
Luokat voidaan organisoida hierarkkisiin perintäpuihin Lapsiluokka perii vanhempiensa tiedon ja toiminnallisuuden Abstrakti isäluokka on sellainen, mistä ei voidan tehdä omaa oliota, mutta mitä käytetään lapsiluokkien määrittelyssä

35 Perintä Perintärelaatioiden määrittely on ihmisajattelulle luontevaa ja tekee malleista selkeämpiä ja vähemmän toisteisia. Perintä on luokkien välinen suhde, mutta ei olioiden: aliluokan ilmentymä on samaan aikaan myös yliluokan ilmentymä. Esim. opiskelija on myös henkilö. Toisin sanoen: perintä on ns. is-a -relaatio. Piirteiden yleistämisen lisäksi perintää voidaan käyttää käänteisesti luokan tarkentamiseen. Esim. opiskelijaluokasta voidaan johtaa jatko-opiskelijaluokka.

36 Käytännön etuja perinnästä
Perintärelaation mielekkyys voidaan perustella luontevuudella ja luokkamallien selkeytymisellä. Se myös helpottaa ohjelmien kirjoittamista. Miten luokat ohjelmoitaisiin, jos käytössä ei olisi perintää? Jouduttaisiin joko: Määrittelemään samoja asioita moneen kertaan eri luokkiin. Näistä luokista ei voisi myöskään kätevästi puhua ”yleisesti”. Tai laatimaan suuria luokkia, jotka edustavat kaikenlaisia mahdollisia ”aliluokkiaan” samaan aikaan. Tämä johtaisi hyvin monimutkaisiin ja hankalasti ymmärrettäviin ja ylläpidettäviin luokkiin. Perintä helpottaa yleiskäyttöisten luokkien laatimista ja ohjelman osien uudelleenkäyttöä muissa yhteyksissä.

37 Eliöiden luokittelu

38 Perintä ... ... ... ... ... ... ... ... Eläin Niveljalkainen
Selkäjänteinen ... ... Hämähäkkieläin Hyönteinen Matelija Nisäkäs Lintu ... ... ... ... ... Leppäkerttu Kissa Ihminen

39 Mitä yhteistä? Mitä eroja?

40 Toiminnallisuuden korvaaminen
Eläin Selkäjänteinen Nisäkkäät synnyttävät eläviä poikasia Linnut munivat munia The Australian Platypus on nisäkäs, mutta luo munia Nisäkäs Lintu

41 Toiminnallisuuden korvaaminen jatkuu….
On mahdollista korvata (override) isäluokassa määritelty toiminnallisuus toteuttamalla lapsiluokkaan saman niminen toiminnallisuus Sopivan metodin etsintä aloitetaan aina lapsiluokasta. Jos lapsiluokassa ei ole toteutettuna haluttua toiminnallisuutta, siirrytään etsimään sitä isäluokasta

42 Abstraktio

43 Abstraktio jatkuu…. Ihminen voi käsittellä 7±2 yksityiskohtaa kerrallaan Yleensä ei ole mahdollista esitää kokonaisuutta kaikkine yksityiskohtineen.

44 Abstraktioon liittyviä määritelmiä
Abstraktio on tarkoituksellista yksityiskohtien piilottamista, jotta muut suunnittelutyön kannalta oleellisemmat piirteet tulevat paremmin esille Tiedon piilottaminen (Information hiding) on yksityiskohtien tarkoituksellista pois jättämistä abstraktista mallista

45 “is-a” ja “has-a” abstraktiot
Asian pilkkominen osiin käyttää hyväkseen “has-a” abstraktiota. Esimerkki: Auto koostuu moottorista, renkaista, korista,…. Erikoistuminen kuvaa “is-” abstraktiota. Esimerkki: Polkupyörä on pyörällinen kulkuneuvo

46 Pilkkominen(Division into parts) & kotelointi (Encapsulation) esimerkki
Auto voidaan pilkkoa useisiin aliyksiköihin Aliyksiköiden välille määritetään selkeä rajapinta, jotta eri ryhmät voivat kehittää itsenäisesti eri aliyksiköitä Kotelointi (Encapsulation)

47 Missä mennään? Johdanto oliomaailmaan Oliopohjaisia käsitteitä
Historiaa Oliopohjaisia käsitteitä Olio Luokka Perintä Toiminnon korvaaminen Abstraktio Oliopohjainen suunnittelu Mallintamisesta Suunnitteluprosessi Notaatio

48 Mallintamisesta Malli on todellisuuden yksinkertaistus
Mallinnamme, jotta ymmärrämme paremmin järjestelmän mitä kehitämme Ongelman ratkaisuun tarvitaan yleensä useita eri malleja Mallintaminen voi tapahtua usealla tarkkuustasolla 7±2 sääntö

49 Mistä hyvä malli muodostuu?
Hyvän mallin tulee: käyttää standardi notaatiota olla helposti ymmärrettävissä asiakkaille ja käyttäjille auttaa ohjelmiston kehittäjiä ymmärtää järjestelmän piirteitä tarjota mahdollisuus abstraktointiin

50 UML määrittely UML (The Unified Modelling Language) on oliopohjaisen ohjelmiston mallintamiseen käytettävä graafinen kieli. Sitä käytetään: suunnittelutyön apuna suunnittelutyön analysoinnissa ja hyväksynnässä järjestelmän perusdokumentaationa UML ei ole metodologia

51 Keskeisiä suunnittelukaavioita
Järjestelmän staattinen kuvaus: Luokkakaavio (Class diagram) Oliokaavio (Object diagram) Järjestelmän toiminnallinen kuvaus: Sekvenssikaavio (Sequence diagram) Vuorovaikutuskaavio (Collaboration diagram)

52 Luokkakaavio (Class diagram)
Kuvaa luokat ja niiden väliset suhteet Peruselementit: Luokat (tiedon tyyppi) Attribuutit (luokan sisältämä tieto) Operaatiot (luokan tarjoama toiminnallisuus) Assosiaatiot (luokkien väliset yhteydet) Yleistys (luokkien hierarkkisuus)

53 Luokkakaavion kehitysprosessi: Suositeltava aktiviteettien järjestys
Identifioi kandidaattiluokat Lisää assosiaatiot ja attribuutit Löydä yleistettävät asiat Määrittele luokkien vastuut Määrittele operaatiot Iteroi prosessia kunnes mallista tulee hyväksyttävä Lisää tai poista luokkia, assosiaatioita, attribuutteja, yleistyksiaä, vastuita tai operaatioita Identifioi rajapinnat Sovella design patterneja Ole järjestelmällinen, mutta älä mene liiallisuuksiin

54 Vaihe 1: Identifioi kandidaattiluokat Menetelmä luokkien etsimiseen
Tarkastele annettua materiaalia (esim. vaatimusmäärittely) Poimi substantiivit Eliminoi substantiivit jotka: Tarkoittavat samaa asiaa Kuvaa instansseja Ovat liian epämääräisiä Ovat kehitettävän järjestelmän kannalta tarpeettomia

55 Vaihe 1: Identifioi kandidaattiluokat Notaatio luokkien kuvaukseen
Luokka kuvataan yksinkertaisimmillaan laatikkona, missä on luokan nimi sisällä Laatikossa voidaan kuvata myös attribuutit ja operaatiot Operaation täydellinen kuvaus on: operationName(parameterName: parameterType …): returnType

56 Aloita luokista mitkä ovat mielestäsi keskeisimmät ja tärkeimmät
Vaihe 2: Lisää assosiaatiot ja attribuutit Prosessi assosiaatioiden ja attribuuttien tunnistukseen Aloita luokista mitkä ovat mielestäsi keskeisimmät ja tärkeimmät Päätä mitä itsestään selvää tietoa kukin luokka sisältää ja mihin muihin luokkiin sillä on assosiaatioita Suunnittele luokat tärkeysjärjestyksessä Vältä suurta assosiaatioiden ja attribuuttien määrää Järjestelmä on yksinkertaisempi jos se manipuloi pienempää tietomäärää

57 Assosiaatio tulisi määritellä jos luokka:
Vaihe 2: Lisää assosiaatiot ja attribuutit Ohjeita hyvien assosiaatioiden määrittelyyn Assosiaatio tulisi määritellä jos luokka: omistaa kontrolloi on kytketty liittyy on osa omistaa osina on jäsen, tai omistaa jäseninä muita luokkia mallissasi Muista määritellä olioiden mahdollinen lukumäärä assosiaation kumpaankin päähän Kuvaa assosiaatiot selkeästi

58 Assosiaatiot ovat oletusarvoisesti kaksisuuntaisia
Vaihe 2: Lisää assosiaatiot ja attribuutit Notaatio assosiaation suunnan kuvaukseen Assosiaatiot ovat oletusarvoisesti kaksisuuntaisia On mahdollista rajoittaa assosiaatio yksisuuntaiseksi lisäämällä nuoli assosiaation päähän * * Day Note

59 Vaihe 2: Lisää assosiaatiot ja attribuutit Notaatio assosioitujen luokkien lukumäärän määrittelyyn

60 Vaihe 2: Lisää assosiaatiot ja attribuutit Notaatio assosiaatioiden tarkempaan kuvaukseen

61 One-to-one Jokaista yritystä kohden on olemassa vain yksi johtoryhmä
Vaihe 2: Lisää assosiaatiot ja attribuutit Assosiaatioiden analysointi ja validointi One-to-one Jokaista yritystä kohden on olemassa vain yksi johtoryhmä Johtoryhmä johtaa vain yhtä yritystä Yrityksellä täytyy aina olla johtoryhmä Johtoryhmä kuuluu aina tiettyyn yritykseen

62 Many-to-many Sihteeri voi työskennellä usealle johtajalle
Vaihe 2: Lisää assosiaatiot ja attribuutit Assosiaatioiden analysointi ja validointi Many-to-many Sihteeri voi työskennellä usealle johtajalle Johtajalla voi olla useita sihteerejä Sihteerit voi työskennellä “vuorotteluperiaatteella” (pools) Johtajilla voi olla sihteeriryhmiä Joillakin johtajilla ei ole yhtäkään sihteeriä

63 Vaihe 2: Lisää assosiaatiot ja attribuutit Monimutkaisempi esimerkki
Varaus tehdään aina täsmälleen yhdelle matkustajalle Ei varausta jos ei matkustajaa varaus tehdään matkustajakohtaisesti Matkustajalla voi olla useita varauksia Voi olla, että matkustajalla ei ole varausta ollenkaan

64 Yleinen virhe on kuvata toiminnat assosiaatioina
Vaihe 2: Lisää assosiaatiot ja attribuutit Toiminnat (Actions) vs. assosisaatiot Yleinen virhe on kuvata toiminnat assosiaatioina LibraryPatron * * * * * * LibraryPatron Loan borrowedDate dueDate returnedDate borrow return * * * * CollectionItem CollectionItem Parempi: borrow toiminto luo lainainstanssin. Huono, assosiaatiot ovat oikeastaan Loan ja return operaatio päivittää toimintoja returnedDate attribuutin

65 Vaihe 2: Lisää assosiaatiot ja attribuutit Aggregaatio (Aggregation)
Aggregaatiot ovat erikoistuneita assosiaatioita kuvaamaan luokan koostumista muista luokista Kokonaisuutta kuvaavaa puolta kutsutaan aggregaatiksi (aggregate) Aggregaatio kuvataan assosiaation päässä olevalla timantilla. Vehicle * * * * VehiclePart Country * * * * * * Region

66 Nyrkkisääntö: Käytä aggregaatiota jos jokin seuraavista toteutuu:
Vaihe 2: Lisää assosiaatiot ja attribuutit Milloin aggregaatiota käytetään? Nyrkkisääntö: Käytä aggregaatiota jos jokin seuraavista toteutuu: Luokat ovat osia aggregaatista Aggregaatti koostuu eri luokista Jos joku kontrolloi aggregaattia, se kontrolloi myös aggregaatin osia

67 Vaihe 2: Lisää assosiaatiot ja attribuutit Aggregaation hierarkia
Vehicle * * Chassis BodyPanel Door * Frame Engine Transmission Wheel

68 Vaihe 2: Lisää assosiaatiot ja attribuutit Kooste (Composition)
Kooste on vahva aggregaatio Jos aggregaatti tuhotaan niin kaikki osatkin tuhotaan Kaksi vaihtoehtoista tapaa kuvata postiosoite: * * * * * Building Room

69 Kummatkin alla olevista malleista kuvaa samaa asiaa:
Vaihe 2: Lisää assosiaatiot ja attribuutit Assosiaatioluokat (Association classes) Joskus attribuutti joka liittyy kahteen eri luokkaan ei sijoitu hyvin kumpaakaan luokista Kummatkin alla olevista malleista kuvaa samaa asiaa: Registration grade Student CourseSection * Registration grade Student CourseSection *

70 On mahdollista, että luokalla on assosiaatio itsensä kanssa
Vaihe 2: Lisää assosiaatiot ja attribuutit Rekursiivinen assosiaatio (Recursive associations) On mahdollista, että luokalla on assosiaatio itsensä kanssa successor * Course isMutuallyExclusiveWith * * * prerequisite

71 Vaihe 2: Lisää assosiaatiot ja attribuutit Kvalifikaatio (Qualification)

72 Vältä tätä: Ennemmin näin
Vaihe 2: Lisää assosiaatiot ja attribuutit Vältä turhia one-to-one assosiaatioita Vältä tätä: Ennemmin näin

73 Vaihe 2: Lisää assosiaatiot ja attribuutit Attribuuttien identifiointi
Etsi tietoa, mitä kunkin luokan on pakko ylläpitää Useat substantiiveistä, mitä ei hyväksytty luokiksi ovat potentiaalisia attribuutteja Attribuutin tulisi yleensä sisältää yksinkertainen arvo Esim. merkkijono, numero

74 Vaihe 2: Lisää assosiaatiot ja attribuutit Ohjeita atribuuttien määrittelyyn
Vältä duplikaatteja Jos osa luokan attribuuteista muodostaa kiintän ryhmän, muodosta näistä attribuuteista oma luokkansa. * Person name addresses street1 municipality1 provOrState1 country1 postalCode1 street2 municipality2 provOrState2 country2 postalCode2 Address street municipality provOrState country postalcode type Monikossa oleva attribuutti on huono Huono. Liian monta attribuuttia. Ei mahdollista lisätä osoitteita Hyvä ratkaisu. Voidaan määritellä erikseen onko kyseessä koti-, työ, … osoite

75 Kaksi tapaa määritellä yleistykset:
Vaihe 3: Löydä yleistettävät asiat Yleistyksien (Generalization) ja rajapintojen (Interface) määrittely Kaksi tapaa määritellä yleistykset: bottom-up Kokoa samankaltaiset luokat luomalla niille isäluokka top-down Etsi yleiset luokat ensiksi ja peri niistä erityistapaukset Luo rajapinta isäluokan sijasta jos: Luokilla on muutama yhteinen operaatio, mutta ovat muuten hyvin erilaisia Yhdellä tai useammalla luokalla on jo isäluokka Luokasta saattaa jo olla erilaisia toteutuksia

76 Vaihe 3: Löydä yleistettävät asiat Yleistyksen notaatio

77 Vaihe 3: Löydä yleistettävät asiat Rajapinnat (Interfaces)
Rajapinta kuvaa olioiden ulospäin näkyvän toiminnallisuuden. Rajapinta muistuttaa luokkaa sillä poikkeuksella, että sillä ei ole omia muuttujia eikä toteutettuja metodeja. «interface» Person Machine Person Machine Cashier withdraw Cashier Cashier deposit Employee ATM Employee ATM

78 Vaihe 4: Määrittele luokkien vastuut Luokkien vastuut
Vastuu on jotain, mitä järjestelmän kuuluu tehdä. Kukin toiminnallinen vaatimus pitää pystyä kytkemään yhteen luokista Kaikki luokalle annetut vastuut pitäisi selkeästi liittyä toisiinsa. Pilko luokka jos sille tulee liikaa vastuita. Luokka on todennäköisesti käyttökelvoton jos sille ei ole määritelty yhtään vastuita. Uusi luokka pitää todennäköisesti luoda jos jotain vastuuta ei voi määrittää olemassa olevalle luokalle. Vastuiden määrittely Suorita use case analyysi Etsi verbejä ja substantiivejä, jotka kuvaavat toiminnallisuutta

79 Vaihe 4: Määrittele luokkien vastuut Vastuiden kategorioita
Attribuuttien luku ja kirjoitus Uusien instanssien luonti ja alustus Tietokannasta luku ja tietokantaan talletus Instanssien tuhoaminen Assosiaatiolinkkien luonti ja tuhoaminen Kopiointi, konvertointi, muuntaminen, lähettäminen,… Numeerisen tuloksen laskenta Navigointi ja etsintä Muu erikoistunut työ

80 Vaihe 4: Määrittele luokkien vastuut Esimerkki (vastuut)
Uuden reittilennon luonti Lennon etsintä Lennon attribuuttien muokkaus Tietyn lennon luonti Matkustajan bookkaus Bookkauksen peruminen * * * * * * Person Airline 0..2 0..2 0..2 0..2 0..2 0..2 PersonRole name idNumber * * * * * * RegularFlight * EmployeeRole time PassengerRole flightNumber jobFunction supervisor * * * * * * * * * * * * * * * * * * * Booking * * * * * * SpecificFlight seatNumber date

81 Vaihe 5: Määrittele Operaatiot Operaatioiden määrittely
Operaatioita tarvitaan kunkin luokan vastuiden toteutukseen Yhtä vastuuta kohden saattaa olla useita operaatioita Ne metodit jotka vain auttavat vastuun toteutuksessa tulisi piilottaa muilta luokilta

82 Luokkamallin täydentäminen tekstuaalisesti
Tarkentavat tekstit ja muut kaaviot Upota kaaviosi dokumenttiin Teksti voi kuvat järjestelmään liittyviä näkökulmia valitsemallasi notaatiolla Painota ja tarkenna oleellisia ominaisuuksia ja perustele Viestit: Viesti (Note) kuvataan UML-kaavioon upotettavana pienenä tekstilaatikkona. Toimii samoin kuin kommentointi koodatessa

83 Luokkakaavion protoilu paperilla
Kirjoita luokkien nimiä korteille sitä mukaan kun keksit niitä Kun löydät attribuutteja ja vastuita kirjoita ne luokkaan liittyvään korttiin Jos tila loppuu kortista, harkitse luokan pilkkomista: Siirtele kortteja taululla ympäriinsä ja yritä muodostaa niistä luokkamalli Yhdistä kortit assosiaatioita ja yleistystä kuvaavilla viivoilla

84 UML Design diagrammeja vuorovaikutuksen kuvaamiseen
Kaksi vaihtoehtoista tapaa: Vuorovaikutuskaavio (collaboration diagram) Rakenteellinen painotus Sekvenssikaavio (sequence diagram) Ajallinen painotus

85 Ohjeita toiminnallisuuden kuvaukseen
Valitse mitä haluat painottaa (rakenne vs. aika) Näytä vain ne tiedot mitkä auttavat ymmärtämään mallinnettavaa vuorovaikutusta Näytä viesteistä vain ne tiedot mitkä auttavat ymmärtämään mallinnettavaa vuorovaikutusta


Lataa ppt "LTY/Tietotekniikan osasto"

Samankaltaiset esitykset


Iklan oleh Google