KOHDELUOKAN MÄÄRITTELY

Samankaltaiset tiedostot
on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Olio-ohjelmointi Javalla

Luokan muodostimet (Constructors)

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

YHTEYSSUHDE (assosiation)

Metodien tekeminen Javalla

Lista luokan sisällä

Rajapinta (interface)

UML ja luokkien väliset suhteet

Listarakenne (ArrayList-luokka)

Periytyminen (inheritance)

9. Periytyminen Javassa 9.1

Mikä yhteyssuhde on?

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

public static void main (String [] args)

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Sisältö. 22. Taulukot. Yleistä. Yleistä

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

9. Periytyminen Javassa 9.1

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Java-kielen perusteet

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Oliot viestivät metodeja kutsuen

1. Omat operaatiot 1.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Java-kielen perusteita

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Taulukoiden käsittely Javalla

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Java-kielen perusteita

Vahva koostumussuhde (Composition)

Javan perusteita. Janne Käki

2. Olio-ohjelmoinista lyhyesti 2.1

Ohjelmointi 2 / 2010 Välikoe / 26.3

Luokan sisällä on lista

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

14. Poikkeukset 14.1

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

7. Oliot ja viitteet 7.1

Metodien tekeminen Javalla

4. Olio-ohjelmoinista lyhyesti 4.1

Java kahdessa tunnissa. Jyry Suvilehto

Luokat ja oliot. Ville Sundberg

Poikkeustenkäsittely

4. Luokan testaus ja käyttö olion kautta 4.1

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Java-kielen perusteet

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

19. Olio-ohjelmointia Javalla 19.1

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

16. Javan omat luokat 16.1

14. Poikkeukset 14.1

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Ohjelmoinnin jatkokurssi, kurssikoe

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Taulukot. Jukka Harju, Jukka Juslin

1 Tehtävän kuvaus ja analysointi

Tietokannat II -kurssin harjoitustyö

Ohjelmointi 2, välikoe

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Java-kielen perusteet

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Olio-ohjelmointi Syntaksikokoelma

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen

Java-kielen perusteita

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

17. Javan omat luokat 17.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Ohjelmoinnin perusteet Y Python

Aalto Yliopisto T Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

15. Ohjelmoinnin tekniikkaa 15.1

Ehto- ja toistolauseet

Mitä poikkeuskäsittely tarkoittaa?

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Ohjelmointi 2 / 2011 Välikoe / 25.3

Ohjelmoinnin perusteet, kurssikoe

Transkriptio:

KOHDELUOKAN MÄÄRITTELY Kohdeluokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Taulukon alkiona olio Luokkakohtaiset attribuutit ja metodit

KOHDELUOKKA on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä vrt. tiedonhallinta ja tietokannat opintojakson luokkakaavio, luokkakaavion luokat ovat kohdeluokkia Esim. Tuote-luokka, Asiakas-luokka, Oppilas-luokka, Opettaja-luokka, Opintojakso-luokka jne. 2

Mitä kohdeluokka sisältää? + Olion ominaisuudet eli attribuutit + Olion metodit eli toimenpidekokonaisuudet + Luokan attribuutit + Luokan metodit 3

Luokan määrittely näkyvyys class LuokanNimi { Näkyvyys: private luokkaa ei voi käyttää mistään public luokka on julkinen, sitä voi käyttää mistä vaan protected liittyy periytymiseen, ei käsitellä nyt puuttuu luokkaa voi käyttää vain siitä paketista, jossa se on määritelty valinnainen pakollinen 4

näkyvyys class LuokanNimi { Luokan nimi kirjoitetaan aina suurella alkukirjaimella Luokka talletetaan täsmälleen samalla nimelle kuin kirjoitetaan luokan nimi Tiedoston tietotyyppi on java 5

Olion ominaisuudet eli attribuutit Olion attribuutit kuvaavat sen ominaisuuksia Esim. Oppilas-luokka sisältää seuraavat olion ominaisuudet: oppilasnumero etunimi Sukunimi email puh Jokaisella Oppilas-luokan oliolla on samat attribuutit, mutta jokaisen olion attribuuteilla on eri arvot eli olion omat arvot 6

Olion ominaisuudet eli attribuutit jatkuu Olion attribuutit määritellään seuraavasti: public class Luokka { näkyvyys tietotyyppi attribuutinnimi; näkyvyys tietotyyppi attribuutinnimi; 7

näkyvyys tietotyyppi attribuutinnimi; Attribuutin näkyvyys määrittää attribuutin käyttöalueen eli mistä voi viitata ko. attribuuttiin Näkyvyys: private Tarkoittaa, että ko. attribuutti on piilotettu luokan sisään, eikä siihen voi viitata kuin luokan sisältä eli olion omista metodeista. public Tarkoittaa, että ko. attribuutti on julkinen, eli siihen voi viitata mistä tahansa luokasta. protected liittyy periytymiseen, ei käsitellä nyt puuttuu ko. attribuuttia voi käyttää vain siitä paketista, jossa se on määritelty 8

private tietotyyppi attribuutinnimi; Luokan attribuutit määritellään yleensä näkyvyydellä private Miksi? Vain luokka itse saa muuttaa attribuuttien arvoja luokka vastaa attribuuttien arvojen oikeellisuudesta Ylläpidettävyys helpottuu Mitä jos attribuutin näkyvyys on public? Kuka tahansa voi muuttaa attribuutin arvon arvoa ei tarkasteta ongelmia, miten löydän ohjelmasta virheen ylläpito, miten ymmärrän ohjelman toimivuuden, jos attribuutin arvoa voi muuttaa missä tahansa? 9

näkyvyys tietotyyppi attribuutinnimi; Jokaisella attribuutilla on tietotyyppi ja nimi Attribuutti on AINA käytettävissä luokan sisällä, eli olion metodeissa Esim. public class Aika { private int tunnit; private int minuutit; private int sekunnit; 10

Olion metodit Olion metodit määritellän luokan sisään public class Luokka{ näkyvyys tietotyyppi metodinnimi (parametrilista) { Metodin runko Näkyvyys: private metodia voi kutsua vain sen oman luokan metodeista public metodi on julkinen, sitä voi kutsua mistä vaan protected liittyy periytymiseen, ei käsitellä nyt puuttuu metodia voi kutsua vain siitä paketista, jossa se on määritelty 11

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) 12

setattribuutti-metodit eli attribuuttien asetusmetodit Metodi vie uuden arvon ko. attribuutille, se tarkastaa attribuutin uuden arvon ja hyväksyy (sijoittaa attribuutin arvoksi) tai hylkää (ei sijoita attribuutin arvoksi) tämän public void setattribuutinnimi (tietotyyppi parametri) Metodin näkyvyys on public Metodin tyyppi on void se ei palauta mitään tietoja Metodin nimi alkaa sanalla set ja jatkuu attribuutin nimellä isolla alkukirjaimella Metodilla on yleensä yksi parametri, jonka tietotyyppi on sama kuin ko. attribuutilla 13

setattribuutti-metodit jatkuu Esim. public class Aika { private int tunnit; //Attribuutit: private int minuutit; private int sekunnit; // setattribuutti-metodit public void settunnit ( int h ){ tunnit = 0; if (h >= 0 && h < 24) tunnit = h; public void setminuutit ( int m ){ minuutit = 0; if (m >= 0 && m < 60) minuutit = m; public void setsekunnit ( int s ){ sekunnit = 0; if (s >= 0 && s < 60) sekunnit = s; // tunnit ϵ [0,24[ // minuutit ϵ [0,60[ // sekunnit ϵ [0,60[ 14

getattribuutti-metodit eli attribuuttien saantimetodit metodi palauttaa ko. attribuutin arvon kutsujalle public tietotyyppi getattribuutti() metodin näkyvyys on public metodin tietotyyppi on yleensä sama kuin ko. attribuuttilla metodin nimi alkaa sanalla get ja jatkuu attribuutin nimellä isolla alkukirjaimella metodilla ei ole parametreja 15

getattribuutti-metodit jatkuu Esim. public class Aika { //Attribuutit: private int tunnit; private int minuutit; private int sekunnit; //getattribuutti_metodit public int gettunnit() { return tunnit; public int getminuutit() { return minuutit; public int getsekunnit() { return sekunnit; 16

public String 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 Kun ohjelmoija itse määrittelee tostring-metodin: public class Aika { private int tunnit; private int minuutit; private int sekunnit; public String tostring (){ return tunnit + ":" +minuutit + ":" + sekunnit; Metodia käytetään olion tietojen tulostamisessa 17

Olion luonti Luokan ilmentymä (instance of class) eli luokan olio luodaan operaatiolla new () seuraavasti: tai Luokka ab= new Luokka ( ); Luokka ab= null; ab = new Luokka ( );, missä ab on muuttujan nimi Muuttuja ab, joka viittaa olioon, kuvataan seuraavasti: 18

Olion luonti jatkuu Todellisuudessa, oliolle on varattu tila tietokoneen keskusmuistista ja muuttujan sisältö on luodun olion keskumuistipaikan osoite eli Viittausmuuttuja alustetaan null arvolla, jollei sille heti luoda oliota. Eli Luokka ab = null; Myöhemmin kun oliota viittaavaa muuttujaa käytetään tulisi tutkia, viittaako muuttuja olioon vai ei. if ( ab!= null ) { ab.metodinkutsu(); 19

Olion tuhoutuminen Olio tuhoutuu automaattisesti, kun mikään muuttuja ei viittaa siihen. Harjoitus: Mitä tapahtuu? Piirrä! Luokka olio1 = new Luokka(); Luokka olio2; olio2 = olio1; 20

Metodin kutsuminen luokan ulkopuolta Olion metodia voidaan kutsua, kun olio on luotu Esim. Aika aika = new Aika(); aika.settunnit(15); aika.setminuutit(45); aika.setsekunnit(30); System.out.println(aika); // tai System.out.println(aika.toString()); Ks. Aika.java ja AikaOhjelma.java 21

Harjoitus Tee kohdeluokka Tuote, jonka attribuutteina ovat: tuotteen numero (>0), nimi (vähintään 2 kirjainta), hinta (desimaaliluku > 0). Toteuta luokkaan set- ja getattribuutti-metodit sekä tostringmetodi. Tee ohjelmaluokka TuoteOhjelma, joka luo yhden Tuote-olion, pyytää sen attribuuteille arvot ja tulostaa tuotteen tiedot. 22 Ismo Harjunmaa, Seija Lahtinen - Ohjelmointi

Taulukon alkiona olio Esim. Ohjelma, joka lukee 5 ajanhetkeä taulukkoon, lajittelee ajat järjestykseen ja tulostaa ne. public class PaivanOhjelma { private Scanner input; public void aja() { input = new Scanner(System.in); Aika [] ajat = new Aika[5]; for ( int i=0; i < ajat.length; i++) ajat[i] = pyydaaika(); lajittele (ajat); tulostaajat(ajat); 23 Ismo Harjunmaa, Seija Lahtinen - Ohjelmointi

Esim. jatkuu private Aika pyydaaika() { int tunnit, minuutit, sekunnit; Aika aika= new Aika(); System.out.println("Anna ajanhetki:"); do{ System.out.println("Anna tunnit (0-23):"); tunnit = input.nextint(); aika.settunnit(tunnit); while (tunnit!= aika.gettunnit()); do{ System.out.println("Anna minuutit (0-59):"); minuutit = input.nextint(); aika.setminuutit(minuutit); while (minuutit!= aika.getminuutit()); do{ System.out.println("Anna sekunnit (0-59):"); sekunnit = input.nextint(); aika.setsekunnit (sekunnit); while (sekunnit!= aika.getsekunnit()); return aika; 24

Esim. jatkuu private void lajittele (Aika [] taulu) { boolean vaihto=true; Aika apu; int i,viimeinenkohta; if (taulu!= null) { viimeinenkohta = taulu.length-1; while (vaihto) { vaihto = false; for (i = 0; i < viimeinenkohta; i++) { if (taulu[i].compareto(taulu[i+1]) > 0) { apu = taulu[i]; taulu[i] = taulu[i+1]; taulu[i+1] =apu; vaihto = true; viimeinenkohta--; Aika-luokkaan lisätty metodi public int compareto (Aika a) 25

Esim. jatkuu private void tulostaajat (Aika [] taulu) { if (taulu!= null) for ( int i=0; i < taulu.length; i++ ) System.out.println(taulu[i].toString()); public static void main(string[] args) { PaivanOhjelma p = new PaivanOhjelma(); p.aja(); // end of class PaivanOhjelma 26 Ismo Harjunmaa, Seija Lahtinen - Ohjelmointi

Esim. jatkuu Aika-luokkaan on lisätty metodi public int compareto(aika aika), joka palauttaa <0 : kun olion ajanhetki on ennen parametrin ajanhetkeä >0 : kun olion ajanhetki on parametrin ajanhetken jälkeen == 0: kun olion ajanhetki on sama kuin parametrin ajanhetki public int compareto (Aika aika ) { int paluu = 0; if (aika!= null) { if (tunnit==aika.tunnit && minuutit == aika.minuutit && sekunnit == aika.sekunnit) paluu = 0; else if (tunnit > aika.tunnit ( tunnit == aika.tunnit && return paluu; ( minuutit > aika.minuutit ( minuutit== aika.minuutit && sekunnit > aika.sekunnit) ) ) ) paluu = 1; else paluu = -1; 27

Harjoitus Aikaisemmin tehtiin Tuote-luokka, jonka attribuutteja olivat tuotteen numero, nimi ja hinta. Tee nyt ohjelma TuoteSovellus, joka pyytää viiden (5) tuotteen tiedot, tallentaa ne taulukkoon, lajittelee tuotteet hinnan perusteella kallein ensin ja tulostaa ne. Ismo Harjunmaa, Seija Lahtinen - Ohjelmointi 28

Luokkakohtaiset ominaisuudet ja metodit Luokka sisältää: ilmentymäattribuutteja = olion omat oliokohtaiset attribuutit, jotka saavat alkuarvonsa, kun olio luodaan (new-operaatio) Esim. public class Aika { private int tunnit; private int minutit; private int sekunnit; 29

Luokkakohtaiset ominaisuudet ja metodit jatkuu Luokka sisältää: ilmentymämetodeja = olion omat metodit, joissa käsitellään viestin saaneen olion ilmentymäattribuutteja Esim. public class Aika { public void settunnit ( int h ){ tunnit = 0; if (h >= 0 && h < 24 ) tunnit = h; 30

Luokkakohtaiset ominaisuudet ja metodit jatkuu Luokka sisältää: luokka-attribuutit = luokan kaikkien olioiden yhteiset attribuutit Esim. public class Asiakas{ // olion attribuutit private int numero; pivate String nimi; // luokka-attribuutit private static int seuraavanumero= 1; 31

Luokka-attribuutit jatkuu Luokka-attribuutti esitellään määreellä static voidaan antaa alkuarvo esittelyn yhteydessä saa alkuarvonsa, kun suorittava ohjelma viittaa luokkaan ensimmäisen kerran ( luokka ladataan muistiin) luokka-attribuuttiin viitataan luokan nimen avulla eli Esim. Asiakas.seuraavaNumero = 2; 32

Luokkakohtaiset ominaisuudet ja metodit jatkuu Luokka sisältää: luokka-metodit = luokkien kaikkien olioiden yhteiset metodit, joissa viitataan luokka-attribuutteihin Esim. public class Asiakas{ // seuraava käytettävä asiakasnumero private static int seuraavanumero = 1; // asetetaan alkuarvo seuraavanumero-attribuutille public static void setseuraavanumero( int nro ){ if (nro > 0) seuraavanumero = nro; 33

Luokka-metodit jatkuu // palautetaan seuraavanumero-attribuutin arvo ja // kasvatetaan attribuutin arvoa yhdellä public static int getseuraavanumero( ) { return seuraavanumero++; //käyttö ensin lisäys sitten /* tai int apu = seuraavanumero; seuraavanumero++; return apu; */ 34

Luokka-metodit jatkuu luokkametodi esitellään määreellä static luokkametodia voidaan kutsua, vaikka luokkaan ei olisi luotu yhtään ilmentymää kutsu on muotoa: Luokka.metodi ( parametrit ); Esim. Asiakas.setSeuraavaNumero (100); int numero = Asiakas.getSeuraavaNumero( ); luokkametodissa ei voi viitata olion attrbuutteihin jos metodissa viitataan olioon, tämä täytyy antaa metodille parametrina tai metodi luo itse olion nyt metodissa voidaan viitata myös olion private attribuutteihin Ks. Asiakas.java, AsiakasTesti.java 35