Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

KYAMK/J. Ansamäki/Olio-ohjelmointi

Samankaltaiset esitykset


Esitys aiheesta: "KYAMK/J. Ansamäki/Olio-ohjelmointi"— Esityksen transkriptio:

1 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

2 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

3 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

4 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

5 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

6 KYAMK/J. Ansamäki/Olio-ohjelmointi
Sisältö C-kielen kertaus Yleistä main Tulostus Muuttujat Visual C 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

7 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

8 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

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

10 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

11 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

12 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

13 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

14 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

15 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

16 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

17 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

18 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

19 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

20 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

21 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

22 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

23 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

24 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

25 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

26 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

27 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

28 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

29 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

30 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

31 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

32 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

33 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

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

35 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

36 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

37 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

38 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

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

42 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

43 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

44 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

45 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

46 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

47 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

48 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

49 Esimerkkejä perinnästä
Syksy 2001 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, …? Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

51 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

52 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

53 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

54 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

55 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

56 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

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

58 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

59 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

60 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

61 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

62 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

63 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 jne. toteutettavina palveluina: tietojen asettaminen tietojen tulostaminen Syksy 2001 KYAMK/J. Ansamäki/Olio-ohjelmointi

64 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

65 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

66 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

67 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

68 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

69 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

70 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


Lataa ppt "KYAMK/J. Ansamäki/Olio-ohjelmointi"

Samankaltaiset esitykset


Iklan oleh Google