Osion kaksi kertaus Jukka Juslin
Sisältö Taulukot ja Stringit Luokkien kirjoittaminen Oletusmuodostin UML
Taulukot Taulukot luodaan Java-kielessä seuraavanlaisesti: int [] arvosanat = {1,2,3,4,5}; Taulukon pituus saadaan length-metodilla arvosanat.length; // mikä on eo. taul. pituus? Taulukosta alkion poimiminen: esimerkiksi jos halutaan arvosanan viisi alkio: int vitonen = arvosanat[4];
String String Javan merkkijonotietotyyppinä String nimi = Jukka Juslin ; Stringien vertailu equals metodilla, EI == operaattorilla tostring metodi tulostaa olion sisällön Stringinä niin että kaikkien attribuuttien arvoa konkatenoidaan yhdeksi Stringiksi ja erotetaan esim. välilyönneillä arvot toisistaan
Luokkien kirjoittaminen Luokan kirjoittaminen esim. public class MummuKello { private String kellonaika; private Pvm pvm = new Pvm(); private String viikonpaiva; } public MummuKello() { kellonaika = 00:00:00 ; } public int getviikonpaiva() { return viikonpaiva; } / public void setviikonpaiva( String viikonpaiva) { this.viikonpaiva=viikonpaiva; }
Luokkien kirjoittaminen Muista laittaa kaikki attribuutit private tyyppisiksi, jotta kapsuloinnin idea toteutuu! Oletusmuodostin alkaa public LuokanNimi() mitään palautustyyppiä ei saa olla!
Luokkien kirjoittaminen - this Muista this-avainsanan käyttö This-sanalla viitataan olion attribuuttiin Ilman this sanaa metodille tulevat parametrit on nimettävä erinimisiksi kuin luokan attribuutit
Lisää this-sanasta This-viittaa aina kyseisellä hetkellä käytössä olevaan olioon Koko nykyinen olio voidaan palauttaa kirjoittamalla return(this);
tostring metodi Pääsääntöisesti kaikille luokille pitää kirjoittaa tostring metodi tostring konkatenoi Stringiksi olion attribuuttien arvon tällähetkellä Eli kyseessä on ns. olion tilan tulostaminen Ilman tostring metodia saadaan oliosta tulostumaan ns. OID numero, joka on muistiosoite viitaten missä itse olio sijaitsee
Konstruktoreista eli muodostimista Java-kieli tekee automaattisesti ns. oletuskonstruktorin, jonka voimme itse korvata omalla. Korvaava konstruktori ei saa mitään parametrejä() Konstruktoreita voidaan ns. ylikuormittaa, eli samalla luokalla voi olla useita konstruktoreita eri parametrimäärillä
Konstruktoreista eli muodostimista Konstruktoreissa kannattaa usein antaa mahdollisuus asettaa esim. tietyn olion alkuarvot public Pvm(int kk, int pp, int vv) Attribuuttien arvot on paras asettaa yksitellen ns. settereissä (muista ns. SEVO sääntö) Pääsääntöisesti ei ole hyvä tehdä setpvm nimistä setteriä, vaan asettaa attribuutit yksitellen tai konstruktorissa
Konstruktoreista eli muodostimista Synonyymi konstruktori-sanalle on muodostin On tärkeää osata seuraavat käsitteet: Oletuskonstruktori (oletusmuodostin) Korvaa Javan oletusarvoisen konstruktorin ilman parametrejä() olevan konstruktorin Parametrillinen konstruktori (parametrillinen muodostin) Saa vaihtelevan määrän parametrejä Kopiokonstruktori (kopiomuodostin) Saa parametrinä oman luokan olion ja kopio olion nykyiseen olioon (eli tekee kopin)
Luokka-attribuutit Luokka-attribuutteja voidaan kutsua myös staattisiksi attribuuteiksi Luokka attribuuttia muutettaessa kaikki ko. luokan oliot saavat uuden arvon välittömästi Tämä ei tosin ole aina olio-ohjelmoinnin kannalta aina toivottavaa Katso esimerkiksi Deitel&Deitel sivulta 383 (kuudes painos) kuinka Employee-luokan luokka-attribuutin count arvo haetaan (Employee.getCount()); private static int count = 0;
Luokkametodit Luokka-attribuuteilla (staattisilla attribuuteilla) täytyy yleensä olla parina ns. luokkametodi (staattinen metodi) Staattista arvoa ei ole tarkoitus päästä lukemaan suoraan, vaan se luetaan esim. getterin kautta (Deitel, Deitel s. 382); public static int getcount() { return(count); }
UML Opettelimme myös UML luokkakaavioiden piirtämistä ja niiden tulkitsemista Kaavioita voi piirtää ainakin kolmella eri tavalla: käsin paperille, dia-ohjelmalla ja MS Visio-ohjelmalla Luokkakaavioissa ilmoitetaan luokan attribuuttien nimet ja tyypit sekä metodit
UML filosofiaa UML luokkakaaviot olisi hyvä tehdä ns. forward engineeringin kautta eli ensin piirretään kaaviot Myöhemmin kaavioiden päivittämiseen kannattaa käyttää esim. reverse engineering työkaluja, jotka generoivat kaaviot ohjelmakoodin perusteella
UML Esimerkkiluokkakaavio luokan nimi attribuutin näkyvyys metodin palautusarvon tyyppi staattinen metodi attribuutin tyyppi (tässä tapauksessa inttaulukko)
Koostumussuhde Opiskelijaluokkaan tulee kaksi Osoite-luokan oliota luodaan sinne siis koodissa: Osoite kotiosoite = new Osoite(); kerrannaisuus
Koostumussuhde Koostumussuhde voi olla ns. vahva tai heikko Vahvaa koostumussuhdetta merkitään mustatulla timantti Esimerkiksi voidaan ajatella, että auto on vahva koostumus pyöristä, korista ja moottorista ilman näitä auto-oliosta ei voi puhua Sinänsä musta timantti on suunnitteluyksityiskohta, jolla ei kannata tässä vaiheessa juuri päätä vaivata
Koostumussuhteen toteuttaminen Tarkastellaan edellistä tilannetta, jossa yhdellä opiskelijalla oli kaksi osoitetta Toteutus jakaantuu kahteen tiedostoon Osoite.java ja Opiskelija.java. Opiskelija.javan sisältämässä Opiskelijaluokassa täytyy olla yksi attribuutti, joka on Osoite-tyyppinen
Koostumussuhteen toteuttaminen Esimerkki: http://myy.helia.fi/~ict02d/luennot/koodit/osoite.java http://myy.helia.fi/~ict02d/luennot/koodit/opiskelija.java http://myy.helia.fi/~ict02d/luennot/koodit/osoitetesteri.java Opiskelija-luokka sisältää yhtenä attribuuttina koostumussuhteen ilmoittaman olion (Osoite) Osoite attribuutti on private ja Osoite-tyyppinen Muista aina toteuttaessa private määreet!
UML kerrannaisuus ja assosiaatiot Olemme opetelleet koostumussuhteen ja kontrollin siirtymän (Dependency) Assosiaatioiden määrittäminen ei aina ole aivan helppoa Koostumussuhde ja kontrollin siirtymä ovat kuitenkin onneksi aika yksiselitteisiä asioita
Kontrollin siirtyminen Ohjelmassa kontrollin siirtyminen kuvataan pääsääntöisesti avokärkisellä nuolella: Kontrolli lähtee aina liikkeelle main-metodin sisältävästä luokasta (tiedostosta).
Summa summarum Seuraavaksi on edessä tiimityön tekeminen, joka antaa osion perusarvosanan Eikun tekemään!