Johdatus olio-ohjelmointiin Jussi Pohjolainen Tampereen Ammattikorkeakoulu
Johdatus olio-ohjelmointiin <ul><li>Olioperustaisuus on yksi  ohjelmointiparadigma </li></ul><ul><ul><li>paradigma = esiku...
Olio-ohjelmoinnin hyödyt <ul><li>Uudelleenkäytettävyys </li></ul><ul><ul><li>Ajatuksena taustalla koko ajan </li></ul></ul...
Proseduraalisesta olio-ohjelmointiin <ul><li>Perinteisessä  proseduraalisessa  ohjelmoinnissa jäsennetään ohjelma ajatukse...
Mikä on olio? <ul><li>Reaalimaailma koostuu erilaisista olioista: </li></ul><ul><ul><li>autoista, rakennuksista, puista, l...
Proseduraalinen vs. olio juo olutta   <ul><li>Proseduraalinen </li></ul><ul><li>Ota olutlasista kiinni </li></ul><ul><li>N...
Olio-ohjelmoinnista <ul><li>Ei luoda yksittäisiä toimintoja vaan, luodaan pysyvämpiä käsitteitä </li></ul><ul><li>Yksittäi...
Käsitteitä:  Olio <ul><li>Datsun 100A on olio </li></ul><ul><li>Autolla on erilaisia toimintoja, ts. operaatioita: aja, ja...
Käsitteitä:  luokka <ul><li>Luokka on käsitteen pohjapiirustus </li></ul><ul><li>Olio on pohjapiirustuksesta luotu todelli...
Luokka & olio <ul><li>Auto-luokka </li></ul>Datsun 100A Lamborghini Diablo Peugeot 406
Oliot datsun, lambo, pösö <ul><li>datsun: </li></ul><ul><ul><li>merkki: Datsun 100A , moottori: 1.0, karvanopat: on, väri:...
Auton pohjapiirustus <ul><li>Tehdään auton pohjapiirustus, mitä samaa on kaikissa autoissa? </li></ul>
Auton pohjapiirustus (luokka) Auto merkki moottori ovimäärä väri karvanopat . .
Auton pohjapiirustuksesta yksittäisiin autoihin (olioihin) datsun Datsun 100A 1.0 3 punainen on lambo Lamborghini Diablo 8...
Auto-luokka, laajennus Auto merkki moottori ovimäärä väri karvanopat aja pysäköi jarruta
Auton pohjapiirustuksesta yksittäisiin autoihin (olioihin) Auto merkki moottori ovimäärä väri karvanopat aja pysäköi jarru...
Peruskäsitteet - Luokka <ul><li>Luokka on tietyn kokonaisuuden määritelmä </li></ul><ul><ul><li>Ominaisuudet=propertyt, C+...
Muita peruskäsitteitä Kapselointi, periytyminen, monimuotoisuus
Peruskäsitteet - kapselointi <ul><li>Luokkamääritys piilottaa luokan ominaisuudet ja julkistaa rajapinnan niiden käsittely...
Peruskäsitteet - kapselointi suojatut osat näkyvä operaatio
Peruskäsitteet - kapselointi a b c
Peruskäsitteet - periytyminen <ul><li>Ehkä selkein esimerkki koodin uudelleenkäytöstä </li></ul><ul><li>Määritellään uusi ...
Peruskäsitteet - periytyminen A B D C E F C D F A A C F-olio C-olio
C++ ja olio-ohjelmointi
Ihmisen pohjapiirustuksesta yksittäisiin ihmisiin (olioihin) Yrjö Yrjö Keinonen 40 Etsivä 09-12345 Pena Pentti Puupää 60 T...
Ihminen-luokka => C++ <ul><li>class Ihminen{ </li></ul><ul><li>public:  </li></ul><ul><li>string etunimi;  </li></ul><ul><...
C++ - luokka <ul><li>Luokka koostuu  </li></ul><ul><ul><li>1) luokan esittelystä </li></ul></ul><ul><ul><li>2) toteutukses...
Luokan esittely <ul><li>class Ihminen </li></ul><ul><li>{ </li></ul><ul><li>public:  </li></ul><ul><li>string etunimi;  </...
Luokan toteutus <ul><li>void Ihminen::Nuku()  </li></ul><ul><li>{ </li></ul><ul><li>cout << etunimi << &quot; &quot; << su...
Luokka olioksi <ul><li>Ohjelman tarvitsee lähteä liikenteeseen jostain: main-funktio. </li></ul><ul><li>Tehdään uusi luokk...
Luokka olioksi <ul><li>Olemme määritelleet tähän asti primitiivityyppejä (int, char, double..) [paitsi string] </li></ul><...
Luokka olioksi <ul><li>int main()  </li></ul><ul><li>{ </li></ul><ul><li>Ihminen pekka; </li></ul><ul><li>pekka.etunimi = ...
Auton pohjapiirustuksesta yksittäisiin autoihin (olioihin) Auto merkki moottori ovimäärä väri karvanopat aja pysäköi jarru...
Auto-luokka <ul><li>class Auto </li></ul><ul><li>{ </li></ul><ul><li>public:  </li></ul><ul><li>string merkki_; </li></ul>...
Olion käyttö <ul><li>int main() </li></ul><ul><li>{ </li></ul><ul><li>Auto mini; </li></ul><ul><li>mini.bensanmaara_ = 100...
Olion käyttö <ul><li>int main() </li></ul><ul><li>{ </li></ul><ul><li>Auto ferrari; </li></ul><ul><li>ferrari.bensanmaara_...
Tietojäsenistä <ul><li>Tietojäsenet private-tyyppisiksi </li></ul><ul><li>Rakentimessa yleensä joidenkin tietojäsenten alu...
Aksessori ja Mutaattori <ul><li>class Person  </li></ul><ul><li>{ </li></ul><ul><li>private: </li></ul><ul><li>int weight_...
Upcoming SlideShare
Loading in …5
×

Johdatus olio-ohjelmointiin

4,317 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,317
On SlideShare
0
From Embeds
0
Number of Embeds
117
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Johdatus olio-ohjelmointiin

  1. 1. Johdatus olio-ohjelmointiin Jussi Pohjolainen Tampereen Ammattikorkeakoulu
  2. 2. Johdatus olio-ohjelmointiin <ul><li>Olioperustaisuus on yksi ohjelmointiparadigma </li></ul><ul><ul><li>paradigma = esikuva, malli, kaava </li></ul></ul><ul><li>Tapa kuvata järjestelmien rakennetta ja toimintaa </li></ul><ul><li>Muita paradigmoja: </li></ul><ul><ul><li>proseduraalinen, funktionaalinen, logiikka ja rajoite </li></ul></ul>
  3. 3. Olio-ohjelmoinnin hyödyt <ul><li>Uudelleenkäytettävyys </li></ul><ul><ul><li>Ajatuksena taustalla koko ajan </li></ul></ul><ul><ul><li>Kertaalleen kirjoitettua koodia ei kirjoiteta uudestaan </li></ul></ul><ul><li>Hallittavuus </li></ul><ul><ul><li>Sovellus kootaan pienistä, helposti hahmotettavista palasista, joiden toiminnallisuus pystytään tarkoin määrittelemään </li></ul></ul><ul><li>Ylläpidon helpottuminen </li></ul><ul><ul><li>Muutos yhteen kohtaan sovelluksessa ei vaikuta joka puolelle </li></ul></ul>
  4. 4. Proseduraalisesta olio-ohjelmointiin <ul><li>Perinteisessä proseduraalisessa ohjelmoinnissa jäsennetään ohjelma ajatuksella “ensin tätä ja sitten tätä”. </li></ul><ul><li>Olio-ohjelmoinnin perusajatus on ongelmakentän - sovellusalueen - kuvaaminen olioina, olioiden ominaisuuksina ja toimintoina sekä olioiden välisinä suhteina </li></ul>
  5. 5. Mikä on olio? <ul><li>Reaalimaailma koostuu erilaisista olioista: </li></ul><ul><ul><li>autoista, rakennuksista, puista, laivoista, ihmisistä, kukista … </li></ul></ul><ul><li>Jokaisella näillä olioilla on omat toimintonsa , joilla voi olla vaikutusta muiden olioiden käyttäytymiseen </li></ul><ul><li>Olio-ohjelmoinnissa pyritään kuvaamaan ohjelma siten, että se olisi maailma joka koostuisi olioista. </li></ul>
  6. 6. Proseduraalinen vs. olio juo olutta <ul><li>Proseduraalinen </li></ul><ul><li>Ota olutlasista kiinni </li></ul><ul><li>Nosta olutlasi huulille </li></ul><ul><li>Juo olutlasista </li></ul><ul><li>Laske olutlasi pöydälle </li></ul><ul><li>Olio </li></ul><ul><li>Luodaan pysyvämpiä </li></ul><ul><li>käsitteitä kuin yksit- </li></ul><ul><li>täinen juomishetki: </li></ul><ul><li>Olutlasi, Ihminen. </li></ul><ul><li>Näille käsitteille mää- </li></ul><ul><li>ritellään ominaisuuksia: </li></ul><ul><li>tiina.juo( lapinKulta ); </li></ul>
  7. 7. Olio-ohjelmoinnista <ul><li>Ei luoda yksittäisiä toimintoja vaan, luodaan pysyvämpiä käsitteitä </li></ul><ul><li>Yksittäinen oluenjuonti tietyssä baarissa laajennetaan yleiseen oluenjuontitapaan jota voidään käyttää eri paikoissa, eri oluilla, eri ihmisillä, eri tavoilla. </li></ul><ul><li>Proseduraalisessa vain yksittäinen tapa. </li></ul>
  8. 8. Käsitteitä: Olio <ul><li>Datsun 100A on olio </li></ul><ul><li>Autolla on erilaisia toimintoja, ts. operaatioita: aja, jarruta, pysäköi… </li></ul><ul><li>Autolla on erilaisia arvoja, ts. attribuutteja: auton väri, vaihteiden määrä, ovien määrä… </li></ul>
  9. 9. Käsitteitä: luokka <ul><li>Luokka on käsitteen pohjapiirustus </li></ul><ul><li>Olio on pohjapiirustuksesta luotu todellisen maailman ilmentymä. </li></ul><ul><li>Jos Datsun 100A on olio, luokka on auto. </li></ul><ul><li>Kissa == luokka, Mirri == olio </li></ul><ul><li>Kirja == luokka, Tuntematon sotilas == olio </li></ul>
  10. 10. Luokka & olio <ul><li>Auto-luokka </li></ul>Datsun 100A Lamborghini Diablo Peugeot 406
  11. 11. Oliot datsun, lambo, pösö <ul><li>datsun: </li></ul><ul><ul><li>merkki: Datsun 100A , moottori: 1.0, karvanopat: on, väri: punainen </li></ul></ul><ul><li>lambo </li></ul><ul><ul><li>merkki: Lamborghini Diablo, moottori: 8.0, karvanopat: ei, väri: punainen </li></ul></ul><ul><li>pösö </li></ul><ul><ul><li>merkki: Peugeot 406, moottori: 2.2, karvanopat: ei, väri: metalli </li></ul></ul>
  12. 12. Auton pohjapiirustus <ul><li>Tehdään auton pohjapiirustus, mitä samaa on kaikissa autoissa? </li></ul>
  13. 13. Auton pohjapiirustus (luokka) Auto merkki moottori ovimäärä väri karvanopat . .
  14. 14. Auton pohjapiirustuksesta yksittäisiin autoihin (olioihin) datsun Datsun 100A 1.0 3 punainen on lambo Lamborghini Diablo 8.0 3 punainen ei Auto merkki moottori ovimäärä väri karvanopat . .
  15. 15. Auto-luokka, laajennus Auto merkki moottori ovimäärä väri karvanopat aja pysäköi jarruta
  16. 16. Auton pohjapiirustuksesta yksittäisiin autoihin (olioihin) Auto merkki moottori ovimäärä väri karvanopat aja pysäköi jarruta aja pysäköi jarruta lambo Lamborghini Diablo 8.0 3 punainen ei datsun Datsun 100A 1.0 3 punainen on
  17. 17. Peruskäsitteet - Luokka <ul><li>Luokka on tietyn kokonaisuuden määritelmä </li></ul><ul><ul><li>Ominaisuudet=propertyt, C++:ssa jäsenmuuttujat </li></ul></ul><ul><ul><li>Toiminnallisuus=metodit, C++:ss jäsenfunktiot </li></ul></ul><ul><li>Luokan ilmentymät ovat olioita eli objekteja eli instansseja </li></ul><ul><ul><li>Vasta instanssilla luokan ominaisuudet saavat arvoja </li></ul></ul><ul><li>Esim : Ihminen, tili, asiakas, neliö jne </li></ul>
  18. 18. Muita peruskäsitteitä Kapselointi, periytyminen, monimuotoisuus
  19. 19. Peruskäsitteet - kapselointi <ul><li>Luokkamääritys piilottaa luokan ominaisuudet ja julkistaa rajapinnan niiden käsittelyyn : </li></ul><ul><ul><li>Ominaisuuksia voidaan muokata vain jäsenfunktioiden avulla. </li></ul></ul><ul><ul><li>Ominaisuudet eivät muutu kontrolloimattomasti. </li></ul></ul><ul><ul><li>Olio itse huolehtii muutosten oikeellisuudesta. </li></ul></ul><ul><li>-> Ylläpidon helppous </li></ul>
  20. 20. Peruskäsitteet - kapselointi suojatut osat näkyvä operaatio
  21. 21. Peruskäsitteet - kapselointi a b c
  22. 22. Peruskäsitteet - periytyminen <ul><li>Ehkä selkein esimerkki koodin uudelleenkäytöstä </li></ul><ul><li>Määritellään uusi luokka siten, että se hyödyntää kaikkia aikaisemmin määritellyn luokan piirteitä mahdollisesti laajentaen tai muunnellen niitä </li></ul><ul><li>nisäkäs - kissa ja koira, asiakas - tiliasiakas ja käteisasiakas jne </li></ul>
  23. 23. Peruskäsitteet - periytyminen A B D C E F C D F A A C F-olio C-olio
  24. 24. C++ ja olio-ohjelmointi
  25. 25. Ihmisen pohjapiirustuksesta yksittäisiin ihmisiin (olioihin) Yrjö Yrjö Keinonen 40 Etsivä 09-12345 Pena Pentti Puupää 60 Toimistopäällikkö 03-654321 nuku syö juo olutta Ihminen etunimi sukunimi ikä ammatti puhelinnumero nuku syö juo olutta
  26. 26. Ihminen-luokka => C++ <ul><li>class Ihminen{ </li></ul><ul><li>public: </li></ul><ul><li>string etunimi; </li></ul><ul><li> string sukunimi; </li></ul><ul><li> int ika; </li></ul><ul><li> string ammatti; </li></ul><ul><li> int puhelinnumero; </li></ul><ul><li> void Nuku(); </li></ul><ul><li> void Syo(); </li></ul><ul><li> void JuoOlutta(); </li></ul><ul><li>}; </li></ul>Ihminen etunimi sukunimi ikä ammatti puhelinnumero nuku syö juo olutta
  27. 27. C++ - luokka <ul><li>Luokka koostuu </li></ul><ul><ul><li>1) luokan esittelystä </li></ul></ul><ul><ul><li>2) toteutuksesta </li></ul></ul><ul><li>Edeltävällä kalvolla näimme ainoastaan esittelyn </li></ul><ul><li>Yleisesti luokan esittely ja sen toteutus kirjoitetaan kahteen eri tiedostoon: .h ja .cpp </li></ul>
  28. 28. Luokan esittely <ul><li>class Ihminen </li></ul><ul><li>{ </li></ul><ul><li>public: </li></ul><ul><li>string etunimi; </li></ul><ul><li>string sukunimi; </li></ul><ul><li>int ika; </li></ul><ul><li>string ammatti; </li></ul><ul><li>int puhelinnumero; </li></ul><ul><li>void Nuku(); </li></ul><ul><li>void Syo(); </li></ul><ul><li>void JuoOlutta(); </li></ul><ul><li>}; </li></ul>
  29. 29. Luokan toteutus <ul><li>void Ihminen::Nuku() </li></ul><ul><li>{ </li></ul><ul><li>cout << etunimi << &quot; &quot; << sukunimi << &quot; nukkuu&quot; << endl; </li></ul><ul><li>} </li></ul><ul><li>void Ihminen::Syo() </li></ul><ul><li>{ </li></ul><ul><li>cout << etunimi << &quot; &quot; << sukunimi << &quot; syö&quot; << endl; </li></ul><ul><li>} </li></ul><ul><li>void Ihminen::JuoOlutta() </li></ul><ul><li>{ </li></ul><ul><li>cout << etunimi << &quot; &quot; << sukunimi << &quot; juo olutta&quot; << endl; </li></ul><ul><li>} </li></ul>
  30. 30. Luokka olioksi <ul><li>Ohjelman tarvitsee lähteä liikenteeseen jostain: main-funktio. </li></ul><ul><li>Tehdään uusi luokka jossa testataan Ihminen-luokan toimivuutta. </li></ul><ul><li>Määritellään muuttuja jonka tyyppi onkin Ihminen! </li></ul><ul><ul><li>int x; </li></ul></ul><ul><ul><li>Ihminen x; </li></ul></ul>
  31. 31. Luokka olioksi <ul><li>Olemme määritelleet tähän asti primitiivityyppejä (int, char, double..) [paitsi string] </li></ul><ul><li>Nyt määritellään muuttuja jonka tyyppi ei ole perustyyppiä vaan se on “Ihminen”-tyyppiä </li></ul>
  32. 32. Luokka olioksi <ul><li>int main() </li></ul><ul><li>{ </li></ul><ul><li>Ihminen pekka; </li></ul><ul><li>pekka.etunimi = &quot;Pekka&quot;; </li></ul><ul><li>pekka.sukunimi = &quot;Virtanen&quot;; </li></ul><ul><li>pekka.JuoOlutta(); </li></ul><ul><li>return 0; </li></ul><ul><li>} </li></ul>
  33. 33. Auton pohjapiirustuksesta yksittäisiin autoihin (olioihin) Auto merkki moottori ovimäärä väri karvanopat aja pysäköi jarruta aja pysäköi jarruta lambo Lamborghini Diablo 8.0 3 punainen ei datsun Datsun 100A 1.0 3 punainen on
  34. 34. Auto-luokka <ul><li>class Auto </li></ul><ul><li>{ </li></ul><ul><li>public: </li></ul><ul><li>string merkki_; </li></ul><ul><li>int bensanmaara_; </li></ul><ul><li>int ruostumisprosentti_; </li></ul><ul><li>void Aja(); </li></ul><ul><li>void Ruostu(); </li></ul><ul><li>}; </li></ul><ul><li>void Auto::Aja() </li></ul><ul><li>{ </li></ul><ul><li>bensanmaara_--; </li></ul><ul><li>} </li></ul><ul><li>void Auto::Ruostu() </li></ul><ul><li>{ </li></ul><ul><li>ruostumisprosentti_++; </li></ul><ul><li>} </li></ul>
  35. 35. Olion käyttö <ul><li>int main() </li></ul><ul><li>{ </li></ul><ul><li>Auto mini; </li></ul><ul><li>mini.bensanmaara_ = 100; </li></ul><ul><li>mini.ruostumisprosentti_ = 50; </li></ul><ul><li>mini.Aja(); </li></ul><ul><li>mini.Ruostu(); </li></ul><ul><li> return 0; </li></ul><ul><li>} </li></ul>
  36. 36. Olion käyttö <ul><li>int main() </li></ul><ul><li>{ </li></ul><ul><li>Auto ferrari; </li></ul><ul><li>ferrari.bensanmaara_ = 200; </li></ul><ul><li>ferrari.ruostumisprosentti_ = 0; </li></ul><ul><li>ferrari.Aja(); </li></ul><ul><li>ferrari.Ruostu(); </li></ul><ul><li> return 0; </li></ul><ul><li>} </li></ul>
  37. 37. Tietojäsenistä <ul><li>Tietojäsenet private-tyyppisiksi </li></ul><ul><li>Rakentimessa yleensä joidenkin tietojäsenten alustus </li></ul><ul><li>Jos halutaan lukea jonkun tietojäsenen arvo, tehdään sille oma metodi </li></ul>
  38. 38. Aksessori ja Mutaattori <ul><li>class Person </li></ul><ul><li>{ </li></ul><ul><li>private: </li></ul><ul><li>int weight_; </li></ul><ul><li>public: </li></ul><ul><li>void SetWeight(int weight); </li></ul><ul><li>int GetWeight(); </li></ul><ul><li>}; </li></ul><ul><li>void Person::SetWeight(int weight) // Mutator </li></ul><ul><li>{ </li></ul><ul><li>if(weight > 0 && weight < 400) </li></ul><ul><li>weight_ = weight; </li></ul><ul><li>} </li></ul><ul><li>int Person::GetWeight() // Accessor </li></ul><ul><li>{ </li></ul><ul><li>return weight_; </li></ul><ul><li>} </li></ul>

×