Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Vesa Ollikainen & Outi Grotenfelt

Samankaltaiset esitykset


Esitys aiheesta: "Vesa Ollikainen & Outi Grotenfelt"— Esityksen transkriptio:

1 Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

2 Vesa Ollikainen & Outi Grotenfelt
Rajapinnat Java-kieli ei tue luokkien moniperintää. Jokaisella luokalla voi olla vain yksi välitön yliluokka. Toisinaan olisi edullista, jos aliluokka voisi periä muuttujia ja metodeja useammalta yliluokalta. Rajapintojen avulla voidaan kiertää moniperinnän puute. Luokka perii yhden yliluokan. Luokka voi lisäksi toteuttaa yhden tai useampia rajapintoja. Toteutuksella tarkoitetaan, että rajapinnan määrittämät metodit kirjoitetaan rajapinnan toteuttavassa luokassa. Vesa Ollikainen & Outi Grotenfelt

3 Vesa Ollikainen & Outi Grotenfelt
Rajapinnat Käsitteellisesti rajapinta muistuttaa abstraktia luokkaa, jonka kaikki metodit ovat abstrakteja. Rajapinnat ovat kuitenkin luokkahierarkian ulkopuolella. Rajapinnat ovat koodin modularisuutta edistävä työväline. Rajapinnan toteutus takaa, että määrätyt metodit ovat käytössä kaikissa sen toteuttavissa luokissa. Rajapintojen käyttö vähentää toteutukseen tehtävien muutoksen säteilyä toteuttavan luokan ulkopuolelle. Vesa Ollikainen & Outi Grotenfelt

4 Rajapinta luokkakaaviossa
Luokkakaaviossa luokan ja sen toteuttaman rajapinnan suhde ilmaistaan katkoviivanuolella. Kuvan esimerkki sallii myös laulamattomien lintujen toteutuksen. Vesa Ollikainen & Outi Grotenfelt

5 Esimerkki rajapinnan määrittelystä
Rajapinta Laulava määrää, että kaikissa sen toteuttavissa luokissa on toteutettava metodi laula(). Rajapinta määritetään avainsanalla interface. Kunkin metodin määreinä on public abstract. Määreet ovat voimassa vaikkei niitä kirjoittaisi. Vesa Ollikainen & Outi Grotenfelt

6 Esimerkki rajapinnan määrittelystä..
Talitiainen- ja Varis-luokat ovat Lintu-luokan aliluokkia. Aliluokat toteuttavat Laulava-rajapinnan. toteutus ilmaistaan implements-avainsanalla jos toteutettavia rajapintoja on useita, ne erotetaan pilkuin. Vesa Ollikainen & Outi Grotenfelt

7 Esimerkki rajapinnan määrittelystä..
Myös Iskelmätähti-luokka toteuttaa Laulava- rajapinnan. Vesa Ollikainen & Outi Grotenfelt

8 Esimerkki rajapinnan määrittelystä..
Yllä laulavat-taulukko sisältää viittauksia rajapintoihin. Linnuille on määritetty muni()-metodi. Tarvitaan tyypinmuunnos alaspäin. Vesa Ollikainen & Outi Grotenfelt

9 Muuttujat rajapinnoissa
Rajapintoihin voi määrittää myös muuttujia. Muuttujien määreinä on aina public static final. Nämäkin määreet ovat voimassa ilman kirjoittamista. Vesa Ollikainen & Outi Grotenfelt

10 Rajapintojen toteutus ja perintä
Rajapinnat voivat periä toisia rajapintoja. periytyminen kuvataan extends-avainsanalla kuten luokkien tapauksessa. Rajapinta voi samanaikaisesti periä monta rajapintaa. extends-avainsanan perässä määritettävät perittävät rajapinnat erotetaan pilkuilla. public interface Kissa extends Nisäkäs, Kotieläin { int elämät = 7; void kehrää(); //… } Huomaa, että muuttuja elämät on automaattisesti static ja final. Metodi kehrää on automaattisesti public ja abstract. Vesa Ollikainen & Outi Grotenfelt

11 Rajapinnat ja tehdasluokka
Rajapinnan toteuttavien olioiden luonti voidaan piilottaa tehdasluokkiin. Esimerkissä tehdasluokka luo Laulava-rajapinnan toteuttavia olioita. Vuoron perään Talitiainen- ja Varis-olioita. Vesa Ollikainen & Outi Grotenfelt

12 Rajapinnat ja tehdasluokka..
Testiluokka ei missään vaiheessa tiedä, mitä rajapinnan toteuttajia on olemassa. Tämä on eristetty tehdasluokkaan. Uuden linnun lisäys ei aiheuttaisi muutoksia testiluokkaan.. Vesa Ollikainen & Outi Grotenfelt

13 Vesa Ollikainen & Outi Grotenfelt
Sisäluokat Sisäluokka on toisen luokan sisällä määritelty luokka. Vain ulkoluokasta (luokasta, jonka sisällä sisäluokka on), pääsee käsiksi sisäluokkaan. Ulkoluokassa on tehtävä ilmentymä sisäluokan oliosta. Sisäluokasta pääsee käsiksi ulkoluokan muuttujiin ja metodeihin. Koskee myös private-määreellä suojattuja. Vesa Ollikainen & Outi Grotenfelt

14 Vesa Ollikainen & Outi Grotenfelt
Esimerkki Tarkastellaan esimerkkinä noppapelin toteutusta: Pelaajat heittävät vuoron perään noppaa. Se voittaa, joka saavuttaa ensimmäisenä sovitun pisterajan. Jos useampi pelaaja saavuttaa pisterajan samalla kierroksella, heistä ensimmäisenä heittänyt voittaa pelin. Määritetään Pelaaja-luokalle nyt sisäluokka Pistelaskuri. Sisäluokka pitää sisällään pelaajan pistemäärän ja siihen liittyvät metodit (mm. nopanheitolla kasvatuksen). Ulkoluokka hyödyntää sisäluokan palveluja. Vesa Ollikainen & Outi Grotenfelt

15 Vesa Ollikainen & Outi Grotenfelt
Esimerkki.. Pistelaskuri on sisäluokka. Vesa Ollikainen & Outi Grotenfelt

16 Vesa Ollikainen & Outi Grotenfelt
Esimerkki.. Vesa Ollikainen & Outi Grotenfelt

17 Vesa Ollikainen & Outi Grotenfelt
Esimerkki.. Vesa Ollikainen & Outi Grotenfelt

18 Vesa Ollikainen & Outi Grotenfelt
Anonyymi sisäluokka Anonyymi sisäluokka on nimetön rajapinnan toteuttava luokka, joka sijaitsee toisen luokan sisällä. Toteutus annetaan samalla, kun olio luodaan new-avainsanalla. Anonyymiä sisäluokkaa käytetään yleisesti tapahtumakäsittelyn ohjelmointiin. esimerkiksi koodi, joka suoritetaan, kun käyttöliittymäobjektille tehdään jotain (kuten painetaan painiketta). Vesa Ollikainen & Outi Grotenfelt

19 Anonyymi sisäluokka, esimerkki
Anonyymi sisäluokka määrittää Laulava- rajapinnan toteutuksen Vesa Ollikainen & Outi Grotenfelt

20 KIITOS! www.metropolia.fi www.facebook.com/MetropoliaAMK


Lataa ppt "Vesa Ollikainen & Outi Grotenfelt"

Samankaltaiset esitykset


Iklan oleh Google