11. Rajapinnat 11.1. 11.2 Sisällys Mitä rajapinnat ovat? Kuinka ne määritellään ja otetaan käyttöön? Moniperiytyminen rajapintojen avulla. Varoituksen.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

18. Abstraktit tietotyypit
Rajapintaluokat Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. Rajapintaluokka on siis.
6. Metodit.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 13 Monimuotoisuus.
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 12 Periytyminen.
16. Javan omat luokat.
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
Jukka Juslin Poikkeukset ja niiden paikallistaminen * Jukka Juslin * Liittyy oppikirjan lukuun 11.
22. Taulukot.
Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely •Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän.
13. Pakkaukset.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
Perintä. Yleistä Olio-ohjelmoinnin menetelmä muodostaa uusia luokkia aiemmin määriteltyjen luokkien avulla Luokka saa automaattisesti käyttöönsä kaikki.
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
16. Lohkot Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat.
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.
9. Periytyminen Javassa.
Virtuaaliset jäsenfunktiot tMyn1 Virtuaaliset jäsenfunktiot Virtuaalinen jäsenfunktio on esiteltävä monimuotoisessa kantaluokassa. Virtuaalisen jäsenfunktion.
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
7. Oliot ja viitteet.
Luokan määrittely class-määreellä tMyn1 Luokan määrittely class-määreellä Luokan määrittely tarkoittaa luokan tietojäsenten esittelyä ja jäsenfunktioiden.
19. Olio-ohjelmointia Javalla
20. Javan omat luokat.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Poikkeukset Yleistä Virheeseen varautuminen tarkoittaa sitä, että ohjelmoija huomioi koodia kirjoittaessaan ajonaikaisen virheen mahdollisuuden.
17. Kooste Kooste Kooste (aggregation) on luokkien A ja B välinen suhde, joka tarkoittaa “A on B:n osa” tai “A kuuluu B:hen”. − Koostesuhteessa.
© Jukka Juslin1 Osio2 Olio-ohjelmointi: Merkkijonot eli Stringit Jukka Juslin.
Oliot ja luokat Oliot ja luokat Oliot (object) ja luokat (class) ovat keskeisiä olio- ohjelmoinnin käsitteitä. Olio-ohjelmointi on ohjelmointiparadigma,
© Jukka Harju, Sisältö 1. Mitä on periytyminen Javassa? 2. Periytyminen UML-luokkakaaviossa 3. Termejä 4. Periytymishierarkia 5. Periytyminen vs.
Vesa Ollikainen & Outi Grotenfelt
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Kantaluokan määrittely tMyn1 Kantaluokan määrittely Perinnän käyttöön liittyvät varatut sanat private, protected, public, final ja abstract. Ne tarkoittavat.
Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
8. Periytyminen Sisällys Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö.
15. Ohjelmoinnin tekniikkaa
16. Javan omat luokat Sisällys Johdanto. Object -luokka: − toString -, equals -, clone - ja getClass -metodit. Comparable -rajapinta: − compareTo.
15. Ohjelmoinnin tekniikkaa Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi.
5. Kapselointi.
13. Pakkaukset.
11. Rajapinnat.
17. Javan omat luokat.
Kantaluokan määrittely
15. Ohjelmoinnin tekniikkaa
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Rajapintaluokat Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. Rajapintaluokka on siis.
Kantaluokan määrittely
6. Metodit.
13. Pakkaukset.
8. Periytyminen.
16. Javan omat luokat.
4. Attribuutit.
15. Ohjelmoinnin tekniikkaa
3. Attribuutit.
13. Pakkaukset.
12. Monimuotoisuus.
8. Periytyminen.
4. Luokan testaus ja käyttö olion kautta
2. Olio-ohjelmoinnin perusteita
eli oliotiedostojen käsittely
Esityksen transkriptio:

11. Rajapinnat 11.1

11.2 Sisällys Mitä rajapinnat ovat? Kuinka ne määritellään ja otetaan käyttöön? Moniperiytyminen rajapintojen avulla. Varoituksen sana.

11.3 Johdanto Rajapinnat (interface) muodostavat yhdessä taulukkojen ja luokkien kanssa Javan viitetyypit. Rajapinta muistuttaa abstraktia luokkaa. − Rajapinnasta ei voida muodostaa olioita. − Voidaan käyttää tunnuksen tyyppinä. Rajapinta on luokkaa abstraktimpi käsite. − Kaikkien metodien oltava abstrakteja ja julkisia. − Attribuutit ovat aina julkisia luokkavakioita.

11.4 Johdanto Rajapintaa ei voi liittää sellaisenaan luokka- hierarkiaan; jonkin luokan on toteutettava rajapinta. − Toteutus koostuu avainsanalla ilmaistavasta sopimuksesta ja rajapinnan metodien toteutuksista. Toteutus periytyy toteuttavan luokan jälkeläisille. Rajapinnan toteuttavan konkreettisen luokan on toteutettava kaikki rajapinnan metodit, ellei luokka peri osaa toteutetuista metodeista. − Abstraktissa luokassa ei ole pakko toteuttaa yhtäkään rajapinnan metodeista.

11.5 Johdanto Mikä tahansa luokka, millä tahansa luokkahierarkian tasolla voi toteuttaa rajapinnan. − Toteutuksen periytymistä kannattaa hyödyntää mahdollisuuksien mukaan. Toteutettu metodi voidaan kuormittaa ja korvata. Toteuttavan luokan ja sen jälkeläisten olioihin voidaan liittää toteutetun rajapinnan tyyppinen viite.

11.6 Johdanto Rajapinnat ovat hyödyllisiä, − kun halutaan määritellä liittymä ottamalla mahdollisimman vähän kantaa sen toteutukseen, − toteuttavan luokan ja sen jälkeläisten liittymän halutaan sisältävän aina tietyt piirteet, − piirteiden kokoaminen abstraktiin luokkaan ja niiden hyödyntäminen periytymisen kautta ei ole käytännöllistä tai − halutaan simuloida moniperiytymistä.

11.7 Johdanto Abstraktia luokkaa on syytä käyttää rajapinnan sijasta, kun sovelluksessa on samankaltaisia luokkia, joiden yhteiset piirteet voidaan koota luontevasti abstraktiin luokkaan ja periä siitä. − Valinta abstraktin luokan ja rajapinnan välillä on toisinaan vaikea tehtävä. Javan API:n luokkahierarkiat ovat matalia, mutta sen luokat toteuttavat tyypillisesti yhden tai useampia rajapintoja. − Esimerkiksi String -luokka periytyy suoraan Object - luokasta ja toteuttaa kolme rajapintaa.

11.8 Määrittely Rajapinta määritellään varatulla sanalla interface : public interface RajapinnanNimi extends Rajapinta1, Rajapinta2,..., RajapintaN { // Vakioiden määrittelyt. // Metodien otsikot. } missä kursivoidut osat ovat valinnaisia. Esim. public interface Sahiseva {... }

11.9 Määrittely Rajapintoja nimetään vaihtelevasti. Javan omia rajapintoja ovat esimerkiksi luokkamaisesti nimetty Comparator (substantiivi) ja ei-luokkamaisesti nimetty Comparable (adjektiivi). Rajapinta sijoitetaan luokkien tapaan nimensä mukaan nimettyyn tiedostoon. Esimerkiksi Sahiseva -rajapinta sijoitettaisiin Sahiseva.java - nimiseen tiedostoon. Yhdessä tiedostossa vain yksi rajapinta.

11.10 Määrittely Rajapintojen public - ja oletusnäkyvyys toimivat kuten luokissa. Rajapinta näkyy määreettä vain pakkauksessaan. Määritellään rajapinnatkin jatkossa julkisiksi public - määrettä käyttäen. Rajapinnan attribuutit ovat aina julkisia luokkavakioita ( public final static ). Rajapinnan metodit ovat puolestaan aina julkisia ja abstrakteja ( public abstract ).

11.11 Määrittely Nämä implisiittiset määreet voidaan jättää rajanpinnan attribuuttien ja metodien esittelyistä pois. Esim. public final static double E = 2.72;  double E = 2.72; Esim. public abstract void kertoma( int n);  void kertoma( int n);

11.12 Toteutus Luokka ilmaisee toteuttavansa rajapinnan varatulla sanalla implements. Yleisesti: määreet class LuokanNimi extends YliluokanNimi implements Rajapinta1, Rajapinta 2,..., RajapintaN { // Rajapintametodien toteutus täällä. } missä kursivoidut osat ovat valinnaisia. Toteuttavan luokan jälkeläisineen katsotaan olevan myös toteutetun rajapinnan tyyppiä.

11.13 Toteutus Esim. public class Kissa implements Sahiseva { // Tällä toteutetaan kaikki Sahiseva- // rajapinnan metodit. } Kaikki rajapintametodit on toteutettava luokassa: Näin taataan, että Kissa -luokka tarjoaa vähintään rajapinnan määrittelemät palvelut. Kissa -luokan oliot ovat nyt myös Sahiseva -tyyppiä.

11.14 Tervehtiva-rajapinta Käytetään edelleen esimerkkinä Nisakas-, Ihminen - ja Kissa -luokkia. Sekä ihminen että kissa tervehtivät tuttuja, mutta on myös nisäkkäitä, jotka eivät osaa tervehtiä. Tästä syystä tervehtimistoiminnallisuutta ei voi oikein sijoittaa Nisakas -luokkaan tai “väliluokkaan” TervehtivaNisakas, josta perittäisiin tervehtivät oliot. Ratkaistaan ongelma Tervehtiva -rajapinnalla, jonka esimerkiksi kissa ja ihminen toteuttavat.

11.15 Tervehtiva-rajapinta Tervehtiva.java: public interface Tervehtiva { // public - ja abstract -määreet saataisiin // myös automaattisesti. public abstract void moikkaa(); } Kissa.java: public class Kissa extends Nisakas implements Tervehtiva {... public void moikkaa() { System.out.println("Miu! Pusken jalkaa..."); }

11.16 Moniperiytyminen Javassa on tarjolla vain yksittäisperiytyminen: Object -luokka on kaikkien luokkien esi-isä eikä millään luokalla voi olla useampia yliluokkia. Rajapinta voi kuitenkin periä yhden tai useampia rajapintoja extends -avainsanan avulla, jolloin rajapinnoista voidaan muodostaa luokka- hierarkioiden tapaisia rajapintahierarkioita. Koska rajapinnalla voi olla useita ylirajapintoja, voidaan näin toteuttaa moniperiytyminen – tosin melko rajoitetussa muodossa.

11.17 Moniperiytyminen Useasta rajapinnasta periytyvän rajapinnan toteutus siirtää moni- periytymisen epäsuorasti luokkahierarkiaan. Moniperiytymisen voidaan ajatella myös tapahtuvan, kun luokka toteuttaa useita rajapintoja. > S > T > R A > S A > R UML:ssä rajapinta voidaan esittää luokkasymboliin liitetyllä stereo- tyypillä >. Rajapinnan toteutus ilmaistaan katkoviivalla piirretyllä kolmio- kärkisellä nuolella.

11.18 Varoituksen sana Rajapintaa hyödyntävien luokkien on toteutettava kaikki rajapinnan metodit  Rajapintaa metodeilla laajennettaessa täytyy kaikkia rajapinnan toteuttavia luokkia muuttaa! Ratkaisuja: − Tulevaisuuden tarpeita voi huomioida “ylimääräisillä” metodeilla jo rajapintaa suunniteltaessa. − Vanhasta rajapinnasta voidaan periä extends -sanalla uusi laajempi rajapinta, jonka käyttö jää asiakkaiden päätettäväksi.