Osion kaksi kertaus Jukka Juslin Jukka Juslin Sislt


![Taulukot • Taulukot luodaan Java-kielessä seuraavanlaisesti: – int [] arvosanat = {1, 2, 3, Taulukot • Taulukot luodaan Java-kielessä seuraavanlaisesti: – int [] arvosanat = {1, 2, 3,](https://slidetodoc.com/presentation_image_h2/605159d017899f3c26d2cc2dca684772/image-3.jpg)





















- Slides: 24
Osion kaksi kertaus Jukka Juslin © Jukka Juslin
Sisältö • • Taulukot ja Stringit Luokkien kirjoittaminen Oletusmuodostin UML © Jukka Juslin
Taulukot • Taulukot luodaan Java-kielessä seuraavanlaisesti: – int [] arvosanat = {1, 2, 3, 4, 5}; • Taulukon pituus saadaan length – arvosanat. length; // mikä on eo. taul. pituus? • Taulukosta alkion poimiminen: esimerkiksi jos halutaan arvosanan viisi alkio: – int vitonen = arvosanat[4]; © Jukka Juslin
String • String Javan merkkijonotietotyyppinä • String nimi = ”Jukka Juslin”; • Stringien vertailu equals metodilla, EI == operaattorilla, if(nimi. equals(” ”)) { …} • to. String metodi tulostaa olion sisällön Stringinä niin että kaikkien attribuuttien arvoa konkatenoidaan yhdeksi Stringiksi ja erotetaan esim. välilyönneillä arvot toisistaan public String to. String() { return(nimi); © Jukka Juslin }
Luokkien kirjoittaminen • Luokan kirjoittaminen esim. public class Mummu. Kello { private String kellon. Aika; private Pvm pvm = new Pvm(); private String viikon. Paiva; public Mummu. Kello() { kellon. Aika = ” 00: 00”; } public int getviikon. Paiva() { return(viikon. Paiva); } public void setviikon. Paiva( String viikon. Paiva) { this. viikon. Paiva=viikon. Paiva; } } © Jukka Juslin
Luokkien kirjoittaminen • Muista laittaa kaikki attribuutit private tyyppisiksi, jotta kapsuloinnin idea toteutuu! • Oletusmuodostin alkaa public Luokan. Nimi() – mitään palautustyyppiä ei saa olla! © Jukka Juslin
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 © Jukka Juslin
Lisää this-sanasta • This-viittaa aina kyseisellä hetkellä käytössä olevaan olioon • Koko nykyinen olio voidaan palauttaa kirjoittamalla return(this); © Jukka Juslin
to. String metodi • Pääsääntöisesti kaikille luokille pitää kirjoittaa to. String metodi • to. String konkatenoi Stringiksi olion attribuuttien arvon tällähetkellä – Eli kyseessä on ns. olion tilan tulostaminen • Ilman to. String metodia saadaan oliosta tulostumaan ns. OID numero, joka on muistiosoite viitaten missä itse olio sijaitsee © Jukka Juslin
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ä © Jukka Juslin
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ä set. Pvm nimistä setteriä, vaan asettaa attribuutit yksitellen tai konstruktorissa © Jukka Juslin
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 kopion) public Pvm(Pvm pvm) { this. pp = pvm. pp; this. kk = pvm. kk; this. vv = pvm. vv; } © Jukka Juslin
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. get. Count()); private static int count = 0; © Jukka Juslin
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 get. Count() { return(count); } © Jukka Juslin
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 © Jukka Juslin
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 © Jukka Juslin
UML luokan nimi • Esimerkkiluokkakaavio attribuutin näkyvyys metodin palautusarvon tyyppi attribuutin tyyppi (tässä tapauksessa inttaulukko) staattinen metodi © Jukka Juslin
Koostumussuhde kerrannaisuus • Opiskelijaluokkaan tulee kaksi Osoite-luokan oliota luodaan sinne siis koodissa: Osoite kotiosoite = new Osoite(); © Jukka Juslin
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 © Jukka Juslin
Koostumussuhteen toteuttaminen • Tarkastellaan edellistä tilannetta, jossa yhdellä opiskelijalla oli kaksi osoitetta • Toteutus jakaantuu kahteen tiedostoon Osoite. java ja Opiskelija. javan sisältämässä Opiskelijaluokassa täytyy olla kaksi attribuuttia, jotka ovat Osoite-tyyppisiä © Jukka Juslin
Koostumussuhteen toteuttaminen • Esimerkki: – http: //myy. helia. fi/~ict 02 d/luennot/Koodit/Osoite. java – http: //myy. helia. fi/~ict 02 d/luennot/Koodit/Opiskelija. java – http: //myy. helia. fi/~ict 02 d/luennot/Koodit/Osoite. Testeri. java • Opiskelija-luokka sisältää yhtenä attribuuttina koostumussuhteen ilmoittaman olion (Osoite) • Osoite attribuutti on private ja Osoite-tyyppinen • Muista aina toteuttaessa private määreet! © Jukka Juslin
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 © Jukka Juslin
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). © Jukka Juslin
Summa summarum • Seuraavaksi on edessä tiimityön tekeminen, joka antaa osion perusarvosanan – Eikun tekemään! © Jukka Juslin