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

Samankaltaiset tiedostot
KOHDELUOKAN MÄÄRITTELY

Olio-ohjelmointi Javalla

Luokan muodostimet (Constructors)

YHTEYSSUHDE (assosiation)

Periytyminen (inheritance)

Mikä yhteyssuhde on?

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

public static void main (String [] args)

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

Luokan sisällä on lista

Vahva koostumussuhde (Composition)

Metodien tekeminen Javalla

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

9. Periytyminen Javassa 9.1

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

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

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

9. Periytyminen Javassa 9.1

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

Listarakenne (ArrayList-luokka)

UML ja luokkien väliset suhteet

Lista luokan sisällä

Java-kielen perusteet

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

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

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

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

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

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

Taulukot. Jukka Harju, Jukka Juslin

Rajapinta (interface)

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

Oliot viestivät metodeja kutsuen

Javan perusteita. Janne Käki

1. Omat operaatiot 1.1

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

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

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

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

2. Olio-ohjelmoinista lyhyesti 2.1

Luokat ja oliot. Ville Sundberg

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

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

Java-kielen perusteet

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

19. Olio-ohjelmointia Javalla 19.1

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

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

Ehto- ja toistolauseet

Java kahdessa tunnissa. Jyry Suvilehto

7. Oliot ja viitteet 7.1

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

1 Tehtävän kuvaus ja analysointi

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

Poikkeustenkäsittely

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

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

4. Olio-ohjelmoinista lyhyesti 4.1

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

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

20. Javan omat luokat 20.1

7. Näytölle tulostaminen 7.1

Java-kielen perusteita

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

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Osio2: Taulukot Jukka Juslin

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

Metodien tekeminen Javalla

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

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

16. Javan omat luokat 16.1

ict02d Osio2- luento 3 Olio-ohjelmointi: Luokkien kirjoittaminen

14. Poikkeukset 14.1

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

Tietokannat II -kurssin harjoitustyö

Olio-ohjelmointi Syntaksikokoelma

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

Java-kielen perusteet

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

11. Javan valintarakenteet 11.1

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

Ohjelmoinnin jatkokurssi, kurssikoe

17. Javan omat luokat 17.1

Ohjelmointi 2, välikoe

TyontekijaOhjelma. +main() (käyttää) + = public - = private

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

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

Java-kielen perusteita

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

C# olio-ohjelmointi perusopas

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

Rinnakkaisohjelmointi, Syksy 2006

812347A Olio-ohjelmointi, X Reflektiivisyys

Transkriptio:

LUOKAN MÄÄRITTELY Luokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion muodostimet ja luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Olion kopioiminen

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

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

Luokan määrittely näkyvyys class LuokanNimi { olion attribuutit olion metodit valinnainen pakollinen 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 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 luokan ominaisuuksia, mitä luokan tietoja halutaan käsitellä 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 Ohjelman 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 Ohjelman ylläpito hankalaa, 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 Tili { private String numero; private double saldo; 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 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 Tili { private String numero; private double saldo; public void setnumero(string numero) { this.numero = numero; public void setsaldo(double saldo) { this.saldo = saldo; 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. attribuutilla metodin nimi alkaa sanalla get ja jatkuu attribuutin nimellä isolla alkukirjaimella metodilla ei ole parametreja 15

getattribuutti-metodit jatkuu Esim. public class Tili { private String numero; private double saldo; public String getnumero() { return numero; public double getsaldo() { return saldo; 16

public String tostring () -metodi jokainen Java-luokka on periytetty Object-luokasta Object 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 Tili { private String numero; private double saldo; Tili numero saldo public String tostring () { return "Numero = " + numero + " saldo = " + saldo ; Metodia käytetään olion tietojen tulostamisessa 17

Muita metodeita public class Tili { private String numero; private double saldo; Luokkaan voidaan koodata muita tarpeellisia metodeita! public void pano (double maara){ saldo = saldo + maara; public boolean otto (double maara){ boolean ok = false; if (saldo >= maara){ saldo = saldo - maara; ok = true; return ok; 18

Ohjelma, jossa käytetään Tili-luokkaa public class TiliKokeilua { public static void main(string[] args) { Tili tili = new Tili(); // luodaan Tili-olio ensin tili.setnumero ("Fi29292"); // anna tilille tilinumero tili.setsaldo (156.23); // anna tilille saldo System.out.println(tili.toString()); // tulosta tilin tiedot // tai System.out.println (tili); tili.pano(200); // lisää saldoa 200:lla System.out.println("Tilin saldo nyt " + tili.getsaldo()); if (tili.otto ( 500 )) { // yritetään ottaa tilitää 500 System.out.println("Tilin saldo oton jälkeen " + tili.getsaldo()); else { System.out.println("Tilillä ei ole katetta"); System.out.println("\nTilinumero: " + tili.getnumero()); System.out.println("Saldo: " + tili.getsaldo()); 19

Muodostimet (Constructor) Muodostin (konstruktori) on luokkaan tehty metodi, jota kutsutaan automaattisesti, kun luokan olio luodaan new operaattorilla Muodostimessa attribuuteille annetaan alkuarvot Kun luokkaan ei ole tehty muodostinta ja olio luodaan, kutsutaan automaattisesti Object-luokan oletusmuodostinta, jolloin attribuutit saavat seuraavat alkuarvot: numeerinen attribuutti (int, double, ) saa tyyppinsä mukaisen nollan char: ns. null-merkki \u0000 boolean: false viittaustyyppinen attribuutti saa arvon null 20

Muodostimet (Constructor) jatkuu Muodostimia on kahdenlaisia eli muodostin on metodi ja se voidaan kuormittaa: oletusmuodostin ( 1 / luokka ) eli parametriton konstruktori parametrillinen muodostin ( useita / luokka) eli parametrillinen konstruktori KÄÄNTÄJÄ KUTSUU AUTOMAATTISESTI MUODOSTINTA MITÄ MUODOSTINTA KUTSUTAAN ON SIDOKSISSA SIIHEN, MITEN OLION LUODAAN (LUONTILAUSE ON KIRJOITETTU). 21

Oletusmuodostin (Default Constructor) Luokassa voi olla vain yksi oletusmuodostin Oletusmuodostimen tehtävänä on asettaa olion attribuuteille sellaiset arvot, jotka ymmärretään oletusarvoiksi Kun ohjelmoija tekee oletusmuodostimen, muodostimen nimi on LUOKAN NIMI, sillä EI ole TYYPPIÄ, EIKÄ PARAMETREJA ja näkyvyys pitää olla public. public class Luokka { public Luokka() { // oletusmuodostin Oletusmuodostimen kutsu tapahtuu automaattisesti, kun olio luodaan seuraavasti: Luokka olio = new Luokka(); 22

Oletusmuodostin esimerkki public class Tili { // piilotetut attribuutit private String numero; private double saldo; // oletusmuodostin, oletusarvot numero= ja saldo = 0.0 public Tili() { numero = ; saldo = 0.0; OLETUSMUODOSTIMEN KUTSU tapahtuu automaattisesti, kun olio luodaan seuraavasti: Tili tili = new Tili(); // tai Tili tili = null; tili = new Tili() ; 23

Parametrillinen muodostin Kun luokassa on parametrillisen muodostimen (ohjelmoija tekee aina itse), olion attribuutit saavat olion luojan antamat alkuarvot. Parametrillisia muodostimia voi olla useita riippuen käyttötarpeesta Jos ohjelmoija tekee parametrillisen muodostimen, Object-luokan oletusmuodostin ei ole enää käytettävissä, joten oletusmuodostin on ohjelmoijan tehtävä itse, mikäli hän haluaa sitä käyttää. Kun ohjelmoija tekee parametrillisen muodostimen, muodostimen nimi on LUOKAN NIMI, sillä EI ole TYYPPIÄ, näkyvyys pitää olla public ja sillä ON PARAMETREJA public class Luokka { public Luokka(int a, double b) { // parametrillinen muodostin 24

public class Tili{ private String numero; private double saldo; Parametrillinen muodostin esimerkki // parametrillinen muodostin public Tili(String numero, double saldo){ this.numero = numero; this.saldo = saldo; Esim. kutsu: Tili tili = new Tili( Fi003, 245,00); Kun parametrin nimi on sama kuin attribuutin nimi, Attribuutti erotaan parametrista this -määreen avulla 25

Olion luonti Luokan ilmentymä (instance of class) eli luokan olio luodaan operaatiolla new () riippuen halutaanko kutsua oletus- vai parametrillista muodostinta Tili tili = new Tili( ); -- tili olion attribuutin numero arvo on ja saldo on 0.0 tai Tili tili = null; tili = new Tili ( Fi0303, 234.23 ); -- tili olion attribuutin numero arvo on Fi0303 ja saldo on 234.23 Muuttuja tili, joka viittaa olioon, kuvataan seuraavasti: tili: 26

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

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

Harjoitus ratkaisu Luokka olio1 = new Luokka(); olio1: Luokka olio2; olio2 = olio1; olio2: 29

Olion metodin kutsuminen luokan ulkopuolta Olion metodia voidaan kutsua, kun olio on luotu Esim. Tili tili = new Tili(); tili.setnumero("ab123456"); tili.setsaldo(2345.5); System.out.println(tili); // tai System.out.println(tili.toString()); // tai System.out.println(tili.getNumero() + " " + tili.getsaldo()); 30

Olion kopioiminen tili1: numero: saldo: Fi030303 100.00 tili2: numero: saldo: Fi22222 200.00 tili1 = tili2; tämä aiheuttaa tilanteen jossa tili1 viittaa samaan olioon kuin tili2 numero: Fi030303 tili1: numero: Fi22222 saldo: 100.00 tili2: saldo: 200.00 31

Olion kopioiminen jatkuu.. Jos halutaan että muuttujat tili1 ja tili2 viittaavat omiin olioihinsa: Kun tili1 viittaa olioon, voidaan vaihtaa olion attribuuttien arvot: Tili tili1 = new Tili ( Fi030303, 100.00); Tili tili2 = new Tili (Fi22222, 200.00); tili1.setnumero(tili2.getnumero()); tili1.setsaldo(tili2.getsaldo()); Kun tili1 ei viittaa olioon, luodaan uusi olio: Tili tili1 = null; Tili tili2 = new Tili (Fi22222, 200.00); tili1 = new Tili(tili2.getNumero(),tili2.getSaldo()); 32

public class OpiskelijaSovellus { Harjoitus: Tee Opiskelija-luokka, jotta OpiskelijaSovellus-ohjelma toimii public static void main( String [] args) { Opiskelija op1, op2, op3, op4; op1 = new Opiskelija(); System.out.println(op1.toString()); op2 = new Opiskelija(1001, "Uolevi", "Ulfsson"); System.out.println(op2.toString()); op3 = new Opiskelija(1010); op3.setetunimi("bertil"); op3.setsukunimi("jansson"); System.out.println(op3.toString()); Opiskelija-luokan attribuutit ovat: numero, etunimi, sukunimi op4 = new Opiskelija (op3.getnumero(), op3.getetunimi(), op3.getsukunimi()); System.out.println(op4.getEtunimi()+ " " + op4.getsukunimi() + " : " + op4.getnumero()); 33

ratkaisu public class Opiskelija { private int numero; private String etunimi; private String sukunimi; public Opiskelija(){ // op1 = new Opiskelija(); numero = 0; etunimi = sukunimi = null; // op2 = new Opiskelija(1001, "Uolevi", "Ulfsson"); public Opiskelija (int nro, String etu, String suku){ numero = nro; etunimi = etu; sukunimi = suku; public Opiskelija (int nro){ // numero = nro; etunimi = sukunimi = null; op3 = new Opiskelija(1010); Seija Lahtinen - LUOKKA 34

ratkaisu jatkuu public int getnumero() { return numero; public String getetunimi() { return etunimi; public String getsukunimi() { return sukunimi; public void setnumero(int numero) { this.numero = numero; public void setetunimi(string etunimi) { this.etunimi = etunimi; public void setsukunimi(string sukunimi) { this.sukunimi = sukunimi; public String tostring(){ return numero + " " + etunimi + " " + sukunimi; 35