Ohjelmointi II (Java)
Tentti 20.12.2001
1. Selvitä esimerkin avulla mitä tarkoittaa
(a) syntaktinen sokeri
(b) luonnollinen järjestys
(c) erikoistulkinta
(d) nimetön luokka
2. Mitä tarkoittaa olion sisäinen eheys? Miksi se on tärkeä? Mitä keinoja on sen rikkomiseen? Mitä keinoja on sen ylläpitämiseen?
3. (a) Mitä tarkoittaa rutiinin korvaus perijäluokassa? Mitä sääntöjä korvauksen yhteydessä on noudatettava?
(b) Miten dynaaminen sidonta toimii? Mitä hyötyä siitä on?
4. Javan taulukot, listat yms. lineaariset rakenteet tuntevat käsitteen indeksi, joka kertoo alkion paikan kyseisessä tietorakenteessa. Indeksointi kiinnitetään kokonaislukualueeksi, vieläpä niin, että ensimmäisen alkion indeksi on aina nolla. Kirjoita Java-APIn Vector-luokkaa mukaellen uusi luokka OmaVektori, jonka indeksialue saa olla mielivaltainen kokonaislukualue (myös negatiiviset indeksit ovat sallittuja). Kirjoita toteutukset uusille konstruktoreille sekä piirteille
public void add(int index, Object element)
public void addAll(Collection c)
public void clear()
public Object get(int index)
public int indexOf(Object elem)
public int size()
5. Voitaisiinko 4-tehtävän indeksityyppiä yleistää niin, että sallittaisiin muutkin kuin kokonaislukutyyppi? Miten toteuttaisit tällaisen YleinenVektori-luokan? Valitse konkreetti esitystapa ja toteuta ainakin piirteet, joilla lisätään uusi alkio annettuun paikkaan (add), haetaan alkio annetusta paikasta (get), palautetaan annetun alkion paikka vektorissa (indexOf) ja kerrotaan vektorissa olevien alkioiden määrä (size).