KYAMK/J. Ansamäki/Olio-ohjelmointi

Slides:



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

TIES322 Tietoliikenneprotokollat 2
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
© 2004 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice Java-perusteet Kari Kujansuu
Kurssilla käytettävät työkalut
Sulautettu laite T720906, 6 op TTE9snL
Syksy 2001 KYAMK/J.Ansamäki/Olio- ohjelmointi71 Olio-ohjelmointi 2. osa: diat (2. välikoe) KYMENLAAKSON AMMATTIKORKEAKOULU Jarkko Ansamäki, 2001.
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
Olio-mallinnus Tietojärjestelmien suunnittelu KYAMK, Liiketalous, Kouvola Jarkko Ansamäki, 2002.
Brade & Vilpponen 1 ITP2TM003 Java-ohjelmointi I Kevät op.
Sovellusohjelman suunnittelu & toteutus
C-ohjelmointi, kevät 2006 Taulukot Binääritiedostot Luento
Antti-Jussi Lakanen Nuorten peliohjelmointi 2009 / Jyväskylän yliopisto.
Kurssilla käytettävät työkalut
Sisältö / 1 Tietokonegrafiikan jatkokurssi T op Lauri Savioja 1/06 Kurssin sisältö.
@ Leena Lahtinen Helia OHJELMOINTITAITO ICT02D 12 OP.
OHJELMOINTITAITO ICT02D 12 ECTS. OPINTOJAKSON TOTEUTUS  KESTO: –  PÄIVÄOPISKELIJAT: – KAKSI LUOKAA (SUOMI) –YKSI LUOKKA (ENGLANTI)
Ohjelman jakaminen useampaan tiedostoon Olio-ohjelmointi (C++) KYAMK, Jarkko Ansamäki 2001.
Sami Jantunen LTY/Tietotekniikan osasto
13. Hyvä ohjelmointitapa (osa 1)
© Jukka Harju, Jukka Juslin
VINKKEJÄ JA IDEOITA LUKION KEMIAN 1. KURSSIN TOTEUTUKSEEN
Funktion esittely eli prototyyppi tMyn1 Funktion esittely eli prototyyppi Funktion esittely (function declaration) kertoo funktion nimen, parametrien tyypit.
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Visual Basic -ohjelmointi
Tietokoneohjelman suoritus opintojakso Olioajattelu ja –ohjelmointi, osa I Hans Nieminen Syksy 2013.
1 © Jukka Juslin Web-käyttöliittymä Jukka Juslin.
Visual Basic –ohjelmointi ITP2TM002
UMF I Luento 7. Viime kerralta Lue II.5 ja II.6. Lause II.5.1 tapauksessa f(x,y) = (x, sin(y)) ja g(x, y) = (cos(x), y). Voit lähettää epäselvistä kohdista.
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.
OHJELMOINTITAITO ICT02D 12 ECTS. OPINTOJAKSON TOTEUTUS  KESTO: –  AVOIMEN OPISKELIJAT: – YKSI LUOKA (SUOMI) – LUOKKA ICT02O-1.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
1 Ohjelmointikielten varhaishistoria Esa-Matti Miettinen
Toteutus. Ohjelmointikielen valinta Käytetään samaa kuin muutkin Työkalujen laatu Usein asiakas määrää Yleensä valittu jo ennen toteutusta Osaaminen vs.
Tietokantaohjelmointi Kevät Tietokantaohjelmointi 3 op  Tavoite  Opiskelija osaa ohjelmoida tietokantoja käyttäviä käyttöliittymäsovelluksia.
© Jukka Juslin1 Osio2 Olio-ohjelmointi: Merkkijonot eli Stringit Jukka Juslin.
Jouni Juntunen Oulun seudun ammattikorkeakoulu Liiketalouden yksikkö
Johdatus ohjelmointiin – C kielen peruselementit Tutkijayliopettaja Manne Hannula Opetusharjoittelu (ohjaava opettaja Jukka Jauhiainen)
Oliot ja luokat Oliot ja luokat Oliot (object) ja luokat (class) ovat keskeisiä olio- ohjelmoinnin käsitteitä. Olio-ohjelmointi on ohjelmointiparadigma,
Ohjelmointi työtä n. 16 h/vko onnistumista työtä n. 16 h/vko onnistumista #include int main(void) { std::cout
Tiedon vieminen funktiolle tMyn1 Tiedon vieminen funktiolle, parametrit Argumentin vieminen funktiolle voidaan toteuttaa kahdella menetelmällä: –Pass-by-Value.
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
.NET ohjelmointi C#-kielellä RäsSe, lokakuu 2004.
1.0 TE DiplomityöEsitelmä/ / JT Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olio- orientoituneeseen ohjelmointiin Jukka.
Oulun ammattikorkeakoulu Liiketalouden yksikkö Sirpa Puolakka Työhuone A129 Syksy 2014 K1007LI Markkinoinnin perusteet 6 op.
Yksikkötestaus ● Yksikkötestauksella tarkoitetaan lähdekoodiin kuuluvien yksittäisten osien testaamista. Termi yksikkö viittaa ohjelman pienimpiin mahdollisiin.
5. Kapselointi.
Tentti.
1. Olio-ohjelmointi.
OHJELMOINTITAITO ICT02D 12 Leena Lahtinen Helia
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
5. HelloWorld-ohjelma.
Kurssin arviointi ja työtavat
Uusien opiskelijoiden aloitus, lukio
Liikesaksan perusteet II
14. Hyvä ohjelmointitapa.
OHJELMOINTITAITO ICT02D 12 Leena Lahtinen Helia
Rakennetun ympäristön paikkatiedot RYM-C2004
Tervetuloa jatkamaan DIGITAALI- TEKNIIKAN opiskelua!
Toinen kotimainen kieli, ruotsi
5. HelloWorld-ohjelma.
OHJELMOINTITAITO ICT02D 12 ECTS.
OHJELMOINTITAITO ICT02D 12 ECTS.
3. Attribuutit.
4. Luokan testaus ja käyttö olion kautta
OHJELMOINTITAITO ICT02D 12 ECTS.
Vinkkejä juridiikan opiskeluun
Esityksen transkriptio:

KYAMK/J. Ansamäki/Olio-ohjelmointi 1. osa: diat 1-70 (1. välikoe) Kymenlaakson ammattikorkeakoulu Jarkko Ansamäki, 2001 Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Sisältö ja tavoitteet Tavoitelauseet opinto-oppaasta: Kurssin jälkeen opiskelija osaa suunnitella annettuun yksinkertaiseen ongelmaan olio-pohjaisen ratkaisun ja toteuttaa tämän C++ -ohjelmointikielellä. Uutena tavoitteena myös helpompi siirtyminen myöhemmin Microsoftin C++ sertifikaattikursseille. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Kurssin toteutus Oppitunnit: Luentoja - käydään asiat ensin läpi teoriatasolla. Harjoituksia - opiskelijat ratkovat tehtäviä yksin/pienissä ryhmissä. Vaikeat asiat/malliratkaisut myöhemmin yhteistyöllä. Harjoitustyö tunneilla tehtyjen tehtävien pohjalta (30% arvosanasta). Tentti (70% arvosanasta). Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Muut yleiset asiat Kirjallisuus Muu materiaali ja lähteet Tuntien aikataulu Vastaanotto Yksi tentti vai kaksi tenttiä? Kysymyksiä, toivomuksia? Jatkokurssit... Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Harjoitustyö Harjoitustyö palautettava kirjallisesti viimeistään kurssin viimeisellä oppitunnilla. Tämän jälkeen palautettavat harjoitustyöt kärsivät sakkoa yhden pisteen/päivä (maksimipisteet: 30). Harjoitustyönä tehdään C++ -kielellä puhelinmuistio/asiakas-kortisto. Pisteytys implementoitujen ominaisuuksien mukaan. Vinkkejä ja lisätietoja oppitunneilla. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Sisältö C-kielen kertaus Yleistä main Tulostus Muuttujat Visual C++ 6.0 -ohjelmointiympäristö Syöttö Aritmetiikka if switch for while Muita komentoja Muita tietotyyppejä Funktiot Uudet piirteet Olio-ohjelmointi Perinteiset lähestymistavat Oliokeskeinen lähestymistapa Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Sisältö (2) Miksi olioita? Luokka ja olio Luokka vs. struct Luokan suunnittelu Luokan määritys Muodostimet Automaattinen olio Dynaaminen olio Olioiden välinen tiedonvälitys Julkinen perintä Tiedostojen käsittely Harjoitustyö Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi C-kielen kertaus Kurssilla olio-ohjelmointia opiskellaan käyttäen C++ -kieltä, joka on C-kielen laajennus. C-kielen perusasioiden pitäisi siis olla hallinnassa kurssin alussa. Uuteen kehitysympäristöön tutustumisen jälkeen aloitammekin kurssin kevyellä C-kielen kertauksella... Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

Visual C++ 6.0 -ohjelmointiympäristö Työympäristön osat. Konsolisovelluksen koodaus, kääntäminen, suorittaminen. Yhteensopivuus Borlandin kääntäjän kanssa. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi C:n kertaus: Yleistä Puolipiste ; päättää lauseen. Useampi lause voidaan koota yhteen käyttämällä aaltosulkuja { } (koottu lause). Koodin alussa voi olla esikääntäjälle tarkoitettuja direktiivejä. Alkavat #-merkillä. Esitellään kirjastoja, vakioita, tehdään makroja… Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi main Jokaisessa ohjelmassa on main-funktio. main aloittaa ohjelman. Kun main pääsee loppuun, ohjelma päättyy. Esimerkkejä: void main(void){ /* ohjelman runko */ } int main(){ /* koodia */ return 0; } void main(int argc, char *argv){ /*koodi*/} Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tulostus C-kielessä ei ole sisäänrakennettuja komentoja tulostusta varten vaan käytetään valmiita kirjastopalveluita: stdio.h ANSI C:n kirjasto printf(”Kaksi plus kolme on %i!\n”,(2+3)); iostream.h (ostream.h) cout<<”Kaksi plus kolme on ”<<(2+3)<<”!\n”; Kirjastot liitetään koodiin #include-direktiivillä. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Muuttujat Muuttujat täytyy määritellä ennen käyttöä. Määrittelyssä kerrotaan muuttujan tyyppi ja nimi. Samalla rivillä voidaan pilkuilla eroteltuna esitellä saman tyyppisiä muuttujia. Määrittelyn yhteydessä muuttuja voidaan myös alustaa. Eri tyyppejä: int, short, long, unsigned float, double char HUOM! * ja & Esim: int a, b=3, *c; Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 1. Avaa Visual C++ ja uusi text edit. Kirjoita ”Hello world!”-tyyppinen ohjelma. Talleta ohjelmasi (päätteeksi .cpp). Rakenna ja aja ohjelmasi: build workspace punainen huutomerkki Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Syöttö Käytetään jälleen kirjastopalveluita: stdio.h scanf(”%i”,&a); scanf-funktiolle välitetään siis muuttujan, johon tietoa halutaan lukea, muistiosoite. iostream.h (istream.h) cin>>a; Esiteltyjen palveluiden lisäksi kirjastoista löytyy myös muita... Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Aritmetiikka Lauseke sellainen osa ohjelmaa, jolla on jokin arvo, esimerkiksi jokin muuttuja tai aritmeettinen lauseke: a+3 Lauseke ei voi esiintyä koodissa yksinään, vaan se on aina osa jotain lausetta. Esimerkiksi sijoituslause (aka asetuslause): a=a+3; +, -, *, /, %, ++, --, ==, <, >, <=, >=, !=, +=, -=, *=, /= Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 2 Tee ohjelma, joka kysyy käyttäjältä kahta lukua. Tämän jälkeen ohjelma tulostaa: lukujen summan lukujen erotuksen lukujen tulon lukujen osamäärän ja lukujen jakojäännöksen Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi if Valinta tekemisen ja tekemättä jättämisen välillä. Rakenne: if(lauseke) lause; jos lauseke on tosi, lause suoritetaan, muutoin lausetta ei suoriteta. if(lauseke) lause; else lause; if(lauseke) { koottu lause } else if(lauseke2)… muuttuja = lauseke ? lauseke2 : lauseke3; Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 3 Muuta tehtävän 2 ohjelmaa siten, että annetuista luvuista aina suuremmasta vähennetään pienempi. Myös osamäärää ja jakojäännöstä laskettaessa valitaan jakajaksi luvuista pienempi. Mikäli jako menee tasan ei ohjelma ilmoita jakojäännökseksi nollaa, vaan että ”jako meni tasan.”. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi switch Valinta monesta eri vaihtoehdosta. Rakenne: switch(lauseke){ case vakio1: lauseita; break; case vakio2: lauseita; break; … case vakioN: lauseita; break; default: lauseita;} Lausekkeen arvo selvitetään ja arvoa verrataan case-haaroissa oleviin vakioarvoihin. Mikäli arvot ovat samat, suoritetaan kyseisen haaran lauseet ja break-komento poistaa kontrollin switch-rakenteesta. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 4 Muuta tehtävän 3 koodia niin, että käyttäjä antaa laskutoimituksen kokonaisuudessaan. Esim: 3%2 Tämän jälkeen suoritettava operaatio valitaan switch-rakenteessa. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi for Definiitti toisto. Rakenne: for(silmukkamuuttuja; ehto; päivitys) lause; Suluissa ilmoitetaan ensin silmukkamuuttuja, joka saatetaan myös alustaa samalla. Seuraavaksi tarkistetaan onko ehto voimassa. Jos ei, niin kontrolli siirtyy silmukkarakennetta seuraavaan kohtaan. Jos on, niin lause suoritetaan. Tämän jälkeen suoritetaan silmukkamuuttujan arvon päivitys ja tarkistetaan ehto seuraavaa toistoa varten. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 5 Lisää aiemmin toteutettuun laskin-ohjelmaan potenssiin korotus. Toteuta potenssiin korotus käyttäen for-silmukkaa. Lisää ohjelmaan myös lukujen listaaminen yhden askelin pienemmästä arvosta suurempaan arvoon. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi while (ja do-while) Indefiniitti toisto. Rakenne: while(lauseke) lause; Lausetta toistetaan niin kauan kun lauseke on tosi. Lausetta ei suoriteta välttämättä yhtään kertaa. do lause; while(lauseke); Toiminta muuten sama, kuin tavallisessa while-lauseessa, mutta nyt ehdon tarkistus on lopussa. Lause suoritetaan vähintään kerran. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 6 Muuta laskin-ohjelmaa niin, että käyttäjä voi antaa erilaisia laskutoimituksia, kunnes päättää lopettaa. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Muita sanoja continue; Siirrytään seuraavaan toistokierrokseen lauseen keskeltä. break; Siirretään kontrolli switch- tai toistolausetta seuraavaan lauseeseen. const Määritellään arvo vakioksi. auto Automaattinen muistinvarausluokka. extern Kerrotaan koodin ylläpitäjälle, että kyseessä on tämän koodin ulkopuolella toteutettu funktio. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Muita sanoja (2) goto Hyppy haluttuun nimiöön: alku:; goto alku; register Nopeasti saatavilla oleva muuttuja. signed Etuliitteellä char-muuttujaan myös neg. arvot mukaan. sizeof Parametrin tilanvaraus tavuina. static Paikallinen muuttuja pysyväksi. typedef Tietotyypin nimeäminen synonyymillä Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Muita sanoja (3) volatile Määrite kertoo, että kyseistä muuttujaa voidaan muuttaa myös lähdekoodin ulkopuolella. union Rakenne, jossa määritellään useampia muuttujia ”päällekkäin”. Varaa muistia pisimmän kenttänsä mukaan. enum struct return Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Muita tietotyyppejä Taulu/lista (määritellään myös koko) esim: int lista[10], matriisi[5][3], kuutio[3][3][3]; char sana[10], nimilista[10][10]; Lueteltu tyyppi esim: enum {ma,ti,ke,to,pe,la,su} paivat; Rakenteinen tietotyyppi struct Esimerkki seuraavalla kalvolla. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi struct #include <iostream.h> struct juttu{ int luku1, luku2; }; void main(){ struct juttu homma; homma.luku1=2; homma.luku2=3; cout<<homma.luku1<<"+” <<homma.luku2<<"=" <<(homma.luku1+homma.luku2); } Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Funktiot Funktio koostuu funktion tyypistä, nimestä, parametrien esittelystä ja funktion rungosta. Esim: int funktio(int a, int b, char c) { /*koodi*/} Funktion tyyppi kertoo minkälaista tietoa funktio palauttaa return-lauseella. Parametrit ovat funktiolle vietävää tietoa. Funktion paluuarvo palaa kohtaan josta funktiota kutsuttiin. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Funktiot (kutsu) Funktiota kutsutaan antamalla sen nimi ja mahdollisten parametrien arvot suluissa nimen perässä. Mikäli funktio palauttaa arvon, on myös mietittävä käytetäänkö paluuarvoa ja miten. Vastaus=Lasku(operandi1, operandi2); Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 7 Muuta laskinohjelmaa niin, että kaikki laskutoimitukset suoritetaan erillisissä funktioissa. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Osoittimet Osoitinmuuttuja on muuttuja, jolla on muistiosoite arvona. Osoitinmuuttujalla voidaan osoittaa toista muuttujaa ja käsitellä osoitetun muuttujan sisältöä. Ensin osoitinmuuttuja määritellään int x=1, *p; /* luotiin int-muuttuja x, joka sai arvokseen luvun 1 ja osoitin p, jolla voidaan osoittaa int-tyyppisen muuttujan muistiosoitetta */ p x ? 1 Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Osoittimet (2) Sitten osoitinmuuttuja voidaan asettaa osoittamaan toista muuttujaa. Jos muuttujan nimen eteen laitetaan osoiteoperaattori (&-merkki), palautuu kyseisen muuttujan muistiosoite: p=&x; /* Nyt osoitinmuuttuja p on asetettu osoittamaan muuttujan x muistiosoitetta. */ p x 1 Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Osoittimet (3) Nyt osoitetun muuttujan sisältöön voidaan viitata sisältöoperaattorilla (*-merkki). Sisältöoperaattoria ei pidä sekoittaa osoitinmuuttujan määrittelyssä käytettävään tyyppimääritteeseen kuuluvaan tähtimerkkiin. *p=15; /* Asetetaan p:n osoittamaan muistiosoitteeseen arvo 15. Tällöin muuttujan x arvoksi (jota p siis osoittaa) muuttuu 15. */ p x 15 Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 8 Korjaa seuraavaa koodia niin että funktion kutsu vaihtaa muuttujien arvot pääohjelmaan: void vaihto(int a, int b){ int apu; apu=a; a=b; b=apu; } main(){ int x=3, y=5; printf(”%i %i\n”,x,y); vaihto(x,y); printf(”%i %i\n”,x,y); } Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Uudet piirteet Muuttujien esittely koodin keskellä. Funktion parametrien oletusarvot. Funktioiden ylikuormitus. Referenssimuuttuja (&). Rivinloppukommentti (//). Ja oliopiirteet… Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

Funktion parametrien oletusarvot Funktion parametreille voidaan antaa oletusarvoja: summa(int a, int b=0, int c=0){ return(a+b+c); } Mikäli funktion kutsussa ei anneta parametrejä, käytetään oletusarvoja: int sum=summa(3,2); // a=3,b=2,c=0 => sum=5 Oletusarvot aina parametrilistan lopussa oleville parametreille. (Mieti miksi...) Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

Funktioiden ylikuormitus Ohjelmassa voi olla useita samannimisiä funktioita, jotka erotetaan toisistaan parametrien tyyppien ja määrien perusteella: int Fun(int x){ return(x+3); } void Fun(float x){ cout<<x; } int Fun(char x){ return(int(x)); } Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

Referenssi- eli viittausmuuttuja Muuttujasta saa viittausmuuttujan laittamalla &-merkin muuttujan nimen eteen. Viittaustyyppiä olevan muuttujan arvo on viittaus johonkin muuttujaan. Viittausmuuttuja on aina alustettava määrittelyn yhteydessä, jonka jälkeen muuttujaa, johon viitataan ei enää voi vaihtaa. Sijoitus viittausmuuttujaan sijoittaa arvon itse asiassa viitattavaan muuttujaan. int i; int &ir = i; ir = 2; // i:n arvoksi saadaan kaksi Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 9 Muuta tehtävässä 8 tehtyä koodia niin että ohjelmassa käytetään viittausmuuttujia osoittimien sijasta. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Perinteiset lähestymistavat Toimintokeskeinen Tietokeskeinen Oliokeskeinen lähestymistapa Tiedot ja toiminnot yhdistetään yhdeksi kokonaisuudeksi, olioksi. Keskeisessä asemassa ylläpidettävyys ja uudelleenkäytettävyys. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Aluksi määritellään jokin rakenne jota luotavat oliot noudattavat. Usein tätä rakennetta kutsutaan luokaksi (class). Esimerkkejä luokista ja olioista: Kissa - Karvinen Asiakas - Matti_Meikäläinen TYÖTK - Heikkinen_Kaija Luku - Palkka Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Olioajattelu Kootaan yhteen liittyvistä tiedoista ja funktioista yhtenäisiä kokonaisuuksia, luokkia. Luokkiin voi sitten luoda olioita, joilla on luokassa määritellyt tiedot ja funktiot. Tiedot pyritään pitämään piilossa niin, että vain olio itse voi omilla funktioillaan (palveluillaan) vaikuttamaan niihin. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tiedon piilotus Kuvissa keltaisella merkityt tiedot ovat ikään kuin piilossa olioiden sisällä; niihin pääsee käsiksi vain olion tarjoamien palveluiden (funktioiden) kautta. Information hiding Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Olioiden käyttö Tiedon piilotuksella pyritään estämään väärinkäytökset. Oliosta täytyy tietää sen käyttötarkoitus ja ulkoinen rajapinta, jotta sitä voi käyttää. Ulkoinen rajapinta = olion tarjoamat palvelut (+ mahdolliset julkiset tietojäsenet). Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Perintä Olioluokkia on myös mahdollista periyttää aiemmista luokista niin, että periytetty luokka saa perityn luokan ominaisuuksista osan tai kaikki. Esimerkki MFC:n luokkahierarkiasta: CObject CCmdTarget CWnd CDialog Katso ohjeista: hierarchy chart Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

Esimerkkejä perinnästä Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

Esimerkkinä Asiakas-luokka Tarvittavia tietoja esimerkiksi: asiakasnumero nimi ja osoitetiedot, puhelinnumero bonuskertymä? Tarvittavia palveluja esimerkiksi: Tietojen syöttö Tietojen tulostus Tietojen muutto, kopiointi, …? Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 10 Suunnittele ja piirrä Henkilö-luokka henkilörekisterin tarpeisiin. Periytä Henkilö-luokasta erään yrityksen tarpeisiin seuraavat luokat: Asiakas-luokka Työntekijä-luokka Osakas-luokka Tarvitaanko muita luokkia? Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

Olioiden kommunikointi Oliot suorittavat palveluita saamiensa funktiokutsujen (palvelupyyntöjen, viestien) perusteella. Esimerkiksi: Karvinen.Vanhene(1 vuosi); Heikkinen_Kaija.Aseta(o-o arvosana, 5); Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Analyysi Ymmärryksen hankkimista ongelma-alueesta. Keskitytään olennaisiin kohtiin Ongelmakenttä analyytikolle usein vieras Kiire. Tarvitaan yhteinen kieli kaikkien osallisten kesken. Löydettävä ongelmakohtia joita alueen asiantuntijatkaan eivät ole huomanneet. Muuttuvat vaatimukset. Uudelleenkäytettävyys. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

Keinoja monimutkaisuuden hallintaan Abstraktio Tiedon piilotus Perintä Assosiointi Viestien käyttö tiedonvälityksessä Erilaiset organisointimenetelmät Mittakaavojen käyttö Käyttäytymismallit Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Analyysimenetelmiä Functional Decomposition Data Flow Approach Information Modeling An Observation on Stability vs. Volatility Object-Oriented Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Olioanalyysi Etsitään luokat ja oliot Tunnistetaan rakenteet Perintä ja osista kokonaisuus. Tunnistetaan aihekokonaisuudet. Määritellään tietojäsenet. Määritellään palvelut. Piirretään malli käyttäen sovittuja merkintöjä. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 11 Tutustutaan ensin yhdessä muutamiin kalvoilla oleviin esimerkkeihin. Laadi olioanalyysi perheestä. Avioliitto? Lapsia? Perintäsuhteet? Viestit??? Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Oliosuunnittelu Kun analyysi vain kuvaa ongelmakenttää luokkien ja olioiden avulla, niin suunnittelu jatkaa tätä mallia ottaen huomioon tarpeet, havaitut puutteet, ... Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

Olio-ohjelmointi ja C++ C++ on laajennus alkuperäisestä C-kielestä. C on C++:n osajoukko. Kehittäjä: Bjarne Stroustrup. Sisältää olio-ominaisuudet, mutta ei ole aito olio-ohjelmointikieli vaan hybridi. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Luokka Määritys aloitetaan varatulla sanalla class. Tietojäsenet, palvelut (funktioiden esittely) ja inline-funktiot { }; -lohkon sisällä. Näkyvyysalueilla määritellään tietojen ja funktioiden saatavuus luokan ulkopuolelta: private: luokan sisäiseen käyttöön public: yleisessä käytössä olevat jäsenet protected: luokkahierarkiaan kuuluvien käyttöön Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

Luku-luokka (esimerkki) class Luku{ private: int arvo; public: int Palauta(){ return arvo; }; void Aseta(int); }; void Luku::Aseta(int x){ arvo=x; } Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 12 Tee Henkilo-luokka, jossa ylläpidettävinä tietoina: henkilön etunimi henkilön sukunimi henkilön puhelinnumero halutessa myös e-mail jne. toteutettavina palveluina: tietojen asettaminen tietojen tulostaminen Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Muodostimet Muodostin on funktio, jota kutsutaan kun luokkaan luodaan uusi olio. Myös muodostimia voi ylikuormittaa, mikäli muodostimella ei ole yhtään parametriä, on kyseessä ns. oletusmuodostin. Muodostin ei ole MITÄÄN tyyppiä ja sen nimi on sama kuin luokan nimi. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 13 Lisää Henkilo-luokkaan kaksi muodostinta: Oletusmuodostin asettaa tietoihin ”Ei asetettu”. Toinen muodostin saa tiedot syötteenä ja asettaa ne olion argumentteihin. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tuhoaja Vastaavasti kun olio ’kuolee’, kutsutaan tuhoajaa (hajotin, destructor). Tuhoaja ei ole myöskään mitään tyyppiä. Myös tuhoajan nimi on muuten sama kuin luokan nimi, mutta nimen edessä on matomerkki ~. ~Luku(){ cout<<”Olio kuoli…\n”; }; Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Automaattinen olio Automaattinen olio on elossa määrittelystään määrittelylohkon loppuun. Esimerkkejä määrittelystä: Luku olio, toinen_olio(2), oliotaulu[5]; olion luominen kutsuu oletusmuodostinta ja toinen_olio luodaan käyttäen arvon asettavaa muodostinta. Olion palveluita käytetään piste-operaattorin avulla: olio.Aseta(7); Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 14 Tee pääohjelma, jossa Henkilo-luokkaan luodaan automaattinen olio. Luodulle oliolle asetetaan arvot ja asetetut arvot tulostetaan näytölle sopivia palveluita käyttäen. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Dynaaminen olio Dynaaminen olio toteutetaan osoittimien avulla: Luku *dynaaminen; Muistia varataan komennolla new: dynaaminen=new Luku; Palveluita käytetään nuoli-operaattorin avulla: dynaaminen->Aseta(8); Muistia vapautetaan komennolla delete: delete dynaaminen; Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

KYAMK/J. Ansamäki/Olio-ohjelmointi Tehtävä 15 Sama kuin tehtävä 14, mutta käytetään dynaamisia olioita. Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi