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

Samankaltaiset tiedostot
Geneeriset tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

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

Yksinkertaiset tyypit

TIES542 kevät 2009 Oliokielten erityiskysymyksiä

Rekursiiviset tyypit

Luku 15. Parametripolymorfismi Kumitus

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

14.1 Rekursio tyypitetyssä lambda-kielessä

TIES542 kevät 2009 Rekursiiviset tyypit

TIEA341 Funktio-ohjelmointi 1, kevät 2008

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

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

Samanaikaisuuden hallinta

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

TIEA341 Funktio-ohjelmointi 1, kevät 2008

12. Monimuotoisuus 12.1

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

7/20: Paketti kasassa ensimmäistä kertaa

Osoitin ja viittaus C++:ssa

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

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

Lisää pysähtymisaiheisia ongelmia

Mikä yhteyssuhde on?

Attribuuttikieliopit

Taas laskin. TIES341 Funktio ohjelmointi 2 Kevät 2006

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

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2016

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

12. Monimuotoisuus 12.1

Rajapinta (interface)

Metodien tekeminen Javalla

Turingin koneet. Sisällys. Aluksi. Turingin koneet. Turingin teesi. Aluksi. Turingin koneet. Turingin teesi

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 8. maaliskuuta 2012

Tyyppiluokat II konstruktoriluokat, funktionaaliset riippuvuudet. TIES341 Funktio-ohjelmointi 2 Kevät 2006

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

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

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

1. Mitä tehdään ensiksi?

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

TIEA341 Funktio-ohjelmointi 1, kevät 2008

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

7. Oliot ja viitteet 7.1

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 6. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS. Pinoautomaatit.

Pinoautomaatit. Pois kontekstittomuudesta

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

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

Rekursiiviset tyypit - teoria

Luokat ja oliot. Ville Sundberg

1 Tehtävän kuvaus ja analysointi

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

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

815338A Ohjelmointikielten periaatteet

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia

Olio-ohjelmointi Syntaksikokoelma

Javan perusteita. Janne Käki

Hakemistojen sisällöt säilötään linkitetyille listalle.

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Tietotekniikan valintakoe

TIES542 kevät 2009 Oliokielten erityispiirteitä

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

4. Olio-ohjelmoinista lyhyesti 4.1

Java-kielen perusteet

11/20: Konepelti auki

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

ITKP102 Ohjelmointi 1 (6 op)

Taulukot. Jukka Harju, Jukka Juslin

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

Haskell ohjelmointikielen tyyppijärjestelmä

Groovy. Niko Jäntti Jesper Haapalinna Group 31

5/20: Algoritmirakenteita III

jäsennyksestä TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 29. syyskuuta 2016 TIETOTEKNIIKAN LAITOS Kontekstittomien kielioppien

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

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Ohjelmoinnin perusteet Y Python

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. kesäkuuta 2013

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 6. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 16. helmikuuta 2012

jäsentämisestä TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 27. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

Algoritmit 2. Demot Timo Männikkö

Ohjelmoinnin perusteet Y Python

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

Java kahdessa tunnissa. Jyry Suvilehto

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

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

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

19. Olio-ohjelmointia Javalla 19.1

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

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined

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

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

16. Javan omat luokat 16.1

Transkriptio:

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

Olion tyyppi? attribuutti on oikeastaan metodi, jonka arvo ei riipu itseviitteestä luokkapohjaisessa kielessä attribuuteilla ja metodeilla on olennainen lisäero: joka oliolla on omat attribuuttinsa saman luokan olioilla on yhteiset metodit olion tyypissä nämä on siksi eroteltava merkitään oliotyyppiä [v 1 : T v1,..., v k : T vk, m + 1 : T m + 1,..., m+ n : T m + n ] v i ovat attribuutteja m + i ovat metodeja metodisuutta merkitään siis yläindeksiplussalla attribuutteihin voi sijoittaa, metodeihin ei

Abstrakti syntaksi E ::= [I 1 = E 1,..., I k = E k, I k+1 = ςi k+1.e k+1,..., I n = ςi n.e n] E.I E 1.I := E 2 T ::= [I 1 : T 1,..., I k : T k, I + k+1 : T k+1,..., I n + : T n] V ::= L X ::= E L

pohjalla arvovälitteinen Systeemi F ω <: laajennettuna µ-tyypeillä vanhoihin laskentasääntöihin seuraavat muutokset: jokainen E muutetaan X :ksi jokainen muotoa _ _ oleva reduktiorelaatio muutetaan muotoon (_, σ) (_, σ ) uusille konstruktiolle laskentasäännöt; sotkuisia mutta eivät hankalia

Oliotyypin alityypitys uusia attribuutteja saadaan lisätä uusia metodeja saadaan lisätä attribuutit alityypittyvät invariantisti metodit alityypittyvät kovariantisti esimerkki: [n : Int, inc + : (), dec + : ()] <: [n : Int, inc + : ()]

Rekursiiviset oliotyypit oliotyypit ovat usein rekursiivisia; esim. µt.[n : Int, max + : T ()] toinen esimerkki: µt.[n : Int, max + : T (), min + : T ()]

Kysymys Määritellään lyhennysmerkinnät T 1 = µt.[n : Int, equals + : T Bool] T 2 = µt.[n : Int, equals + : T Bool, inc + : ()] Onko T 2 <: T 1? Vastaus Oletetaan, että vastaus on kyllä. Tällöin pätee T 2 Bool <: T 1 Bool, koska metodit alityypittyvät kovariantiksi. Tällöin pätee myös T 1 <: T 2, koska parametrit alityypittyvät kontravariantisti. Toisaalta T 1 <: T 2 ei voi päteä, koska T 2 :ssa on enemmän metodeja kuin T 1 :ssä. Näin ollen T 2 ei ole T 1 :n alityyppi!

Binäärimetodien ongelma binäärimetodiksi sanotaan metodia, joka ottaa parametrina viittauksen toiseen samantyyppiseen olioon tyypillinen esimerkki on equals-metodi ongelma: jos oliotyypissä on binäärimetodi, sillä ei ole (epätriviaaleja) alityyppejä! Javan (hätä)ratkaisu: parametrina ei annetakaan samantyyppistä oliota vaan viittaus johonkin ylätyypin olioon tällöin esim. equals-metodissa on toimitettava dynaaminen tyyppitarkastus if (!(o instanceof ThisClass)) return false; Eiffelin (hätä)ratkaisu: annetaan parametrien alityypittyä kovariantisti ei tyyppiturvallista onko olemassa toimivaa ratkaisua?

Ratkaisu 1: Multimetodit otetaan metodit pois oliosta metodeista tulee näin olennaisesti tavallisia funktioita sallitaan metodien dynaaminen overloading : suoritettava metodi valitaan argumenttien ajonaikaisten tyyppien mukaan ei kovin oliomaista hankala toteuttaa tehokkaasti esim. CLOS, MultiJava

Ratkaisu 2: Sopivuus unohdetaan alityypitys uusi tyyppien välinen relaatio sopivuus (engl. matching), merkitään <# olennainen ero alityypitykseen on, että subsumptioperiaate heitetään romukoppaan oliotyypeillä T 1 ja T 2 pätee T 1 <# T 2, jos T 1 :llä on ainakin samat attribuutit ja metodit kuin T 2 :lla ei kuitenkaan sallita tyyppien muuttamista PolyTOIL, LOOM

Sopivuus, osa 2 T 1 <# T 2 ei tarkoita, että T 1 :stä voitaisiin käyttää T 2 :n tilalla esimerkiksi T 1 ei kelpaa argumentiksi jos T 2 :a odotetaan ratkaisu on sopivuus-rajoitettu geneerisyys: t <# T.t tällaiselle funktiolle saa antaa parametriksi mitä tahansa, joka sopii T :hen!

Sopivuus, osa 3 T 1 <# T 2 ei tarkoita, että T 1 :stä voitaisiin käyttää T 2 :n tilalla esimerkiksi vaikka TextField <# Component, ei TextField kelpaa Array Component:n alkioksi ratkaisu on edelleen sopivuus-rajoitettu geneerisyys: Array ( t <# T.t)