Graafisten käyttöliittymien ohjelmointi 18.8.1999
Palanen (2/3) GKO:n tentistä (loppukoe, kirja sai olla mukana).
1.	Koodaustapa
Delphin VCL-kirjastossa tulee TShape-komponentti, jossa on ominaisuus, 
type TShapeType = (stRectangle, stSquare, stRoundRect, stRoundSquare, stEllipse, 
                   stCircle);
property Shape: TShapeType;

jolla voidaan valita onko kyseessä suorakaide, ellipsi tms.  Tarkastele tämmöisen komponentin hyviä ja huonoja puolia.  Minkälaisella järjestelyllä huonot puolet voitaisiin hoitaa ja mitä tästä taas seuraisi?	(6p)
2.	Komponentit
Sinun pitäisi koodata VespaCad (parannettu MopoCad ):  Ohjelmalla voi piirtää neliöitä, suorakaiteita, ellipsejä ja kolmioita.  Ohjelmassa on nappi, jolla KAIKKIEN kuvioiden koon voi puolittaa ja toinen nappi kuvioiden koon kaksinkertaistamiseksi.  Kuvioiden sijoittelu tapahtuu vetämällä ”kuviopalkista” kuviota piirtoalustalle.  Kuvion koko voidaan vaikkapa määrätä etukäteen.  Arvosteluun vaikuttaa se, kuinka helposti ohjelmaasi on lisättävissä uusi kuvioluokka.

Piirrä ensin miltä ohjelman käyttöliittymä näyttäisi	(0p, mutta välttämätön arvostelulle)
1.	Suunnittele tarvittavat lisäkomponentit (luokkahierarkia).	(3p)
2.	Kirjoita päälomakkeelle tulevat lisäykset (kaikki ne, joita ohjelmointiympäristö ei sinne lisää).	(1p)
3.	Kirjoita kaikkien lisäkomponenttien luokkamääritykset kaikkine metodeineen, attribuutteineen yms. (siis Delphissä interface-osa, Javassa metodin otsikkorivit, toteutusta ei tarvitse) riittävän hyvin kommentoituna.	(6p)
4.	Kirjoita yhden lisäluokan implementation-osa (Javassa luokan kaikkien metodin toteutukset)	(2p)

Vihje: Muista että kohdasta 2 selviät vähimmällä, jos komponenttisi osaavat enemmän.  Kohtaan 4 ei kannata kirjoittaa vaikeimman komponentin implementaatiota (tosin jotakin järkevääkin sen pitää tehdä, esim. komponentti, joka perii vaikkapa paneelin eikä lisää siihen mitään toimintoja, ei kelpaa).