TJT-L33 Olio-ohjelmointi, JY/TKTL, syksy 2002
2. demonstraatiotehtävät, viikko 40


  1. Kuinka ''simuloisit'' luokkia ja metodeja jossain ei-oliokielessä, vaikka Pascalissa tai C:ssä? (Budd 1991)

  2. Binaarinen assosiaatio Puoliso (2.4.3, s. 17) haluttaisiin korvata C++:ssa osoitinatribuuteilla niin, että assosiaation edut 1 ja 2 toteutuvat. Lisää luokkaan Henkilo tarvittavat atribuutit. Esitellään näiden osoitintyyppisten atribuuttien muuttamista varten metodi
         bool vaihda_puoliso(Henkilo *uusi);
    
    Metodin tulos ilmoittaa, onnistuiko vaihto vai ei. Nollaosoitin parametrinä tarkoittaa, että linkki entiseen puolisoon poistetaan. Metodin koodia ei tarvitse (mutta saa) kirjoittaa, mutta millaisia rajoitteita metodin täytyy noudattaa? Niitä on yllättävänkin monta. Mitä täytyy lisäksi ottaa huomioon luokan hajottimessa? (Sakkinen 2001)

  3. Kohdassa 2.7.1 (s. 24) väitettiin, että sivuvaikutukselliset operaatiot eivät ole oleellisia tietuetyypeille vaan niitä voitaisiin käsitellä arvokeskeisesti. Miten voisi seuraavan tietueen kenttään sijoituksen korvata sivuvaikutuksettomalla (uuden tietuearvon luovalla) toiminnolla ja koko tietueen sijoituksella?
         struct Osoite {
             int p_numero;
             Merkkijono lahios, paikkakunta, maa;
         };
         Osoite os1 = /* ... */;
         /* ... */
         os1.p_numero = 40100;
         os1.paikkakunta = Merkkijono ("Jyväskylä");
    
    Vihje: Alkuarvolistan (2.7.2, s. 25) elementtien ei ole pakko olla literaaleja, vaikka ne luentomonisteen esimerkissä ovatkin. Vaihtoehtoisesti saa Osoite-tyypille määritellä sopivan muodostimen. (Sakkinen 2001)

  4. Pohdiskele assosiaatioiden, viiteatribuuttien ja loogisten osaolioiden toteuttamista jollakin tai eri ohjelmointikielillä.

  5. Porkkanatehtävä: Opettele uusi olio-ohjelmointikieli :)





2002-09-25