1 / 70

Olio-ohjelmointi

Olio-ohjelmointi. 1. osa: diat 1-70 (1. välikoe) Kymenlaakson ammattikorkeakoulu Jarkko Ansamäki, 2001. Sisältö ja tavoitteet. Tavoitelauseet opinto-oppaasta:

micol
Download Presentation

Olio-ohjelmointi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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. KYAMK/J. Ansamäki/Olio-ohjelmointi

  3. 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). KYAMK/J. Ansamäki/Olio-ohjelmointi

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

  5. 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. Harjoitustyö KYAMK/J. Ansamäki/Olio-ohjelmointi

  6. 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 Sisältö KYAMK/J. Ansamäki/Olio-ohjelmointi

  7. 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ö Sisältö (2) KYAMK/J. Ansamäki/Olio-ohjelmointi

  8. 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... KYAMK/J. Ansamäki/Olio-ohjelmointi

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

  10. 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… KYAMK/J. Ansamäki/Olio-ohjelmointi

  11. 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*/} KYAMK/J. Ansamäki/Olio-ohjelmointi

  12. 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ä. KYAMK/J. Ansamäki/Olio-ohjelmointi

  13. 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; Muuttujat KYAMK/J. Ansamäki/Olio-ohjelmointi

  14. 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 KYAMK/J. Ansamäki/Olio-ohjelmointi

  15. 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... KYAMK/J. Ansamäki/Olio-ohjelmointi

  16. 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; • +, -, *, /, %, ++, --, ==, <, >, <=, >=, !=, +=, -=, *=, /= KYAMK/J. Ansamäki/Olio-ohjelmointi

  17. 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 KYAMK/J. Ansamäki/Olio-ohjelmointi

  18. 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; KYAMK/J. Ansamäki/Olio-ohjelmointi

  19. 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.”. KYAMK/J. Ansamäki/Olio-ohjelmointi

  20. 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. KYAMK/J. Ansamäki/Olio-ohjelmointi

  21. 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. KYAMK/J. Ansamäki/Olio-ohjelmointi

  22. 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. KYAMK/J. Ansamäki/Olio-ohjelmointi

  23. 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. KYAMK/J. Ansamäki/Olio-ohjelmointi

  24. 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. KYAMK/J. Ansamäki/Olio-ohjelmointi

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

  26. 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. Muita sanoja KYAMK/J. Ansamäki/Olio-ohjelmointi

  27. 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ä Muita sanoja (2) KYAMK/J. Ansamäki/Olio-ohjelmointi

  28. 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 KYAMK/J. Ansamäki/Olio-ohjelmointi

  29. 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. KYAMK/J. Ansamäki/Olio-ohjelmointi

  30. 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); } KYAMK/J. Ansamäki/Olio-ohjelmointi

  31. Funktiot • Funktio koostuu funktion tyypistä, nimestä, parametrien esittelystä ja funktion rungosta. Esim: • intfunktio(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. KYAMK/J. Ansamäki/Olio-ohjelmointi

  32. 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); KYAMK/J. Ansamäki/Olio-ohjelmointi

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

  34. 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 KYAMK/J. Ansamäki/Olio-ohjelmointi

  35. 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 KYAMK/J. Ansamäki/Olio-ohjelmointi

  36. 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 KYAMK/J. Ansamäki/Olio-ohjelmointi

  37. 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); } KYAMK/J. Ansamäki/Olio-ohjelmointi

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

  39. 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...) KYAMK/J. Ansamäki/Olio-ohjelmointi

  40. 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)); } KYAMK/J. Ansamäki/Olio-ohjelmointi

  41. 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 KYAMK/J. Ansamäki/Olio-ohjelmointi

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

  43. 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. KYAMK/J. Ansamäki/Olio-ohjelmointi

  44. Olio • 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 KYAMK/J. Ansamäki/Olio-ohjelmointi

  45. 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. KYAMK/J. Ansamäki/Olio-ohjelmointi

  46. 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 KYAMK/J. Ansamäki/Olio-ohjelmointi

  47. 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). KYAMK/J. Ansamäki/Olio-ohjelmointi

  48. 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 KYAMK/J. Ansamäki/Olio-ohjelmointi

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

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

More Related