Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Samankaltaiset tiedostot
Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä

Johdatus sovellussuunnitteluun, s2000, osa4 Helsingin yliopisto;/tktl. Harri Laine 1. Luokka- ja oliokaaviot. Luokka- ja oliokaaviot

Johdatus sovellussuunnitteluun, s2001, osa 4a Helsingin yliopisto / TKTL Harri Laine / Inkeri Verkamo 1. Luokka- ja oliokaaviot

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

UML - unified modeling language

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Ohjelmistojen mallintaminen. Luento 4,

Johdatus sovellussuunnitteluun, s99, osa2 Helsingin yliopisto;/tktl Harri Laine 1. Olioperustaisuus (object oriented)

Johdatus sovellussuunnitteluun

Olioperustaisuus (object oriented)

1. Tarkastellaan seuraavaa kaaviota

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Kertausta: Olioperustainen ohjelmistokehitys

UML ja luokkien väliset suhteet

Johdatus sovellussuunnitteluun, s99, osa2 Helsingin yliopisto;/tktl Harri Laine 1. Olioperustainen ohjelmistokehitys

Johdatus sovellussuunnitteluun osa 2

Ohjelmistojen mallintaminen luokkamallin laatiminen

Ohjelmistojen mallintaminen luokkamallin laatiminen

UML Luokkakaavio 14:41

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

Luokkakohtaiset eli stattiset metodit ja attribuutit

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia.

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Ohjelmistojen mallintaminen, kertausta

Luokkamalli LUOKKAKAAVIO. Tämän osan sisältö. Luokkamalli. Luokka ja olio. Luokkakaavio (class diagram)

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

Luokkakaavion laatiminen

Ohjelmistojen mallintaminen, mallintaminen ja UML

Sisällys. 19. Unified Modeling Language (UML) Johdanto. Johdanto. Johdanto. Luokkakaavio:

2. Olio-ohjelmoinnin perusteita 2.1

2. Olio-ohjelmoinnin perusteita 2.1

Ohjelmistojen mallintaminen

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2007 ER-mallin peruskäsitteet.

Luokka- ja oliokaaviot

Mikä yhteyssuhde on?

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Olioiden yhteistyön mallintaminen

Johdanto. Olio (Object) Luokka (Class) Olion kuvaaminen

Olio-ohjelmointi Javalla

Rajapinta (interface)

3. Käsiteanalyysi ja käsitekaavio

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

1. Olio-ohjelmointi 1.1

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Tietokannan suunnittelu

Nimi: Henkilötunnus: {id} {+id}

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Johdatus sovellussuunnitteluun, s2000, osa5 Helsingin yliopisto;/tktl. Harri Laine 1. Luokkakaavion tarkoitus. Luokkakaavion tarkoitus

Ohjelmistojen mallintaminen. Luento 2, 8.11.

Kertaus: yleistys-erikoistus ja perintä

Ohjelmistojen mallintaminen, kesä 2010

TIE Ohjelmistojen suunnittelu

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Javan perusteita. Janne Käki

2. Olio-ohjelmoinista lyhyesti 2.1

Ohjelmistojen mallintaminen. Luento 3, 9.11.

Luokka (class) esitetään suorakulmion avulla, jonka sisälle kirjoitetaan luokan nimi (vahvennettuna).

T Ohjelmistojen määrittely- ja suunnittelumenetelmät Harjoitustyöraportti TNT - Tarkistetaan Ne Tentit Analyysimalli

Ohjelmistojen mallintaminen olioiden elinkaaret - tilakaavio Harri Laine 1

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

UML:n yleiskatsaus. UML:n osat:

Ohjelmistotekniikan menetelmät, kevät 2008

UML -mallinnus TILAKAAVIO

Luento 3 Tietokannan tietosisällön suunnittelu

CS-A1150 Tietokannat CS-A1150 Tietokannat / 35

Sisällys. Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Ohjelmistotekniikan menetelmät, kesä 2008

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

A TIETORAKENTEET JA ALGORITMIT

JHS 162 Paikkatietojen mallintaminen tiedonsiirtoa varten Liite 1 UML-mallinnus

UML-kielen formalisointi Object-Z:lla

18. Abstraktit tietotyypit 18.1

19. Unified Modeling Language (UML)

FoA5 Tilastollisen analyysin perusteet puheentutkimuksessa. Luentokuulustelujen esimerkkivastauksia. Pertti Palo. 30.

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Aalto Yliopisto T Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

Ohjelmistotekniikan menetelmät, UML

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, k 2006 relaatioalgebra. Harri Laine 1

YHTEYSSUHDE (assosiation)

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Muutamia peruskäsitteitä

Tuotemallipohjaisen toimintaprosessin mallintaminen

Transkriptio:

DO NOT PRINT THIS DOCUMENT DO NOT PRINT THIS DOCUMENT Yhteyden nimi Nimen lukusuunta pankkitili 0..0 Omistaja->..3 asiakas <-Tili Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä Tässä tili ja omistaja ovat roolinimiä, Ohjelmaa kuvattaessa kumppanin roolinimenä voi käyttää olion sisältämän kumppaniin viittaavan muuttujan nimeä pankkitili 0..0 Tili..3 Omistaja asiakas Tili -muuttuja (tässä tapauksessa taulukko) sisältyy jokaiseen Asiakas-olioon. Sitä ei kuitenkaan suositella esitettäväksi asiakkaan attribuuttina, jotta vältettäisiin tarpeetonta saman asian toistoa. Vastaavasti Omistaja on pankkitiliin sisältyvä taulukkomuuttuja. Tärkeää pankkitili 0..0..3 asiakas Tili Omistaja Asiakkaaseen kytkettyjen pankkitilien minimija maksimimäärä ilmoitetaan kumppanin (siis pankkitilin) puoleisessa päässä yhteysviivaa Harri Laine

Yhteysviivan päässä oleva nuolenkärki kuvaa ns. navigointimahdollisuutta eli sitä, että viivan päässä olevan luokan olioista pääsee suoraan nuolella osoitetun luokan olioon (yhteen tai useampaan) - oliossa on siis siirtymän mahdollistava olioarvoinen muuttuja 0.. Opiskelija_kurssilla Kursin opiskelijoiden ylärajaa ei ole kiinnitetty () sta pääsee kurssin_opiskelijaan mutta ei toisinpäin Kun kuvauksen abtraktiotasoa nostetaan jätetään navigointimahdollisuus yleensä kuvaamatta. Tällöin yhteysviivan kummassakaan päässä ei ole nuolenkärkeä A B Tämän ei tarkoita sitä, ettei A:sta pääse B:hen ja päinvastoin vaan sitä, että navigointimahdollisuus on jätetty esittämättä. Mahdollisuuden voi ajatella olevan molemminsuuntainen. Jos yhteysviivan toisessa päässä kuvataan navigointimahdollisuus se tulkitaan kuvatuksi myös toisessa päässä A B näin esitettynä B-olioista ei ole suoraa pääsyä A-olioihin Harri Laine 2

Molemmat yhteyden osapuolina olevat oliot voivat kuulua samaan luokkaan. Työntekijä alainen 0.. esimies 0.. Työntekijällä voi olla vain yksi välitön esimies Työntekijällä voi olla useita alaisia Yhteyteen voidaan liittää järjestysmääre kuvaamaan sitä, että samaan olioon yhteydessä olevien olioiden joukko on jollain perusteella järjestetty Kirja 0.... tuote Tekijä {ordered} Henkilö Kirjan tekijöiden joukko on järjestetty Olioiden maihinnousu 2 Fox Mulder Dana Scully Järjestetty joukko Harri Laine 3

Jos yhteyden osapuolta voidaan pitää osana toista osapuolta on kyseessä kooste (aggregate). Tällainen yhteyden erikoistapaus voidaan esittää yhteysviivan kokonaisuuden puoleiseen päähän sijoitetun salmiakkisymbolin avulla Pelaaja voi kuulua moneen joukkueeseen joukkue jäsen pelaaja Pelkkä tarkoittaa samaa kuin pari 0.. Kooste auttaa hahmottamaan sitä, miten oliot semanttisesti kytkeytyvät toisiinsa. Sillä ei välttämättä ole mitään vaikutusta esimerkiksi navigointimahdollisuuksiin. Yleensä kuitenkin kokonaisuudesta on aina pääsy osiinsa. joukkue jäsen pelaaja Pelaajasta on suora pääsy pelaajan joukkuesseen ja joukkueesta sen pelaajiin Ohjelman toiminnan kannalta koostetta merkittävämpi yhteys on kompositio-yhteys (composition). Kompositio voidaan ajatella koosteen erikoistapauksena, jossa osan olemassaolo on kytketty kokonaisuuden olemassaoloon - kun kokonaisuus hävitetään häviävät myös sen osat (tavallisen koosteen kohdalla näin ei käy) osa voi sisältyä vain yhteen samantyyppisen kompositioon osa ei voi vaihtaa kompositiota vaan on aina osa samaa kokonaisuutta Harri Laine 4

Esimerkkejä: Rakennus Huoneisto Kompositio esitetään mustalla salmiakilla kokonaisuuden puoleisessa päässä Kompositio on UML:ssä ainoa tapa ilmaista olemassaoloriippuvuus. Olemassaoloriippuvuus on mallintamisessa hyvin tärkeä asia. Tärkeämpi kuin osan ja kokonaisuuden yhteys. Jos olemassaoloriippuvuus pitää kyetä esittämään on kompositiota syytä käyttää vaikka osa - kokonaisuusyhteys ei aivan selvältä näyttäisikään. Kompositiota käytetään reaalimaailmassa usein hyväksi olioiden identifioinnissa. Rakennuksen Teollisuuskatu 23 huone B446 pitää sisällään komposition. Perus-UML ei tarjoa keinoa komposition kautta tapahtuvan ulkoisen identifioinnib kuvaamiseen, joten tällä kurssilla otetaan käyttöön yhteydeen osan puolelle liitettävä lisämääre {id} esittämään tätä. Harri Laine 5

Rakennus.. {id} Huone Huoneen yksikäsitteiseen identifiointiin tarvitaan tieto rakennuksesta, jossa huone sijaitsee Ohjelmassa komposition tapauksessa kokonaisuusolio on vastuussa osiensa luonnista ja hävittämisestä. kurssi luo hävitä Tarkastellaan tilannetta, jossa kurssin harjoitusryhmät on taulukon asemasta toteutettu RyhmaKokoelma-luokan avulla. Tämä luokka toteuttakoon dynaamisen taulukon (=taulukko, joka laajenee tarvittaessa). Yksityiskohtaisessa kuvauksessa tilanne olisi tällöin: RyhmäKokoelma Dynaaminen taulukko Harri Laine 6

JSS:KURSSI JSS-RYHMÄT: JSS/H:H.RYHMÄ JSS/2:H.RYHMÄ ilmentymätasolla Sama asia voitaisiin toteuttaa myös vaikkapa listarakenteena. 0.. first 0.. next Näissä kummassakin kuvauksessa, erityisesti ylläolevassa, ratkaisun yksityiskohdat vaikeuttavat oleellisen kokonaisuuden hahmotusta sitä, että kurssiin liittyy useita harjoitusryhmiä, jotka ovat olemassaoloriippuvia kurssista. Kuvauksen abstraktiotasoa on tällöin syytä nostaa häivyttämällä tekninen ratkaisu. Abstrakti kuvaus Toteutukset RyhmäKokoelma 0.. first 0.. next Harri Laine 7

Kokoelman toteutus Tarkastellaan vielä aiempaa esimerkkiä RyhmäKokoelma Dynaaminen taulukko Tässä ratkaisussa RyhmäKokoelma todennäköisesti toteutettaisiin ohjelmointikielen tarjoamaa valmista dynaamista taulukkoa käyttäen (Javassa Vector) - miten tämä kuvataan UML:llä? Kokoelman toteutus Vector On virheellinen, sillä kaikki Vector luokan ilmentymät eivät toki ole olemassaoloriippuvia Kursseista Kokoelman toteutus RyhmäKokoelma Vector UML_ssä on mahdollista määritellä riippuuvuuksia luokkien välille, tässä on kyse riippuvuudesta yleiskäyttöisen luokan (Vector) ja sillä toteutetun luokan (RyhmäKokoelma) välillä Harri Laine 8

Kokoelman toteutus Java ohjelmana edellisen kalvon esimerkki toteutuisi seuraavasti public class { Vector RyhmäKokoelma; public void lisääryhmä(harjoitusryhmä h) { RyhmäKokoelma.addItem(h); } Tässä siis luokkaa RyhmäKokoelma ei ole määritelty. On vain Vector luokan ilmentymä, mutta koska Vector on geneerinen yleiskäyttöinen luokka sen ilmentymä voidaan ajatella tarkoitukseen sidotuksi luokaksi Henkilö Yhdistys 0.. 0.. Jäsenyys Rooli Tässä esimerkissä jäsenyys olioiden avulla kuvataan henkilön jäsenyyttä yhdistyksessä. Henkilö voi olla rivijäsen, johtokunnassa tai kunniajäsen. Ilmentymätasolla HYY:Yhdistys AP-RY Rooli=rivijäsen AP:Henkilö AP-HYY Rooli= johtok. KK-HYY Rooli= rivijäsen KK:Henkilö... Harri Laine 9

Tilanne voitaisiin mallintaa myös ns. yhteysluokan (association class) avulla Yhdistys 0.. 0.. Henkilö jäsenyys Rooli Tähän sisältyy implisiittisenä vaatimus siitä, että henkilöllä on enintään yksi jäsenyys kussakin yhdistyksessä Yhteysluokkaa käyttäen voidaan kahden olion väliseen kytkentään liittää kytkennän laatua kuvaavia attribuutteja. Yhteydet UML:ssä on mahdollista kuvata myös useamman kuin kahden olion välisiä kytkentöjä Oppikirjana Kirja Opettaja Opettaja käyttää kurssilla tiettyä oppikirjaa Harri Laine 0

Luokkien väliset suhteet Edellä on tarkasteltu olioiden (ilmentymien) välisiä yhteyksiä. Luokkakaaviossa nämä kuvataan luokkien välillä. UML:ssä voidaan lisäksi esittää luokkien välisiä riippuvuuksia (depency) ja luokkahierarkia Riippuvuus Luokien välisellä riippuvuudella tarkoitetaan tilannetta, jossa luokan määrittelyissä tapahtuvalla muutoksella voi olla vaikutuksia toisen luokan toimintaan. Riippuvuus kuvataan katkoviivalla, jonka päässä oleva nuolenkärki osoittaa siihen luokkaan josta viivan toisessa päässä oleva on riippuva Käytettävä Käyttäjä Käyttäjä on riippuvuussuhteessa käytettävään Riippuvuus Esimerkki riippuvuudesta on palvelun parametrin aiheuttama riippuvuus, jossa palvelun tarjoava luokka tulee riippuvaksi parametrin luokasta. Class Käyttäjä { public omapalvelu(käytettävä k) { k.vieraspalvelu(); } } Harri Laine

Riippuvuus Aiemmin oli jo esillä riippuvuus yleiskäyttöisestä luokasta kokoelman toteutuksessa. Yleinen kokoelma Täsmäkokoelma UML:ssä on nimetty 8 erilaista luokkakaaviossa mahdollista riippuvuutta. Näiden määrittelyt ovat kuitenkin osin varsin epämääräisiä Harri Laine 2