3. Attribuutit.

Slides:



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

18. Abstraktit tietotyypit
6. Metodit.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
16. Javan omat luokat.
© 2004 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice Java-perusteet Kari Kujansuu
Ict1td002: Ohjelmointitaito Kertaus Osio 2 - luokat - ilmentymät - viittaus- ja arvomuuttuja - ilmentymien taulukointi HAAGA-HELIA IltaTiko.
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
22. Taulukot.
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.
9. Periytyminen Javassa.
Sami Jantunen LTY/Tietotekniikan osasto
13. Hyvä ohjelmointitapa (osa 1)
© 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.
String-vertailusta ja Scannerin käytöstä (1/2)
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
19. Olio-ohjelmointia Javalla
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.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
22. Taulukot.
Poikkeukset Yleistä Virheeseen varautuminen tarkoittaa sitä, että ohjelmoija huomioi koodia kirjoittaessaan ajonaikaisen virheen mahdollisuuden.
2. Lisää Java-ohjelmoinnin alkeita
Oliot ja luokat Oliot ja luokat Oliot (object) ja luokat (class) ovat keskeisiä olio- ohjelmoinnin käsitteitä. Olio-ohjelmointi on ohjelmointiparadigma,
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
11. Rajapinnat Sisällys Mitä rajapinnat ovat? Kuinka ne määritellään ja otetaan käyttöön? Moniperiytyminen rajapintojen avulla. Varoituksen.
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.
15. Ohjelmoinnin tekniikkaa
Olio-ohjelmoinista lyhyesti. 2.2 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen.
15. Ohjelmoinnin tekniikkaa Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi.
String-vertailusta ja Scannerin käytöstä (1/2)
17. Kooste.
5. Kapselointi.
6. Metodit.
3. Olio-ohjelmoinista lyhyesti
1. Omat operaatiot.
11. Rajapinnat.
2. Taulukot.
1. Olio-ohjelmointi.
7. Hyvä ohjelmointitapa..
15. Ohjelmoinnin tekniikkaa
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
15. Lohkot.
Luokan määrittely class-määreellä
Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto)
14. Hyvä ohjelmointitapa.
2. Taulukot.
15. Lohkot.
6. Metodit.
7. Oliot ja viitteet.
13. Pakkaukset.
8. Periytyminen.
4. Attribuutit.
15. Ohjelmoinnin tekniikkaa
7. Hyvä ohjelmointitapa..
7. Näytölle tulostaminen
13. Pakkaukset.
4. Luokan testaus ja käyttö olion kautta
eli oliotiedostojen käsittely
Esityksen transkriptio:

3. Attribuutit

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

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.

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.

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. ... }

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.

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. ... }

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ä.

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.

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.

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; }

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; }

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.

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; }

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

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ä