815338A Ohjelmointikielten periaatteet

Koko: px
Aloita esitys sivulta:

Download "815338A Ohjelmointikielten periaatteet"

Transkriptio

1 815338A Ohjelmointikielten periaatteet V Abstraktit tietotyypit ja olioohjelmointi

2 Sisältö I. Abstraktit tietotyypit II. 1. Johdatus abstrakteihin tietotyyppeihin 2. Abstraktit tietotyypit Adassa 3. Abstraktit tietotyypit C++:ssa 4. Abstraktit tietotyypit Javassa Olio-ohjelmointi 1. Johdatus olio-ohjelmointiin 2. Periytyvyys 3. Monimuotoisuus ja dynaaminen sidonta 4. Oliokielten suunnittelukysymyksiä 5. Olio-ohjelmointi C++:ssa 6. Olio-ohjelmointi Javassa A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 2

3 V.I.1 Abstraktit tietotyypit: Johdatus Abstract Data Type (ADT) Data-abstraktion väline Data-abstraktio: yhdistetään tietotyyppeihin operaatioita, joiden yksityiskohtia käyttäjän ei tarvitse tuntea Johtivat olio-ohjelmoinnin syntyyn A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 3

4 V.I.1.1. Abstraktin tietotyypin määritelmä Toteutettava kaksi ehtoa: 1. Tiedon kätkentä: Tyypin määrittelyn ja operaatioiden yksityiskohdat eivät näy tietotyypin ulkopuoliselle käyttäjälle Tyyppiin voidaan kohdistaa suoraan ainoastaan sellaisia operaatioita, jotka tyypin esittely sallii 2. Tiedon kapselointi: Tyypin esittely samoin kuin tietotyyppiin liittyvät operaatioiden esittelyt sijaitsevat yhdessä syntaktisessa yksikössä. Muut ohjelmayksiköt voivat muodostaa tämän tyypin muuttujia A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 4

5 V.I.1.1. Abstraktin tietotyypin määritelmä (2) HUOM! Määritelmän mukaan myös kielen sisäiset tietotyypit voivat olla abstrakteja. Tässä ADT:llä tarkoitetaan käyttäjän määrittelemää abstraktia tietotyyppiä *x++=*y A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 5

6 V.I.1.2. Tiedon kätkentä Erittäin tärkeä periaate tietotyypin luotettavuuden kannalta Ainoastaan tietotyypin sisäiset operaatiot voivat väliaikaisesti rikkoa tyypin ilmentymän tilan, palauttavat sen ennen kontrollin siirtymistä käyttäjälle Helpottaa koodin ylläpitoa, koska ulospäin näkyvä rajapinta säilyy samana A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 6

7 V.I.1.3. Tiedon kapselointi Periaatteena koota data ja sitä käsittelevät operaatiot yhteen Helpottaa ohjelman loogista ja teknistä hallintaa Loogisesti yhteenkuuluvat operaatiot samaan yksikköön -> mentaalinen hallinta helpottuu Teknisesti helpottaa ohjelman kääntämistä Alisteisissa kielissä kapseloinnin toteuttaminen on ongelmallista A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 7

8 V.I.1.4. Historiaa lyhyesti ADT:t ensimmäiseksi SIMULA 67-kielessä Määriteltiin luokkana Sisälsi luokan muuttujat, aliohjelmien esittelyt sekä niiden koodin Luokassa määriteltyjä muuttujia ei piilotettu olion luovalta sovellukselta -> tiedon kätkennän toteutus puutteellinen ADT:t yleistyivät vasta useita vuosia SIMULA 67-kielen julkaisun jälkeen Useimmissa nykyisissä korkean tason kielissä voidaan käyttää abstrakteja tietotyyppejä A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 8

9 I.1.5. ADT eri kielissä Pascal ja C: voidaan määritellä omia tyyppejä, mutta niihin ei voi kytkeä operaatioita -> ADT-toteutus mahdoton Ada: ADT ilman olioita Kehittynyt myöhemmissä versioissa olio-ohjelmoinnin suuntaan C++, Java: luokkien avulla voidaan määritellä abstrakteja tietotyyppejä A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 9

10 V.I.2. Abstraktit tietotyypit Adassa Adassa ADT:tä voidaan simuloida käyttämällä pakkauksia (packages) Pakkauksilla voidaan kapseloida tietoja Koostuvat kahdesta osasta, joita molempia myös kutsutaan pakkauksiksi: 1. Määrittelyosa (specification package) 2. Runko (body package) (vapaaehtoinen) Pakkausta käyttävä sovellus näkee aina vain määrittelyosan, mutta ei runkoa A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 10

11 V.I.2. Abstraktit tietotyypit Adassa (2) Tiedon kätkentä: pakkauksen määrittelyosa voidaan jakaa julkiseen ja yksityiseen osaan Julkinen osa kokonaisuudessaan näkyvissä pakkauksen käyttäjille Yksityinen (private-määreellä merkitty) osa käyttäjältä piilotettu Oletus: tieto julkista HUOM! Pakkaukset eivät ole varsinaisia tietotyyppejä A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 11

12 V.I.2. Abstraktit tietotyypit Adassa (3) Esimerkki. package LINKITETTY_LISTA is end; type SOLMU; type OSOITIN is access SOLMU; type SOLMU is record end record; DATA: INTEGER; LINKKI: OSOITIN; package body LINKITETTY_LISTA is end; -- Paketin runko Pääsy myös SOLMU tyypin kenttiin DATA ja LINKKI A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 12

13 V.I.3 Abstraktit tietotyypit C++:ssa Data-abstraktio luokkien avulla Erot Adan abstraktiomalliin: C++ -luokat ovat tietotyyppejä (toisin kuin Adan pakkaukset) -> C++:ssa voidaan määritellä luokkatyyppisiä muuttujia Luokkien julkisiin (ei-staattisiin) jäsenmuuttujiin voidaan viitata ainoastaan luokan instanssin kautta, Adassa sisällytetyn pakkauksen muuttujiin voidaan viitata suoraan C++ :n luokka C-kielen tietueen (struct) laajennus Luokkien operaatiot = jäsenfunktiot Luokkamalli muistuttaa SIMULA 67:n mallia A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 13

14 V.I.3 Abstraktit tietotyypit C++:ssa (2) Luokan jäsenmuuttujien (member variables) ja - funktioiden (member functions) näkyvyys Julkiset (public) Näkyvissä ulkopuolelle Suojatut (protected) Näkyminen liittyy periytymiseen Yksityiset (private) Näkyvät ainoastaan luokan sisällä ja luokan ystäväluokissa ja funktioissa (friend classes, friend functions) A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 14

15 V.I.3 Abstraktit tietotyypit C++:ssa (3) Viittaukset jäseniin Olio: pistenotaatio (.) Luokka olio; olio.funktio(); Osoitin olioon, nuoli (->) Luokka* p_olio; p_olio->funktio(); A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 15

16 V.I.3 Abstraktit tietotyypit C++:ssa (4) Staattiset jäsenmuuttujat kaikille luokan olioille yhteisiä jäsenmuuttujia Määritellään C++:ssa avainsanalla static Voidaan viitata suoraan ilman oliota luokan nimellä (Luokka::jäsen) Näkyvyyssäännöt myös voimassa Staattiset jäsenfunktiot (luokkametodit): kutsuttaessa ei tarvita luokasta oliota Avainsana static Luokkametodi voi viitata vain luokan staattisiin jäsenmuuttujiin tai staattisiin jäsenfunktioihin Näkyvyyssäännöt myös voimassa A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 16

17 V.I.3 Abstraktit tietotyypit C++:ssa (5) Muodostin (konstruktori, constructor) Kutsutaan aina olion luomisen yhteydessä Konstruktorin nimi on aina sama kuin luokan nimi Ei paluuarvoa Muodostinfunktioita voi olla useita -> parametrilistan perusteella päätellään, mitä muodostinta kutsutaan Hajotin (tuhoaja, destructor) Kutsutaan automaattisesti, kun olio tuhotaan Hajotin yksikäsitteinen, muoto ~LuokkaNimi() Yleensä hajottimeen vapautusoperaatiot dynaamisesti varatulle muistille jne A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 17

18 V.I.3 Abstraktit tietotyypit C++:ssa (6) *x++=*y++ C++-olioiden muistinvaraus voi olla Staattinen, Pinodynaaminen, Kekodynaaminen Oliot vapautettava delete operaattorilla C++:ssa olio voi käyttäytyä kuten mikä tahansa muuttuja Voi olla esim. globaali A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 18

19 V.I.4 Abstraktit tietotyypit Javassa V.I.4.1. Javan vertailua C++:aan *x++=*y++ Luokkamalli muistuttaa C++ -kielen mallia Oliot aina kekodynaamisia Ohjelmoija ei itse voi suoraan vapauttaa muistia, vaan roskien keruu huolehtii tästä Olion tuhoamisen yhteydessä tarpeelliset operaatiot ylikirjoittamalla finalize() metodi Kaikki oliot perivät Object luokalta Harvoin tarvitsee tehdä A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 19

20 V.I.4.1. Javan vertailua C++:aan Oliot viitetyypin muuttujia Jäseniin viitataan pistenotaatiolla Kaikkien metodien ja tietotyyppien on kuuluttava johonkin luokkaan Metodien määrittely toteutetaan samassa luokassa, jossa metodi esitellään Voidaan määritellä sekä staattisia että ei-staattisia jäsenmuuttujia ja -metodeja Staattiset jäsenmuuttujat voidaan myös alustaa luokassa A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 20

21 V.I.4.2. Tiedon kätkentä Javassa Samat näkyvyysmääreet (public, protected ja private) kuin C++:ssa Merkityskin sama kuin C++:ssa Lisäksi oletusnäkyvyys = pakkausnäkyvyys (package scope) Jäsenet näkyvät pakkauksen sisällä Korvattu C++ -kielen ystäväluokat ja -funktiot, joita Javassa ei ole toteutettu A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 21

22 V.II.1. Olio-ohjelmointi, Johdatus V.II.1.1. Hieman historiaa *x++=*y luku: tarve ohjelmien uudelleenkäyttöön Abstraktit tietotyypit sopivat tarkoitukseen Abstraktien tietotyyppien ongelmia: Ei yleensä sovi sellaisenaan uuteen käyttöön Tyypit eivät muodosta hierarkkista rakennetta Ratkaisuksi olio-ohjelmointi Abstrakti tietotyyppi luokka, instanssi olio Luokka voidaan periä ja muokata sitä sekä lisätä ominaisuuksia A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 22

23 V.II.1.2. Olioparadigma Muutos aiempaan: tietoalkiot (oliot) ovat aktiivisia Ohjelman toiminta koostuu olioiden toisilleen lähettämistä viesteistä ja niihin saaduista vastauksista Olion tila: sen jäsenmuuttujien arvot Ihanne: toiset oliot eivät muuta tai lue suoraan olion tilaa Käytetään erillisiä saanti- ja asetusmetodeja A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 23

24 V.II.2. Periytyvyys (inheritance) Olio-ohjelmoinnin keskeisin käsite Kuvaa luokkien väliset suhteet Luokka, joka peritään = kantaluokka (base class) tai yliluokka (superclass) Perivä luokka = aliluokka (subclass) tai johdettu luokka (derived class) A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 24

25 V.II.2. Periytyvyys (2) Kantaluokan olioiden käyttäytyminen siirtyy osaksi aliluokan olioiden käyttäytymistä Laajentaminen periytymisessä Uusien jäsenmuuttujien ja metodien lisääminen aliluokkaan Erikoistaminen periytymisessä Aliluokassa korvataan perittyjä määrittelyjä luokan omilla määrittelyillä A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 25

26 V.II.2.1. Alityyppi Määritelmä: Tyypin T alityyppi on sellainen tietotyyppi S, johon voidaan soveltaa mitä tahansa tyyppiin T sovellettavaa operaatiota Tällöin tyyppi T on tyypin S ylityyppi Tärkeä kysymys: Ovatko aliluokat kantaluokan alityyppejä? Alityyppiperiaate: Alityypin olio voi ohjelmassa esiintyä missä tahansa sen ylityypin odotetaan esiintyvän. Pätee, jos aliluokalle sallitaan periytymisessä ainoastaan laajentaminen ja erikoistaminen Ei kaikissa kielissä kaikessa periytymisessä A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 26

27 V.II.2.2. Tiedon kätkentä Näkyvyysmääreet säätelevät, mitkä kantaluokan ominaisuudet ovat aliluokan käytettävissä Usein julkisten jäsenten lisäksi vain suojatut jäsenet ovat näkyvissä aliluokassa A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 27

28 V.II.2.3. Moniperiytyvyys (multiple inheritance) Luokalla voi olla monta kantaluokkaa Luokkahierarkia muodostaa verkon Jos ei sallita, luokkahierarkia puurakenne A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 28

29 V.II.2.4. Piilottaminen ja uudelleen määrittely *x++=*y++ Aliluokassa määritellään jäsenmuuttuja, joka on samanniminen kuin peritty -> uusi määrittely piilottaa yliluokan muuttujan Aliluokan metodi, jolla on sama prototyyppi (sama nimi ja parametrit) kuin kantaluokan metodilla, määrittelee uudelleen (override) perityn metodin Yliluokan muuttujiin ja metodeihin voidaan yleensä viitata yliluokan nimen ja tarkoitukseen määrätyn operaattorin avulla A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 29

30 V.II.3 Monimuotoisuus ja dynaaminen sidonta Monimuotoisuus (polymorfismi, polymorphism) *x++=*y++ Tässä: saman operaattorin tai funktion sitominen erilaisiin toteutuksiin tilanteesta riippuen Olio-ohjelmoinnissa saavutetaan viestin dynaamisella sidonnalla metodin määrittelyyn Tämä mekanismi + alityyppiperiaate -> monimuotoiset muuttujat = tyyppi on kantaluokka, mutta muuttujat voivat olla jonkin aliluokan olioita Tunnetaan myös alityyppimonimuotoisuutena (subtype polymorphism) A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 30

31 V.II.3 Monimuotoisuus ja dynaaminen sidonta (2) Dynaaminen sidonta Helpottaa ohjelmiston ylläpitoa: Muodostettaessa uusia luokkia, kantaluokkien koodia ei tarvitse perustoiminnoissa muuttaa Tapahtuu ohjelman suorituksen aikana -> tehottomampaa kuin staattinen sidonta -> joissakin oliokielissä ohjelmoija voi säätää, mitkä metodit sidotaan dynaamisesti Tyypintarkistus vaikeutuu, koska monimuotoinen muuttuja voi osoittaa tietotyyppiin, joka on tietotyypin määrittelemän tyypin alityyppi A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 31

32 V.II.3 Monimuotoisuus ja dynaaminen sidonta (3) Abstrakti luokka Käytännöllinen, kun oliohierarkian kantaluokka niin yleinen, ettei siitä kannata muodostaa olioita Ei voi luoda instansseja Voi sisältää abstrakteja metodeja, joille määritelty ainoastaan prototyyppi, mutta ei lainkaan runkoa HUOM! Älä sekoita abstraktiin tietotyyppiin! A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 32

33 V.2.4 Oliokielten suunnittelukysymyksiä 1. Onko kielessä muita tietotyyppejä kuin olioita? 2. Ovatko aliluokat aina perittyjen luokkien alityyppejä? 3. Sallitaanko moniperiytyminen? 4. Miten hoidetaan olioiden muistinvaraaminen ja - vapauttaminen? 5. Sidotaanko metodit aina dynaamisesti vai onko staattinen sidonta mahdollista? 6. Sallitaanko sisäkkäisiä luokkia? A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 33

34 V.II.5 Olio-ohjelmointi C++:ssa V.II.5.1. Periytyminen C++:ssa *x++=*y++ class derived_class_name: acces_mode base_class_name { }; <data members> <member functions> acces_mode jokin näkyvyysmääre (public, protected tai private) Säätelee, miten kantaluokan jäsenet näkyvät aliluokassa A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 34

35 V.II.5.1. Periytyminen C++:ssa (2) Tavallisimmin access_mode = public Aliluokassa näkyvät kaikki public ja protected tyyppiset muuttujat ja funktiot, näkyvyysmääre on sama kuin kantaluokassa private tyyppisiin jäseniin aliluokalla ei ole pääsyä Aliluokka on kantaluokan alityyppi access_mode =private access_mode = protected Näkyvyydet aliluokassa rajoitettuja Kummassakaan tapauksessa aliluokka ei ole kantaluokan alityyppi A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 35

36 V.II.5.1. Periytyminen C++:ssa (3) C++:ssa ei yhteistä kantaluokkaa Voidaan tehdä luokka, jolla ei lainkaan jäseniä C++:ssa moniperiytyminen Luokkahierarkia verkkomainen Voi aiheuttaa nimitörmäyksiä Dynaamisen sidonnan toteuttaminen hankalampaa A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 36

37 V.II.5.2. Dynaaminen sidonta C++:ssa Ei automaattista Esimerkki. class Kanta{ public: }; void kanta_funktio(){ cout << "Kanta"; } Koodi AliLuokka ali; kutsuja(&ali); tulostaa: Kanta Siis ei dynaaminen sidonta class AliLuokka:public Kanta{ public: void kanta_funktio(){ cout << Aliluokka"; } }; void kutsuja( Kanta *k) { k->kanta_funktio(); } A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 37

38 V.II.5.2. Dynaaminen sidonta C++:ssa (2) Muutos edelliseen: class Kanta{ public: }; virtual void kanta_funktio() { } cout << "Kanta"; Tulostuu Aliluokka *x++=*y++ Jäsenfunktio virtuaalinen -> sidotaan dynaamisesti Virtuaalisuus periytyy kaikkiin aliluokkiin A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 38

39 V.II.5.3. Abstraktit luokat C++:ssa Luokka abstraktiksi sisällyttämällä luokkaan vähintään yksi puhtaasti virtuaalinen funktio (ei runkoa, merkitään nollaksi) Esimerkki class Kanta{ public: }; virtual void kanta_funktio() = 0; -> Luokasta abstrakti, eikä siitä voi luoda oliota Aliluokasta konkreettinen -> määriteltävä uudelleen puhtaasti virtuaaliset metodit A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 39

40 V.II.6. Olio-ohjelmointi Javassa Tarkastellaan eroja C++ -kieleen Puhtaampi oliokieli kuin C++ Ei täysin: primitiiviset tietotyypit eivät olioita Javassa jokainen luokka perii (extends) täsmälleen yhden luokan Ellei luokan ilmoiteta perivän toista luokkaa, se perii Object-luokan C++ :luokan ei tarvitse periä mitään Javan luokkahierarkia puumainen, C++:n verkkomainen A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 40

41 V.II.6.1. Rajapinnat (interfaces) Javassa Otettu moniperiytymisen korvaajaksi Eräänlaisia puhtaasti abstrakteja luokkia, jotka sisältävät ainoastaan metodien esittelyt Luokka toteuttaa (implements) rajapinnan Toteuttaa metodit (kaikki jos konkreeettinen luokka) Voi toteuttaa useita rajapintoja Rajapinnat voivat periä toisia rajapintoja A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 41

42 V.II.6.2. Abstraktit luokat Javassa Luokka erikseen määriteltävä abstraktiksi Abstrakti luokka voi sisältää abstrakteja metodeja Esimerkki public abstract class MessagePasser { } public abstract void send(object o); public void send(int i) { } send(new Integer(i)); public abstract Object receive(); public int receiveint{ return(((integer)this.receive()).intvalue()); } A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 42

43 V.II.6.3. Periytyminen ja dynaaminen sidonta Javassa Periytymisen tyyppiä ei voi säätää Periytyminen vastaa C++:n public-periytymistä public- ja protected-tyyppiset jäsenet aliluokassa näkyvissä ja niiden näkyvyydet säilyvät samana private-tyyppiset jäsenet eivät näy aliluokassa Aliluokka on aina kantaluokan alityyppi Periytymisketju voidaan katkaista final-määreellä Luokka final -> ei voida periä Metodi final -> ei voida uudelleenmääritellä Javassa kaikki sidonta dynaamista, ohjelmoija ei voi muuttaa A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 43

44 V.II.6.4. Yhteenveto Javasta Javan luokkamalli pohjautuu C++ -kielen malliin, yksinkertaistettu vahvasti Moniperiytyminen korvattu rajapintojen käytöllä Kaikki luokat perivät yhteisen perusluokan (Object) Kaikki sidonta on dynaamista Periytymiseen liittyvät näkyvyysmääreet poistettu C++:ssa hankala järjestelmä A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 44

45 V.II.6.4. Yhteenveto Javasta (2) C++ -kielen ystäväjärjestelmästä luovuttu Muutoksista C++:aan vain moniperinnän puuttumista voidaan arvostella rajoittavan ohjelmoijan työtä Sekä Java että C++ sallivat sisäkkäiset luokat Arvosteltu huonona ratkaisuna A Ohjelmointikielten periaatteet, ADT ja olio-ohjelmointi 45

Abstraktit tietotyypit ja olio-ohjelmointi

Abstraktit tietotyypit ja olio-ohjelmointi Abstraktit tietotyypit ja olio-ohjelmointi Edellisessä osassa käsiteltiin aliohjelmia prosessiabstraktion välineenä. Prosessiabstraktio onkin vanhimpia ohjelmointikielten suunnittelukäsitteitä ja sisältynyt

Lisätiedot

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

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin 812347A Olio-ohjelmointi, 2015 syksy 2. vsk II Johdanto olio-ohjelmointiin Sisältö 1. Abstraktiosta 2. Olio-ohjelmoinnin historiaa 3. Olioparadigmasta 4. Peruskäsitteiden esittely 2 II.1 Abstraktiosta

Lisätiedot

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance) Sisällys JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys Periytyminen (inheritance) Näkyvyys (visibility) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E. Hyvönen: Java Osa

Lisätiedot

812341A Olio-ohjelmointi, I Johdanto

812341A Olio-ohjelmointi, I Johdanto 812341A Olio-ohjelmointi, 2016 I Johdanto Sisältö 1. Abstraktiosta 2. Olio-ohjelmoinnin historiaa 3. Olioparadigmasta 4. Peruskäsitteiden kertausta 812341A Olio-ohjelmointi, Johdanto 2 1 Abstraktiosta

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IV Periytyminen ja monimuotoisuus

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IV Periytyminen ja monimuotoisuus 812347A Olio-ohjelmointi, 2015 syksy 2. vsk IV Periytyminen ja monimuotoisuus Sisältö 1. Periytyminen 2. Johdanto monimuotoisuuteen 3. Ylikuormittaminen 4. Uudelleenmäärittely 5. Muuttujien monimuotoisuus

Lisätiedot

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

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Rajapinnat Java-kieli ei tue luokkien moniperintää. Jokaisella luokalla voi olla vain yksi välitön yliluokka. Toisinaan olisi

Lisätiedot

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 12. Periytyminen 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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

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

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi. 11. Rajapinnat 11.1 Sisällys Johdanto. Abstrakti luokka vai rajapinta? Rajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Sisällys. 11. Rajapinnat. Johdanto. Johdanto Sisällys 11. ajapinnat. bstrakti luokka vai rajapinta? ajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen avulla.

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

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

Sisällys. Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2 8. Periytyminen 8.1 Sisällys Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2 Mitä on periytyminen? Periytyminen (inheritance) tarkoittaa luokan piirteiden

Lisätiedot

Mitä on periytyminen?

Mitä on periytyminen? 8. Periytyminen 8.1 Sisällys Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Filosofinen ja käytännönläheinen näkökulma periytymiseen. Periytymisen soveltaminen. 8.2 Mitä

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton 2015 syksy 2. vsk IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton Sisältö 1. Johdanto luontimalleihin 2. Proxy 3. Factory Method 4. Prototype 5. Singleton Suunnittelumallit Proxy et.

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä

Lisätiedot

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

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä 2016 IX Olioiden välisistä yhteyksistä Sisältö 1. Johdanto 2. Kytkentä 3. Koheesio 4. Näkyvyydestä 2 Johdanto n Ohjelmassa syntyy kytkentöjä olioiden välille Toivottuja ja epätoivottuja n Näkyvyys vaikuttaa

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet Pakkaukset ja määreet Toisiinsa liittyvät luokkatiedostot voidaan koota pakkauksiksi. Luo hierarkiaa ja järjestystä ohjelmistotuotteeseen.

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

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

12. Monimuotoisuus 12.1

12. Monimuotoisuus 12.1 12. Monimuotoisuus 12.1 Sisällys Johdanto. Periytymismekanismi määrittää alityypityksen. Viitteiden sijoitus ja vertailu. Staattinen ja dynaaminen luokka. Myöhäinen ja aikainen sidonta. Parametrinvälitys

Lisätiedot

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä LUOKAN MÄÄRITTELY Luokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion muodostimet ja luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Olion kopioiminen

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely

Lisätiedot

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

812341A Olio-ohjelmointi Peruskäsitteet jatkoa 812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

812336A C++ -kielen perusteet, 21.8.2010

812336A C++ -kielen perusteet, 21.8.2010 812336A C++ -kielen perusteet, 21.8.2010 1. Vastaa lyhyesti seuraaviin kysymyksiin (1p kaikista): a) Mitä tarkoittaa funktion ylikuormittaminen (overloading)? b) Mitä tarkoittaa jäsenfunktion ylimääritys

Lisätiedot

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

12. Monimuotoisuus 12.1

12. Monimuotoisuus 12.1 12. Monimuotoisuus 12.1 Sisällys Johdanto. Periytymismekanismi määrittää alityypityksen. Viitteiden sijoitus ja vertailu. Staattinen ja dynaaminen luokka. Parametrinvälitys eräs monimuotoisuuden sovellus.

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

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

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 11. Luokka Opetellaan seuraavaksi, miten omia luokkia kirjoitetaan. Aikaisemmin olikin jo esillä, että luokka on tietorakenne, joka sisältää sekä tiedot (attribuutit) että niitä käsittelevät aliohjelmat

Lisätiedot

Olio-ohjelmointi Syntaksikokoelma

Olio-ohjelmointi Syntaksikokoelma C++-kielen uusia ominaisuuksia Olio-ohjelmointi Syntaksikokoelma 31.10.2008 Bool-tietotyyppi: Totuusarvo true (1), jos ehto on tosi ja false (0) jos ehto epätosi. Dynaaminen muistinvaraus: Yhden muuttuja

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

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1 Ohjelmistojen mallintaminen Luokkakaaviot 5.12.2008 Harri Laine 1 Olioiden palvelut Palvelun kuvauksessa annettavat tiedot näkyvyys (kuten attribuuttien kohdalla) nimi (ainoa välttämätön osa) parametrit

Lisätiedot

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä 582104 Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä 1 Luokkamallin lisäpiirteitä Erilaiset yhteystyypit kooste kompositio Muita luokkien välisiä suhteita riippuvuudet periytyminen eli luokkahierarkia

Lisätiedot

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 6. Metodit 6.1 Sisällys Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 Oliot viestivät metodeja kutsuen Olio-ohjelmoinnissa ohjelma

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 VIII Poikkeusten ja tapahtumien käsittely Sisältö 1. Poikkeusten käsittelyn käsitteitä ja suunnittelukriteerejä 2. Poikkeusten käsittely C++:ssa 3. Poikkeusten

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen Sisällys 6. Metodit Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit).. Metodien ja muun luokan sisällön järjestäminen. 6.1 6.2 Oliot viestivät metodeja kutsuen Oliot viestivät

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus

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

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

Virtuaalifunktiot ja polymorfismi

Virtuaalifunktiot ja polymorfismi Virtuaalifunktiot ja polymorfismi 16 Virtuaalifunktiot ja polymorfismi Polymorfismi on niin tehokas olio-ohjelmoinnin ominaisuus, että tulet varmastikin käyttämään sitä lähes kaikissa C++-ohjelmissasi.

Lisätiedot

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi Solidity älysopimus ohjelmointi Sopimus suuntautunut ohjelmointi Merkle puu Kertausta eiliseltä Solidity on korkean tason älysopimus ohjelmointikieli Muistuttaa olio-ohjelmointia Javalla Sopimuskoodi on

Lisätiedot

4. Luokan testaus ja käyttö olion kautta 4.1

4. Luokan testaus ja käyttö olion kautta 4.1 4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään

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

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

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

Pakkauksen kokoaminen

Pakkauksen kokoaminen 13. Pakkaukset 13.1 Sisällys Pakkauksen kokoaminen package-määrettä käyttäen. Pakkaukset ja hakemistorakenne. Pakkauksen luokkien käyttö muissa pakkauksissa importlauseen avulla. Pakkaukset ja näkyvyys.

Lisätiedot

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU Ohjelmointi 2 Jussi Pohjolainen TAMK» Tieto- ja viestintäteknologia Tietotyypeistä C++ - kielessä useita tietotyyppejä Kirjaimet: char, wchar_t Kokonaisluvut: short, int, long Liukuluvut: float, double

Lisätiedot

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

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto Sisällys 18. bstraktit tietotyypit Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.1 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

KOHDELUOKAN MÄÄRITTELY

KOHDELUOKAN MÄÄRITTELY KOHDELUOKAN MÄÄRITTELY Kohdeluokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Taulukon alkiona

Lisätiedot

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat: 1. Luokan jäsenet Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat: class luokan_nimi tyypit: enum, struct, class, typedef

Lisätiedot

C# olio-ohjelmointi perusopas

C# olio-ohjelmointi perusopas Paavo Räisänen C# olio-ohjelmointi perusopas www.ohjelmoimaan.net Tätä opasta saa vapaasti kopioida, tulostaa ja levittää ei kaupallisissa tarkoituksissa. Kuitenkaan omille nettisivuille opasta ei saa

Lisätiedot

18. Abstraktit tietotyypit 18.1

18. Abstraktit tietotyypit 18.1 18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

4. Olio-ohjelmoinista lyhyesti 4.1

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

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

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 perusteet Teoria ja ohjelmointitehtävät Java-kielen perusteet 3 YLEISKATSAUS KURSSIN SISÄLTÖIHIN 10 JAVA-KIELEN PERUSTEET 10 OPISKELUN ALOITTAMINEN

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015

815338A Ohjelmointikielten periaatteet 2014-2015 815338A Ohjelmointikielten periaatteet 2014-2015 X Skriptiohjelmointi Sisältö 1. Johdanto 2. Skriptikielten yleispiirteitä 3. Python 815338A Ohjelmointikielten periaatteet, Skriptiohjelmointi 2 X.1 Johdanto

Lisätiedot

lausekkeiden tapauksessa. Jotkin ohjelmointikielet on määritelty sellaisiksi,

lausekkeiden tapauksessa. Jotkin ohjelmointikielet on määritelty sellaisiksi, 3.5. TYYPIT 59 indeksit voidaan siirtää kielitasolta oliotasolle siirryttäessä alkamaan nollasta. Vain mikäli indeksin alin arvo oliotasolla ei ole tiedossa ennen suorituksen alkua, on tarpeen lisätä taulukko-olioon

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

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

Common Lisp Object System

Common Lisp Object System Common Lisp Object System Seminaarityö Tomi Vihtari Ohjelmointikielten periaatteet kevät 2004 Helsingin Yliopisto Tietojenkäsittelytieteen laitos Järvenpää 5. huhtikuuta 2004 Sisältö 1 Johdanto... 1 2

Lisätiedot

Javan perusteita. Janne Käki

Javan perusteita. Janne Käki Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).

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

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

Luokkamalli LUOKKAKAAVIO. Tämän osan sisältö. Luokkamalli. Luokka ja olio. Luokkakaavio (class diagram) 4 Luokkamalli Rakenteet mittojen mukaan. Mitat rakenteen mukaan. Tämän osan sisältö Luokkakaavio luokkakaavion elementti attribuutit operaatiot määreet Olioiden väliset suhteet kytkös kooste yleistys rajapinta

Lisätiedot

19. Olio-ohjelmointia Javalla 19.1

19. Olio-ohjelmointia Javalla 19.1 19. Olio-ohjelmointia Javalla 19.1 Sisällys Olioiden esittely ja alustus. Metodit Yleistä metodeista. Mihin metodeja tarvitaan? Metodien määrittely. Omat metodit: nimeäminen, paikka, kutsuminen, parametrit

Lisätiedot

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus Sisällys 19. Olio-ohjelmointia Javalla Olioiden esittely ja alustus. Metodit Yleistä metodeista. Mihin metodeja tarvitaan? Metodien määrittely. Omat metodit: nimeäminen, paikka, kutsuminen, parametrit

Lisätiedot

C++11 lambdat: [](){} Matti Rintala

C++11 lambdat: [](){} Matti Rintala C++11 lambdat: [](){} Matti Rintala bool(*)(int) Tarve Tarve välittää kirjastolle/funktiolle toiminnallisuutta Callback-funktiot Virhekäsittely Käyttöliittymät Geneeristen kirjastojen räätälöinti STL:n

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

12 Mallit (Templates)

12 Mallit (Templates) 12 Mallit (Templates) Malli on määrittely, jota käyttämällä voidaan luoda samankaltaisten aliohjelmien ja luokkien perheitä. Malli on ohje kääntäjälle luoda geneerisestä tyyppiriippumattomasta ohjelmakoodista

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

Periytyminen. Luokat ja olio-ohjelmointi

Periytyminen. Luokat ja olio-ohjelmointi Periytyminen 15 Periytyminen Tässä luvussa käsittelemme aihetta, joka on olio-ohjelmoinnin kaikkein tärkein osa - periytyvyys. Periytyvyyden avulla voimme luoda uusia luokkia uudelleenkäyttämällä ja laajentamalla

Lisätiedot

16. Javan omat luokat 16.1

16. Javan omat luokat 16.1 16. Javan omat luokat 16.1 Sisällys Johdanto. Object-luokka: tostring-, equals-, clone- ja getclass-metodit. Comparable-rajapinta: compareto-metodi. Vector- ja ArrayList-luokat. 16.2 Javan omat luokat

Lisätiedot

4.2. ALIOHJELMAT 71. Tulosvälitteisyys (call by result) Tulosvälitteinen parametri kopioidaan lopuksi

4.2. ALIOHJELMAT 71. Tulosvälitteisyys (call by result) Tulosvälitteinen parametri kopioidaan lopuksi 4.2. ALIOHJELMAT 71 sisältyä kaikki tarvittavat kontrollia ohjaavat rakenteet. Jos se on lause (yleensä lohko), niin on ratkaistava, miten paluuarvo ilmaistaan. Joissakin kielissä (esimerkiksi Pascal)

Lisätiedot

Oliot viestivät metodeja kutsuen

Oliot viestivät metodeja kutsuen 6. Metodit 6.1 Sisällys Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit). Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 Oliot viestivät metodeja kutsuen

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

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

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

Pakkauksen kokoaminen

Pakkauksen kokoaminen 13. Pakkaukset 13.1 Sisällys Pakkauksen kokoaminen (package). Pakkaukset ja hakemistorakenne. Pakkauksen luokkien käyttö muissa pakkauksissa (import). Pakkaukset ja näkyvyys. 13.2 Pakkauksen kokoaminen

Lisätiedot

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä 582104 Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä 1 Luokkamallin lisäpiirteitä Erilaiset yhteystyypit kooste kompositio Muita luokkien välisiä suhteita riippuvuudet periytyminen eli luokkahierarkia

Lisätiedot

sama tyyppi (joka vastaa kaikkien mahdollisten arvojen summa-aluetta). Esimerkiksi

sama tyyppi (joka vastaa kaikkien mahdollisten arvojen summa-aluetta). Esimerkiksi 3.5. TYYPIT 51 3.5.3 Kielitason tyypit Staattinen tyypitys Kielitasolla tyyppejä käytetään sulkemaan pois joitakin merkittäviä ja automaattisesti tunnistettavissa olevia merkitysopillisia virheitä (oliotason

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

TIES542 kevät 2009 Oliokielten erityispiirteitä

TIES542 kevät 2009 Oliokielten erityispiirteitä TIES542 kevät 2009 Oliokielten erityispiirteitä Antti-Juhani Kaijanaho 2. maaliskuuta 2009 Oliosuuntautuneisuus (engl. object-orientation) ja olio-ohjelmointi (engl. objectoriented programming) ovat laajassa

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite 2015 syksy 2. vsk VII Suunnittelumallit Adapter ja Composite Sisältö 1. Johdanto rakennemalleihin 2. Adapter (Sovitin) 3. Composite (Rekursiokooste) Suunnittelumallit Adapter ja Composite 2 VII.1 Johdanto

Lisätiedot

HELIA 1 (14) Outi Virkki Käyttöliittymät ja ohjlmiston suunnittelu

HELIA 1 (14) Outi Virkki Käyttöliittymät ja ohjlmiston suunnittelu HELIA 1 (14) Luento 7 Käyttöliittymäolio... 2 Olioajattelun perusteet... 3 Tavoitteet... 3 Peruskäsitteet... 4 Olio / Olioinstanssi / Olion esiintymä... 4 Ominaisuudet... 4 Toiminnot... 4 Olioluokka /

Lisätiedot

20. Javan omat luokat 20.1

20. Javan omat luokat 20.1 20. Javan omat luokat 20.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang Sisällys 20. Javan omat luokat Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.1 20.2 Java API Java-kielen Application Programming Interface (API)

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

Luokkakaavion laatiminen

Luokkakaavion laatiminen Luokkakaavion laatiminen Kartoita luokkaehdokkaita Karsi ehdokkaita Tunnista olioiden väliset yhteydet Täsmennä luokkakuvauksia määrittelemällä attribuutit Määrittele yhteyksiin liittyvät osallistumisrajoitteet.

Lisätiedot