Harjoitustehtävät, viikko 9

Demotilaisuus tiistaina 9.11.2010 kello 12 (Ag D121)

Demohyvitys: 50 % tehty korottaa arvosanaa yhdellä, 80 % tehty korottaa kahdella. Mikäli 25 % tehty, tentaattori valitsee tenttiä tai esseetä arvostellessaan kahden arvolauseen välillä epäröidessään automaattisesti sen korkeamman. Demoprosentti lasketaan siten, että bonustehtävät otetaan huomioon tehtyjen tehtävien määrää laskettaessa mutta ei tehtävien kokonaismäärää laskettaessa. Näin bonustehtäviä tekemällä on mahdollista saavuttaa yli 100 % tulos. Oman demoprosenttitilanteen voi tarkistaa Korpista.

Mikäli sinulla on hyväksyttävä este olla pois demotilaisuudesta, sovi vaihtoehtoisesta palautustavasta hyvissä ajoin etukäteen. Yllättävän ylivoimaisen esteen (force majeure) sattuessa voidaan sopia jälkikäteen (viipymättä esteen poistuttua) muusta tavasta korvata demokerta.

Artikkelitehtävässä lue artikkeli ja valmistaudu keskustelemaan siitä demotilaisuudessa. Varaudu ainakin vastaamaan annettuihin kysymyksiin. Huomaa, että useimmat artikkelilinkit toimivat vain yliopiston verkossa tahi yliopiston proxyn tai VPN:n kautta.

    1. Tarkastellaan Java-tyylistä kieltä, jossa on alityypitys. Tulisiko taulukkotyypin alityypittyä kovariantisti vai kontravariantisti, vai onko se alityypityksen suhteen invariantti (ei muita alityyppejä kuin se itse)? Toisin sanoen mikä seuraavista säännöistä on järkevä subsumptioperiaatteen kannalta?
         T <: U
       ----------   (kovarianssi)
       T[] <: U[]
      
         U <: T
       ----------   (kontravarianssi)
       T[] <: U[]
      
         T = U
       ----------   (invarianssi)
       T[] <: U[]
      
      Perustele vastauksesi argumentoiden ja esimerkein.
    2. Ota selvää, alityypittyykö Javan taulukko kovariantisti, kontravariantisti vai invariantisti. Kommentoi Javan ratkaisua.
  1. Tarkastellaan Systeemi Fω:aa laajennettuna μ-tyypeillä, aritmetiikalla, ehtolausekkeilla, monikoilla, tietueilla ja varianteilla.
    1. Mitä eroa on tyyppilausekkeilla ∀α:* . α→α, λα:* . α→α ja μα . α→α?
    2. Mitkä ovat edellisen kohdan tyyppilausekkeiden luonteet?
    3. Anna esimerkki hyödyllisestä tyyppilausekkeesta, jolla on luonne *→*→*.
  2. Jatketaan edellisen tehtävän piirissä. Oletetaan tyyppimääritelmä Bool = <false = (), true = ()>. ja oletetaan että tämä on ehtolausekkeiden käyttämä tyyppi.
    1. Määrittele binääristen hakupuiden tyyppi, jossa avaimet ovat lukuja ja avaimeen liittyvän datan tyyppi on parametri.
    2. Kirjoita funktio, joka palauttaa tyhjän binäärisen hakupuun.
    3. Kirjoita binääristen hakupuiden tyypille lisäysfunktio.
    4. Kirjoita binääristen hakupuiden tyypille hakufunktio.
  3. Tarkastellaan Javan kaltaista kieltä, jossa on käytössä rakenneyhtäläisyys, ja seuraavia määritelmiä:
    interface A {
        void inc();
    }
    interface B {
        void inc();
        void dec();
    }
    interface C {
        boolean equals(C a);
        void inc();
    }
    interface D {
        boolean equals(D a);
        void inc();
        void dec();
    }
    
    Soveltamalla subsumptioperiaatetta selvitä,
    1. onko tyyppi B tyypin A alityyppi ja
    2. onko tyyppi D tyypin C alityyppi?

Lisäksi bonustehtäviä:

  1. Making the future safe for the past:
    1. Mikä on artikkelin pääväite?
    2. Millä tavalla GJ saadaan olemaan yhteensopiva vanhan Javan kanssa?
    3. Millä tavalla kumitus (erasure) rajoittaa GJ:n ilmaisuvoimaa?
  2. Featherweight Java (sivut 1–31, siis poislukien appendix)
    1. Mikä on artikkelin esittelemän formalismin tarkoitus?
    2. Selosta säännön T-Invk (sivulla 9) toiminta; selitä, mikä merkitys kullakin säännössä esiintyvällä merkinnällä on ja kuinka se auttaa säännön toiminnassa.
    3. Selosta säännön R-Cast (sivulla 12) toiminta.
  3. PolyTOIL: A type-safe polymorphic object-oriented language (vain luvut 1 ja 2):
    1. Mikä on PolyTOILin olemassaolon tarkoitus?
    2. Miten MyType käyttäytyy PolyTOILissa?

2010-11-02 Antti-Juhani Kaijanaho <antti-juhani.kaijanaho@mit.jyu.fi>

Valid XHTML 1.0!