Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

Samankaltaiset tiedostot
TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

ITKP102 Ohjelmointi 1 (6 op)

Johdanto II. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos.

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet )

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op)

Oliot ja tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

Tarkennamme geneeristä painamiskorotusalgoritmia

ITKP102 Ohjelmointi 1 (6 op)

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

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

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

7/20: Paketti kasassa ensimmäistä kertaa

18. Abstraktit tietotyypit 18.1

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

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

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

Formaalit menetelmät

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat.

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

13. Loogiset operaatiot 13.1

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

JOHDANTO KURSSIN AIHEPIIRIIN

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

13. Loogiset operaatiot 13.1

Olio-ohjelmointi Syntaksikokoelma

sama tyyppi (joka vastaa kaikkien mahdollisten arvojen summa-aluetta). Esimerkiksi

Algoritmit 1. Luento 3 Ti Timo Männikkö

11. Javan toistorakenteet 11.1

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

Ohjelmoinnin jatkokurssi, kurssikoe

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

Tietotekniikan valintakoe

Miten osoitetaan joukot samoiksi?

Tutoriaaliläsnäoloista

Käytännön formaalit menetelmät

12. Monimuotoisuus 12.1

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

ALKEIS-kielen semantiikan aksiomaattinen määrittely

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

Algoritmit 1. Luento 10 Ke Timo Männikkö

811120P Diskreetit rakenteet

2. Olio-ohjelmoinista lyhyesti 2.1

1 Tehtävän kuvaus ja analysointi

16. Javan omat luokat 16.1

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

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Rajapinta (interface)

1. Olio-ohjelmointi 1.1

Ohjelmoinnin perusteet, kurssikoe

Nimitys Symboli Merkitys Negaatio ei Konjuktio ja Disjunktio tai Implikaatio jos..., niin... Ekvivalenssi... jos ja vain jos...

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algoritmit 1. Luento 1 Ti Timo Männikkö

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

Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Luku 3. Listankäsittelyä. 3.1 Listat

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Sopimuspohjainen olio-ohjelmointi

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

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

12. Monimuotoisuus 12.1

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

1. Omat operaatiot 1.1

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Javan perusteita. Janne Käki

7. Oliot ja viitteet 7.1

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

Algoritmit 2. Luento 14 Ke Timo Männikkö

b) Määritä myös seuraavat joukot ja anna kussakin tapauksessa lyhyt sanallinen perustelu.

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 2 (opetusmoniste, lauselogiikka )

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

4. Olio-ohjelmoinista lyhyesti 4.1

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

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

7.4 Sormenjälkitekniikka

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. lokakuuta 2016

Hohde Consulting 2004

Algoritmit 1. Luento 5 Ti Timo Männikkö

semantiikasta TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho 5. lokakuuta 2009 TIETOTEKNIIKAN LAITOS Ohjelmointikielten staattisesta

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

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

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

8/20: Luokat, oliot ja APIt

Olioiden yhteistyön mallintaminen

5/20: Algoritmirakenteita III

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

2. Perustietorakenteet

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

3. Muuttujat ja operaatiot 3.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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

Transkriptio:

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita! eli... Hyvä kaava sanoo enemmän kuin,... tuhat riviä koodia!... sata riviä tekstiä!... kymmenen diagrammia!

Sopimusohjelmointi Ohjelmat koostuvat vekottimista (moduleista, olioista ym), joilla on kullakin oma rajapintansa. Vekottimet toimivat yhteistyössä käyttämällä toisten vekottimien rajapinnan nappuloita (= aliohjelmia). Rajapinta on sopimus vekottimen käyttäjän ja toteuttajan välillä. Sopimuksessa kuvataan aliohjelmien nimi, parametrien määrä ja tyypit sekä paluuarvon tyyppi. Tämä kaikki voidaan kuvata tavallisella ohjelmointikielellä, ja näiltä osin rajapinnan oikea käyttö voidaan mekaanisesti varmistaa (esim. käännösaikaisilla tai ajonaikaisilla tarkistuksilla). Soipimuksessa kuvataan myös, mitä aliohjelma tekee. Normaalisti tätä ei voida mekaanisesti varmistaa, mutta sopimusohjelmointi tuo siihen keinoja. Sopimusohjelmointikielistä tunnetuin on Eiffel (Bertrand Meyer, 1980- luku) Tilapredikaatti on ehtolauseke, jonka totuusarvo riippuu ohjelman tilasta (muuttujien arvot).

Jälkiehdot Aliohjelman toiminta voidaan kuvata tilapredikaatilla, joka on tosi täsmälleen silloin, kun ohjelman tila on sellainen, minkälaiseksi aliohjelman pitää se jättää. Tätä tilapredikaattia sanotaan aliohjelman jälkiehdoksi. Esimerkiksi aliohjelman int jaakahdella(const int n); jälkiehto on (jos paluuarvoa merkitään rv:llä) 2 * rv = n. Jälkiehto kertoo aliohjelman käyttäjälle, mitä hän voi olettaa ohjelman tilasta aliohjelman suorituksen päätyttyä, sekä aliohjelman kirjoittajalle, mihin tilaan aliohjelman tulee ohjelma jättää päättyessään.

Esiehdot Aliohjelma ei voi toimia oikein kaikissa tilanteissa. Joko aliohjelman toteuttajan tulee tarkistaa nämä kielletyt lähtötilanteet aliohjelmassa tai hänen pitää kieltää aliohjelman kutsumisen niissä tilanteissa. Aliohjelman esiehto on tilapredikaatti, joka on tosi jos ja vain jos aliohjelmaa saa kutsua kyseisessä tilanteessa. Se kertoo aliohjelman kirjoittajalle, mitä hän voi olettaa ohjelman tilasta (mukaanlukien parametrit) aliohjelman suorituksen alkaessa, sekä aliohjelman käyttäjälle, minkälaisessa tilanteessa aliohjelmaa on lupa kutsua. Jos esiehto ei pidä aliohjelman käynnistyessä paikkaansa, ei aliohjelmalla ole mitään velvollisuutta mihinkään suuntaan. Edellä mainitulle jaakahdella-aliohjelmalle voitaisiin asettaa esiehdoksi vaikkapa n % 2 == 0 (eli n on jaollinen kahdella).

Invariantit Tilainvariantti (state invariant) on sellainen tilapredikaatti, joka on tosi ohjelman alusta ohjelman loppuun. Se on ohjelman tietorakenteiden eheydestä kertova väittämä: jos se jossain tilanteessa muuttuu epätodeksi, se kertoo, että ohjelmassa on jotain mätää. Periaatteessa tilainvariantti on näkymätön osa jokaisen aliohjelman esiehtoa ja jälkiehtoa (aliohjelma voi olettaa sen pätevän alussa, ja sen on huolehdittava, että se pätee lopussa). Olio-ohjelmoinnissa käytetään muunnelmaa tilainvariantista. Jokaisella oliolla on luokkainvariantti (class invariant), joka määrittää olion attribuuttien sallitut arvot. Luokkainvariantti on näkymätön osa jokaisen muodostimen jälkiehtoa sekä jokaisen metodin esi- ja jälkiehtoa.

C++-luokalla Inariantit: Esimerkki class Paivays { int pv, kk, v;... }; on seuraava luokkainvariantti: 1 <= kk && kk <= 12 && impl(kk == 1 kk == 3 kk = 5 kk == 7 kk == 8 kk == 10 kk == 12, pv <= 31) && impl(kk == 4 kk == 6 kk == 9 kk == 11, pv <= 30) && impl(kk == 2, pv <= 29) && impl(kk == 2 &&!(v % 4 == 0 && (v % 100!= 0 v % 400 == 0)), pv <= 28) && 1 <= pv (missä impl on aliohjelma, joka palauttaa toden, jos ja vain jos sen ensimmäinen argumentti implikoi toisen argumentin).

Joukko: Kokoelma samaa tyyppiä olevia elementtejä, joita kutsutaan joukon alkioiksi (member/element). Esimerkkejä: PienetAlkuluvut = {2, 3, 5, 7, 11, 13, 17, 19} ParillisetLuonluvut = {0, 2, 4, 6, 8, 10,...} N = {0, 1, 2, 3,...} Perusominaisuudet: 1. alkioiden esiintymiselle ei vaadita järjestystä eli {a, b} = {b, a}, 2. saman alkion esiintymien lukumäärällä ei merkitystä eli {a, b, a, a} = {b, a}.

Laukku (bag): Kokoelma samaa tyyppiä olevia elementtejä, joiden lukumäärällä on väliä. Esimerkiksi (c, a, b) = (a, b, c), mutta (a, b, b, c) (a, b, c). Eli (a, b, b, c) {a 1, b 2, c 1} Operaatioesimerkki: count (a, b, b, c) a = 1 count (a, b, b, c) b = 2 count (kissa, koira, hevonen, koira, lammas) hevonen = 1 count (kissa, koira, hevonen, koira, lammas) aasi = 0 Osalaukku: kaikki laukun a : bag X matkatavarat löytyvät myös laukusta b : bag X. Laukkujen yhdistelmä: (a, b, b, c) (b, c, d) = (a, b, b, b, c, c, d) {a 1, b 3, c 2, d 1} ja laukkujen leikkaus: (a, b, b, c) (b, c, d) = (b, c) {b 1, c 1}

Sekvenssi (seq): Kokoelma samaa tyyppiä olevia elementtejä, joiden sekä järjestyksellä että lukumäärällä on väliä. Esimerkiksi (c, a, b) (a, b, c). Eli a, b, c,... {1 a, 2 b, 3 c,...}. Operaatioesimerkki: s : seq X : a, b, c [2] = b, kissa, koira, hevonen, lammas [4] = lammas, {a, b}, {c}, {d, e} [2] = {c}, Perusoperaatioita: Operaatio Esimerkki Merkitys # # a, b, c = 3 sekvenssin pituus a, b c = a, b, c kahden sekvenssin yhdistäminen head head a, b, c = a sekvenssin ensimmäinen alkio tail tail a, b, c = b, c sekvenssin häntä eli sekvenssi, josta poistettu ensimmäinen alkio last last a, b, c = c sekvenssin viimeinen alkio front front a, b, c = a, b sekvenssin alku eli sekvenssi, josta poistettu viimeinen alkio