luokista (class) ja olioista (object)myy.haaga-helia.fi/~ict1td002/iltatiko/osio_2/luennot/... ·...

29
HELIA OHJELMOINTITAITO Osion 2 ensimmäinen viikko Seija Lahtinen 24.9.2005 Ensimmäisen viikon aiheet: Luokat ja oliot Luokan attribuutit ja metodit Oletusmuodostin Uml-kaavio; yhteyssuhde ja koostumussuhde Koostumussuhteen toteutus Lähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice Hall New Jersey. Sivut 357 – 372. tiedosto: document.doc 1(29)

Upload: others

Post on 05-Aug-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

Ensimmäisen viikon aiheet:

Luokat ja oliot

Luokan attribuutit ja metodit

Oletusmuodostin

Uml-kaavio; yhteyssuhde ja koostumussuhde

Koostumussuhteen toteutus

Lähde Deitel & Deitel 2005: Java How to Program. Sixth Edition.Prentice Hall New Jersey. Sivut 357 – 372.

tiedosto: document.doc

1(24)

Page 2: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

LUOKISTA (class) JA OLIOISTA (object)

LUOKKA määrittelee toiminallisen kokonaisuuden sisältää:

attribuutit metodit

Esimerkki Ihminen

LUOKKA on tyyppi ja OLIO on sen ilmentymä

Esimerkkiksi ihmisluokan oliot olio1 ja olio2:

tiedosto: document.doc

2(24)

public class Ihminen{

// attribuutitprivate String nimi;private Pvm syntymäaika;private String syntymapaikka;private double paino;private double pituus ;

private char sex; // ‘M’ tai ‘F’

// metoditpublic String pyydaNimi() { … }public String pyydaSyntymäpaikka() { … }public int pyydaIka() { … }

public double pyydaPituus() { … }public double pyydaPaino() { … }

}

piilotettuja tietoja

julkisia metodeja

String nimi:

Pvm syntymaaika:

String syntymapaikka:

double paino:

double pituus :

char sex ;double pyydaPituus();

String pyydaSyntymapaikka();

String pyydaNimi();

double pyydaPaino();

int pyydaIka();

String nimi:”Veikko Virtanen”

Pvm syntymaaika:19.6.1980String syntymapaikka:”Espoo”

double paino:85.0

double pituus :1.84

char sex :’M’

double pyydaPituus();

String pyydaSyntymapaikka();

String pyydaNimi();

olio1:

double pyydaPaino();

int pyydaIka();

Page 3: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

tiedosto: document.doc

3(24)

String nimi:”Velma Lahtinen”

Pvm syntymaaika:1.5.1965

String syntymapaikka:”Turku”

double paino:67.0

double pituus :1.67

char sex : ‘F’

double pyydaPituus();

String pyydaSyntymapaikka();

String pyydaNimi();

olio2:

double pyydaPaino();

int pyydaIka();

Page 4: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

LUOKKA on abstrakti tietotyyppi (abstract date type)

käyttäjä tietää, miten luokan ilmentymää, oliota, käytetään

hänen ei tarvitse tietää, miten olio on toteutettu

Kapselointi

Luokan attribuutit ja metodit voidaan kapseloida eli piilottaa luokan sisään (private) tai antaa toisten olioiden käytettäväksi (public)

Miksi?

LUOKKA on valmis paketti, se ei ole (ei pitäisi olla) sidoksissa ympäristöönsä

voidaan käyttää samaa luokkaa useissa sovelluksissa (UUDELLEENKÄYTETTÄVYYS)

Jos olemassaolevan luokan kaikki ominaisuudet eivät riitä uudessa sovelluksessa

käytetään vanhan luokan ominaisuuksia ja metodeja ja periytetään luokka siten, että uudet vaatimukset tulevat täytettyä

ei tarvitse koodata samaa asiaa uudelleen vaan ainoastaan tarvittavat uudet asiat

Entä jos sovellukseen tulee muutoksia (esim. henkilötunnuksen rakenne muuttuu)

muutoskohta pystytään paikallistamaan ja rajallistamaan helposti (YLLÄPIDETTÄVYYS)

tiedosto: document.doc

4(24)

Page 5: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

LUOKAN määrittely Javallapublic class Time{// piilotetut attribuutit private int hour; private int minute; private int second;

// piilotetut metodit private boolean tarkastaTunti (int h) {

boolean paluu; paluu = ( h < 0 || h >= 24 )? false : true; return paluu;

} private boolean tarkastaMinuutti ( int m) {

boolean paluu; paluu = ( m < 0 || m >= 60 ) ? false : true; return paluu;

} private boolean tarkastaSekuntti ( int s) {

boolean paluu; paluu =( s < 0 || s >= 60 ) ? false : true; return paluu;

}// julkiset metodit public void setTime( int h, int m, int s ) {

if ( tarkastaTunti(h) ) hour = h; else hour = 0;

minute = (tarkastaMinuutti(m) ? m : 0 );

second = (tarkastaSekuntti(s)? s : 0 ); } public String toString() {

return hour+":"+minute+":"+second; } } // end class Time

Piilotetut attribuutit

tiedosto: document.doc

5(24)

julkinen eli public:luokkaa voidaan käyttää myös muualla kuin siinä hakemistossa, johon luokka on talletettu

jos ei määrettä:luokkaaa voidaan käyttää vain hakemiston, johon luokka on talletettu, muista luokista.

Page 6: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

määritellään sanalla private

ei voi viitata luokan ulkopuolelta vaan ainoastaan luokan omista piilotetuista ja julkisista metodeista.

Esim. public class Time{// piilotetut attribuutit private int hour; private int minute; private int second;// piilotetut metodit private boolean tarkastaTunti (int h) {

boolean paluu; paluu = ( h < 0 || h >= 24 )? false : true; return paluu;

}…

// julkiset metodit public void setTime( int h, int m, int s ) {

if ( tarkastaTunti(h) ) hour = h; else hour = 0;

minute = (tarkastaMinuutti(m) ? m : 0 );

second = (tarkastaSekuntti(s)? s : 0 ); }…}// end of class

Piilotetut metodit

määritellään sanalla private

ei voi kutsua luokan ulkopuolelta vaan ainoastaan luokan omista metodeista.

Esim. // piilotetut metodit private boolean tarkastaTunti (int h) {

boolean paluu; paluu = ( h < 0 || h >= 24 )? false : true; return paluu;

tiedosto: document.doc

6(24)

Page 7: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

} private boolean tarkastaMinuutti ( int m) {

boolean paluu; paluu = ( m < 0 || m >= 60 ) ? false : true; return paluu;

} private boolean tarkastaSekuntti ( int s) {

boolean paluu; paluu =( s < 0 || s >= 60 ) ? false : true; return paluu;

}// julkiset metodit public void setTime( int h, int m, int s ) {

if ( tarkastaTunti(h) ) hour = h; else hour = 0;

minute = (tarkastaMinuutti(m) ? m : 0 );

second = (tarkastaSekuntti(s)? s : 0 ); }

tiedosto: document.doc

7(24)

Page 8: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

Julkiset metodit

määritellään sanalla public

voi kutsua luokan ulkopuolelta ja luokan omista metodeista

Esim. // julkiset metodit public void setTime( int h, int m, int s ) {

if ( tarkastaTunti(h) ) hour = h; else hour = 0;

minute = (tarkastaMinuutti(m) ? m : 0 );

second = (tarkastaSekuntti(s)? s : 0 ); } public String toString() {

return hour+":"+minute+":"+second; }

Julkiset attribuutit

määritellään sanalla public

voi viitata luokan ulkopuolelta ja luokan omista metodeista

käyttöä tulisi välttää, sillä sen käyttö huonontaa olio-ohjelmoinnin ajatusmallia (ylläpidettävyys ja uudelleenkäytettävyys).

Esim. Math-luokan kummatkin attribuutit ovat julkisia

public class Math{

public static final double E= 2.718281828459045;public static final double PI=3.141592653589793;

public static double pow (double a, bouble b){

…}

…}

Olion luonti ja tuhoaminen

tiedosto: document.doc

8(24)

Page 9: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

Luokan ilmentymä (instance of class) eli luokan olio luodaan operaatiolla new() seuraavasti:

Luokka olio = new Luokka ( );

tai

Luokka olio=null;

olio = new Luokka ( );

Olio tuhoutuu automaattisesti, kun mikään muuttuja ei viittaa siihen.

Viittausmuuttuja alustetaan null arvolla, jollei sille heti luoda oliota.

EliLuokka olio = null;

Myöhemmin kun olio-muuttujaa käytetään tulisi tutkia, viittaako muuttuja olioon vai ei.

if (olio != null){

olio.metodinkutsu();…}

Harjoitus: Mitä tapahtuu? Piirrä!

Luokka olio1 = new Luokka();Luokka olio2;

olio2 = olio1;OLION julkiseen attribuuttiin viittaminen

olio.julkinenAttribuutti;

Esim.

Luokka olio = new Luokka ();

tiedosto: document.doc

9(24)

olio:

muuttuja viittaa luotuun olioon

Page 10: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

System.out.println(olio.jukinenAttribuutti);

OLION julkisen metodin kutsuminen eli tietyn viestin lähettöminen oliolle

olio.metodi();

Esim.Time aika = new Time();

aika.setTime (10, 15, 5);

tiedosto: document.doc

10(24)

Page 11: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

LUOKAN käyttötapoja

A) Sovellus eli ohjelma toteutetaan Javalla luokan avulla

sovelluksella on attribuutit, eli tiedot joita sovellus käyttää

sovelluksella on vähintään yksi julkinen metodi, joka käynnistää sovelluksen toiminnan.

sovelluksella voi olla useita piilotettuja metodeja

Esim.public class Sovellus{

private int summa;

public void aja() { … } // aja-metodi …

public static void main (String [ ] args) {

// Sovellus-luokan olion luontiSovellus olio = new Sovellus();

// sovelluksen toiminnan aloitusolio.aja();

System.out.println (”*** LOPPU ***”);}

} // end of class

B) www-sivuilla toimiva sovelma (applet) toteutetaan luokan avulla

tiedosto: document.doc

11(24)

Aja-metodissa on sovelluksen/ohjelman logiikka ja toiminta

Page 12: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

C) käyttäjän määrittelemä käsite toteutetaan luokkana

Esim. public class Henkilo{

private String hetu;private String etunimi;private String sukunimi;

public String toString() { … }….

} jne.

Esimerkkinä ohjelma, joka pyytää suorakulmion sivujen pituudet ja tulostaa ne sekä kulmion alan.

tiedosto: document.doc

12(24)

public class KulmioSovellus{public void aja(){Suorakulmio olio = new Suorakulmio();

olio.setSuorakulmio ( 12, 40);System.out.println (”\nSuorakulmion tiedot: ” + olio); // taiSystem.out.println (”\nSuorakulmion tiedot: ”+olio.toString());

}

public static void main(String [] args ){KulmioSovellus so = new KulmioSovellus();

so.aja();System.out.println ("\n***LOPPU***");

}}// end of class

public class Suorakulmio{private int leveys;private int korkeus;

public void setSuorakulmio (int le, int ko){leveys = ( le >= 0 ) ? le : 0;korkeus = (ko >= 0 ) ? ko : 0;

}public String toString(){return ("leveys: " + leveys +

" korkeus: " + korkeus +" ala: " + korkeus*leveys);

}

}// end of class Suorakulmio

Page 13: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

tiedosto: document.doc

13(24)

ohjelman toiminta:

Suorakulmio tiedot: leveys: 12 korkeus: 40 ala: 480Suorakulmio tiedot: leveys: 12 korkeus: 40 ala: 480

*** LOPPU ***

Page 14: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

LUOKAN Muodostimet (constructors)

olion luonnin jälkeen, ohjelmoijan on tiedettävä, mitkä ovat olion attribuuttien arvot, eli olion tila tulee tietää

kieli sisältää ns. metodeita eli muodostimia, joiden avulla olion luonnin yhteydessä olion attribuutit saavat alkuarvonsa

muodostimen kutsu on automaattista ja tapahtuu kun olio luodaan

ohjelmoija ei koodaa kutsua

[poikkeus: muodostin voi kutsua toista muodostinta ensimmäisenä

toimenaan

Esim. this ( mahdolliset parametrit );]

muodostin voidaan kuormittaa, puhutaan kolmenlaisista muodostimista:

oletusmuodostin ( 1 / luokka )

parametrillinen muodostin ( useita / luokka )

kopiointimuodostin ( 1 / luokka )

tiedosto: document.doc

14(24)

Page 15: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

Oletusmuodostin:

olion attribuutit saavat oletusalkuarvot

Kääntäjä tekee oletusmuodostimen

jos ohjelmoija ei tee sitä itse

luokan attribuutit saavat oletusarvot:

numeerinen attribuutti saa tyyppinsä mukaisen nollan char: ns. null-merkki ’\u0000’ boolean: false kaikki viittaustyyppiset muuttujat saavat arvon null

Ohjelmoijan tekemä oletusmuodostin

Esim. public class Time{// piilotetut attribuutit private int hour; private int minute; private int second;// muodostimet// oletusmuodostinpublic Time ( ) {

hour = 8;minute = 15;second = 0;

}

Oletusmuodostimen kutsu tapahtuu,kun olio luodaan seuraavasti:

Time aika = new Time();

tai

Time aika;aika = new Time();public class Time{// piilotetut attribuutit private int hour; private int minute; private int second;

tiedosto: document.doc

15(24)

muodostimen nimi on luokan nimi

ei parametreja ei tyyppiä näkyvyys public

Page 16: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

// muodostimet // oletusmuodostin public Time() {

hour = 8;minute = 15;second = 0;

}// piilotetut metodit private boolean tarkastaTunti (int h) {

boolean paluu; paluu = ( h < 0 || h >= 24 )? false : true; return paluu;

} private boolean tarkastaMinuutti ( int m) {

boolean paluu; paluu = ( m < 0 || m >= 60 ) ? false : true; return paluu;

} private boolean tarkastaSekuntti ( int s) {

boolean paluu; paluu =( s < 0 || s >= 60 ) ? false : true; return paluu;

}// julkiset metodit public void setTime( int h, int m, int s ) {

if ( tarkastaTunti(h) ) hour = h; else hour = 0;

minute = (tarkastaMinuutti(m) ? m : 0 ); second = (tarkastaSekuntti(s)? s : 0 ); } public String toString() {

return hour+":"+minute+":"+second; } } // end class Time

public class TimeTesti1{

public void aja(){

Time aika = new Time(); // oletusmuodostimen kutsu

System.out.println("Oletusaika on klo " + aika);

tiedosto: document.doc

16(24)

Page 17: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

/* tai System.out.println("Oletusaika on klo " +

aika.toString()); */

}

public static void main (String [] args){

TimeTesti1 olio = new TimeTesti1();

olio.aja();

System.out.println("\n***loppu***");}

}

tulostaa:Oletusaika on klo 8:15:0

tiedosto: document.doc

17(24)

Page 18: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

Olion identiteetti: this

jokaisella oliolla on oma this-muuttujan arvo

this-muuttujaa voidaan käyttää olion metodissa, kun halutaan viitata viestin saaneeseen olioon

Esim.

public class Time{ private int hour; private int minute; private int second;

…public void setHour (int hour){ if (hour >=0 && hour <24) this.hour = hour;

}…

} // end of class

this on viittaus viestin saaneeseen olioon

tiedosto: document.doc

18(24)

Kun olion attribuutin tunnus on sama kuin olion metodin parametri, tunnukset erotetaan toisistaan this-viittauksen

Page 19: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

toString-metodi

jokainen Java-luokka on periytetty Object-luokasta

Object-luokalta olio perii toString-metodin, mutta metodi ei toimi niin kuin ohjelmoija sen haluaa, eli ohjelmoidaan se itse

Esim. Kun Time-luokalta puuttuu toString-metodi ja suoritetaan seuraavat lauseet:

Time aika = new Time();

System.out.println("Oletusaika on klo " + aika);

Tulostuu: Oletusaika on klo Time@82ba41

Tämä ei kuvaa todellista aikaa, joten Time-luokkaan kannattaa tehdä oma toString-metodi.

public String toString(){

return hour+":"+minute+":"+second;

// tai /*

String paluu; paluu = hour+":"+minute+":"+second; return paluu;

*/ }

tiedosto: document.doc

19(24)

Object

Time

Page 20: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

Metodin kutsu:

Time aika = new Time();

System.out.println(aika.toString());

// tai

System.out.println(aika); // tapahtuu automaattinen toString-metodin kutsu

String mjono1;

mjono1 = aika.toString();

tiedosto: document.doc

20(24)

Page 21: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

Luokkienväliset yhteydet; yhteyssuhde ja koostumussuhde

Tilaustietojen kuvaus UML-kaavion (luokkakaavio) avulla.

Yhteyssuhteet ( )

Tilauksella on täsmälleen yksi asiakas, mutta samalla asiakkaalla voi olla useita tilauksia.

Asiakkaalla on täsmälleen yksi postinumero ja postitoimipaikka, mutta samalla postialueella voi olla useita asiakkaita.

Tilausrivi koskee täsmälleen yhtä tuotetta, mutta samalla tuotteella voi olla useita tilausrivejä.

Koostumussuhteet ( )

Tilaus koostuu yhdestä tai useammasta tilausrivistä. Tilausrivi ei elä ilman tilausta.

Tilauksella on 1 tilauspäivämäärä ja 0 tai 1 toimituspäivämäärää. Päivämäärät eivät elä ilman tilausta.

tiedosto: document.doc

21(24)

Page 22: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

Harjoitus: Tee seuraavasta kuvauksesta luokkakaavio.

Kustantajan tiedot ovat kustantajan tunnus, nimi, puhelinnumero, katuosoite sekä postinro ja postitmp. Kustantaja kustantaa aikakauslehtiä ja yrittää saada lehdilleen tilaajia. Tilaajalla on asiakasnumero, nimi, puhelinnumero, osoite sekä postinro ja postitmp. Tilaus kohdistuu lehteen, jolla on lehden nimi. Tilaukseen kuuluu tilauspäivämäärä ja tilauksen loppumispäivämäärä, tieto siitä onko kyseessä kestotilaus ja lehden tilauksen hinta.

Koostumussuhteen toteuttaminen

tiedosto: document.doc

22(24)

Page 23: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

kun olio koostuu muista olioista, vallitsee olioiden välillä koostumussuhde (containment relationship)

olioita sisältävää oliota kutsutaan koosteolioksi

koosteolioon sisältyviä olioita kutsutaan osaolioiksi

koosteolion luokka (koosteluokka) muodostaa koosterakenteen (aggregate)

koosterakenne toteutetaan siten, että koosteluokassa on viitteet osaluokkien olioihin

Esim.

Esim. Tapaaminen-luokka on koosteluokka, joka koostuu osaolioista String ja Time.

tiedosto: document.doc

23(24)

public class Tapaaminen{// attribuutitprivate String tilaisuus;private Time klo;

// oletusmuodostinpublic Tapaaminen(){tilaisuus = null;klo = null;}

// metoditpublic void setTilaisuus (String tilaisuus){this.tilaisuus = tilaisuus;}

public void setKlo ( Time klo){this.klo = klo;}

public String toString(){String paluu;

if (tilaisuus != null)paluu = tilaisuus+ " ";

elsepaluu = "? ";

if (klo != null)paluu = paluu + klo;

elsepaluu = paluu + "?";

return paluu;}

}// end of class

public class Naytto{ …

}

public class Nappaimisto{ …}

public class Tietokone{// attribuutit private Naytto naytto; private Nappaimisto nappaimisto; private Cpu cpu; …}

public class Cpu{ …

}

Esim.

Page 24: LUOKISTA (class) JA OLIOISTA (object)myy.haaga-helia.fi/~ict1td002/ILTATIKO/OSIO_2/Luennot/... · Web viewLähde Deitel & Deitel 2005: Java How to Program. Sixth Edition. Prentice

HELIA OHJELMOINTITAITOOsion 2 ensimmäinen viikko

Seija Lahtinen 24.9.2005

tiedosto: document.doc

24(24)

public class TapaaminenTesti1{public void aja(){

Tapaaminen tap1;Time aika;String tilaisuus;

tap1 = new Tapaaminen();

System.out.println("\nOletustapaaminen: " + tap1);

aika = new Time();aika.setTime(19, 30, 0);

tilaisuus = "Ooppera, Sevillan parturi";

tap1.setTilaisuus (tilaisuus);tap1.setKlo (aika);

System.out.println("\nTapaaminen: " + tap1);

}

public static void main (String [] args){TapaaminenTesti1 olio = new TapaaminenTesti1();

olio.aja();

System.out.println("\n\n**LOPPU***");}

}// end of class

tulostuu: Oletustapaaminen: ? ?Tapaaminen: Ooppera, Sevillan parturi klo 19:30:0

**LOPPU***