Osa
Tee luokka Osa, jolla on ominaisuudet
nimi, aliosat ja
kokonaisuus. Ominaisuus nimi on
tyypiltään merkkijono.
Ominaisuus aliosat on
tyypiltään Set ja se sisältää välittömät alemman
tason osat. Jos tämä osa on yksinkertainen osa (eli se ei
koostu pienemmistä osista), on joukko aliosat
tyhjä. Ominaisuus kokonaisuus on ominaisuuden
aliosat käänteisrelaatio, eli kuvaa sen osan, johon
tämä osa välittömästi sisältyy.
Tee ominaisuuksille hakumetodit nimi(),
aliosat() ja kokonaisuus().
Tee luontimetodi, joka ottaa parametrinaan osan nimen. Alussa osa ei sisällä aliosia, eikä sisälly muihin osiin.
lisääAliosa
Tee metodi lisääAliosa(Osa uusi), joka lisää annetun
osan uusi tämän osan välittömäksi aliosaksi.
Huomaa, että käänteisrelaatiota pitää myös päivittää.
poistaAliosa
Tee metodi poistaAliosa(Osa poistettava), joka poistaa
annetun osan poistettava tämän osan välittömistä
aliosista. Myös tässä on käänteisrelaatiota päivitettävä.
toString ja pääohjelmametodi
Tee toString()-metodi, joka palauttaa kuvauksen
jossa on osan nimi sekä välittömien aliosien nimet,
esim. tyyliin:
Osa x, aliosat a, b, c
Tee pääohjelmametodi, joka luo yksinkertaisen osa-kokonaisuus -rakenteen ja tulostaa sen osien kuvaukset.
sisältyykö(Osa x)
Tee rekursiivinen metodi sisältyykö(Osa x), joka
tarkistaa sisältääkö tämä osa aliosanaan (välittömänä tai
välillisenä) annetun osan x.
kaikkiAliosat()
Tee rekursiivinen metodi kaikkiAliosat(), joka
palauttaa joukon, joka sisältää tämän osan kaikki aliosat
(välilliset ja välittömät).
kaikkiYksinkertaisetAliosat()
Yksinkertainen osa on sellainen, jolla ei ole yhtään aliosaa.
Tee rekursiivinen metodi
kaikkiYksinkertaisetAliosat(), joka palauttaa
joukon, joka sisältää tämän osan kaikki yksinkertaiset aliosat
(välilliset ja välittömät).
paino
Määritä luokalle Osa ominaisuus double
paino ja tälle hakumetodi. Tee luokalle toinen
luontimetodi, joka ottaa nimen lisäksi parametrinaan myös
painon. Tällä luontimetodilla on tarkoitus luoda yksinkertaisia
osia, joiden paino annetaan luotaessa. Monimutkaisten osien
paino on niiden aliosien painojen summa. Muuta metodeja
lisääAliosa ja poistaAliosa niin, että
ne päivittävät ominaisuutta paino.