220 likes | 304 Views
Rajapintaluokat. Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. Rajapintaluokka on siis 100%:sti abstrakti luokka: rajapintaluokassa ei ole yhdellekään metodille toteutusta.
E N D
Rajapintaluokat • Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. • Rajapintaluokka on siis 100%:sti abstrakti luokka: rajapintaluokassa ei ole yhdellekään metodille toteutusta. • Rajapintaluokkaan ei luonnollisestikaan voi luoda olioita. • Käytössä ovat varatut sanat interface ja implements: tMyn
Luokka voi toteuttaa useammankin rajapinnan. Sellaisessa tapauksessa otsikkorivillä luetellaan rajapintojen nimet pilkuilla eroteltuina. • Jos luokka toteuttaa rajapinnan, niin silloin kyseisessä luokassa tulee olla jokaiselle rajapinnan metodille toteutus: tMyn
Rajapintaluokka siis omalla tavallaan antaa yhteisen rakenteen niille luokille, jotka toteuttavat kyseisen rajapintaluokan. • Rajapintaluokka ei ole sama asia kuin moniperintä. PHP ei tue moniperintää. Rajapintaluokan toteuttava luokka (yksittäinen luokka siis saattaa toteuttaa useammankin rajapinnan) saa rajapintaluokalta ainoastaan metodien esittelyt, ei yhdenkään toteutusta. • Tyypillisesti ohjelmointiprojektissa on monia ohjelmoijia – tällöin rajapintaluokka on yksi toimiva tapa määritellä ylemmän tason toiminnallisuutta. tMyn
Ohjelmoinnin aikana voi käydä ilmi, että johonkin luokkaan ei koskaan luoda olioita. Sellainen luokka on hyvä kandidaatti rajapintaluokaksi! • Toinen esimerkki: sinulla on jonkin sortin tajua siitä millaisia metodeita luokalla tulisi olla, mutta yksityiskohdat eivät vielä ole tiedossa. • Ovatko rajapintaluokat vaihtoehtoja abstrakteille luokille? • Ero voisi olla vaikkapa tällainen: rajapintaluokan voi toteuttaa kaksi (tai miten monta tahansa) luokkaa, jotka eivät ole millään muotoa looginen osa tuota rajapintaluokkaa. tMyn
Seuraavassa esimerkissä on kaksi toisiinsa loogisesti riippumatonta luokkaa: Lemmikki ja Koti. Kummatkin luokat toteuttavat rajapintaluokan vakuutuskelpoinen. Abstraktista kantaluokasta Elain periytetään johdettu luokka Lemmikki: tMyn
UML-kaavio voisi näyttää kuvan 1 mukaiselta. • Yleistys (generalization) tai perintä (inheritance) kuvataan yhtenäisellä viivalla luokkien välillä, jonka kantaluokan puoleisessa päässä on ontto kolmio. • Luokkien Elain ja Lemmikki välinen suhde on yleistys. • Toteutus (realization) kuvataan katkoviivalla luokkien välillä, jonka rajapintaluokan puoleisessa päässä on ontto kolmio. • Luokkien vakuutuskelpoinen ja Lemmikki sekä luokkien vakuutuskelpoinen ja Koti välinen suhde on toteutus. tMyn
Elain {abstract} <<interface>> vakuutuskelpoinen #ika:int <<constructor>> +__construct(ika) +KenenOmistuksessa():string {abstract} +HaeIka():int +HaeArvoTieto():string Lemmikki Koti -nimi:string <<constructor>> +__construct(ika, nimi) +HaeNimi():string +KenenOmistuksessa():string +HaeArvoTieto():string +HaeArvoTieto():string Kuva 1. UML-luokkakaavio rajapintaluokan esimerkistä. tMyn