Ohjelmointikielet ja -paradigmat - kalvot 2014Jouni Smed
Kurssilla tarkastellaan ohjelmointikieliä ja paradigmoja teoreettiselta, tekniseltä ja historialliselta kannalta. Aihetta konkretisoidaan tutustumalla eri ohjelmointiparadigmoja edustaviin ohjelmointikieliin. Kurssi luo kokonaiskuvan ohjelmointikielten kehitykseen, minkä jälkeen tarkastellaan lähemmin eri ohjelmointiparadigmoja. Imperatiivisen ohjelmoinnin osalta luodaan kokonaiskuva ohjelmarakenteisiin ja olio-ohjelmoinnin osalta syvennetään ymmärrystä periytymismekanismin ja geneerisyyden toiminnasta. Deklaratiivinen ohjelmoinnin osalta keskitytään erityisesti funktionaaliseen ohjelmointiin ja sen teoreettiseen taustaan (mm. lambda-kalkyyliin) sekä logiikkaohjelmointiin.
"Open source in the Finnish Ministry of Justice". Presentation in the Open Source and licensing seminar organized by the IPR University Center on 9 November 2011 in Helsinki. Presentation is in Finnish.
Ohjelmointikielet ja -paradigmat - kalvot 2014Jouni Smed
Kurssilla tarkastellaan ohjelmointikieliä ja paradigmoja teoreettiselta, tekniseltä ja historialliselta kannalta. Aihetta konkretisoidaan tutustumalla eri ohjelmointiparadigmoja edustaviin ohjelmointikieliin. Kurssi luo kokonaiskuvan ohjelmointikielten kehitykseen, minkä jälkeen tarkastellaan lähemmin eri ohjelmointiparadigmoja. Imperatiivisen ohjelmoinnin osalta luodaan kokonaiskuva ohjelmarakenteisiin ja olio-ohjelmoinnin osalta syvennetään ymmärrystä periytymismekanismin ja geneerisyyden toiminnasta. Deklaratiivinen ohjelmoinnin osalta keskitytään erityisesti funktionaaliseen ohjelmointiin ja sen teoreettiseen taustaan (mm. lambda-kalkyyliin) sekä logiikkaohjelmointiin.
"Open source in the Finnish Ministry of Justice". Presentation in the Open Source and licensing seminar organized by the IPR University Center on 9 November 2011 in Helsinki. Presentation is in Finnish.
Johdanto integrointiin, webcast 2. Talvivaara/PKAMK. Kevät 2009.
(Kiinnostaako koulutuksemme tai materiaalimme käyttäminen omassa opetuksessa? Älä epäröi tai älä käytä kysymättä, vaan ota rohkeasti yhteyttä - jarmo.talvivaara@pkamk.fi)
Johdatus ohjelmoinnin ajattelutapaan. Java-kielen perusajatukset. Kalvoja Java-tietorakenteista ja käyttöliittymän rakentamisesta Swingin ja AWT:n avulla.
BD2226 Tietojärjestelmien integrointi - Johdanto EAI:hin.
(Kiinnostaako koulutuksemme tai materiaalimme käyttäminen omassa opetuksessa? Älä epäröi tai älä käytä kysymättä, vaan ota rohkeasti yhteyttä - jarmo.talvivaara@pkamk.fi)
Tässä presentaatiossa esitellään Windows 7 ominaisuuksia. Esityksessä käydään läpi mm. hakupalvelut, kirjastot (libraries), monikosketustuki, sovellusyhteensopivuus, työkalut, taustaprosessit ja paljon muuta
Here is 4-ALL you need a list of things to develop and improve in your project managers work. Try to set a clear Product, Concept or Functional Algorithm goal = A truely NEW finding or Achievementor Product ! (not evo-version of something existing).
Kuinka DevOps näkyy Ambientian asiantuntijan arjessa? Entä mitä sovelluksen elinkaaren hallinta Ambientialla tarkoittaa? Estraadille astuvat kokeneet asiantuntijat - ALM expert Mika Nokka ja Platform Architect Tero Järvenpää.
Sovellusvirtualisointi - Mitä missä milloin 2015Teemu Tiainen
Materiaali on Centeron Aku Suonpään webinaarista 17.12.2015.
• Millainen on virtuaalinen sovellus ja mitä se yrittää olla?
o Kuinka virtuaalisovellus toimii?
o Vaikutukset käyttäjäkokemukseen
o Milloin kannattaa ja milloin ei?
• Virtuaalisovellusten jakelu
o Erot perinteisellä tavalla asennettujen sovellusten jakeluun nähden
• Sovellusten virtualisointi
o Erot MSI paketointiin
o Milloin helppoa ja milloin vaikeaa?
Yhteentoimivuutta avoimesti Oulu -seminaari 13.2.2012
License: CC BY-SA 3.0 http://creativecommons.org/licenses/by-sa/3.0/ (except material from other sources)
Nebula pilvi 9 kehittäjille - tukemassa ketterää kehitystäNebula Oy
Useiden ympäristöjen hallinta, release määrän kasvattaminen, laadun parantaminen ja infran automatisointi ovat asioita, joiden kanssa tämän päivän ohjelmistokehittäjät työskentelevät päivittäin. Näiden lisäksi myös liiketoiminta asettaa omat haasteensa ja tavoitteensa. Nebula Pilvi 9 vastaa näihin tarpeisiin helpottaen ohjelmistokehityksen toimintaa mm. DevOps työkaluilla ja on-demand laskutuksella. Lue lisää: nebulacloud.fi
Johdanto integrointiin, webcast 2. Talvivaara/PKAMK. Kevät 2009.
(Kiinnostaako koulutuksemme tai materiaalimme käyttäminen omassa opetuksessa? Älä epäröi tai älä käytä kysymättä, vaan ota rohkeasti yhteyttä - jarmo.talvivaara@pkamk.fi)
Johdatus ohjelmoinnin ajattelutapaan. Java-kielen perusajatukset. Kalvoja Java-tietorakenteista ja käyttöliittymän rakentamisesta Swingin ja AWT:n avulla.
BD2226 Tietojärjestelmien integrointi - Johdanto EAI:hin.
(Kiinnostaako koulutuksemme tai materiaalimme käyttäminen omassa opetuksessa? Älä epäröi tai älä käytä kysymättä, vaan ota rohkeasti yhteyttä - jarmo.talvivaara@pkamk.fi)
Tässä presentaatiossa esitellään Windows 7 ominaisuuksia. Esityksessä käydään läpi mm. hakupalvelut, kirjastot (libraries), monikosketustuki, sovellusyhteensopivuus, työkalut, taustaprosessit ja paljon muuta
Here is 4-ALL you need a list of things to develop and improve in your project managers work. Try to set a clear Product, Concept or Functional Algorithm goal = A truely NEW finding or Achievementor Product ! (not evo-version of something existing).
Kuinka DevOps näkyy Ambientian asiantuntijan arjessa? Entä mitä sovelluksen elinkaaren hallinta Ambientialla tarkoittaa? Estraadille astuvat kokeneet asiantuntijat - ALM expert Mika Nokka ja Platform Architect Tero Järvenpää.
Sovellusvirtualisointi - Mitä missä milloin 2015Teemu Tiainen
Materiaali on Centeron Aku Suonpään webinaarista 17.12.2015.
• Millainen on virtuaalinen sovellus ja mitä se yrittää olla?
o Kuinka virtuaalisovellus toimii?
o Vaikutukset käyttäjäkokemukseen
o Milloin kannattaa ja milloin ei?
• Virtuaalisovellusten jakelu
o Erot perinteisellä tavalla asennettujen sovellusten jakeluun nähden
• Sovellusten virtualisointi
o Erot MSI paketointiin
o Milloin helppoa ja milloin vaikeaa?
Yhteentoimivuutta avoimesti Oulu -seminaari 13.2.2012
License: CC BY-SA 3.0 http://creativecommons.org/licenses/by-sa/3.0/ (except material from other sources)
Nebula pilvi 9 kehittäjille - tukemassa ketterää kehitystäNebula Oy
Useiden ympäristöjen hallinta, release määrän kasvattaminen, laadun parantaminen ja infran automatisointi ovat asioita, joiden kanssa tämän päivän ohjelmistokehittäjät työskentelevät päivittäin. Näiden lisäksi myös liiketoiminta asettaa omat haasteensa ja tavoitteensa. Nebula Pilvi 9 vastaa näihin tarpeisiin helpottaen ohjelmistokehityksen toimintaa mm. DevOps työkaluilla ja on-demand laskutuksella. Lue lisää: nebulacloud.fi
2. Mitä on oliokeskeisyys?
Oliolähestymistavan tavoitteena on sovelluskehitystyön
tuottavuuden ja laadun kohottaminen
Oliolähestymistapa (eli oliokeskeisyys) tarkoittaa kehittämis- ja
ohjelmointiparadigmaa, jonka mukaan todellisuus nähdään
joukkona toisiinsa vuorovaikutuksessa olevia olioita
(Koskimies, 1995)
3. Ohjelmointiparadigmat
Paradigma = esikuva, malli, kaava
Ohjelmointiparadigma on tapa kuvata erilaisten järjestelmien
rakennetta ja toimintaa
6. Perinteinen osittava ohjelmistokehitys (jatkoa)
Osittava (top-down) suunnittelu toimintasuuntautunutta
Toiminnallisuus kuvataan tarkentuvilla abstraktiotasoilla
Tietorakenteet määritellään kun niiden rooli tulee esille
Ohjelmisto riippuvainen ylempien tasojen ratkaisuista
Tietorakenteet irrallisia toimintojen kohteita
Sopii hyvin pienehköjen ohjelmien toteutukseen
7. Perinteinen osittava ohjelmistokehitys (jatkoa)
Ongelmia
Pieni muutos ylätasolla aiheuttaa suuria muutoksia koko
ohjelmaan (esim. käyttöliittymä)
Heikko uudelleenkäytettävyys
Ylläpito hankalaa
8. Olioperustainen ohjelmistokehitys
Sovellus 1
Sovelluksen
käsitemaailma
Sovellus 2
Sovellukseen liittyviä käsitteitä Luokkia ja niiden
ja niiden välisiä suhteita välisiä suhteita
9. Syitä oliopohjaiseen ajatteluun
70-luvulla ”Ohjelmistokriisi”
Ylläpidon ja muutosten hallinnan ongelmat
Koodin elinikä ja uudelleenkäyttö
10. Syitä oliopohjaiseen ajatteluun (jatkoa)
Ohjelmiston kokonaiskustannukset:
30-50% rakentaminen, 50-70% ylläpito
Ylläpitokustannukset
42% käyttäjien uusia vaatimuksia
17% tietoesitysten muutoksia
12% hätäkorjauksia
Rutiinikorjauksia
9% rutiinikorjauksia
Hätäkorjauksia
Käyttäjien uusia
vaatimuksia
Tietoesitysten
muutoksia
11. Syitä oliopohjaiseen ajatteluun (jatkoa)
Uudet vaatimukset johtavat ohjelmiston rakenteen
muuttamiseen
Yleisrakenne riippumattomaksi
Toiminnallisista muutoksista
Tietoesitysten muutoksista
Pieni vaatimusmuutos <-> pieni koodimuutos
12. Syitä oliopohjaiseen ajatteluun (jatkoa)
Ohjelmiston rakentamiskustannukset
Ohjelmistot suuria, monimutkaisia ja vaativia
Ohjelmistokomponenttien uudelleen käytettävyys
Alentaa kustannuksia
15% uusista ohjelmistoista uutta koodia, 85% muokattu vanhasta
Uudelleenkäytön tuki
13. Syitä oliopohjaiseen ajatteluun (jatkoa)
Vastaa hyvin reaalimaailman konkreettisia ja abstrakteja asioita
Olioperustainen ohjelma simuloi tapahtumia
Suora liitäntä todellisuuteen
Ominaisuudet
Käyttäytyminen
Palvelut
14. Syitä oliopohjaiseen ajatteluun (jatkoa)
Toiminnan muutos EI aiheuta syvällisiä muutoksia ohjelmaan
Muutoskohdat helppo löytää
Ohjelmiston rakentaminen systemaattinen hallittava prosessi
Koodin uudelleenkäyttö helpompaa
15. Syitä oliopohjaiseen ajatteluun (jatkoa)
Kuitenkin muistettava että:
Uudelleenkäytettävyys huomioitava suunnittelussa
Olioperustainen ohjelmistokehitys voi viedä enemmän aikaa
16. Syitä oliopohjaiseen ajatteluun (jatkoa)
Sopii kaikkiin sovelluksiin
Ei tehokkuushäviöitä
Ohjelmointikulttuuri (kielet, ohjelmointiympäristöt, kirjastot,
analysointi- ja suunnittelumenetelmät, suunnittelumallit,
sovelluskehykset, CASE-välineet...)
17. Olioparadigman historiaa
V. 1966: Simula (Dahl, Nygaard) (object-oriented programming)
V. 1972: Smalltalk (Kay, Xerox), termi ’object-oriented’ tuli
yleisemmin käyttöön
V.1972: Boochin menetelmä: object-oriented design
1980-luvun puolivälistä alkaen uusia olio-ohjelmointikieliä: C++,
Eiffel, Oberon-2
1980-luvun puolivälistä alkaen ensimmäisiä kaupallisia
oliotietokantoja
Käynnistettiin useita konferenssisarjoja: (OOPSLA, ECOOP,
TOOLS)
18. Olioparadigman historiaa (jatkoa)
1980-luvun lopussa menetelmiä, jotka kattavat myös
määrittelyn: OOA, OOSE
1990-luvulla: object-oriented domain analysis, olio-
ohjelmistojen testaus, oliopohjaiset CASE-välineet
19. Olioperustaisuus tänään
Suunnittelumenetelmät käytössä (esim. OMT, OMT++, Octopus)
Ohjelmistokehitysprosessit käytössä (RUP ym.)
CASE-välineet käytössä (Rational Rose, Select ym.)
Oliokielet käytössä (Java, C++, Smalltalk ym.)
Ohjelmointiympäristöt markkinoilla (MS Visual C++, Symantec
Visual Café ym.)
20. Olioperustaisuus tänään (jatkoa)
Yleisesti: oliolähestymistapa on levinnyt mm. ohjelmointiin,
tietojärjestelmien suunnitteluun, tietojärjestelmien analyysiin,
liiketoimintojen analyysiin, strategiseen suunnitteluun
21. Olioperustaisuus tänään (jatkoa)
Oliotaitoja tarvitaan useissa tehtävissä (ohjelmointi, testaus,
tietokannat, ohjelmistoarkkitehtuurit, käyttöliittymät,
määrittely…)
Eri kehitysympäristöissä (Windows, sulautettu, web…)
Eri toimialoilla (e-business, tietoliikenne, langattomat
päätelaitteet…)
22. Olioajattelu
Ohjelmiston rakentamisesta tulee systemaattinen, hallittavissa
oleva prosessi, jossa sovelluksen käsiteanalyysistä johdetaan
vähitellen ajettavissa oleva koodi
24. Abstrahointi
Periaate, jonka mukaan nostetaan esille ongelman kannalta
relevantit piirteet ja jätetään huomiotta epärelevantit
Tehdään tarkastelukohteen yksinkertaistamiseksi tiettyä
tarkoitusta varten
Saadaan muodostetuksi yleiskäsitteitä
Mallinnetaan todellisuutta
25. Olio
Rajattavissa ja yksilöitävissä oleva asia tai käsite, joka on
merkityksellinen käsillä olevan tarkastelun kannalta
Ympäristöstä erottuva kokonaisuus, jolla oma identiteetti,
sisäinen rakenne ja suhteet tiettyyn ympäristöön
Teknisessä mielessä ohjelman strukturoinnin perusyksikkö,
joka ei ole puhtaasti toiminnallinen (esim. aliohjelma) tai
puhtaasti tietoa sisältävä (esim. tietue), vaan sisältää molempia
ominaisuuksia
26. Olio (jatkoa)
Sisältää
Tietoja
Toimintoja
Tällaista tiedon ja siihen liittyvien toimintojen pakkaamista
yhdeksi kokonaisuudeksi kutsutaan ohjelmistotekniikassa
usein kapseloinniksi
28. Olio (jatkoa)
Pystyy suorittamaan tietyt tälle oliolle ominaiset toiminnot eli
operaatiot
Pystyy tallettamaan tietoa olion attribuutteihin
Oliolla on sen yksilöivä viite
Suojattu kokonaisuus, jonka käyttö on rajattu tiettyihin
muotoihin
30. Attribuutti
Olion pystyy tallettamaan tietoa olion attribuutteihin
Attribuutti kuvaa luokkaan kuuluvien olioiden ominaisuutta
(esim. nimi, ikä, paino)
Attribuuttien arvojen yhdistelmiä kutsutaan olion tiloiksi
31. Operaatio
On olioon kohdistuva tai olion suorittama toimenpide
Tehtävät, joista olio on vastuussa
Mitä tehdään
Operaatiot ovat tyypillisesti
Olion tilaa muuttavia
Tilaa tutkivia
Olion osille tietyn toiminpiteen tekeviä toimintoja
32. Oliot ja viestit
Oliot kommunikoivat keskenään lähettämällä viestejä
(palvelupyyntöjä) toisilleen
Viesti toimii eräänlaisena herätteenä, joka saa vastaanottavan
olion käynnistämään viestissä viitatun operaation suorituksen
Oliokeskeinen tietojärjestelmä mallinnetaan palvelujen
tarjoajina ja käyttäjinä, jotka tekevät keskenään yhteistyötä
tietojärjestelmän vastuun täyttämiseksi
Palvelua käyttävä olio ei tunne palvelun tarjoajan sisäistä
rakennetta
33. Terminologiaa
Täydellisesti olioperustainen ohjelma
Kaikki toiminta olioiden operaatioissa
Kaikki data olioiden attribuuteissa tai operaatioissa paikallisena
Puhdas oliokieli
Kieli, jossa ohjelmat ovat aina täydellisesti olioperustaisia
Juuriolio
Olio, joka luodaan ensin ja joka luo muut oliot (suoraan tai
välillisesti)
34. Terminologiaa (jatkoa)
Moniparadigmakieli
Tukee usean eri ohjelmointiparadigman käsitteitä
Ohjelmoija voi valita haluamansa välineet
Hybridikieli
Perinteinen ohjelmointikieli, johon on lisätty olioperustaisen
ohjelmoinnin vaatimat mekanismit
35. Terminologiaa (jatkoa)
Oliotyyppejä
Passiivinen olio: olio toimii vain silloin kun sen palveluja pyydetään
Aktiivinen olio: olio on jatkuvasti toimiva prosessi, joka toimii muiden
olioiden kanssa rinnakkain
Koosteolio: oliolla on osinaan toisia olioita osa- tai asiakassuhteessa
Alistettu olio: toisen olion attribuuttina oleva kokonainen olio (eikä vain
viite)
36. Olioiden elinikä
Oliotyyppejä eliniän mukaan:
Väliaikainen olio: häviää kun sen tehtävä on suoritettu (esim.
tyyppimuunnoksien yhteydessä)
Alistettu olio: häviää kun isäntäolio häviää
Paikallinen olio: häviää kun ko. aktivaatio päättyy
Vapaa olio: häviää roskien keruussa tai erikseen tuhottaessa
Staattinen olio: häviää sovelluksen päättyessä
Pysyvä olio eli kantaolio: pysyvät sovelluksesta riippumatta
37. Miten löydän oliot?
Fyysiset oliot (talo, hevonen, auto)
Käsitteet (maksuaikatalu, juna-aikataulu)
Roolit (operaattori, käyttäjä, työntekijä)
Tapahtumia (keskeytys, hälytys, varaus)
Paikkoja (toimisto, valvomo)
Etsi siis substantiiveja! Älä ole liian kriittinen!
38. Järkevien olioiden etsintä
Karsi synonyymit
Jätä pois epäolennaiset ja epämääräiset
Jätä pois attribuutit
Unohda toteutuskäsitteet (listat, pinot jne.)
Karsi pois käyttöliittymäelementit, niiden aika on myöhemmin
40. Esimerkki
Short Message System
Mitä olioita järjestelmässä?
”Mikä Häkkinen” (Lähettäjä)
”Michael Schumacher” (Vastaanottaja)
”Ilmoja pidellyt. Terveisin Mika.” (SMS viesti)
Nokia 6110 (Puhelin)
Pentium III (Tietokone)
Kaverit (Ryhmä)
Soneran GSM-verkko (Verkko)
41. Historiaa: abstraktit tietotyypit
70-luvulla käytettiin abstrakteja tietotyyppejä, mm.
ohjelmointikielissä Ada ja Modula-2
Abstrakteissa tietotyyppien idea ohjelmistojen
modularisoinnista osaksi sama kuin olioperustaisessa
ajattelussa
42. Abstrakti tietotyyppi
Määrittelee ilmentymiin sovellettavat kutsumuodot
Ei niiden toteutustapaa
Kapselointimekanismi
Rajapinta
Toteutus esim. moduulina
Liittymä: tyypille sovellettavat operaatiot
Runko: toteutus, ei näy ulos
43. Abstrakti tietotyyppi (jatkoa)
Ohjelmiston ”sisäinen käyttöliittymä” ohjelmiston
komponenteille
Kytkimet, napit <-> operaatiot
Mittarit, lamput <-> arvon palautus
Ei tarvitse välittää "sisäisistä kytkennöistä"
44. Abstraktien tietotyyppien etuja
Vähentää osien riippuvuuksia toisistaan
Rakennettavuus
Ylläpidettävyys
Toteutus voidaan vaihtaa muuttamalla sisäistä osaa
45. Olio vs. abstrakti tyyppi
Olio vs. abstrakti tyyppi
Tiedot ja toiminta yhteen
Tarjottavat palvelut
Suojaus
46. Luokka
Oliokielissä olioiden piirteet (attribuutit ja operaatiot)
määritellään tavallisesti olion luokassa
Luokka = malli, muotti tai aihio, jonka mukaisia olioita voidaan
luoda
Olio = luokan ilmentymä
47. Luokka (jatkoa)
Luokka kertoo, mitä attribuutteja ja operaatioita luokan
ilmentymillä on
Jokaisella tietyn luokan ilmentymällä on samat attribuutit ja
operaatiot, vain attribuuttien arvot vaihtelevat
Jokaisella oliolla on yksikäsitteinen luokka, jonka mukaan olio
on luotu
48. Luokka (jatkoa)
Kuvaa joukkoa , joka muodostuu rakenteeltaan ja
käyttäytymiseltään (yleisesti ominaisuuksiltaan) samanlaisista
olioista (esim. Asiakas,Työntekijä, Osasto)
Olioluokat muodostavat hierarkian, jossa on yliluokkia (esim.
Työntekijä) ja niiden aliluokkia (esim. Projektipäällikkö,
Suunnittelija, Ohjelmoija)
49. Luokka (jatkoa)
Tarjoaa eräänlaisen sisäisen käyttöliittymäkuvauksen luokan
ilmentymille
Luokka on staattinen, käännösaikainen käsite
Olio on dynaaminen, ajonaikana (luokasta) luotava rakenne
50. Olion luominen
2 a
Luokka C
p
int a; luonti
int a;
void p() {...}
Luokan C
void p() {...} ilmentymä
luonti
3 a
p
Luokan C
ilmentymä
51. Olion rakentaja
Olio luodaan luontioperaatiolla
Rakentaja = olion operaatio, jonka olio suorittaa
automaattisesti ensimmäisenä toimenpiteenään
Alustaa olion attribuutit
Oletusrakentaja tai ohjelmoijan määrittämä
52. Olion purkaja
Purkaja = olion operaatio, jonka olio suorittaa automaattisesti
viimeisenä toimenpiteenään
Suorittaa toimenpiteitä, jotka ovat välttämättömiä ennen olion
hävittämistä (esim. resurssien vapauttaminen)
53. Esimerkki - Luokka Ihminen
Attribuutteja Operaatioita
Nimi Kävele
Lempinimi Juokse
Syntymäaika Syö
Pituus Juo
Paino Nuku
Syntymäpaikka ...
Asuinpaikka
...
54. Esimerkki - Olio Teemu Selänne
Attribuutteja Operaatioita
Nimi: Teemu Selänne Kävele
Lempinimi: The Finnish Flash Juokse
Syntymäaika: 3.7.1970 Syö
Pituus: 183 cm Juo
Paino: 93 kg Nuku
Syntymäpaikka: Helsinki ...
Asuinpaikka: Anaheim
...
55. Esimerkki - Luokka Kaupunki
Attribuutteja Operaatioita
Nimi ...
Pinta-ala
Väkiluku
Väestöntiheys
Veroprosentti
Työttömyysaste
...
56. Esimerkki - Olio Tampere
Attribuutteja Operaatioita
Nimi: Tampere ...
Pinta-ala: 522,7 km2
Väkiluku: 195 000
Väestöntiheys: 370 henkilö/km2
Veroprosentti: 17,25
Työttömyysaste: 15,4 %
...
57. Esimerkki - Olio Helsinki
Attribuutteja Operaatioita
Nimi: Helsinki ...
Pinta-ala: 686 km2
Väkiluku: 550 000
Väestöntiheys: 2976
henkilöä/maa-km2
Veroprosentti: 16,5
Työttömyysaste: 7,3 %
...
58. Esimerkki - Luokka Auto
Attribuutteja Operaatioita
Merkki Kaasuta
Malli Jarruta
Ovet Vaihda vaihde
Vaihteet Käännä oikealle
Moottori Käännä vasemmalle
Teho ...
Huippunopeus
Kulutus
Rekisterinumero
...
60. Luokkaehdokkaiden löytäminen
Reaalimaailman ja erityisesti sen rajatun alueen, kohdealueen,
analysointi
Lähteitä kohdealueen analysointiin
Kirjallinen aineisto: toimintakertomukset, raportit ja muistiot,
liiketoiminnan kuvaukset
Käyttäjien ja muiden kohdealueen asiantuntijoiden haastattelu
Protoilu
Reaalimaailman havainnointi
Paljon käytetty tapa luokkaehdokkaiden löytämiseen:
substantiivien alleviivaus tekstissä
Luetteloi luokkaehdokkaat
62. Luokkaehdokkaiden arviointi / analyysi
Luokka on epäilyttävä, jos
Luokassa ei ole operaatioita
Luokka = operaatio
Luokka perii tietorakenteita, joita se ei käytä
Luokkaa on vaikea nimetä
Luokka on suuri (satoja rivejä – riippuu tilanteesta...)
Luokan palveluja ei käytetä
Operaatiot käsittelevät erillisiä attribuuttijoukkoja
Luokassa on samankaltaista operaatiokoodia kuin jossakin
muussa luokassa
63. Luokkien nimeäminen
Kohdealueen terminologiaan kuuluvat, yleisesti hyväksytyt
nimet, mikäli mahdollista
Käytä luokan nimenä joko substantiivia tai adjektiivia ja
substantiivia
Käytä luokan nimenä yksikössä oleva sanaa
Käytä täsmällisiä ja kuvaavia ilmaisuja, vaikka ne olisivatkin
hieman pidempiä
Ei numeroita
67. Periytyminen
Luokka voi periä toisen luokan ominaisuudet eli olemassa
olevaa luokkaa voidaan jalostaa erikoistuneemmaksi
Perintärelaatiossa perittyä luokkaa kutsutaan yliluokaksi ja
johdettua luokkaa aliluokaksi
68. Luokkahierarkia
a piirteet:: a, b
b
Luokka A
Luokka A
piirteet:: a, b, c c d piirteet:: a, b, d, e
e
Luokka BB Luokka C
Luokka Luokka C
f piirteet:: a, b, d, e, f
Luokka D
Luokka D
69. Periytyminen (jatkoa)
Keskeisiä käsitteitä
Yleistäminen: määritellään luokalle yleisempi yliluokka
Erikoistaminen: määritellään tietylle tapaukselle erikoistettu
aliluokka
Olion perusluokka: luokka, jonka ilmentymänä olio on luotu
Yliluokka, aliluokka
Esi-isä, jälkeläiset
71. Periytyminen (jatkoa)
Tavoitteita
Koodin uudelleenkäyttö
Inkrementaalinen ohjelmistokehitys
Käsitteelliseen mallintamiseen perustuva ohjelmistokehitys
Periytymisen merkitys
Pragmaattinen näkökulma: koodin uudelleenkäyttö,
inkrementaalisuus
Käsitteellinen näkökulma: käsitteellisesti oikein olevat yleistys-
erikoistus-suhteet
72. Periytyminen - esimerkkejä
Henkilö
sosiaaliturvatunnus
nimi
ikö
pituus
paino
osoite
puhelinnumero
kotipaikka
Työntekijä
henkilönumero
työsuhteen alkamispäivä
työsuhteen loppumispäivä
kuukausipalkka
työosoite
työpuhelinnumero
osasto
Ohjelmoija Suunnittelija Päällikkö Asiantuntija
Projektipäällikkö Ryhmäpäällikkö Tietokanta-asiantuntija Käyttöliittymäasiantuntija Menetelmäasiantuntija
73. Periytyminen - esimerkkejä (jatkoa)
Alkoholijuoma
nimi
hinta
tuotenumero
kuvaus
alkoholipitoisuus
alkuperämaa
pullokoko
pakkauskoko
valmistaja
Viini Juomasekoitus Likööri Katkero Olut Siideri Long drink Glögi
74. Periytyminen - esimerkkejä (jatkoa)
Alkoholijuoma
nimi
hinta
tuotenumero
kuvaus
alkoholipitoisuus
alkuperämaa
pullokoko
pakkauskoko
valmistaja
Olut
oluttyyppi
IV A-olut Vahva olut III olut
76. Importointi vs. periytyminen
Importointi
Keskinäiset käyttösuhteet
Mahdollisuus viitata kirjastoon
Käännettävä ja ladattava
Periytyminen
Luodaan uusi tyyppi (luokka)
Sama käyttäytymismalli
Lisätyt tai muutetut käyttäytymismuodot
Voi edellyttää importoinnin käyttöä (yli-aliluokka viittaukset)
77. Suojaukset
Yleensä perityt piirteet perijän käyttöön
Mahdollisuuksia rajoituksiin (Java, C++)
Jos luokka esittelee samannimisen piirteen se peittää perityn
Samoin operaation uudelleenmäärittely
a
b
c
78. Yksittäisperiytyminen
Jokaisella luokalla on enintään yksi yliluokka
Luokkahierarkia on puu
Oliokielissä Java ja Smalltalk ainoastaan yksittäisperiytyminen
on mahdollista
79. Moniperiytyminen
Olioilla voi olla useita rinnakkaisia yliluokkia
Luokkahierarkia on syklitön verkko
(luokka ei voi periä itseään suoraan tai epäsuorasti)
Käytännössä ongelmallinen ja vaikeasti miellettävä
Hyödyllinen koodin uudelleenkäytössä
Javassa vain abstraktien rajapintojen moniperiytyminen
Grady Booch: ”Moniperiytyminen on kuin laskuvarjo. Yleensä
et sitä tarvitse, mutta se on hyvä olla olemassa.”
80. Moniperiytyminen (jatkoa)
Moniperiytymisen käyttötavat
Käsitteellinen moniperiytyminen
Moniperiytyminen käsitteellisesti oikein, kuvaa luokkien välisiä
todellisia suhteita
Pragmaattinen moniperiytyminen
Väline koodin uudelleenkäyttöön
81. Moniperiytymisen ongelmia
Monimutkaiset periytymissuhteet, vaikea hallita
Nimikonfliktit
Perii samannimisen ominaisuuden eri teitä
Kumpi voimassa?
Ratkaisuja
Kielletty
Uudelleennimeäminen
Yhdistyminen
82. Moniperiytymisen ongelmia (jatkoa)
Sama luokka peritään useaan kertaan
Toistuva periytyminen
Esim. henkilötiedot Kuljettajalta ja Rahastajalta Taksinkuljettajalle
Kahdentuminen
Erotteleva moniperiytyminen
Vain kertaalleen
Yhdistävä moniperiytyminen
Ratkaisuja
Kielletään
Kieli tai ohjelmoija määrittelee ratkaisun
83. Moniperiytyminen (jatkoa)
Oletetaan, että käsitteisiin liittyvät ominaisuudet:
Kuljettaja:
Ajokortin laatu (Integer-koodi)
Ajokortin myöntämisvuosi
Rahastaja:
Tilitysnumero
Tilitysvirheitä (Boolean)
Bussissa on erikseen henkilö, joka toimii rahastajana, mutta
taksissa kuljettaja rahastaa. Näin ollen "Bussinkuljettaja" on
"Kuljettajan" erikoistapaus, kun taas "Taksinkuljettaja" on sekä
eräänlainen "Kuljettaja" että eräänlainen "Rahastaja".
84. Moniperiytyminen (jatkoa)
ajokortti ajokortti
virheitä
myöntö- tilitys-
vuosi numero
Kuljettaja
Kuljettaja Rahastaja
Kuljettaja
alue
Taksinkuljettaja
85. Toistuva periytyminen
Toistuvassa periytymisessä sama attribuutti peritään useita
reittejä pitkin
Erotteleva periytyminen
Molemmat perityt attribuutit ovat olemassa
Yhdistävä periytyminen
Luokka perii piirteen vain kerran
86. Toistuva periytyminen (jatkoa)
nimi nimi nimi
Henkilö Henkilö Henkilö
ajokortti ajokortti
virheitä ajokortti ajokortti
virheitä
myöntö- tilitys- myöntö- tilitys-
vuosi numero vuosi numero
Kuljettaja
Kuljettaja Rahastaja
Kuljettaja Kuljettaja
Kuljettaja Rahastaja
Kuljettaja
alue alue
Taksinkuljettaja Taksinkuljettaja
88. Myöhäinen sidonta
Aikainen sidonta
Aliohjelman kutsu liitetään käännösaikana määrittelyyn
Kutsuttava koodi tiedossa tuottamisvaiheessa
Myöhäinen sidonta
Oliokielissä
Toteutustapa tarkennetaan jälkeläisluokissa
89. Virtuaalioperaatiot
Virtuaaliset operaatiot
Avoin virtuaalioperaatio
Ilman runkoa
Runko jälkeläisluokissa
Luokalla ei voi olla ilmentymiä: abstrakti luokka
Kiinnitetty virtuaalioperaatio
Sisältää (oletus) rungon
90. Avoin virtuaalioperaatio - esimerkki
Henkilö
nimi
ikä
ristiminen(nimi : String)
{abstract} tervehdi()
vanhene()
sano(viesti : String)
Mies Nainen
tervehdi() tervehdi()
kumarrus() niiaus()
sano("Moro!") sano("Hei")
kumarrus() niiaus()
91. Kiinnitetty virtuaalioperaatio - esimerkki
Henkilö
nimi
ikä
ristiminen(nimi : String)
tervehdi()
vanhene()
sano(viesti : String)
sano("Tervehdys")
Mies Nainen
tervehdi() tervehdi()
kumarrus() niiaus()
kumarrus() niiaus()
92. Virtuaalinen vs. ei-virtuaalinen
Virtuaalinen operaatio
+ lisää uudelleenkäytön mahdollisuuksia
+ antaa mahdollisuuden muuttaa perittyjen operaatioiden
toimintatapaa
- tekee ohjelmasta vaikeammin ymmärrettävän
- pieni ajoaikainen rasite
Operaation merkityksen säilyminen uudelleenmäärittelyssä?
93. Monimuotoisuus eli polymorfismi
Ohjelmassa esiintyvä kohde voi tarkoittaa useita eri asioita
Perustuu myöhäiseen sidontaan ja luokille määriteltyyn
yhteensopivuuteen
Muuttujan viittaama olio voi siis olla montaa eri luokkaa
tarpeesta riippuen
h h h
Henkilö Henkilö Henkilö
Nainen Mies
Henkilö h; Henkilö h; Henkilö h;
... ... ...
h = new h = new Mies(); h = new
Nainen(); Henkilö();
94. Operaatiopolymorfismi
Oliota pyydetään suorittamaan operaatio
Myöhäinen sidonta → suoritus riippuu olion perusluokasta (ei
muuttujan staattisesta luokasta)
Tiedossa vasta ajonaikana
Kutsu aktivoi eri suorituskerroilla eri operaatioita
95. Myöhäisen sidonnan käyttötapoja
Rajapintaluokat
Samaan ohjelmaan erilaisia toteutuksia
Määrittelee avoimet virtuaalioperaatiot
Ei määrittele toteutusta
Operaatioita voidaan kutsua
Toteutusluokka
Perii rajapinnan eli attribuutit ja operaatiot
Samalla rajapintaluokalla voi olla useita toteutusluokkia
96. Myähäisen sidonnan käyttötapoja (jatkoa)
Avoin virtuaalioperaatio kun ei riittävästi tietoa toteuttamiseen
Ohjelmiston rakentaminen kiinnittämättä huomiota
tarpeettomiin yksityiskohtiin
Määritysmoduulien rakentaminen
Voidaan tehdä useita eri toteutuksia tai kiinnittää toteutus
myöhemmin
97. Monimuotoisuuden käyttötapoja
Säiliöluokka (heterogeeniset tietorakenteet)
Voi tallentaa mitä olioita hyvänsä
Luokka tarkentuu jälkeläisluokaksi
Olioiden luokka vaihtelee eri ilmentymissä
Käyttää periytymistä
Esim. pino, jono, verkko, puu, joukko