Suunnittelumallien käyttö ohjelmistosuunnittelussa

Koko: px
Aloita esitys sivulta:

Download "Suunnittelumallien käyttö ohjelmistosuunnittelussa"

Transkriptio

1 Suunnittelumallien käyttö ohjelmistosuunnittelussa Mika Rantakeisu Rovaniemen ammattikorkeakoulu Avoin ammattikorkeakoulu Tiivistelmä Tämä on selvitys suunnittelumallien käytöstä ohjelmiston kehitysprosessissa. Esittelen useita käytössä olevia suunnittelumalleja ja sovellan niitä käytännössä ohjelman sovellusarkkitehtuurin luomiseen. Käsittelen myös suunnittelumallien yleistä merkitystä ohjelmistokehitykselle ja niiden hyötyjä ja haittoja ohjelmiston arkkitehtuurin luomisessa. Esittelen uusimpia ohjelmoinnin periaatteita ja sovellan niitä suunnittelumallien kanssa ohjelmistokehitysprosessissa. Näytän aikaisemmin tekemäni ohjelman sovellusarkkitehtuurin ja luon suunnittelumalleja käyttäen uuden version tämän ohjelman arkkitehtuurista. Lopuksi esittelen käyttämiäni suunnitteluratkaisuja ja analysoin näiden ratkaisujen hyötyjä ja haittoja verrattuna alkuperäiseen ohjelmaan. Suunnittelumallit ja ohjelmat esitellään tekstikuvauksena sekä UMLkaaviona. Sisällysluettelo JOHDANTO 1.0 Mitä suunnittelumallit ovat? 1.1 Suunnittelumallien hyödyt 1.2 Suunnittelumallien haitat 1.3 Ohjelmisto alan käsitteitä 2.0 SUUNNITTELUMALLIEN ESITTELYJÄ 2.1 Tila suunnittelumalli 2.2 Tarkkailija suunnittelumalli 2.3 Tehdasmetodi suunnittelumalli 2.4 Kehysmetodi suunnittelumalli 3.0 ALKUPERÄINEN OHJELMA 3.1 Mikä on Boulder Dash? 3.2 Lopputulos 3.3 Ajatus uuden version kehitystyöhön 4.0 OHJELMAN UUDELLEENKEHITYS KÄYTTÄEN SUUNNITTELUMALLEJA 4.1 Uuden sovellusarkkitehtuurin rakenne 5.0 LOPPUTULOKSET 5.1 Suunnittelumallien vaikutus ohjelmointiprosessiin 5.2 Suunnittelumallien vaikutus arkkitehtuurin suunnitteluun. 5.3 Johtopäätökset LÄHTEET JOHDANTO Suunnittelumallit ovat valmiita ratkaisuja niihin ongelmiin, joita ohjelmoija kohtaa koostaessaan tietokoneohjelman eri osia. Ne ovat loistava tapa ohjelmoijien siirtää tietoa muille ohjelmoijille suullisesti tai dokumentaation kautta. Käytän tässä julkaisussa ohjelman tilalla synonyymia sovellus. Esittelen aikaisemmin tekemäni sovellusarkkitehtuurin ja kuvaan sovelluksen toimintaa ja kuinka se on tehty. Käytän suunnittelumalleja sen sovellusarkkitehtuurin uudistamiseen ja analysoin uuden arkkitehtuurin hyötyjä sekä haittoja. Lopuksi kerron tämän prosessin aikana tekemiäni havaintoja suunnittelumallien vaikutuksesta siihen mitä ohjelmistokehitysprosessin eri vaiheissa tapahtuu. 1.0 MITA SUUNNITTELUMALLIT OVAT? Suunnittelumallit ovat tärkeä osa ohjelmistokehitysprojektia. Niitä voisi kuvata kokeneiden ohjelmoijien kansanperinteeksi, joka tarjoaa valmiita suunnitteluratkaisuja moniin toistuviin ongelmiin, joita ohjelmoija kohtaa koostaessaan tietokoneohjelman komponenttia arkkitehtuurisuunnittelussa ennalta määrättyyn tarkoitukseen vastaamaan parhaan mukaan sovelluksen spesifikaatiossa määriteltyjä toiminnallisuus- ja laatuvaatimuksia. Erilaisia suunnittelumalleja on satoja ja ne jakaantuvat käyttökontekstinsa mukaan toiminta-, rakenne- ja luontimalleihin. Rakennemalleissa määritellään miten komponentin luokat rakennetaan. Luontimalleissa määritellään miten komponentin oliot luodaan. Toimintamalleissa kuvataan miten komponentin oliot toimivat. 1.1 Suunnittelumallien hyödyt Tuntemalla suunnittelumalleja ohjelmoijat voivat siirtää keskenään paljon tietoa sovellus-spesifeihin ratkaisuihin liittyen. Päätös käyttää jotain suunnittelumallia sovelluksen komponentin tekemiseen määrittelee pitkälti sen, miten se rakennetaan ja toimii. Periaatteessa suunnittelumallia voi verrata talon rakennuspiirustuksiin, jotka määrittelevät talon rakenteen ja rakennustavan. Samoin kuin rakentajalla tehtäväksi jää talon rakentaminen rakennuspiirustusten mukaisiksi, niin ohjelmoija pyrkii ohjelmoimaan komponentin mahdollisimman pitkälle suunnittelumallin määritelmässä viitekehyksessä.

2 Suunnittelumallien kautta voidaan toteuttaa modernin ohjelmistokehityksen käytäntöjä, joita suositellaan sovellettavaksi sovellusarkkitehtuurin suunnittelussa. Nämä käytännöt ovat: [3, s608] 1. Suosi koostamista yli perimisen 2. Luokkien pitää olla avoimia laajennettavuutta varten, suljettuja muokkausta varten 3. Pyri löyhästi sidottuun ratkaisuun komponenttien rajapintojen ja toteutuksen välillä 4. Komponentin sisäiset ratkaisut eivät saa näkyä rajapinnan ulkopuolella 5. Suosi rajapintojen muokkausta/lisäämistä, metodien toteutuksen muuttamisen sijaan 6. Kapseloi se mikä muuttuu 7. Oliot ovat suoraan yhteydessä ainoastaan vierekkäisen arkkitehtuurikerroksen olioiden kanssa 8. Ohjelmoi rajapintoja vastaa älä toteutuksia Lisäksi modernin Java-ohjelmistokehityksen paradigma on pyrkiä siihen että, ohjelman toiminta määräytyy dynaamisesti ohjelman ajovaiheessa, ennenmin kuin se tapahtuisi staattisesti ohjelman kääntämisvaiheessa. [3, s69] 1.2 Suunnittelumallien haitat Suunnittelumallit monimutkaistavat ohjelmaa ja lisäävät erilaisten luokkien ja metodien sekä koodin määrää. Lisäksi ne luovat rajoituksia ohjelman kehitykseen. 1.3 Ohjelmisto alan käsitteitä Suunnittelumallien käyttöön liittyy monia sovellusarkkitehtuuriin liittyviä käsitteitä, jotka kannattaa ymmärtää ainakin yleisellä tasolla. Luokkaa käytetään ohjelmistosuunnittelussa mallittamaan, jonkun abstraktin tai reaalimaailman käsitteen ilmentymää ohjelmistossa. Käytännossä luokassa määritellään tietty loogiseen kokonaisuuteen kuuluva algoritmi ja mitä tietoa siihen talletetaan. Olio on luokan ilmentymä ohjelmaa ajettaessa. Ohjelman toiminnan aikana se toimii algoritmiensa mukaan, joilloin siihen kapseloidaan tietoa sekä se on yhteydessä muihin luokista toteutettuihin olioihin. Rajapinta tarkoittaa tapaa jolla oliot ovat yhteydessä toisiinsa. Kaikki olioiden väliset yhteydet eivät tapahtu rajapintojen kautta, mutta komponenttien, kerroksien ja myös moduuleilla on omia rajapintoja, joilla niihin pitää olla yhteydessä. Periaatteessa rajapinta antaa komponenttia käyttävälle asiakkaalle tietyn rajatun näkymän komponentin tietoihin ja toimintoihin. Yleensä tämä tarkoittaa vain niitä tietoja ja toimintoja, joita kyseisen asiakkaan arkkitehtuuri suunnittelun perusteella tarvitsee käyttää. Ohjelmistoprosessissa sanalla komponentti voi olla monta merkitystä. Se voi tarkoittaa luokkaa, olioden kokonaisuutta tai vain yhtä oliota. Komponentti joka tapauksessa toteuttaa tiettyjä toimintoja, joita sille on asetettu arkkitehtuurisuunnittelussa ja yhteydet komponenttiin tapahtuvat sen rajapintojen kautta näin se on helposti uudelleen käyttävissä muissa ohjelmissa kuin se jossa on määritelty. Monet ohjelmointikielet tarjoavat valmiita komponentteja, jotka on suoraan käytettävissä ohjelmassa. Moduuli voidaan määritellä luokaksi, paketiksi, komponentiksi. Moduuli on yleensä koodin hallinnallinen kokonaisuus. Ohjelma kannattaa jakaa monitasomallin mukaisiin kerroksiin. Kerros käsittää kaikki tiettyyn loogiseen kokonaisuuteen tarkoitetut oliot. Kerrokset ovat yhteydessä toisiinsa rajapintojen kautta vain monitasomallin vierekkäisten kerrosten välillä. Eri kerrokset saattavat sijaita eri tietokoneilla. Yleisin tapa jakaa sovellus kerroksiin on niin sanottu kolme kerrosarkkitehtuuri, jossa on käytössä käyttöliittymä-, toimintalogiikka-, ja infrastruktuurikerrokset. Arkkitehtuuri tarkoittaa perustaa, jonka varaan kaikki sovelluksen myöhemmät suunnittelu- ja toteutusratkaisut rakennetaan. Arkkitehtuurikuvaus toimii järjestelmän yleisrakenteen dokumentaationa.[2] 2 SUUNNITTELUMALLIEN ESITTELYJÄ Erilaisia suunnittelumalleja satoja ja ne jakaantuvat sen ongelma kontekstinsa mukaan, jonka ne ensisijaisesti ratkaisevat rakenne-, luonti-, ja käyttäytymismalleihin. Yleensä tarvitsee osata joitakin keskeisiä suunnittelumalleja. [3] 2.1 Tila suunnittelumalli Tila-suunnittelumallissa (State Pattern) määritellään rajapinta, jolla voidaan samalle oliolle määritellä monia toteutuksia niistä luokista, jotka toteuttavat rajapinnan. Tilasiirtymät voivat tapahtua ohjelman sisäisesti olion tilan mukaan tai ulkoisesti. Tila-suunnittelumalli ei ota kantaa siihen mikä muuttaa olioiden tilaa. Toteutuksessa on määriteltävä miten tila oliot luodaan ja tuhotaan.[3, s22] Käytännössä suunnittelumalli voidaan toteuttaa seuraavasti (UML luokkakaavio kuva[1]). Määritellään rajapinta (State) ja rajapinnan toteuttavia luokkia (ConcreteState1, ConcreteState2). Rajapintaa käyttävässä asiakas (Context) luokassa on jäsen muuttuja jonka tyyppi on rajapinta State. Sekä jäsenmuuttujat, jotka viittaavat State liittymän toteuttaviin ConcreteState1 ja ConcreteState2 luokkiin. Myös ConcreteState1 ja ConcreteState2 luokissa on jäsenmuuttuja joka viittaa samaan Context luokkaan. Tilojen vaihto tapahtuu niin että Context luokka asettaa State muuttujan viittaamaan milloin esimerkiksi ConcreteState1 luokkaan tai ConcreteState2 muuttujaan, näiden omien setstate(state : State) metodien kautta. [3]

3 tapa toteuttaa Tehdasmetodi-suunnittelumalli (virtual constructor) on seuraava (kuva[3]). Suunnittelumallissa on yliluokka (Object), josta määritellään aliluokkia (ConcreteObject1, ConcreteObject2). Suunnittelumallissa on FactoryMethod-niminen luokka, jossa on factory niminen metodi. Tämä metodi luo oliota Object yliluokan aliluokista, Joita on esimerkiksi ConcreteObject1 ja ConcreteObject2.[3] kuva[1] Tila-suunnittelumalli sopii ohjelmiin, joissa olion käyttäytyminen riippuu tilasta ja olion on vaihdettava käyttäytymistään ajon aikana. Esimerkki tällaisesta on TCP-yhteys, jossa kolme tilaa jotka ovat suljettu, muodostettu ja kuuntelee.[1] 2.2 Tarkkailija suunnittelumalli Tarkkailija-suunnittelumallissa (Observer-pattern) määritellään Subject rajapinnan toteutta olio (kuva[2]) (ConcreteSubject) sekä ConcreteObserver oliota, jotka toteuttavat Observer rajapinnan. ConcreteSubject oliossa on viittaus ConcreteObserver oliohin (yleensä jonkinlainen lista). Ja samoin ConcreteObserver oliossa on viittaus samaan ConcreteSubject olioon. [3, s52] Tarkkailijan toiminta tapahtuu niin että Concrete- Observer rekisteröi itsensä ConcreteSubject olion tarkkailijaksi (lisää itsensä listaan). Jos Concrete-Subject olion tila muuttuu niin se ilmoittaa siitä kaikille Tarkkailijoilleen (ConcreteObserver oliot listassa), jotka muuttavat omaa toimintaansa. ConcreteSubject tilan mukaan. Jokainen ConcreteObserver olio voi lisätä ja poistaa itsensä listasta koska tahansa.[3] kuva[3] Tehdasmetodi suunnittelumallia käytetään sovelluksissa, joissa ei tiedetä mitä eri oliota milloinkin käytetään eri tilanteissa sovelluksen ajon aikana.[1] 2.4 Kehysmetodi suunnittelumalli Kehysmetodi-suunnittelumalli (kuva[4]) on perussuunnittelumalleja. Siinä määritellään yliluokka, jonka aliluokat perivät laajentaen ja muuttaen yliluokan toimintaa. kuva[4] Kehysmetodia käytetään laajasti ohjelmoinnissa. Itse asiassa tavallinen luokanperintä toteuttaa kehysmetodisuunnittelumallin. kuva[2] Tarkkailija suunnittelumalli sopii hyvin järjestelmiin, joissa järjestelmän tietyn olion tilan muuttuessa halutaan tiedottaa siitä järjestelmän muihin olioihin ilman että tarvitsee tietää minkälainen tämä olio on. Olion tarvitsee vain toteuttaa vaaditut Subject ja Observer rajapinnat. Tarkkailija on kaikkein yleisimmin käytetty suunnittelumalli. 2.3 Tehdasmetodi suunnittelumalli Tehdasmetodi suunnittelumallissa luodaan halutun yliluokan toteuttavia olioita algoritmin mukaan. Yksi 3 ALKUPERÄINEN OHJELMA Tein alkuperäisen ohjelman heinä-elokuussa Halusin kehittää ohjelmointitaitojani ja etsin siihen sopivaa haastetta. Keksin että voisin tehdä oman version klassisen Commotore 64 pelistä nimeltään Boulder Dash. Kyseinen peli tuntui sopivalta haasteelta kehittää ohjelmointitaitojani.

4 3.1 Mikä on Boulder Dash? kuva[5] Boulder Dash (kuva[5] ja kuva[6]) on kaksiulotteinen toiminnallinen pulmanratkontapeli, jossa pelaaja kaivautuu kentän läpi keräten tietyn määrän timantteja päästäkseen seuraavaan kenttään. 3.2 Lopputulos Ohjelmoin Boulder Dash pelin Java-ohjelmointikielellä. Tuolloin en varsinaisesti suunnitellut ohjelmaa, vaan koostin sen askel askeleelta kehittäen siihen vaadittuja ominaisuuksia, joita olin siihen määritellyt vaatimusmäärittelyssä. Tuloksena oli vaatimusmäärittelyn toiminnallisenmäärittelyn kohtuudella täyttävä, mutta laatuvaatimukset huonosti toteuttava ohjelma, jonka koodia ulkopuolisten oli vaikea ymmärtää. Sovelluksen koodissa ei juurikaan ollut mitään rakennetta, enkä käyttänyt edes olio-ohjelmoinnin yleisiä perusperiaatteita, joita on esimerkiksi periminen ja kapselointi sekä saman olion käyttö useassa kohteessa. Vaan loin jokaista toiminnallisuutta varten oman olion, joka oli hyvin monesti hyvin samanlainen jo toteuttamieni olioiden kanssa. Myös sellaiset käsitteet kuin komponentti ja rajapinta olivat minulle tuntemattomia. Kuitenkin huonoin sovellusarkkitehtuurin (kuva[7]) ratkaisu oli se että, suurin osa koodista sijaitsi yhdessä luokassa nimeltään Peli. Tämä teki Peli-luokasta todella suuren ja vaikeasti ymmärrettävän. Arkkitehtuuri kannalta sovelluksen luokat olivat tiukasti sidottu toisiinsa (vertaa periaate 3). Eikä sen koodia voinut siksi käyttää muissa ohjelmissa. Koodi oli muutenkin epäjohdonmukaista ja huonosti suunniteltua. Alkuperäisen ohjelman sovellus-arkkitehtuuri on kuvassa 7. kuva[6] kuva[7] 3.3 Ajatus uudenversion kehitystyöhön Ajatus uuden version tekemiseen syntyi, kun aloin perehtymään sellaisiin ohjelmoinnissa keskeisiin käsitteisiin kuin monisäikeisyys, rajapinta, komponentti ja ennen kaikkea suunnittelumallit. Opin myös monia

5 yleisiä ohjelmoinnin periaatteita, joita kannattaa soveltaa ohjelmien kehityksessä. Ymmärsin pystyisin tekemään ohjelmasta laatuvaatimukset paremmin toteuttavan version. 4 OHJELMAN UUDELLEENKEHITYS KÄYTTÄEN SUUNNITTELUMALLEJA Vaatimusmäärittelyn pohjalta tein arkkitehtuurisuunnitelman, jossa päädyin käyttämään seuraavia suunnittelumalleja Tehdasmetodi, Tila, Kehysmetodi sekä Tarkkailija. Käytän myös modernin ohjelmistokehityksen yleisiä periaatteita ohjelman toteutuksessa. Myös Java Code Conventions tyylioppisääntöjä käyttäminen muuttujien ja luokkien nimeämiseen on tärkeää saadakseni ohjelmasta enemmän standartien ja käytäntöjen mukaiseksi, tämä tekee ohjelmasta ymmärrettävämmän. Ohjelman suoritus tulee myös jakaantumaan usealle säikeelle. Uudistettu sovellusarkkitehtuuri näkyy kuvassa Uuden sovellusarkkitehtuurin rakenne Uudessa arkkitehtuurissa (kuva[8]) on toteutettu Tarkkailija-suunnittelumallia Peli-luokan ja KäyttoLiittyma -luokan välillä, joka nimensä mukaisesti toimii käyttöliittymänä peliin. Peli luokka toteuttaa Subject-rajapinnan ja KayttoLiittyma-luokka toteuttaa Observer rajapinnan. Tämän suunnittelun suurin hyöty on se että Peli luokalla voi olla lukuisia erilaisia käyttöliittymiä, joita voidaan käyttää ja vaihtaa dynaamisesti ohjelman ajon aikana. Peli luokalla voi olla jopa useita käyttöliittymiä yhtä aikaa. Mutta on epäselvää onko tästä hyötyä tässä vaiheessa. kuva[8] KeyListener rajapinta (Interface) ja NappainKuuntelija luokka toteuttavat Kehysmetodi-suunnittelumallia. KeyListener rajapinnan toimintaa laajennetaan ja muutetaan NappainKuuntelija luokassa. Haamu ja TuliKarpanen luokissa on jäsenmuuttujina Liikkuminen niminen rajapinta tyyppinen jäsenmuuttuja sekä Liikkuminen liittymän toteuttaviin LiikkuuVasempaan ja LiikkuuOikeaan luokkiin viittaavia jäsenmuuttujia. Haamu ja TuliKarpanen vaihtavat Liikkuminen tyyppisen muuttujan viittaamaan ajon aikana dynaamisesti, joko LiikkuuVasempaan tai LiikkuuOikeaan luokasta muodostettuun olioon. Nämä luokat toteuttavat yhdessä Tila-suunnittelumallin. TehdasMetodi luokka toteuttaa luonnollisesti TehdasMetodi-suunnittelumallin. TehdasMetodiluokalla luodaan ohjelman ajon aikana dynaamisesti abstraktin PeliHahmo-luokan toteuttavia oliota (esimerkiksi Kivi, Haamu, TuliKarpanen). Sovelluksessa on nyt määritelty komponentteja, joita voi käyttää muissa ohjelmissa. Komponentti 1 on samalla käyttöliittymäkerros. Siinä on kaikki sovelluksen käyttöliittymään osat. Siihen ollaan yhteydessä tarkkailija-suunnittelumallin Observerrajapinnan kautta. Komponentti 2 taas tarjoaa rajapinnan kuunnella näppäin komentoja. Komponenttiin ollaan yhteydessä KeyListener rajapinnan kautta. Komponentti 3 tarjoaa erilaisia algoritmi ratkaisuja näytön komponenttien liikkumiseen. Sovellus voidaan myös jakaa eri kerroksiin monikerrosmallin mukaisesti. Yleisimmin käytetään kolme kerron arkkitehtuuria (three tier architecture), jossa sovellus on jaettu käyttöliittymä-, toimintalogiikka- ja infrastruktuuri kerroksiin. Tässä tapauksessa voidaan nähdä että sovellus on jakaantunut käyttöliittymä kerrokseen ja toimintalogiikka kerrokseen. Käyttöliittymä kerrokseen kuuluu KayttoLiittyma ja Observer luokat. Kaikkien muiden luokkien kuuluessa toimintalogiikka-kerrokseen. Kyseessä on kaksi kerros arkkitehtuuri. PeliHahmojenKasittely-luokka perii Runnable-luokan, joka mahdollistaa sen että metodien kutsut PeliHahmojenKasittely luokassa voidaan suorittaa omassa säikeessään käyttämällä run()-metodia. Sovelluksen suoritus on näin jaettu monelle säikeelle. 5 LOPPUTULOKSET Suunnittelumalleista oli hyötyä sekä ohjelman suunnittelussa ja sekä ohjelmoinnissa. 5.1 Suunnittelumallien vaikutus ohjelmointiprosessiin Suunnittelumallien hyöty sovelluksen kehityksessä tuli esiin jo sovelluksen arkkitehtuurin suunnittelu vaiheessa. Päätös käyttää jotain suunnittelumallia sovelluksen komponentin tekemiseen määrittelee pitkälti sen miten se rakennetaan ja toimii. Suunnittelumallien kautta voidaankin suullisesti ja dokumentaation kautta jakaa sellaista tietoa ohjelmointiprosessista, jota muuten on vaikea siirtää.

6 Itse sovelluksen ohjelmointiprosessin suunnittelumallin käyttäminen teki johdonmukaisen tavoitetietoisen tapahtuman, koska suunnittelumallin käyttö tietyn komponentin tekemiseen antaa viitekehyksen miten se rakennetaan. Kun komponentti rakennetaan ennalta määrätyllä tavalla vastaamaan toiminnallisuus vaatimuksia on eri suunnitteluratkaisujen vaikutus lopputulokseen paremmin ennakoitavissa. Eikä ohjelmoijan enää tarvitse ratkoa miten komponentti on parhainta rakentaa, näin säästetään paljon aikaa sovelluksen kehityksessä ja vähennetään mahdollisuutta ennalta odottamien ongelmien syntymiseen ohjelmaa kehitettäessä. 6 LÄHTEET [1]Immonen Mirja, Suunnittelumallit Kuopion yliopisto [2]Helsingin yliopisto, Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja ma_08-arkkitehtuurisuunnittelua.pdf [3]Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra 2004 Head First Design Patterns: O'Reilly Media 5.2 Suunnittelumallien vaikutus arkkitehtuurinsuunnitteluun Ohjelmointikontekstista katsottuna uusi arkkitehtuurisuunnittelu tekee ohjelmointiprosessista enemmän rajapintoja vastaan ohjelmointia ja on komponentteihin perustuvaa. Näin on toteutettu monia modernin ohjelmistokehityksen periaatteita, joita on esimerkiksi pyri löyhään sidontaan rajapintojen ja toteutusten välillä (periaate 3) sekä komponenttien sisäiset ratkaisut eivät näy rajapinnan ulkopuolelle (periaate 2). Lisäksi toiminnallisuutta voidaan tulevaisuudessa laajentaa tai muuttaa rajapintoja muokkaamalla. Ennemmin kuin muutettaisiin metodien toteutuksia (periaatteet 4, 5). Ohjelma on helpommin skaalattavissa ja sen komponentteja voidaan uudelleen käyttää muissa ohjelmissa, joissain tapauksissa eri ohjelmat voivat jopa jakaa saman komponentin. Ohjelmasta tulee paremmin tarkoitukseen sopiva, johdonmukaisempi, helpommin muiden ymmärrettävä. Lisäksi ohjelmistokehitysprojektissa sovelluksen kehitys voidaan jakaan komponentteihin, jonka kukin ohjelmoija voi tehdä itsenäisesti. Ohjelmoijan tarvitsee tietää vain komponenttien rajapinnat (periaate 8). Koostamalla (periaate 1) on voitu kapseloida se mikä eri luokissa muuttuu omiin luokkiinsa (periaate 6) näin on myös toteutettu modernin Java-ohjelmisto-kehityksen paradigma eli toiminnallisuuden määrittely (luokkien liittäminen toisiinsa) tapahtuu nyt ennemmin dynaamisesti ohjelman ajon aikana kuin staattisesti perimällä. Ohjelman sovellusarkkitehtuuri voidaan nyt myös jakaa toimintalogiikka- ja käyttöliittymäkerroksiin. Käyttöliittymäkerros ja toimintalogiikka kerrokset ovat yhteydessä keskenään Tarkkailija-suunnittelumallin rajapintojen kautta, näin sovellus täyttää periaatteen 7 ohjelmistokehitykseen liittyen. 5.3 Johtopäätökset Suunnittelumalleista oli paljon hyötyä ohjelman kehityksessä eri ohjelmistokehityksen eri vaiheissa ja arkkitehtuurin suunnittelussa.

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA: REFAKTOROINTI 2 (9) SEPA: REFAKTOROINTI 3 (9) VERSIOHISTORIA Version Date Author Description 0.1 2.12.2005 Erik Hakala Ensimmäinen

Lisätiedot

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

Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1 Oliot ja luokat Javaohjelmoinnissa Vesa Laakso 22.9.2012 Sisällysluettelo Sisällysluettelo... 1 Johdanto... 2 1. Luokka... 2 2. Olio... 2 3. Luokan

Lisätiedot

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät Tenttikysymykset 1. Selitä mitä asioita kuuluu tietojärjestelmän käsitteeseen. 2. Selitä kapseloinnin ja tiedon suojauksen periaatteet oliolähestymistavassa ja mitä hyötyä näistä periaatteista on. 3. Selitä

Lisätiedot

Ohjelmistotuotanto. Luento 9 23.4.2012

Ohjelmistotuotanto. Luento 9 23.4.2012 Ohjelmistotuotanto Luento 9 23.4.2012 Lisää suunnittelumalleja Olion rikastaminen dekoraattorilla Joskus eteen tulee tarve lisätä olioon jotain ekstraominaisuuksia, pitäen kuitenkin olio sellaisena että

Lisätiedot

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14 Arkkitehtuurikuvaus Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy Ryhmä 14 Muutoshistoria Versio Pvm Päivittäjä Muutos 0.4 1.11.2007 Matti Eerola 0.3 18.10.2007 Matti Eerola 0.2

Lisätiedot

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät Tenttikysymykset 1. Selitä mitä asioita kuuluu tietojärjestelmän käsitteeseen. 2. Selitä kapseloinnin ja tiedon suojauksen periaatteet oliolähestymistavassa ja mitä hyötyä näistä periaatteista on. 3. Selitä

Lisätiedot

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Tekninen määrittely: Editori Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Sisällysluettelo 1. Johdanto...4 1.1. Tarkoitus ja kattavuus...4 1.2. Tuote ja ympäristö...4 1.3. Määritelmät,

Lisätiedot

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1 3. Komponentit ja rajapinnat 3.1 Komponenttien idea: ohjelmistotuotannon rationalisointi 3.2 Mikä on ohjelmistokomponentti? 3.3 Komponentit ohjelmistoyksikköinä 3.4 Rajapinnat 3.6 Komponenttien räätälöinti

Lisätiedot

FiSMA 1.1 Toiminnallisen laajuuden mittausmenetelmä Ohje monikerrosarkkitehtuurin mittaamiseen

FiSMA 1.1 Toiminnallisen laajuuden mittausmenetelmä Ohje monikerrosarkkitehtuurin mittaamiseen FiSMA 1.1 Monikerrosarkkitehtuuri 1 (6) FiSMA 1.1 Toiminnallisen laajuuden mittausmenetelmä Ohje monikerrosarkkitehtuurin mittaamiseen 1. Yleiset periaatteet FiSMA 1.1 -menetelmässä mitataan sovellusperiaatteen

Lisätiedot

Kertaus: yleistys-erikoistus ja perintä

Kertaus: yleistys-erikoistus ja perintä Kertaus: yleistys-erikoistus ja perintä Nauta, Lehmä ja Kuttu ovat Kotieläimiä, Kotieläimet Eläimiä Kotieläimillä (siis myös Naudoilla, Lehmillä ja Kutuilla) on Omistaja Kuttu ja Lehmä toteuttavat rajapinnan

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Opintojakso TT00AA11 Ohjelmoinnin jatko (Java) Tavoite Opiskelija ymmärtää olio-ohjelmoinnin problematiikan. Opiskelija osaa määritellä ja käyttää itse

Lisätiedot

Java kahdessa tunnissa. Jyry Suvilehto

Java kahdessa tunnissa. Jyry Suvilehto Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,

Lisätiedot

UML -mallinnus TILAKAAVIO

UML -mallinnus TILAKAAVIO UML -mallinnus TILAKAAVIO SISÄLLYS 3. Tilakaavio 3.1 Tilakaavion alku- ja lopputilat 3.2 Tilan nimi, muuttujat ja toiminnot 3.3 Tilasiirtymä 3.4 Tilasiirtymän vai tilan toiminnot 3.5 Tilasiirtymän tapahtumat

Lisätiedot

Muutamia peruskäsitteitä

Muutamia peruskäsitteitä Muutamia peruskäsitteitä Huom. 1: nämä peruskäsitteet eivät muodosta hyvin määriteltyä keskenään yhteensopivien käsitteiden joukkoa, vaan käsitteet ovat osittain päällekkäisiä ja eri yhteyksissä niillä

Lisätiedot

FiSMA 1.1 Toiminnallisen laajuuden mittausmenetelmä Ohje monikerrosarkkitehtuurin mittaamiseen

FiSMA 1.1 Toiminnallisen laajuuden mittausmenetelmä Ohje monikerrosarkkitehtuurin mittaamiseen FiSMA 1.1 Monikerrosarkkitehtuuri 1 (7) FiSMA 1.1 Toiminnallisen laajuuden mittausmenetelmä Ohje monikerrosarkkitehtuurin mittaamiseen 1. Yleiset periaatteet FiSMA 1.1 -menetelmässä mitataan sovellusperiaatteen

Lisätiedot

TIE-20200 Ohjelmistojen suunnittelu. Luento 8..9: moniperintä

TIE-20200 Ohjelmistojen suunnittelu. Luento 8..9: moniperintä TIE-20200 Ohjelmistojen suunnittelu Luento 8..9: moniperintä 1 Ajankohtaista Harjoitustyön suunnittelusessiot pidetty, työt jatkuvat, välivaiheen esittely seuraavana Viimeinen viikkoharjoituskerta, palataan

Lisätiedot

Olio-ohjelmointi Johdanto olio-ohjelmointiin

Olio-ohjelmointi Johdanto olio-ohjelmointiin Olio-ohjelmointi Johdanto olio-ohjelmointiin Ohjelmistoa kehitettäessä voidaan tunnistaa ainakin kaksi abstraktiota: prosessiabstraktio ja dataabstraktio. Prosessiabstraktio huomattiin jo varhain, koska

Lisätiedot

Suunnittelumallit. OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Oliosuuntautunut analyysi ja -suunnittelu 27. joulukuuta 2003

Suunnittelumallit. OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Oliosuuntautunut analyysi ja -suunnittelu 27. joulukuuta 2003 Suunnittelumallit OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Oliosuuntautunut analyysi ja -suunnittelu 27. joulukuuta 2003 Mikael Kujanpää mahead@ee.oulu.fi LuTK / TOL -03 Tiivistelmä Suunnittelumallit

Lisätiedot

Ohjelmistotuotanto vs. muut insinööritieteet. (Usein näennäinen) luotettavuus ja edullisuus

Ohjelmistotuotanto vs. muut insinööritieteet. (Usein näennäinen) luotettavuus ja edullisuus Yhteenveto Ohjelmistotuotanto vs. muut insinööritieteet Monimutkaisuus Näkymättömyys (Usein näennäinen) luotettavuus ja edullisuus Muunnettavuus Epäjatkuvuus virhetilanteissa Skaalautumattomuus Copyright

Lisätiedot

1. Olio-ohjelmointi 1.1

1. Olio-ohjelmointi 1.1 1. Olio-ohjelmointi 1.1 Sisällys Olio-ohjelmointi on eräs ohjelmointiparadigma. Olio-ohjelmoinnin muotoja. Ohjelmiston analyysi ja suunnittelu. Olioparadigman etuja ja kritiikkiä. 1.2 Ohjelmointiparadigmoja

Lisätiedot

Juhani Gurney Teknologiajohtaja. Peppi-projekti ja ESP (Eduix SOA Platform)

Juhani Gurney Teknologiajohtaja. Peppi-projekti ja ESP (Eduix SOA Platform) Juhani Gurney Teknologiajohtaja Peppi-projekti ja ESP (Eduix SOA Platform) Peppi-projekti Projekti aloitettu keväällä 2010 Projektin tehtävänä on määritellä, suunnitella ja toteuttaa uusi koulutuksen suunnittelutyökalujen

Lisätiedot

Hirviö. Design Patterns

Hirviö. Design Patterns Hirviö SEPA-päiväkirja Design Patterns Anssi Kalliolahti Liia Sarjakoski 15. maaliskuuta 2005 1 Sisältö 1 Johdanto 3 2 Menetelmän käytäntöön soveltaminen 3 3 Kokemuksia ja muutoksia 3 3.1 PP..........................................

Lisätiedot

12. Kehysarkkitehtuurit

12. Kehysarkkitehtuurit 12. Kehysarkkitehtuurit Johdanto Kehystyypit Kehysten osittaminen Kehykset ja suunnittelumallit Kehysten etuja ja ongelmia Yhteenvetoa Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 1 Johdanto

Lisätiedot

Rajapinta (interface)

Rajapinta (interface) 1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä

Lisätiedot

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

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) 1(37) PERIYTYMINEN (inheritance) YLILUOKKA (superclass) ALILUOKKA (subclass) A) on käytännöllinen ohjelmointitekniikka = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) B) on käsitteiden

Lisätiedot

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

TIE-20200 Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely Lyhyt UML-opas UML -pikaesittely UML, Unified Modeling Language Standardoitu, yleiskäyttöinen mallinnuskieli, jota ylläpitää/hallitsee (Object Management Group) OMG Historiaa: 90-luvulla oli paljon kilpailevia

Lisätiedot

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen ohjelmointiin Jukka Talvitie Valvoja: Professori Jorma Jormakka Paikka: TietoEnator oyj Ongelma Ideologia Lifebelt

Lisätiedot

Uudelleenkäytön jako kahteen

Uudelleenkäytön jako kahteen Uudelleenkäyttö Yleistä On pyritty pääsemään vakiokomponenttien käyttöön Kuitenkin vakiokomponentit yleistyneet vain rajallisilla osa-alueilla (esim. windows-käyttöliittymä) On arvioitu, että 60-80% ohjelmistosta

Lisätiedot

Software product lines

Software product lines Thomas Gustafsson, Henrik Heikkilä Software product lines Metropolia Ammattikorkeakoulu Insinööri (AMK) Tietotekniikan koulutusohjelma Asiantuntijateksti 17.11.2013 Sisällys 1 Johdanto 1 2 Software product

Lisätiedot

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

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia. 4. Periytyminen 4.1. Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi

Lisätiedot

P e d a c o d e ohjelmointikoulutus verkossa

P e d a c o d e ohjelmointikoulutus verkossa P e d a c o d e ohjelmointikoulutus verkossa Java-kielen jatkokurssi Teoria ja ohjelmointitehtävät Java-kielen jatkokurssi 3 YLEISKATSAUS KURSSIN SISÄLTÖIHIN... 8 JAVA-KIELEN JATKOKURSSI... 8 OPISKELUN

Lisätiedot

Helia Ohjelmointitaito 14.3.2005 Tuomas Kaipainen Mermit Business Applications Oy. 2005 Mermit Business Applications

Helia Ohjelmointitaito 14.3.2005 Tuomas Kaipainen Mermit Business Applications Oy. 2005 Mermit Business Applications Helia Ohjelmointitaito 14.3.2005 Tuomas Kaipainen Mermit Business Applications Oy Esityksen sisältö Mermit yrityksenä Perustiedot Toimintamalli Mermit työpaikkana ohjelmistoinsinöörille Esimerkkiprojekti

Lisätiedot

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN SISÄLLYS 3. Luokkakaavio UML -mallinnuskielessä 3.1 Luokkakaavion luokan rakenteet 3.2 Luokan kuvauksesta C++ ohjelmakoodiksi 3.3 Luokkakaavion luokkien yhteystyypit

Lisätiedot

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti Teknillinen korkeakoulu 51 Vaatimusmäärittely Ohjelma-ajanvälitys komponentti Versio Päiväys Tekijä Kuvaus 0.1 21.11.01 Oskari Pirttikoski Ensimmäinen versio 0.2 27.11.01 Oskari Pirttikoski Lisätty termit

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja

Lisätiedot

Ylläpitodokumentti. Boa Open Access. Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ylläpitodokumentti. Boa Open Access. Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Ylläpitodokumentti Boa Open Access Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari

Lisätiedot

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

Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä DO NOT PRINT THIS DOCUMENT DO NOT PRINT THIS DOCUMENT Olioiden väliset yhteydet Yhteyden nimi Nimen lukusuunta pankkitili 0..10 Omistaja-> 1..3 asiakas

Lisätiedot

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.

Lisätiedot

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko JavaRMI 1 JAVA RMI Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko JavaRMI 2 Table of Contents...1 JAVA RMI...1 Yleistä...4 Arkkitehtuuri...5 Java RMI kerrosarkkitehtuuri...5

Lisätiedot

Järjestelmäarkkitehtuuri (TK081702) Avoimet web-rajapinnat

Järjestelmäarkkitehtuuri (TK081702) Avoimet web-rajapinnat Järjestelmäarkkitehtuuri (TK081702) SOA yleistyvät verkkopalveluissa Youtube Google... Avaavat pääsyn verkkopalvelun sisältöön. Rajapintojen tarjoamia tietolähteitä yhdistelemällä luodaan uusia palveluja,

Lisätiedot

http://www.enteract.com/~bradapp/docs/patterns-intro.html http://www.hillside.net/patterns/

http://www.enteract.com/~bradapp/docs/patterns-intro.html http://www.hillside.net/patterns/ 5. Suunnittelumallit Suunnittelumallin käsite Suunnittelumallien hyötyjä Suunnittelumallien kuvaaminen Esimerkki: Rekursiokooste Antisuunnittelumallit Suunnittelumallit ja UML Mallikielet Suunnittelumallit

Lisätiedot

UML Luokkakaavio 14:41

UML Luokkakaavio 14:41 UML Luokkakaavio UML Olio-ohjelman luokkien pääpiirteet voidaan kätevähkösti esittää ns. UML-luokkakaaviona. Näin usein tehdäänkin esim. suunniteltaessa, millaisia luokkia ohjelmaan on tarkoitus laatia,

Lisätiedot

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin Olio-ohjelmointi: Luokkien toteuttaminen Jukka Juslin Luokkien kirjoittaminen Tähän mennessä on käytetty valmiiksi määritettyjä luokkia. Nyt opimme kirjoittamaan omia luokkia olioiden kuvaamiseksi Seuraavaksi

Lisätiedot

Ohjelmistotuotanto. Luento 8 18.4.2012

Ohjelmistotuotanto. Luento 8 18.4.2012 Ohjelmistotuotanto Luento 8 18.4.2012 Arkkitehtuuri ketterissä menetelmissä Arkkitehtuuri ketterissä menetelmissä Ketterien menetelmien kantava teema on toimivan, asiakkaalle arvoa tuottavan ohjelmiston

Lisätiedot

ohjelman arkkitehtuurista.

ohjelman arkkitehtuurista. 1 Legacy-järjestelmällä tarkoitetaan (mahdollisesti) vanhaa, olemassa olevaa ja käyttökelpoista ohjelmistoa, joka on toteutettu käyttäen vanhoja menetelmiä ja/tai ohjelmointikieliä, joiden tuntemus yrityksessä

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

19/20: Ikkuna olio-ohjelmoinnin maailmaan

19/20: Ikkuna olio-ohjelmoinnin maailmaan Ohjelmointi 1 / syksy 2007 19/20: Ikkuna olio-ohjelmoinnin maailmaan Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007

Lisätiedot

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä Javan Swing-tekniikan perusteet: Muistutus: Tarvitset seuraavia komponentteja harjoituksissa: otsikkoteksti (label) muokkausruutu (text field) komentopainike (button) yhdistelmäruutu (combo box) paneeli

Lisätiedot

Ohjelmistoarkkitehtuurit. Syksy 2008

Ohjelmistoarkkitehtuurit. Syksy 2008 Ohjelmistoarkkitehtuurit Syksy 2008 Kai Koskimies 1 Tervetuloa Kuopion yliopisto, Oulun yliopisto, Tampereen yliopisto, Teknillinen korkeakoulu, Turun yliopisto, Vaasan yliopisto, Tampereen teknillinen

Lisätiedot

Harjoitustehtävät ja ratkaisut viikolle 48

Harjoitustehtävät ja ratkaisut viikolle 48 Harjoitustehtävät ja ratkaisut viikolle 48 1. Tehtävä on jatkoa aiemmalle tehtävälle viikolta 42, missä piti suunnitella älykodin arkkitehtuuri käyttäen vain ennalta annettua joukkoa ratkaisuja. Tämäkin

Lisätiedot

Tietojärjestelmien integroiminen hyödyntämällä palvelupohjaista arkkitehtuuria. CASE: Metropolia. Jaakko Rannila & Tuomas Orama 1

Tietojärjestelmien integroiminen hyödyntämällä palvelupohjaista arkkitehtuuria. CASE: Metropolia. Jaakko Rannila & Tuomas Orama 1 Tietojärjestelmien integroiminen hyödyntämällä palvelupohjaista arkkitehtuuria CASE: Metropolia 31.10.2012 Jaakko Rannila & Tuomas Orama 1 Aiheet Tietojärjestelmien integrointi Integrointiin liittyvät

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

TIE-20200 Ohjelmistojen suunnittelu

TIE-20200 Ohjelmistojen suunnittelu TIE-20200 Ohjelmistojen suunnittelu Luento 6: suunnittelua Samuel Lahtinen TIE-20200 Samuel Lahtinen 1 Ajankohtaista Harjoitustyö Protosessioita tällä viikolla Ohjelmassa tänään Ohjelmistojen suunnittelujuttuja

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

Viestinvälitysarkkitehtuurit

Viestinvälitysarkkitehtuurit Viestinvälitysarkkitehtuurit Lähtökohta: Järjestelmä koostuu keskenään kommunikoivista komponenteista, mahdollisesti hajautettuja Komponenttien palveluja ei tiedetä tarkasti etukäteen Komponentteja ja

Lisätiedot

TIE-20200 Ohjelmistojen suunnittelu

TIE-20200 Ohjelmistojen suunnittelu TIE-20200 Ohjelmistojen suunnittelu Luento 7: SOLID ja olioiden rakentelumalleja TIE-20200 Samuel Lahtinen 1 Ajankohtaista Harjoitustyössä suunnittelusessioiden ajanvaraus auki Viikkoharjoituksissa tehtaaseen/rakennuttajiin

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

KERROSARKKITEHTUURIN SUUNNITTELUMALLIT. Kuisma Lehtonen. 15.8.2006 Joensuun yliopisto Tietojenkäsittelytiede Pro gradu -tutkielma

KERROSARKKITEHTUURIN SUUNNITTELUMALLIT. Kuisma Lehtonen. 15.8.2006 Joensuun yliopisto Tietojenkäsittelytiede Pro gradu -tutkielma KERROSARKKITEHTUURIN SUUNNITTELUMALLIT Kuisma Lehtonen 15.8.2006 Joensuun yliopisto Tietojenkäsittelytiede Pro gradu -tutkielma TIIVISTELMÄ Suunnittelumallit ovat yleisiä ratkaisuja tiettyihin oliopohjaisiin

Lisätiedot

PILETTI. Tekninen vaatimusmäärittely. v. 0.2

PILETTI. Tekninen vaatimusmäärittely. v. 0.2 PILETTI Tekninen vaatimusmäärittely v. 0.2 2 Sisällysluettelo 1. Yleiskuvaus... 3 2. Taustajärjestelmä... 4 3. Palvelupisteiden sovellus... 4 4. Korttisovellus ja turvaratkaisu... 4 5. Rajapinnat... 5

Lisätiedot

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena Ohjelmointikielet ja -paradigmat 5op Markus Norrena Ko#tehtävä 4 Viimeistele "alkeellinen kuvagalleria". Käytännössä kaksi sivua Yksi jolla voi ladata kuvia palvelimelle (file upload) Toinen jolla ladattuja

Lisätiedot

Luku 8 Rakennusvaihe. Detailed Design. Programming. Moduulisuunnittelu. Ohjelmointi

Luku 8 Rakennusvaihe. Detailed Design. Programming. Moduulisuunnittelu. Ohjelmointi Luku 8 Rakennusvaihe Moduulisuunnittelu Detailed Design Programming Ohjelmointi Teknisen Complete suunnittelun Technical viimeistely Design Suunnittelukatselmuksen Design Perform suorittaminen Review Yhteisen

Lisätiedot

Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö

Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö Matopeli C#:lla Aram Abdulla Hassan Ammattiopisto Tavastia Opinnäytetyö Syksy 2014 1 Sisällysluettelo 1. Johdanto... 3 2. Projektin aihe: Matopeli C#:lla... 3 3. Projektissa käytetyt menetelmät ja työkalut

Lisätiedot

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter Olio-ohjelmointi Suunnittelumallit Adapter ja Composite Rakennemalleissa päähuomio kohdistetaan siihen, miten luokkia ja olioita yhdistellään muodostamaan laajempia rakenteita. Rakenteelliset luokkamallit

Lisätiedot

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

Johdanto. Olio (Object) Luokka (Class) Olion kuvaaminen Johdanto Olio (Object) Luokat (ja oliot) mallintava järjestelmän rakennetta määrittely järjestelmän kannalta Luokat ja niiden väliset suhteet muuntuvat suoraan lähdekoodiksi! Luokkakaaviolla kuvataan ohjelmiston

Lisätiedot

JUULIA - Varhaiskasvatuksen tilastointijärjestelmä. Vertikal Oy Luvaton käyttö kielletty

JUULIA - Varhaiskasvatuksen tilastointijärjestelmä. Vertikal Oy Luvaton käyttö kielletty Nykyisin käytössä olevat järjestelmät Eivät tuota tietoja, joita johtamiseen tarvitaan Vaativat erillisen ja kalliin raportointiosion Eivät kaikilta osin käytä kertoimia, joiden varaan täyttö- ja käyttöastelaskenta

Lisätiedot

CTRL+F Android-sovellus

CTRL+F Android-sovellus CTRL+F Android-sovellus Vili-Robert Hietala Opinnäytteen raportointi Sähköosasto Toukokuu 2015 KUVAILULEHTI 14.04.2015 Tekijä(t) Vili-Robert Hietala Työn laji Opinnäytteen raportointi Sivumäärä 7 Luottamuksellisuus

Lisätiedot

TIE-20200 Ohjelmistojen suunnittelu

TIE-20200 Ohjelmistojen suunnittelu TIE-20200 Ohjelmistojen suunnittelu Luento 1: Virtuaalifunktiot, Template method 1 Yleistä asiaa Muistakaa harkkatyöilmoittautuminen 23 ryhmää (mm. lihansyöjäkirahvi), vajaita ryhmiäkin on 44 henkeä vielä

Lisätiedot

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko Ohjelmistokehykset Määritelmä & tavoitteet, taustaa & peruskäsitteitä, kehykset vs. suunnittelumallit, erikoistamisrajapinnat & kontrollinkulku, kehystyypit, kehysten rakenne ja evoluutio, esimerkki: JHotDraw,

Lisätiedot

17/20: Keittokirja IV

17/20: Keittokirja IV Ohjelmointi 1 / syksy 2007 17/20: Keittokirja IV Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/10 Tavoitteita

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

Viestinvälitysarkkitehtuurit Lähtökohta:

Viestinvälitysarkkitehtuurit Lähtökohta: Ohjelmistoarkkitehtuurit Kevät 2012-2013 Johannes Koskinen http://www.cs.tut.fi/~ohar/ 1 Viestinvälitysarkkitehtuurit Lähtökohta: Järjestelmä koostuu keskenään kommunikoivista komponenteista, mahdollisesti

Lisätiedot

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined Ohjelmointitekniikka Tyyppiturvallisuuden tavoittelua Javascriptissa muuttujat ovat tyypittömiä, mutta arvoilla on tyyppi. Muuttuja esitellään var -avainsanalla ja muuttujan tyypin arvoa ei erikseen määritellä.

Lisätiedot

Joskus yleistäminen voi tapahtua monen ominaisuuden pohjalta. Myös tällöin voi tulla moniperintätilanteita.

Joskus yleistäminen voi tapahtua monen ominaisuuden pohjalta. Myös tällöin voi tulla moniperintätilanteita. Moniperintä 2 Joskus yleistäminen voi tapahtua monen ominaisuuden pohjalta. Myös tällöin voi tulla moniperintätilanteita. Oliomallinnus TITE.2040 Hannu K. Niinimäki 1 Delegointi 1 Moniperinnän toteuttaminen

Lisätiedot

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int

Lisätiedot

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Olioiden toteuttaminen Riku Saikkonen 28. 11. 2011 Sisältö 1 Miten oliot ja metodikutsut toimivat? 2 Oliot Minkä luokan metodia kutsutaan? Python-esimerkki

Lisätiedot

Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei. Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi lötköjen kansoittamaa alkulimaa simuloiva olioperustainen ohjelma Java-kielellä. Lötköt säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

HSMT J2EE & EJB & SOAP &...

HSMT J2EE & EJB & SOAP &... HSMT J2EE & EJB & SOAP &... Ville Leppänen HSMT, c Ville Leppänen, IT, Turun yliopisto, 2011 p.1/15 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista

Lisätiedot

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena Ohjelmointikielet ja -paradigmat 5op Markus Norrena Kotitehtävistä: Pankkitilit kotitehtävä 7 Toteuttakaa kotitehtävä 1:n kuvan mukaiset metodit open(), close(), deposit(), withdraw(), joilla voi Nostaa

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

OHJELMISTOKEHITYS -suuntautumisvaihtoehto

OHJELMISTOKEHITYS -suuntautumisvaihtoehto OHJELMISTOKEHITYS -suuntautumisvaihtoehto Suuntautumisvaihtoehdon esittely 1. vuoden opiskelijoille Kari Laitinen www.oamk.fi/~karil/opetus.html Ohjelmistokehitys -opintosuunnan valitsevista henkilöistä

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

Copyright by Haikala. Ohjelmistotuotannon osa-alueet Copyright by Haikala Ohjelmistotuotannon osa-alueet Ohjelmiston elinkaari 1. Esitutkimus, tarvekartoitus, kokonaissuunnittelu, järjestelmäsuunnittelu (feasibility study, requirement study, preliminary

Lisätiedot

STEP 1 Tilaa ajattelulle

STEP 1 Tilaa ajattelulle Työkalu, jonka avulla opettaja voi suunnitella ja toteuttaa systemaattista ajattelutaitojen opettamista STEP 1 Tilaa ajattelulle Susan Granlund Euran Kirkonkylän koulu ja Kirsi Urmson Rauman normaalikoulu

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

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

T-76.611 Ohjelmistojen määrittely- ja suunnittelumenetelmät Harjoitustyöraportti TNT - Tarkistetaan Ne Tentit Arkkitehtuuri- ja suunnittelumalli T-76.611 Ohjelmistojen määrittely- ja suunnittelumenetelmät Harjoitustyöraportti TNT - Tarkistetaan Ne Tentit Arkkitehtuuri- ja suunnittelumalli Lasse Lindqvist Lasse Lopperi llindqvi@cc.hut.fi lmlopper@cc.hut.fi

Lisätiedot

Ohjelmointi II. Erkki Pesonen Luennot ja harjoitukset. Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015

Ohjelmointi II. Erkki Pesonen Luennot ja harjoitukset. Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015 Ohjelmointi II Erkki Pesonen Luennot ja harjoitukset Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015 1 Johdantoa kurssilla opiskeluun: oppimistavoitteet. 1. Tiedän mitä asioita kurssilla opiskellaan

Lisätiedot

2. Olio-ohjelmoinista lyhyesti 2.1

2. Olio-ohjelmoinista lyhyesti 2.1 2. Olio-ohjelmoinista lyhyesti 2.1 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen. 2.2 Yleistä Olio-ohjelmointia käsitellään hyvin

Lisätiedot

Testaaminen ohjelmiston kehitysprosessin aikana

Testaaminen ohjelmiston kehitysprosessin aikana Testaaminen ohjelmiston kehitysprosessin aikana 04.02.2004 http://cs.joensuu.fi/tsoft/ Sisällys 1. Johdanto 2. Yksikkö- ja integrointitestaus 3. Järjestelmätestaus 4. Hyväksymistestaus http://cs.joensuu.fi/tsoft/

Lisätiedot

3. Käsiteanalyysi ja käsitekaavio

3. Käsiteanalyysi ja käsitekaavio 3. Käsiteanalyysi ja käsitekaavio lehtori Pasi Ranne Metropolia ammattikorkeakoulu E-mail: pasi.ranne@metropolia.fi sivu 1 Käsiteanalyysi Selvitetään mitä tietokantaan pitää tallentaa Lähtökohtana käyttäjien

Lisätiedot

Perusarkkitehtuurin ja vuorovaikutuksen mallintamisen perusteita.

Perusarkkitehtuurin ja vuorovaikutuksen mallintamisen perusteita. Perusarkkitehtuurin ja vuorovaikutuksen mallintamisen perusteita. Arkkitehtuuriin vaikuttavat ympäristötekijät Jo kehittämisen alkuvaiheessa on tarpeellista hahmotella arkkitehtuurin perusratkaisu. Lähtökohdat

Lisätiedot

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen

Lisätiedot

Graafinen käyttöliittymä, osa 1

Graafinen käyttöliittymä, osa 1 Graafinen käyttöliittymä, osa 1 Idea, MVC-malli ja ensimmäinen ohjelma Graafinen käyttöliittymä Ensimmäisen kerran tavoitteena on oppia graafisen ohjelman perusidea sekä oppia laatimaan esimerkin mukaan

Lisätiedot

Kansallinen digitaalinen kirjasto Käyttöliittymä Finna. 12.12.2012 Aki Lassila / Kehittämispäällikkö / Kirjastoverkkopalvelut

Kansallinen digitaalinen kirjasto Käyttöliittymä Finna. 12.12.2012 Aki Lassila / Kehittämispäällikkö / Kirjastoverkkopalvelut Kansallinen digitaalinen kirjasto Käyttöliittymä Finna 12.12.2012 Aki Lassila / Kehittämispäällikkö / Kirjastoverkkopalvelut Finna tehostaa ja mahdollistaa Finnan kehittämisen myötä KDK:sta tulee: Tiedon

Lisätiedot

Integrointi. Ohjelmistotekniikka kevät 2003

Integrointi. Ohjelmistotekniikka kevät 2003 Integrointi Ohjelmistotekniikka kevät 2003 ERP (Toiminnanohjausjärjestelmä) Myynti Henkilöstö, palkanlaskenta Kirjanpito Myynti Myyjät Extranet Tietovarasto Laskutus, reskontrat Asiakas ERP Asiakasrekisteri

Lisätiedot

Ohjelmointitekniikka lyhyesti Survival Kit 1 Evtek KA ELINKAARIMALLEISTA

Ohjelmointitekniikka lyhyesti Survival Kit 1 Evtek KA ELINKAARIMALLEISTA Ohjelmointitekniikka lyhyesti Survival Kit. Vesiputousmalli ELINKAARIMALLEISTA. Ohjelmiston elinkaari Ohjelmiston elinkaarella (life cycle) tarkoitetaan aikaa, joka kuluu ohjelmiston kehittämisen aloittamisesta

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot