Luokan muodostintMyn1 Luokan muodostin Olioihin kohdistuvia automaattisia toimintoja ovat luonti, alustus, kopiointi, sijoitus, tyhjennys ja tuhoaminen.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
Osion kaksi kertaus Jukka Juslin © Jukka Juslin.
6. Metodit.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
Luokkien väliset koostesuhteet
Luokan otsikko- ja toteutustiedosto tMyn1 Luokan otsikko- ja toteutustiedosto •Tähän asti ohjelmaesimerkit on toteutettu siten, että kaikki koodi on yhdessä.
Muutamia käsitteitätMyn1 Muutamia käsitteitä •Perintä (inheritance) on luokkien välinen suhde, jossa johdettu luokka (subclass, derived class) perii kantaluokan,
Ict1td002: Ohjelmointitaito Kertaus Osio 2 - luokat - ilmentymät - viittaus- ja arvomuuttuja - ilmentymien taulukointi HAAGA-HELIA IltaTiko.
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
22. Taulukot.
Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely •Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän.
Käännösaikaiset virheilmoitukset • Tulee silloin, kun koodissa on jotain sellaista, joka ei ole Javan syntaksin mukaista • Esim. – Syntax error, insert.
13. Pakkaukset.
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Olio-ohjelmoinnin perusteet luento 3
OLIO-OHJELMOINTI PERUSTEET PERUSTIETOTYYPIT
Poikkeuskäsittely- lohkot tMyn1 Poikkeuskäsittelylohkot try-catch Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw ja.
Luokan muodostintMyn1 Luokan muodostin Olioihin kohdistuvia automaattisia toimintoja ovat luonti, alustus, kopiointi, sijoitus, tyhjennys ja tuhoaminen.
Vakio-osoitin ja osoitin vakioon tMyn1 Vakio-osoitin ja osoitin vakioon Tavallinen osoitin voi vaihtaa osoitettavaa keskusmuistialuetta. Tämä voidaan tehdä.
9. Periytyminen Javassa.
TIETO JA TIETOKONEOHJELMA TIETOKONEOHJELMA KÄSITTELEE TIETOJA TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA MENETELMILLÄ.
Sami Jantunen LTY/Tietotekniikan osasto
Dynaamiset oliottMyn1 Dynaamiset oliot Dynaamisen olion tunnuksen esittely ja olion määrittely voivat tapahtua yhtäaikaisesti tai eri aikaan. Dynaamisen.
Olioon kohdistuvia perustoimintoja tMyn1 Olioon kohdistuvia perustoimintoja Kopiointimuodostin (copy constructor) alustaa olion tietojäsenet saman luokan.
Virtuaaliset jäsenfunktiot tMyn1 Virtuaaliset jäsenfunktiot Virtuaalinen jäsenfunktio on esiteltävä monimuotoisessa kantaluokassa. Virtuaalisen jäsenfunktion.
© Jukka Harju, Jukka Juslin
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
7. Oliot ja viitteet.
Luokan määrittely class-määreellä tMyn1 Luokan määrittely class-määreellä Luokan määrittely tarkoittaa luokan tietojäsenten esittelyä ja jäsenfunktioiden.
String-vertailusta ja Scannerin käytöstä (1/2)
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
19. Olio-ohjelmointia Javalla
Lueteltu tyyppitMyn1 Lueteltu tyyppi Lueteltu tyyppi on tietotyyppi, jonka arvot luetellaan erikseen tyypin määrittelyn yhteydessä. Lueteltua tietotyyppiä.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Olioon kohdistuvia perustoimintoja tMyn1 Olioon kohdistuvia perustoimintoja Kopiointimuodostin (copy constructor) alustaa olion tietojäsenet saman luokan.
22. Taulukot.
Poikkeukset Yleistä Virheeseen varautuminen tarkoittaa sitä, että ohjelmoija huomioi koodia kirjoittaessaan ajonaikaisen virheen mahdollisuuden.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Johdetun luokan olion esittely... tMyn1 Johdetun luokan olion esittely ja määrittely Esittelyluokka tarkoittaa olion tunnuksen luokkaa. Määrittelyluokka.
FunktiottMyn1 Funktiot Funktiot voidaan jakaa –Kirjastofunktioihin, jotka ovat valmiina kaikkien käytössä. Erikoisempien kirjastofunktioiden käyttöönotto.
Poikkeustenkäsittely- lohkot tMyn1 Poikkeustenkäsittelylohkot try-catch Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw.
Oman poikkeus- käsittelyfunktion tMyn1 Oman poikkeuskäsittelyfunktion määrittely Funktion tulisi muodostaa ainoastaan sellaisia poikkeuksia, jotka on sallittu.
Monimuotoinen luokka tMyn1 Monimuotoinen luokka Monimuotoinen luokka mahdollistaa saman jäsenfunktion toteutuksen monella tavalla. Tällöin puhutaan virtuaalisesta.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
Olio-ohjelmoinnin perusteet luento 2
Olio-ohjelmoinista lyhyesti. 2.2 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen.
5. Kapselointi.
3. Olio-ohjelmoinista lyhyesti
7. Oliot ja viitteet.
Poikkeustenkäsittelylohkot try-catch
2. Taulukot.
Ohjelman keskeytys virhetilanteessa
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Muutamia käsitteitä Perintä (inheritance) on luokkien välinen suhde, jossa johdettu luokka (subclass, derived class) perii kantaluokan, perusluokan (superclass,
2. Taulukot.
6. Metodit.
7. Oliot ja viitteet.
13. Pakkaukset.
4. Attribuutit.
3. Attribuutit.
4. Luokan testaus ja käyttö olion kautta
Esityksen transkriptio:

Luokan muodostintMyn1 Luokan muodostin Olioihin kohdistuvia automaattisia toimintoja ovat luonti, alustus, kopiointi, sijoitus, tyhjennys ja tuhoaminen. Automaattiset toiminnot voivat aktivoitua järjestelmän käynnistämänä tai ohjelmoijan käynnistämänä. Olion luontiin liittyvät vaiheet ovat olion tilanvaraus ja olion alustus.

Luokan muodostintMyn2 Olion tuhoamiseen liittyvät vaiheet ovat olion tyhjennys ja olion tilanvapautus. Olion tilanvaraus- ja tilanvapautushetki määräytyy olion muistinvarausluokan perusteella.

Luokan muodostintMyn3 Olion muistinvarausluokka voi olla Automaattimen –Olio on paikallinen lohkossa. –Järjestelmä varaa oliolle keskusmuistitilan olion määrittelyn yhteydessä pinosta. –Järjestelmä vapauttaa oliolle varatun keskusmuistitilan automaattisesti lohkon loppuessa. Dynaaminen –Ohjelmoija varaa oliolle keskusmuistitilan new-operaattorilla, tilanvaraus tapahtuu vapaasta muistista eli keosta (heap).

Luokan muodostintMyn4 –Ohjelmoija vapauttaa tilan delete-operaattorilla. –Olioon voidaan viitata monen eri tunnuksen avulla, tunnukset ovat yleensä paikallisia lohkossa. Staattinen –Olio on static-määreellä esitelty paikallinen olio. –Järjestelmä varaa oliolle keskusmuistitilan pääohjelman käynnistyksen yhteydessä. –Järjestelmä vapauttaa oliolle varatun keskusmuistitilan pääohjelman loppuessa.

Luokan muodostintMyn5 Olion luontiin eli tilanvaraukseen liittyy olion tunnuksen esittely ja olion määrittely. Olion esittely liittää tunnuksen nimen olion tyyppiin eli luokkaan. Olion määrittely luo olion eli määrittely varaa keskusmuistitilan olion tiedoille. Olio saa luotaessa luokkansa mukaisen kehyksen eli luokka määrää sille varattavat tietojäsenet. Jäsenfunktiot eivät kopioidu jokaiselle oliolle, vaan kaikki luokan oliot käyttävät kertaalleen talletettua ohjelmakoodia.

Luokan muodostintMyn6 Olion alustus tapahtuu tilanvarauksen yhteydessä. Olion tietojäsenten alustustoimenpiteet sisältyvät erityiseen alustusta varten kirjoitettuun jäsenfunktioon, jota kutsutaan muodostimeksi (constructor). Yhdessä luokassa voi olla useita kuormitettuja (overloaded) muodostimia erilaisia käyttötilanteita varten. Muodostimet voidaan jakaa kolmeen ryhmään:

Luokan muodostintMyn7 oletusmuodostin (default constructor) –Olion tietojäsenten alustus oletusarvoilla. kopiointimuodostin (copy constructor) –Olion tietojäsenten alustus toisesta oliosta kopioimalla. ohjelmoijan määrittelemät parametrilliset muodostimet –Olion tietojäsenten alustus ohjelmoijan tapauskohtaisesti määräämillä alkuarvoilla.

Luokan muodostintMyn8 Overloading a function name: If you have two or more function definitions for the same function name, that is called overloading. When you overload a function name, the function definitions must have different number of formal parameters or some formal parameters of different types. When there is a function call, the compiler uses the function definition whose number of formal parameters and types of formal parameters match the arguments in the function call.

Luokan muodostintMyn9 Luokkaan määritellään muodostimia, jotta voitaisiin varmistaa, että olion tietojäsenet ovat alustettuja ja että ohjelma ei keskeydy ajonaikaiseen virheeseen tietojäsenen sisältöön viitattaessa. Muodostinta kutsutaan kerran yhtä oliota kohti. Jos olion luonnin jälkeen halutaan olion tietojäsenet alustaa uudelleen, on käytettävä vaikkapa sijoitusta. Järjestelmä kutsuu muodostinta automaattisesti olion tilanvarauksen yhteydessä.

Luokan muodostintMyn10 Olion tietojäsenten tyhjennys tapahtuu olion tilanvapautuksen yhteydessä. Tyhjennykseen liittyvät toimenpiteet sisältyvät jäsenfunktioon hajotin (destructor). Luokassa voi olla vain yksi hajotin. Hajotinta voidaan kutsua tilanvapautushetken lisäksi myös muulloin, kun olio halutaan tyhjentää - tämä on käytännössä harvinaista.

Luokan muodostintMyn11 Oletusmuodostin (default constructor) alustaa olion tietojäsenet oletusarvoilla. Oletusmuodostin voi olla kääntäjän generoima tai ohjelmoijan kirjoittama. Kääntäjä generoi luokalle oletusmuodostimen vain, jos ohjelmoija ei ole toteuttanut luokkaan muodostimia. Järjestelmä kutsuu oletusmuodostinta automaattisesti olion tilanvarauksen yhteydessä. Oletusmuodostimeksi voitaneen myös kutsua muodostinta, joka kysyy ohjelman käyttäjältä arvot tietojäsenille!

Luokan muodostintMyn12 Olion tilanvaraus aiheuttaa oletusmuodostimen kutsun: Luokka olio; Luokka olio=Luokka(); Ensimmäisellä rivillä on automaattisen olion tunnuksen esittely, joka on samalla olion määrittely. Määrittely varaa oliolle keskusmuistitilan ja aiheuttaa automaattisesti oletusmuodostimen kutsun (joka voi olla myös ohjelmoijan tekemä!). Toisella rivillä kutsutaan itse tehtyä oletusmuodostinta.

Luokan muodostintMyn13 Jos ohjelmoija haluaa olion tietojäsenet alustettavaksi tietyillä oletusalkuarvoilla, hänen on määriteltävä itse oletusmuodostin. Oletusmuodostimen esittely: class Luokka { public: Luokka();... };

Luokan muodostintMyn14 Oletusmuodostimen esittelyssä ja määrittelyssä on huomioitava mm. seuraavaa: –Oletusmuodostimen nimi on luokan nimi. –Oletusmuodostin ei saa parametreja. –Oletusmuodostimella ei ole tyyppiä, oletusmuodostin ei siis palauta return-lauseella mitään. –Oletusmuodostinta koskevat samat näkyvyyssäännöt kuin muitakin luokan jäsenfunktioita. Oletusmuodostimeksi tulkitaan sellainen muodostin, jota voi kutsua ilman argumentteja.

Luokan muodostintMyn15 Tästä syystä oletusmuodostin voi myös olla parametrillinen muodostin, jonka kaikilla parametreilla on oletusarvo. Luokassa voi olla ainoastaan yksi oletusmuodostin. Tietojäsenten alustus muodostimessa voidaan kirjoittaa kahteen kohtaan: Oletusmuodostimen toteutus: Luokka::Luokka():tieto(lauseke), tieto(lauseke),... { }

Luokan muodostintMyn16 tieto on alustettava tietojäsen, lauseke on muuttuja, vakio tai jokin muu lauseke, jonka arvolla tietojäsen alustuu. Tätä alustustapaa voidaan käytetään, kun alustuslauseke on yksinkertainen. Tietojäsenten alustus muodostimen rungossa: Luokka::Luokka() { tieto=lauseke;... }

Luokan muodostintMyn17 #include "stdafx.h" #include using namespace System; using namespace std; class Opiskelija { public: Opiskelija(); void AsetaNimi(); void AsetaRyhma(); void AsetaOpjakso(); void HaeTiedot(); private: string m_nimi; string m_ryhma; string opintojakso; };

Luokan muodostintMyn18 Opiskelija::Opiskelija() { cout<<"Oletusmuodostin, olio "<<this<<"."<<endl; AsetaNimi(); AsetaRyhma(); AsetaOpjakso(); } void Opiskelija::AsetaNimi() { cout<<"Anna nimi: "; getline(cin, m_nimi); } void Opiskelija::AsetaRyhma() { cout<<"Anna ryhm\204: "; getline(cin, m_ryhma); }

Luokan muodostintMyn19 void Opiskelija::AsetaOpjakso() { cout<<"Anna opintojakson nimi: "; getline(cin, opintojakso); } void Opiskelija::HaeTiedot() { cout<<"Perustiedot:"<<endl <<"Nimi: "<<m_nimi<<endl <<"Ryhm\204: "<<m_ryhma<<endl <<"Opintojakso: "<<opintojakso<<endl; }

Luokan muodostintMyn20 int main(array ^args) { Opiskelija eka=Opiskelija(); eka.HaeTiedot(); eka.AsetaNimi(); eka.HaeTiedot(); return 0; }

Luokan muodostintMyn21 Jos ohjelmoija haluaa alustaa oliot tilanvarauksen yhteydessä tapauskohtaisilla alkuarvoilla – siis kysymättä mitään ohjelman käyttäjältä - ohjelmoija voi määritellä luokkaan parametrillisen muodostimen. Luokassa voi olla monta parametrillista muodostinta erilaisia alustustilanteita varten (= muodostimen kuormittaminen). Parametrillinen muodostin on aina ohjelmoijan kirjoittama. Parametrillisen muodostimen esittelyssä ja määrittelyssä noudatetaan samoja sääntöjä kuin oletusmuodostimen yhteydessä.

Luokan muodostintMyn22 Huomaa kuitenkin seuraavat asiat: –Parametrillisen muodostimen parametreihin voidaan määritellä tarvittaessa myös oletusarvot. –Luokka voi sisältää useita erilaisilla parametreilla varustettuja muodostimia. –Parametrillinen muodostin, jonka kaikilla parametreilla on oletusarvo, toimii oletusmuodostimena! –Kääntäjä ei generoi oletusmuodostinta, jos ohjelmoija on määritellyt luokkaan parametrillisen muodostimen.

Luokan muodostintMyn23 #include "stdafx.h" #include using namespace System; using namespace std; class Ympyra { public: Ympyra(); void AsetaSade(); Ympyra(double); void AsetaSade(double); void LaskeAla(); private: double m_sade; };

Luokan muodostintMyn24 Ympyra::Ympyra() { cout<<"Oletusmuodostin, olio "<<this<<"."<<endl; AsetaSade(); } void Ympyra::AsetaSade() { cout<<"Anna s\204de: "; cin>>m_sade; } Ympyra::Ympyra(double sade) { cout<<"Parametrillinen muodostin, olio "<<this<<"."<<endl; AsetaSade(sade); }

Luokan muodostintMyn25 void Ympyra::AsetaSade(double sade) { m_sade=sade; } void Ympyra::LaskeAla() { const double pii= ; cout<<"Ala on "<<pii*m_sade*m_sade <<" pa-yksikk\224\204."<<endl; }

Luokan muodostintMyn26 int main(array ^args) { Ympyra eka=Ympyra(5.981); eka.LaskeAla(); eka.AsetaSade(); eka.LaskeAla(); return 0; }

Luokan muodostintMyn27 Demonstroidaan vielä, että jos parametrillisella muodostimella on oletusarvo, niin se toimii oletusmuodostimena. Oletusarvo annetaan luokan määrittelyn yhteydessä, ei muodostimen rungon toteuttamisen yhteydessä. Aluksi säilytetään tuo alkuperäinen oletusmuodostin, ja näin varmistutaan, että ohjelmassa voi olla vain yksi oletusmuodostin. Muilta osin esimerkki on sama kuin edellinen:

Luokan muodostintMyn28 //sama kuin edellisessä esimerkissä … class Ympyra { public: Ympyra(); Ympyra(double=5.0945); void AsetaSade(); void AsetaSade(double); void LaskeAla(); private: double m_sade; }; … //sama kuin edellisessä esimerkissä Nyt on kaksi muodostinta, jotka täyttävät oletus- muodostimen tunnusmerkit! Warning: 'Ympyra' : multiple default constructors specified

Luokan muodostintMyn29 //sama kuin edellisessä esimerkissä … int main(array ^args) { Ympyra eka=Ympyra(); eka.LaskeAla(); eka.AsetaSade(); eka.LaskeAla(); return 0; } Error: 'Ympyra::Ympyra' : ambiguous call to overloaded function