11/20: Konepelti auki

Samankaltaiset tiedostot
Ohjelmointi 1 / syksy /20: IDE

7/20: Paketti kasassa ensimmäistä kertaa

19/20: Ikkuna olio-ohjelmoinnin maailmaan

5/20: Algoritmirakenteita III

8/20: Luokat, oliot ja APIt

4/20: Algoritmirakenteita II

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

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

13/20: Kierrätys kannattaa koodaamisessakin

7. Oliot ja viitteet 7.1

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

2 Konekieli, aliohjelmat, keskeytykset

Sisällys. 15. Lohkot. Lohkot. Lohkot

14/20: Keittokirja I

Sisällys. 16. Lohkot. Lohkot. Lohkot

Jakso 4 Aliohjelmien toteutus

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

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

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

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

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 13. lokakuuta 2009

Groovy. Niko Jäntti Jesper Haapalinna Group 31

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

Ohjelmoinnin peruskurssien laaja oppimäärä

ITKP102 Ohjelmointi 1 (6 op)

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

1. Omat operaatiot 1.1

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

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

17/20: Keittokirja IV

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

4. Olio-ohjelmoinista lyhyesti 4.1

Luento 4 Aliohjelmien toteutus

ELM GROUP 04. Teemu Laakso Henrik Talarmo

19. Olio-ohjelmointia Javalla 19.1

Javan perusteita. Janne Käki

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Olio-ohjelmointi Javalla

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

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

ITKP102 Ohjelmointi 1 (6 op)

2. Olio-ohjelmoinista lyhyesti 2.1

6/20: Tietorakenteita

Sisältö. 22. Taulukot. Yleistä. Yleistä

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

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

Jakso 4 Aliohjelmien toteutus

Java kahdessa tunnissa. Jyry Suvilehto

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages

Käännös, linkitys ja lataus

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

Aliohjelmat. 1 Kutsusekvenssit. Antti-Juhani Kaijanaho 5. helmikuuta 2007

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet

Sisältö. 2. Taulukot. Yleistä. Yleistä

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

ITKP102 Ohjelmointi 1 (6 op)

3/20: Algoritmirakenteita I

Ohjelmointi 2 / 2010 Välikoe / 26.3

Algoritmit 1. Luento 3 Ti Timo Männikkö

samalla seuraavaan puoliavaruuteen (sukupolveen), jota siivotaan harvemmin.

Arto Salminen,

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

3. Luento: Muistin hallinta. Tommi Mikkonen,

9/20: Puhu mun stdinille

Luento 4 Aliohjelmien toteutus

Apuja ohjelmointiin» Yleisiä virheitä

Java-kielen perusteet

12/20: Bitit talteen

Luokat ja oliot. Ville Sundberg

5. HelloWorld-ohjelma 5.1

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

ITKP102 Ohjelmointi 1 (6 op)

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

58131 Tietorakenteet ja algoritmit (syksy 2015)

9. Periytyminen Javassa 9.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Antti-Jussi Lakanen Ohjelmointi 1, C# / kevät 2011

Jakso 4 Aliohjelmien toteutus. Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

14. Poikkeukset 14.1

Teemun juustokakku Rekisterien, välimuistin, muistin, levymuistin ja magneettinauhan nopeudet suhteutettuna juuston hakuaikaan juustokakkua tehdessä?

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

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

Ohjelmoinnin peruskurssi Y1

Rajapinnat ja olioiden välittäminen

Muuttujat ja kontrolli. Ville Sundberg

TIEA341 Funktio-ohjelmointi 1, kevät 2008

815338A Ohjelmointikielten periaatteet

Transkriptio:

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 rakenne Tutustutaan debuggeriin ja sitä käyttäen laskukoneen (engl. computer) toimintaan, alkaen HelloWorldistä: Debuggerin idea; esimerkkinä Eclipsen debuggeri. Suorituskohta, kontrollin siirtyminen, kutsupino. Pinokehys; paikallinen muuttuja ja parametri Muistimallin idea. Javan muistimalli: pino, keko. Muuttujan näkyvyysalue Viitteen käsite. Primitiivityypin ja olioviitteen eron kristallisointi. Joitain alustavia huomioita: Dynaaminen muistinvaraus ja roskienkeruu Ohjelmointi 1 / syksy 2007 p.2/11

Debuggerilla tutkitaan suoritusta Katsotaan Eclipsen debuggerin käyttöä erilaisten Java-ohjelmien kanssa. Debuggerin avulla voidaan tutkia koodin suoritusjärjestystä ja muistin sisältöä. Suoritus voidaan saada pysähtymään ennaltamäärättyyn ohjelmakoodin kohtaan Suoritusta voidaan askeltaa yksi suorite kerrallaan. Hyötyä viallisten ohjelmien korjaamisessa (tutkitaan, miten suoritus etenee kohti kaatumista) Hyötyä on myös ohjelmoinnin yksityiskohtien oppimisessa! Ohjelmointi 1 / syksy 2007 p.3/11

Kontrolli ja rakenteet Suorituskohta, kontrollin siirtyminen Rakenteiden suoritus: Silmukat, ehdot ym. tutkitaan mm. aiempia esimerkkikoodeja debuggerilla. Aliohjelmien kutsupino: viimeksi kutsuttu päällimmäisenä; alimpana main(), jota ajoympäristö kutsuu. Aliohjelman kutsuminen laittaa uusimman kutsun pinon päälle. Paluussa pinon päältä lähtee päällimmäinen pois. Ohjelmointi 1 / syksy 2007 p.4/11

Aliohjelma-aktivaatio Hieno nimi aliohjelmakutsun suorittamiselle on aktivaatio. Siinä: Parametrien lukuarvot (viite on toteutuksen kannalta luku siinä missä primitiivitkin) siirtyvät kopioina aliohjelman käyttöön. Kontrolli siirtyy aliohjelman koodiin; ts. kone alkaa suorittaa aliohjelman koodia Koodi voi aktivoida muita aliohjelmia (tai itseään rekursiivisesti, mutta silti jokainen aktivaatio on oma yksilönsä kutsupinossa ja parametrit välittyvät normaalisti!) Lopulta aktivaatio päättyy: Kontrolli siirtyy kutsujalle siihen kohtaan, jossa kutsu oli. Paluuarvo sijoittuu lausekkeeseen. Jokaisella aliohjelman aktivaatiolla on oma kehys paikallisille muuttujille. Parametrit ovat aivan kuin paikalliset muuttujat. Paikallinen muuttuja on olemassa vain aktivaation ajan! Ohjelmointi 1 / syksy 2007 p.5/11

Näkyvyysalue 1/2: Vielä paikallisempia muuttujia? Lohkorakenteisessa kielessä, kuten Java, muuttujan laajin näkyvyysalue (engl. scope) on se rakenne, jossa se on esitelty, esim. aliohjelman runko (paikallinen muuttuja / parametri) tai metodimäärittelyn ulkopuolinen luokan runko (luokan attribuutti). Näkyvyysalue voi olla myös esim. for-lause, jossa esitellään pelkästään silmukalle paikallinen indeksimuuttuja. Javan syntaksissa lohko on yksi mahdollinen lauserakenne, joten muuttujista voi tehdä milloin vain paikallisempia kuin aliohjelman parametrit tai esim. aliohjelmarungon alussa esitellyt paikalliset muuttujat. Tarpeettomasti tällaista ei sovi tehdä... Ohjelmointi 1 / syksy 2007 p.6/11

Näkyvyysalue 2/2: Syntyvät, kuolevat, pinossa elävät Muuttujaa ei voi käyttää sen näkyvyysalueen ulkopuolella. Itse asiassa suorituksen aikana muuttujan lukuarvon tallentamiseen on ylipäätään olemassa tallennustilaa vain esittelyhetkestä siihen saakka kun sitä ympäröivän rakenteen suoritus loppuu. Paikallinen muuttuja on olemassa vain sen aikaa kuin sen näkyvyysalueen suoritus kestää! Näkyvyysalueensa sisälle sijoittuvissa lohkoissa muuttuja näkyy Sisemmässä rakenteessa voi esitellä ulomman lohkon muuttujanimen uudelleen, jolloin nimi peittyy (sarjaa ei yleensä kovin selkeä koodiratkaisu... ) Ohjelmointi 1 / syksy 2007 p.7/11

Muistimalli: missä bitit ovat? Tietokoneessa muisti on sähkökomponentteja... matalimmalla tasolla kone käsittelee sitä kuin siinä olisi vain peräkkäin numeroituja 8-bittisiä muistipaikkoja, joista jokaiseen voi kirjoittaa uuden sisällön tai lukea edellisen. Ei mennä siihen aiheeseen nyt. Päällä on abstraktioita, kuten kaikessa. Muistimalli (engl. memory model) tarkoittaa tapaa, jolla ajatellaan asioiden sijoittuvan koneen muistissa. Se on lähellä tai kaukana laitteiston näkökulmaa käytetystä työkalusta riippuen. Java-ohjelmoijan tarvitsema muistimalli on Javan virtuaalikoneen määritelmän mukainen. Ohjelmointi 1 / syksy 2007 p.8/11

Javan muistimalli: pino ja keko Javan virtuaalikoneen (ja siis Java-kielen) muistimallissa on kaksi erillistä aluetta: Pinomuisti (engl. stack), jossa on aliohjelmien (metodien) paikalliset muuttujat ja parametrit kullakin aktivaatiolla on oma kehys, joka sisältää muistipaikat primitiiveille ja viitteille. Kekomuisti (engl. heap), jossa on olioiden sisäiset tilat. Olion luonti varaa muistia keosta vähintään niin paljon kuin uuden yksilön tila tarvitsee. Ohjelmointi 1 / syksy 2007 p.9/11

Paikalliset pinoon, oliot kekoon Kun metodi käyttää paikallista muuttujaa tai parametria, se käyttää pinoa. Kun (ei-staattinen) metodi käyttää olion attribuuttia, se käyttää kekoa (erityisesti sen olioyksilön muistipaikkoja, johon viittaa metodin aktivaatioon aina implisiittisesti liittyvä this -viite. Joissain kielissä vastaava this tai self -viite tulee parametrina, mutta Javassa se kuvitellaan ; esim. jokuskänneri.nextline() voisi kutsua metodia java.util.scanner.nextline() siten että this -viitteeksi tulee sama mikä viitemuuttuja jokuskänneri kutsuhetkellä on) Ohjelmointi 1 / syksy 2007 p.10/11

Alustavia huomioita Olion luonti on esimerkki dynaamisesta muistinvarauksesta: aina kun tarvitaan uusi olio, sen voi tehdä new:llä. Oliot myös kuolevat! Kuka vapauttaa tarpeettomasti varatun muistin? Nykyaikaisissa ohjelmointikielissä on ns. automaattinen roskienkeruu, joka vapauttaa käyttämättömäksi jääneille olioille dynaamisesti varatun muistin. Virtuaalikone osaa päätellä, että jos ei ole yhtään viitettä olioon, sitä oliota ei enää tarvita ja sen tarvitsema kekomuisti voidaan vapauttaa uusien, syntyvien olioiden käyttöön. Ohjelmointi 1 / syksy 2007 p.11/11