Ohjelmointitekniikka (Java) - harjoitukset 3, 4.-8.2.

  1. Selvitä seuraavat Java-kokoelmatyyppeihin liittyvät kysymykset:
    1. Kokoelmien joukossa on koko joukko rajapintaluokkia toteuttavia abstrakteja luokkia. Selitä näiden luokkien olemassaolon tarkoitus.
    2. Miksi ei ole sallittua, että yksi iteraattori muokkaa ja toinen lukee yhtä ja samaa kokoelmaoliota? Mitä tarkoitetaan käsitteellä fail-fast feature?
    3. Mitä tapahtuu, jos HashSet- tai HashMap-olioon talletetun avainolion arvoa muutetaan? Laadi esimerkki joka havainnollistaa tilannetta.
    4. Olkoon: numberList = new ArrayList <Double> (20);
      Selitä todellisen parametrin 20 vaikutus tietorakenteen toteutukseen. Mitä hyötyä, jos mitään, tästä parametroinnista on? Rajoittako se millään tavoin rakenteen käyttöä?

  2. Toteuta seuraavat staattiset ja geneeriset työkalumetodit. Pyri tyyppiparametrien avulla yleiskäyttöisyyteen:
    1. Metodi getMidPointValue palauttaa arvonaan parametrina annetun taulukon keskimmäisen alkion.
    2. Metodilla inSome on kaksi kokoelmaparametria, kolmas parametri on kokoelmista etsittävä arvo. Metodi palauttaa arvon true, jos arvo löytyy jommasta kummasta tai molemmista kokoelmista. Muuten metodi palauttaa arvon false.
    3. Metodi getFirst saa parametrinaan List-tyyppisen olion ja palauttaa arvonaan listan ensimmäisen alkion tai jos lista on tyhjä, metodi palauttaa arvon null.
    4. Metodi setNoNull saa parametrina Set-tyyppisen arvon ja poistaa joukossa mahdollisesti olleen null-arvon. Metodi palauttaa true, jos joukko muuttui, muuten false.

  3. Selvitä seuraavat Javan geneerisyyteen liittyvät kysymykset:
    1. Tarkastellaan luentokalvojen luokkaa Pair. Onko luokka Pair <String> luokan Pair <Object>. aliluokka? Jos on, miksi? Ellei ole, miksei? Onko taulukko tyyppiä String [ ] myös tyyppiä Object [ ]? Jos on, miksi? Ellei ole, miksei? Onko taulukko tyyppiä Pair <String> [ ] myös tyyppiä Pair <Object> [ ]? Jos on, miksi? Ellei ole, miksei?
    2. Miten jostakin kokoelmasta saa tehtyä version, joka tarjoaa vain lukuoikeuden vaikkapa, kun kokoelma annetaan parametrina jollekin metodille. Itsellä pitää silti säilyttää täydet read-write-oikeudet.
    3. Selitä käsitteet type erasure ja raw type.
    4. Mikä on kääntäjän generoima siltametodi (bridge method) ja miksi sitä tarvitaan?
    5. Luokassa Arrays on geneerinen metodi asList. Selvitä API:n avulla, millaisesta työkalusta on kysymys. Mikä on aluperäisen taulukon suhde metodin palauttamaan arvoon? Mitä hyötyä tästä on? Onko paluuarvon käytössä mahdollisesti joitakin rajoituksia?

    1. Mitä etuja saavutetaan geneeristen kokoelmien käytöllä verrattuna vanhoihin - "raakatyyppeihin" Object ja Comparable perustuneisiin - kokoelmiin? Onko haittoja? Arvioi asiaa ainakin luettavuuden, luotettavuuden ja tehokkuuden kannalta.
    2. Arvioi ja mahdollisesti kritisoikin Javan geneeristen kokoelmien toteutuksen ja ideoiden luonnetta ja tapaa. Löydätkö olio-ohjelmoinnin ideaalin kannalta huonoja tai peräti onnettomia ratkaisuja? Onko kokoelmakirjaston rakenteessa selviä haittoja, rajoituksia, puutteita? Mitä olisi voitu tehdä toisin? Millaisen parannellun version kokoelmille itse haluaisit?