1 / 27

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Olioiden yhteistoiminta

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Olioiden yhteistoiminta. Tausta. Rectangle - length : double width : double + Rectangle() + Rectangle(len : double, wid : double ) + setLength ( len : double ) : void + setWidth ( wid : double ) : void

janina
Download Presentation

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Olioiden yhteistoiminta

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 opOlioiden yhteistoiminta

  2. Tausta • Rectangle • - length : double • width : double • + Rectangle() • + Rectangle(len : double, wid : double) • + setLength(len : double) : void • + setWidth(wid : double) : void • + getLength() : double • + getWidth() : double • + getArea() : double • Aiemmin todettiin, että • Luokat sisältävät instanssimuuttujia ja metodeja. • Instanssimuuttujat kapseloidaan (private). • Instanssimuuttujiin pääsee käsiksi asetus- ja saantimetodien kautta. • Metodit ovat julkisia (public), jos halutaan, että niitä voi käyttää kaikista muista luokista. • Kun olio luodaan, kutsutaan konstruktoria (alustajaa). • Esimerkissä tyhjä, parametriton oletuskonstruktori sekä parametrillinen konstruktori Outi Grotenfelt & Vesa Ollikainen

  3. Tausta.. Outi Grotenfelt

  4. Esimerkki • BankAccount • balance: double • + BankAccount() • + BankAccount(startBalance: double) • + BankAccount(str: String) • + deposit(amount : double) : void • + deposit(str: String) : void • + withDraw(amount: double) : void • + withDraw(str: String) : void • + setBalance(b: double) : void • + setBalance(str: String) : void • + setBalance() : double Overloadedconstructors Overloadedothermethods Outi Grotenfelt

  5. Esim..(jatkuu) Outi Grotenfelt

  6. Esim..(jatkuu) Overloadeddepositmethods Overloadedwithdrawmethods Outi Grotenfelt

  7. Esim..(jatkuu) OverloadedsetBalancemethods Outi Grotenfelt

  8. 4/9/14 8

  9. Kuinka luokat löydetään? Kuvaus: Jaskan autokorjaamo palvelee erityisesti automerkkejä kuten Mercedes, Porche, ja BMW. Kun asiakas tuo auton huoltoon, työnjohtaja saa asiakkaan nimen, osoitteen ja puhelinnumeron. Sitten työnjohtaja kirjaa auton merkin, mallin ja valmistusvuoden ja antaa asiakkaalle huoltokuitin. Kuitti sisältää huollon hinnan, arvioidut tarvittavat varaosat, mahdolliset muut työkustannukset, veron sekä palvelun kokonaishinnan. Tarkoituksena on tehdä sovellus, joka antaisi työnjohtajan tulostaa asiakkaan tarvitseman kuitin.. Outi Grotenfelt

  10. Luokat? • Identifioidaan substantiivit: Jaskan autokorjaamo palvelee erityisesti automerkkejä kuten Mercedes, Porche, ja BMW. Kun asiakas tuo autonhuoltoon, työnjohtaja saa asiakkaan nimen, osoitteen ja puhelinnumeron. Sitten työnjohtaja kirjaa auton merkin, mallin ja valmistusvuoden ja antaa asiakkaalle huoltokuitin. Kuitti sisältää huollon hinnan, arvioidut tarvittavat varaosat, mahdolliset muut työkustannukset, veron sekä palvelun kokonaishinnan. Melko monet substantiiveista esiintyvät useaan kertaan! Outi Grotenfelt

  11. Todella mielenkiintoiset substantiivit: • auto • asiakas • huoltokuitti Luokat? • Substantiivilista: osoite BMW auto asiakas Arvioitu työkustannus Arvioitu varaosakustannus Jaskan korjaamo merkki työnjohtaja Mercedes malli nimi Porche vero huoltokuitti puhelinnumero Palvelun kokonaishinta vuosi HUOM: jotkut substantiivit todellakin tarkoittavat samaa asiaa! Toiset taas eivät ole kiinnostavia! Jotkut tarkoittavat olioita eivätkä luokkia! Outi Grotenfelt

  12. Luokat: • Asiakas • nimi: String • osoite: String • puhelin: String • + Asiakas() • +setNimi(n:String) : void • +setOsoite(a:String) : void • +setPuhelin(p:String) : void • +getNimi () : String • +getOsoite () : String • +getPuhelin() : String • Auto • merkki: String • malli: String • valmistusvuosi: int • + Auto() • +setMerkki(m:String) : void • +setMalli(m:String) : void • +setVuosi(y:int) : void • +getMerkki() : String • +getMalli() : String • +getVuosi() : int • Huoltokuitti • osaHinta: double • tyoHinta: double • + Huoltokuitti() • +setOsaHinta(c:double) : void • +setTyoHinta(c:double) : void • +getOsaHinta:() : double • +getTyoHinta () : double • +getVero() : double • +getKokoHinta () : double Outi Grotenfelt

  13. Olioiden yhteistyö • Olioiden yhteistoiminta edellyttää, että oliot tuntevat toisensa. • Olioiden välinen yhteys toteutetaan instanssimuuttujien avulla. • Tarkastellaan esimerkkinä henkilön ja polkupyörän suhdetta. • Miten toinen olio saa tiedon toisesta oliosta? • olion luonnin yhteydessä • metodikutsun parametrina Outi Grotenfelt & Vesa Ollikainen

  14. Ratkaisu 1: tieto luonnin yhteydessä • Henkilö-luokassa ei ole viittausta polkupyörään Outi Grotenfelt & Vesa Ollikainen

  15. …jatkoa • Polkupyörä-luokassa on instanssimuuttujana viittaus Henkilö-luokan olioon. • Kun polkupyörä luodaan, alustaja asettaa viittauksen parametrina saatuun omistajaan. • Polkupyörän omistaja on pakko antaa. • voi tosin olla null. Outi Grotenfelt & Vesa Ollikainen

  16. …jatkoa • Pääohjelma luo henkilön ja polkupyörän. • Polkupyörä-olion alustajalle välitetään viittaus jo luotuun henkilöön. Outi Grotenfelt & Vesa Ollikainen

  17. Ratkaisu 2: tieto metodikutsussa • Henkilö-luokan instanssimuuttujissa ei ole polkupyörää. • Henkilö-luokan metodi aja saa parametrinaan viittauksen Polkupyörä-luokan olioon Outi Grotenfelt & Vesa Ollikainen

  18. …jatkoa • Polkupyörä-luokka ei sisällä viittausta henkilöön Outi Grotenfelt & Vesa Ollikainen

  19. …jatkoa • Pääohjelma luo henkilön ja polkupyörän. Ne eivät luonnin jälkeen tunne toisiaan. • Henkilö-olion aja-metodille välitetään viittaus polkupyörään.. Outi Grotenfelt & Vesa Ollikainen

  20. Assosiaatio • Tilannetta, jossa toisen luokan olio tuntee toisen luokan olion, kutsutaan assosiaatioksi. • Edellä: • polkupyörä tuntee henkilön (esimerkki 1) • henkilö tuntee polkupyörän (esimerkki 2) • Yhteys voisi olla myös molempiin suuntiin Outi Grotenfelt & Vesa Ollikainen

  21. UML-luokkakaaviomerkintä • ”Polkupyörä tuntee omistajan” • Lisäksi voidaan kuvata lukumääräsuhteita: • Polkupyörällä on aina yksi omistaja • Henkilöllä on mielivaltaisen monta polkupyörää (esimerkissämme). Outi Grotenfelt & Vesa Ollikainen

  22. Kooste • Edellisen esimerkin henkilöt ja omistajat ovat itsenäisiä olioita. • Olio voi koostua toisista olioista. • Toteutetaan instanssimuuttujien avulla kuten assosiaatio. • Löyhä kooste: • Tietokone koostuu komponenteista. • Jos tietokone tuhotaan, komponentit voivat jäädä olemaan. • Aito kooste • Talo koostuu huoneista. • Jos talo tuhotaan, huoneetkin tuhoutuvat. Outi Grotenfelt & Vesa Ollikainen

  23. Esimerkkejä (UML-luokkakaavio) Outi Grotenfelt & Vesa Ollikainen

  24. Esimerkki: aito kooste • Talo-luokalla on instanssimuuttujina huoneet, joista talo koostuu. Outi Grotenfelt & Vesa Ollikainen

  25. …jatkoa • Huone-luokan oliot ovat Talo-luokan olioiden luomia. • Huoneet eivät tiedä taloa, johon ne kuuluvat. Outi Grotenfelt & Vesa Ollikainen

  26. …jatkoa • Pääohjelmassa luodaan Talo-luokan olio. • Huone-luokasta ei tiedetä mitään, ei edes sen olemassaoloa! • Huoneisiin päästäisiin käsiksi vain talon kautta. Outi Grotenfelt & Vesa Ollikainen

  27. KIITOS! www.metropolia.fiwww.facebook.com/MetropoliaAMK outi.grotenfelt@metropolia.fi

More Related