Ohjelmointitekniikka (Java) - harjoitukset 3, 4.-8.2.
- Selvitä seuraavat Java-kokoelmatyyppeihin liittyvät kysymykset:
- Kokoelmien joukossa on koko joukko rajapintaluokkia toteuttavia
abstrakteja luokkia. Selitä näiden luokkien olemassaolon tarkoitus.
-
Miksi ei ole sallittua, että yksi iteraattori muokkaa ja toinen
lukee yhtä ja samaa kokoelmaoliota? Mitä tarkoitetaan käsitteellä
fail-fast feature?
-
Mitä tapahtuu, jos HashSet- tai HashMap-olioon talletetun
avainolion arvoa muutetaan?
Laadi esimerkki joka havainnollistaa tilannetta.
-
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öä?
-
Toteuta seuraavat staattiset ja geneeriset työkalumetodit.
Pyri tyyppiparametrien avulla yleiskäyttöisyyteen:
-
Metodi getMidPointValue palauttaa arvonaan parametrina
annetun taulukon keskimmäisen alkion.
-
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.
-
Metodi getFirst saa parametrinaan List-tyyppisen
olion ja palauttaa arvonaan listan ensimmäisen alkion tai jos
lista on tyhjä, metodi palauttaa arvon null.
-
Metodi setNoNull saa parametrina Set-tyyppisen arvon
ja poistaa joukossa mahdollisesti olleen null-arvon.
Metodi palauttaa true, jos joukko muuttui, muuten false.
-
Selvitä seuraavat Javan geneerisyyteen liittyvät kysymykset:
-
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?
-
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.
-
Selitä käsitteet
type erasure ja raw type.
-
Mikä on kääntäjän generoima siltametodi (bridge method)
ja miksi sitä tarvitaan?
-
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?
-
-
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.
-
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?