Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

3. Attribuutit.

Samankaltaiset esitykset


Esitys aiheesta: "3. Attribuutit."— Esityksen transkriptio:

1 3. Attribuutit

2 Sisällys Paikka luokassa ja esittely. Attribuuttien kätkentä.
Epäsuora käsittely aksessoreiden avulla. Attribuutin tunnuksen peittyminen. Kapselointi.

3 Johdanto Java on olio-ohjelmointikieli, jossa valtaosa koodista sijoitetaan luokkiin. Luokka sitoo yhteen mallintamaansa käsitteeseen liittyvät tiedot (attribuutit) ja toiminnot (metodit). Luokan määrittely koostuu luokan otsikosta ja lohkosta: public class LuokanNimi { // Attribuutit ja metodit ovat luokan lohkon sisässä. } Kaikki metodien lohkojen ulkopuolella esitellyt muuttujat ja vakiot ovat attribuutteja.

4 Johdanto Luokassa tulee olla vain sen mallintaman käsitteen kannalta oleellisia attribuutteja. Ylimääräiset attribuutit monimutkaistavat olio-ohjelmaa. Attribuutit näkyvät luokan kaikkiin metodeihin ja rikkovat siten rakenteisen ohjelmoinnin modulaarisuusperiaatetta. Parametreilla ja paluuarvoilla tapahtuvaa tiedonvälitystä ei saa korvata käyttämällä tarpeettomia attribuutteja. Vakiomuotoisia attribuutteja ei voi muuttaa metodeissa ja niitä voi siten käyttää vapaammin.

5 Johdanto Attribuuttien esittelyt kootaan yhteen paikkaan.
Esittelyt tyypillisesti ennen metodien määrittelyä. Vakioidut attribuutit esitellään ensin. Esittelyä voidaan tarkentaa määreillä. Ohessa ei käytetä static-määrettä, koska luokassa ei ole main-metodia. public class Kissa { // Elämien lukumäärän yläraja. final int MAXELAMAT = 9; // Kissan väri. String vari; // Kissan hännän tyyppi. String hanta; // Metodit. ... }

6 Tiedonkätkentä Hyvä olio-ohjelmointitapa, jossa olion tilan suora lukeminen ja muuttaminen estetään piilottamalla luokan attribuutit. Tiedonkätkennän avulla luokan suunnittelija voi säädellä mitä tietoja luokan ympäristö voi käsitellä ja kuinka käsittely tapahtuu. Javassa kätkentä tehdään private-määreellä, joka rajoittaa attribuutin näkyvyyden vain luokkansa sisään. Koska vakioiden arvoja ei voida muuttaa, asetetaan vakioidut attribuutit joskus näkyviin public-määreellä. Julkaistut vakiomuotoiset attribuutit esitellään usein static-määreellä, jotta vakioita olisi helpompi käyttää luokan ulkopuolella.

7 Attribuutit Kissa-luokan attribuutit on nyt esitelty siten, että luokan ympäristö, erityisesti muut luokat, eivät voi lukea tai muuttaa attribuutteja. Vakiomuotoinen attribuutti voidaan julkaista, jos sen tuntemisesta on hyötyä luokan ulkopuolella. public class Kissa { // Elämien lukumäärän yläraja. private final int MAXELAMAT = 9; // Kissan väri. private String vari; // Kissan hännän tyyppi. private String hanta; // Metodit. ... }

8 Aksessorit Piilotettujen tietojen käsittelyyn tarvitaan niin sanotut aksessorit (accessors), jotka ovat metodeja attribuutin arvojen epäsuoraan lukemiseen ja asettamiseen. Vain attribuuteille, joiden tietoja on tarpeen käsitellä luokan ulkopuolelta. Määritellään usein pareittain (lukeminen ja asettaminen), mutta voidaan tarpeen mukaan määritellä vain lukemiseen tai asettamiseen. Mahdollisimman lyhyitä metodeja, joissa ei mitään turhaa. Aksessoreita ei tarvitse kommentoida ellei niissä tehdä jotain erityistä.

9 Aksessorit Aksessorin nimi pyritään johtamaa sen käsittelemän attribuutin nimestä. Aksessoreita kutsutaan usein gettereiksi ja settereiksi, koska englannin kielessä aksessorien nimet aloitetaan usein get- ja set-sanoilla. getColour, setColour. Suomeksi kirjoitetussa koodissa voi käyttää esimerkiksi lue- ja aseta-sanoja. lueVari, asetaVari.

10 Aksessorit Älä käytä aksessoreiden nimissä kahta kieltä.
Esimerkiksi getVari ja setVari ovat huonoja tunnuksia. Nimissä voi käyttää myös attribuutin tunnusta sellaisenaan, koska kuormittamismekanismi sallii samannimisten metodien esittelyn erilaisia parametrilistoja käyttäen. Luentorungossa käytetään tätä tapaa.

11 Lukeva aksessori Rungossa vain attribuutin arvon palauttava return-lause. Tyyppi on tavallisesti sama kuin attribuutin tyyppi. Huomaa, että Kissa-luokan aksessoreissa ei tarvita static-määrettä, koska luokassa ei ole main- metodia. // Kissan värin lukeva // aksessori. public String vari() { return vari; }

12 Asettava aksessori Saa attribuutin arvon parametrina.
Arvon oikeellisuus tulisi tarkistaa ennen asetusta. Virheellinen tieto voidaan jättää huomiotta, jolloin metodi on tyypitön (void). Virheestä viestivän paluuarvon käyttäminen harvinaisempaa. // Kissan värin asettavassa // aksessorissa tarkistetaan, // että väriksi tarjotaan // vähintään yhden merkin // mittaista merkkijonoa. public void vari(String v) { if (v != null && v.length() > 0) { vari = v; }

13 Attribuutin tunnuksen peittyminen
Jos metodin muuttujalla tai parametrilla on sama tunnus kuin attribuutilla, ei tapahdu nimikonfliktia, vaan metodin tunnus peittää (hide) attribuutin tunnuksen. Peitetty tunnus saadaan käyttöön nimeämällä peittävä tunnus uudelleen. Peittämisongelma voidaan ratkaista myös this-attribuutilla, joka viittaa olioon itseensä ja on aina käytettävissä ilman esittelyä, mutta tämä ei ole Javassa suositeltavaa. Tarkoituksellisen peittämiseen ei ole käytännössä koskaan tarvetta.

14 Attribuutin tunnuksen peittyminen
// Kissan väri ei muutu, koska parametrin tunnus // peittää attribuutin tunnuksen. public void vari(String vari) { if (vari != null && vari.length() > 0) { vari = vari; }

15 Kapselointi Kapseloinnissa luokan tiedot ja toiminnot pakataan suojatuksi kokonaisuudeksi piirteitä piilottamalla. Attribuutit piilotetaan private-määreen ja aksessoreiden avulla. Vain luokan sisällä tarvittavat metodit piilotetaan private-määreellä. Julkiset metodit muodostavat luokan liittymän, jonka kautta kapseloitu luokka kommunikoi kontrolloidusti ympäristönsä kanssa. kätketyt osat liittymät

16 Kapseloitu kissa public class Kissa { // Attribuuttien esittelyt.
private void hairikoi() { // Tavaroita hajoaa... } public String vari() { ... public void vari(String v) { ... public String hanta() { ... public void hanta(String h) { ... public void aantele(String s) { ... Luokan kätketty osa Luokan liittymä


Lataa ppt "3. Attribuutit."

Samankaltaiset esitykset


Iklan oleh Google