1 Kompositio Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä kompositio on? Tili - : String - : double 1 1 Kayttoraja - : String - : String Kompositio Kompositiolla (vahvalla koostumissuhteella) tarkoitetaan sitä, että toisen luokan olion elinikä ja omistajuus on toisen luokan oliolla. Pääluokan (Tili-luokan) olio siis luo toisen luokan (Kayttorajaluokan) olion. 2
2 Pääluokan (Tili-luokan) olio luo toisen luokan (Kayttoraja-luokan) olion. Tarkoituksena on kertoa tilin rajoituksia Kun luokasta (Tili-luokasta) tehdään olio samalla tehdään myös toisen luokan (Kayttoraja-luokan) olio. Kompositio olio tuhoutuu pääluokan olion mukana. 3 Esimerkiksi Tili-luokan sisällä on Kayttoraja-luokan olio Tili-luokan konstruktori luo itselleen Kayttoraja-luokan olion Tili-luokan set-metodilla muutetaan a Tili-luokan get-metodilla palautetaan kopio sta Tili-luokasta Kayttoraja-luokan oliota käytetään Kayttorajaluokan metodeilla Kun Tili-luokan olio tuhotaan, samalla tuhoutuu myös Tililuokan sisässä oleva Kayttoraja-luokan olio 4
3 Kompositio Olio koostuu toisesta oliosta Olio luo toisen olion Konstruktori luo molemmat oliot tili Kompositio vs. yhteyssuhde Yhteyssuhde Oliolla on suhde toiseen olioon Molemmat oliot syntyvät itsenäisesti molemmat oliot luodaan erikseen tehdään yhteys Henkilo hlo = new Henkilo(); tili.setomistaja(henkilo); tili omistaja hlo hetu nimi 5 Kompositio Javalla private String ; Tili-luokassa on Kayttoraja-luokka private double ; private Kayttoraja ; Tili-luokan olio Fi65123 4 200.0 public class Kayttoraja { private double, ; Tili-luokan oliossa on siis viite Kayttoraja-luokan olioon public Kayttoraja () { = ; = ; public Kayttoraja (double, double ) { this. = ; this. = ;
4 Konstruktorit private Kayttoraja ; public Tili() { = new Kayttoraja(); Kayttoraja-luokan olio luodaan Kayttoraja-luokan parametrittomalla konstruktorilla, koska Tili-luokan konstruktorin parametrina ei ole Kayttoraja-luokan oliota. public Tili(String, double ) { = new Kayttoraja(); // Seuraavalla sivulla parametrillinen konstruktori Kummassakaan konstruktorissa ei ole parametrina Kayttoraja-luokan oliota 7 Parametriton konstruktori 0.0 Tili-luokan konstruktori luo itselleen n Kayttoraja-luokan parametrittomalla konstruktorilla, joka asettaa alkuarvot 8
5 Jos parametri ei ole null parametrina on Kayttorajaluokan olio (tai null) public Tili(String, double, Kayttoraja ) { if (!= null) { this. = new Kayttoraja(.getVerkkoraja(),.getNostoraja()); else { this. = new Kayttoraja(); olio luodaan Kayttoraja-luokan parametrittomalla konstruktorilla, jos parametri on null olio luodaan Kayttoraja-luokan parametrillisella konstruktorilla, jos parametrina on olio (eli parametri ei ole null). 9 Parametrillinen konstruktori Tili-luokan konstruktori luo itselleen n parametrina tulleen olion tiedoista. Kayttoraja = new Kayttoraja(1200.0, 500.0); Tili tili = new Tili("Fi65123", 200.0, ); Fi65123 4 200.0 1200.0 500.0 10
6 set-metodi Luokkaan tehdään metodi (setxx) komposition muuttamista varten. private Kayttoraja ; muutetaan a parametrina tulleen olion (Kayttoraja-luokan olion) tiedoilla. Metodi siis kopioi parametrina tulleen olion tiedot. public void setkayttoraja(kayttoraja ) { if (!= null) { this..setverkkoraja(.getverkkoraja()); this..setnostoraja(.getnostoraja()); kopiointiin on käytettävä Kayttoraja-luokan metodeja, koska parametri on Kayttoraja-luokan olio Kayttoraja = new Kayttoraja(1200.0, 500.0); tili.setkayttoraja(); 11 get-metodi Luokkaan tehdään metodit attribuuttien (komposition) lukemista (getxx ) varten. private Kayttoraja ; tehdään kopion Tili-luokan sisällä olevasta Kayttoraja-luokan olista public Kayttoraja getkayttoraja() { Kayttoraja Kopio = new Kayttoraja(.getVerkkoraja(),.getNostoraja()); return Kopio; palautetaan kopion Tili-luokan sisällä olevasta Kayttoraja-luokan olista Kayttoraja = tili.getkayttoraja(); 12
7 tostring-metodi tostring-metodilla olion attribuutit muunnetaan merkkijonoksi. Metodia käytetään tietojen näyttämiseen. public String tostring() { return "=" + + ", =" + + ", " +.tostring(); käytetään Kayttorajaluokan metodeja System.out.println(tili.toString()); Tiedot voidaan näyttää myös käyttäen get-metodeja. Kayttoraja = tili.getkayttoraja(); System.out.println("Verkossa: " +.getverkkoraja() + "\nnostossa: " +.getnostoraja()); 13 Pääohjelma public static void main(string[] args) { System.out.print("Anna : "); double = input.nextdouble(); System.out.print("Anna : "); double = input.nextdouble(); tehdään Tili-luokan olio parametrittomalla konstruktorilla, mikä luo n oletusarvoilla tehdään Kayttorajaluokan olio Kayttoraja = new Kayttoraja(, ); tili.setkayttoraja(); System.out.println("Tilin tiedot:\n" + tili.tostring()); Muutetaan Tili-luokan olion n tietoja parametrina tulleen olioin tiedoilla. Set-metodi siis kopioi parametrina tulleen olion tiedot. 14