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

Koko: px
Aloita esitys sivulta:

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

Transkriptio

1 1(37) PERIYTYMINEN (inheritance) YLILUOKKA (superclass) ALILUOKKA (subclass) A) on käytännöllinen ohjelmointitekniikka = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) B) on käsitteiden mallittamista = mallinnetaan yleinen erityinen suhdetta

2 2(37) A) Laajennetaan aikaisemmin tehtyä luokkaa Esim. Olen aikaisemmin tehnyt Koira-luokan, jonka attribuutteina ovat koiran nimi ja koiran syntymävuosi. Nyt tarvitsen Koira-luokan, joka sisältää nimen ja syntymävuoden lisäksi koiran rodun. En halua koodata Koira-luokkaan uudestaan vaan periytän Koira-luokasta RotuKoira-luokan, jonka attribuuttina on Koiran attribuuttien lisäksi Koiran rotu Koira -nimi : String -syntymavuosi : int RotuKoira -rotu : String Eli en voi muuttaa aikaisemmin tehtyä luokkaa, koska se on tuotannossa ja aikaisemmin tehtyjen ohjelmien tulisi toimia Periytän vanhan luokan ja lisään uuteen luokkaan uusia tarvitsemiani ominaisuuksia ja metodeja

3 3(37) B) Mallinnetaan yleinen erityinen suhdetta Esim. Tehtäväni on tehdä Henkilö-, Työntekijä- ja Osakasluokat. Henkilön ominaisuudet ovat: henkilön etunimi, sukunimi, henkilön sosiaaliturvatunnus (sotu). Työntekijän ominaisuudet ovat työntekijän etunimi, sukunimi, työntekijän sosiaaliturvatunnus (sotu), osaston nimi, jossa hän työskentelee, nimike. Osakkaan ominaisuudet ovat osakkaan etunimi, sukunimi, osakkaan sosiaaliturvatunnus (sotu), osakkaaksi tulovuosi. Huomaan että kaikilla em.luokilla on samoja ominaisuuksia, siis teen yliluokan, Henkilo, johon sijoitan ne ominaisuudet jotka ovat samoja. Periytän muut luokat Henkiloluokasta.

4 4(37) Henkilo -etunimi : String -sukunimi : String -sotu : String Tyontekija -osasto : String -nimike : String Osakas -vuosi : int Eli en halua koodata samaa asiaa useaan kertaan etsin luokka-vaihtoehdoista yhteisiä ominaisuuksia, ja jos ne löydän teen yliluokan, jolla on nämä ominaisuudet muut luokat periytän yliluokasta

5 5(37) Miten minä toteutan luokan periytymisen? aliluokan olio perii yliluokalta kaikki tiedot (attribuutit ja metodit) aliluokan oliolla on yliluokan ilmentymä, johon aliluokan olion metodeissa viitataan sanalla super aliluokka periytetään extends määreellä seuraavasti: public class aliluokka extends yliluokka Esim. public class Koira private String nimi; private int syntvuosi; public class RotuKoira extends Koira private String rotu; RotuKoira koira = new RotuKoira(); Yliluokan ilmentymä koira: rotu: nimi; syntvuosi:

6 6(37) Muodostimet ja periytyminen aliluokan olion yliluokkailmentymään viitataan määreellä super Mitä tapahtuu, kun aliluokan olio luodaan? 1) kääntäjä valitsee muodostimista sen, joka vastaa kutsua Esim. RotuKoira koira=new RotuKoira( Wilma,2004, Irlannin vesispanieli ); kääntäjä valitsee aliluokan parametrillisen muodostimen RotuKoira(String str1,int kluku,string str2) 2) aliluokan muodostimessa yliluokan muodostimen kutsu suoritetaan ensin jos aliluokan muodostimessa ei ole yliluokan muodostimen kutsua kutsutaan automaattisesti yliluokan oletusmuodostinta (super( );) jos aliluokan muodostimen ensimmäisenä lauseena on yliluokan muodostimen kutsu (super ( )), kutsutaan sitä 2) suoritetaan muut muodostimen lauseet.

7 7(37) Esim. public class Koira private String nimi; private int syntvuosi; public Koira()//oletusmuodostin nimi = null; syntvuosi = 0; public Koira (Koira koira) // kopiointimuodostin nimi = koira.nimi; syntvuosi = koira.syntvuosi; public Koira (String nimi, int vuosi) //parametrillinen muodostin this.nimi = nimi; if (vuosi >0) syntvuosi = vuosi; else syntvuosi = 0; public class RotuKoira extends Koira private String rotu; public RotuKoira () rotu = null; public RotuKoira (String nimi, int syntvuosi, String rotu) super (nimi, syntvuosi); this.rotu = rotu; public RotuKoira (RotuKoira koira) super ((Koira) koira); rotu = koira.rotu; Automaattinen yliluokan oletusmuodostimen kutsu ( super(); ) Yliluokan parametrillisen muodostimen (public Koira(String nimi, int vuosi)) kutsu Yliluokan kopiointimuodostimen (public Koira (Koira koira)) kutsu

8 8(37) Metodin korvaaminen (overriding) metodin korvaaminen tarkoittaa perityn metodin korvaamista uudella samantyyppisellä, samannimisellä ja samaparametrisella metodilla on suositeltava tapa, koska voidaan käyttää monimuotoisuutta (polymorfism, myöhemmin) jokainen Javan yliluokka (luokka, jota käyttäjä ei periytä) periytetään automaattisesti Object-luokasta Mitä kääntäjä tekee, kun se etsii kutsuttua metodia? Kääntäjä hakee metodia MUUTTUJAN luokasta (esim. Koira koira;... koira.metodi(); ) Jos metodi löytyy, sitä kutsutaan Jos metodia ei löydy, kääntäjä hakee metodia MUUTTUJAN LUOKAN YLILUOKASTA Jos metodia ei vieläkään löydy,kääntäjä hakee metodia em. luokan yliluokasta, jne. Jos metodia ei ole löytynyt mistään olion luokkahierakkiasta eikä sitä löydy Objectistakaan, tapahtuu VIRHE

9 9(37) Esim. Tutkitaan tilanne, jossa Koira-luokkaan ei ole toteutettu tostring-metodia, ja sitä kutsutaan ohjelmassa (Objectluokassa on tostring-metodi) public class Koira private String nimi; private int syntvuosi; public Koira() nimi = null; syntvuosi = 0; public Koira (String nimi, int vuosi) this.nimi = nimi; if (vuosi >0) syntvuosi = vuosi; else syntvuosi = 0; public class KoiraTesti public void aja() Koira koira = new Koira ("Raiku", 1998); System.out.println(koira.toString()); public Koira (Koira koira) nimi = koira.nimi; syntvuosi = koira.syntvuosi; public static void main (String [] args) KoiraTesti testi = new KoiraTesti(); tostring-metodia ei löydy Koira-luokasta, etsitään sitä Koiraluokan yliluokasta eli Object-luokasta, BINGO, kutsutaan sitä testi.aja(); KoiraTesti ohjelma tulostaa: Koira@18d107f

10 10(37) Edellinen tostring-metodin tulostus ei kelpaa meille, joten korvaamme Object-luokan metodin Koira-luokan tostringmetodilla public class Koira private String nimi; private int syntvuosi; public Koira() nimi = null; syntvuosi = 0; public Koira (String nimi, int vuosi) this.nimi = nimi; if (vuosi >0) syntvuosi = vuosi; else syntvuosi = 0; public Koira (Koira koira) nimi = koira.nimi; syntvuosi = koira.syntvuosi; public String tostring () String paluu; if (nimi!= null) paluu = "nimi: " + nimi; else paluu = "nimi: ei ole"; paluu = paluu +" syntymavuosi: " + syntvuosi; return paluu;

11 11(37) public class KoiraTesti Etsitään tostringmetodia RotuKoiraluokasta, ei löydy, joten etsitään metodia RotuKoiran yliluokasta eli Koira-luokasta. Bingo, löytyi public void aja() Koira koira = new Koira ("Raiku", 1998); System.out.println(koira.toString()); RotuKoira koira2 = new RotuKoira("Wilma", 2004, "Irlannin vesispanieli"); System.out.println(koira2.toString()); public static void main (String [] args) KoiraTesti testi = new KoiraTesti(); testi.aja(); KoiraTesti sovellus tulostaa: nimi: Raiku syntymavuosi: 1998 nimi: Wilma syntymavuosi: 2004

12 12(37) Edelleen RotuKoiran rotu ei tulostu, joten korvaamme RotuKoiraluokassa Koira luokan tostring-metodin omalla tostringmetodilla public class RotuKoira extends Koira private String rotu; public RotuKoira () rotu = null; public RotuKoira (String nimi, int syntvuosi, String rotu) super (nimi, syntvuosi); this.rotu = rotu; public RotuKoira (RotuKoira koira) super ((Koira) koira); rotu = koira.rotu; public String tostring() String paluu; paluu = super.tostring(); Koira-ilmentymän tostring-metodin kutsu if (rotu!= null) paluu = paluu + " rotu: " +rotu; else paluu = paluu + " rotu: harvinainen, ei tiedossa toistaiseksi"; return paluu;

13 13(37) public class KoiraTesti public void aja() Koira koira = new Koira ("Raiku", 1998); System.out.println(koira.toString()); RotuKoira koira2 = new RotuKoira("Wilma", 2004, "Irlannin vesispanieli"); System.out.println(koira2.toString()); public static void main (String [] args) KoiraTesti testi = new KoiraTesti(); testi.aja(); tulostuu: nimi: Raiku syntymavuosi: 1998 nimi: Wilma syntymavuosi: 2004 rotu: Irlannin vesispanieli

14 14(37) Koira -nimi : String -syntymavuosi : int +tostring() : String RotuKoira -rotu : String +tostring() : String Yliluoluokan ilmentymän metodia kutsutaan aliluokan ilmentymän metodista seuraavasti: super.metodinnimi() super-määrettä ei tarvita, mikäli ristiriitaa ei synny, eli kutsuttavaa yliluokan metodia ei ole korvattu aliluokassa

15 15(37) Näkyvyyssäännöt kun yliluokan attribuutti / metodi näkyvyys on: 1) private aliluokan olio EI näe ko. attribuuttia /metodia 2) protected aliluokan olio näkee ko. attribuutin / metodin ja voi siihen suoraan viitata 3) public aliluokan olio näkee ko. attribuutin / metodin ja voi siihen suoraan viitata 4) ei mitään kaikki yliluokan kanssa samassa paketissa olevat näkevät ko. attribuutin / metodin yliluokan / luokan attribuuttien näkyvyysmääre kannattaa olla private tietyn attribuutin käsittely on siellä, missä kuuluu ylläpidettävyys

16 16(37) instanceof-operaattori metodin avulla voidaan tutkia, minkä luokan olioon muuttuja viittaa syntaksi: muuttuja instanceof Luokka metodi palauttaa arvon true, jos muuttuja viittaa olioon, jonka tyyppi on Luokka, muuten metodi palauttaa arvonaan false

17 17(37) Esim. Object koira = new Koira ("Raiku", 1998); koira: Koira: nimi: Raiku syntvuosi:1998 Object koira2 = new RotuKoira("Wilma", 2004, "Irlannin vesispanieli"); koira2: RotuKoira: Rotu: Irlannin vesipanieli Koira: nimi: Wilma syntvuosi:2004 if (koira instanceof Koira) System.out.println( Kyseessa on koira ); tulostuu: Kyseessä on koira if (koira2 instanceof RotuKoira) System.out.println( Kyseessa on rotukoira ); tulostuu: Kyseessä on rotukoira

18 18(37) Esim. public class KoiraTesti2 public void aja() Object koira = new Koira ("Raiku", 1998); tulosta(koira); Object koira2 = new RotuKoira("Wilma", 2004, "Irlannin vesispanieli"); tulosta(koira2); private void tulosta( Object koira) RotuKoira apu; Koira apu1; if (koira instanceof RotuKoira) System.out.println ("Koiran tiedot: "); apu =(RotuKoira) koira; tyyppimuunnos System.out.println (apu.getnimi()+ " on syntynyt vuonna " + apu.getsyntvuosi()); System.out.println ("ja koiran rotu on " + apu.getrotu()); else if (koira instanceof Koira) System.out.println ("Koiran tiedot: "); apu1 = (Koira) koira; tyyppimuunnos System.out.println(apu1.getNimi()+ " on syntynyt vuonna " + apu1.getsyntvuosi()); public static void main (String [] args) KoiraTesti2 testi = new KoiraTesti2(); testi.aja();

19 19(37) ABSTRAKTI-LUOKKA on luokka, johon ei voi luoda olioita, mutta joka voidaan periyttää on luokka johon kerätään luokkien yhteisiä tietoja UML-kaaviossa abstraktin luokan nimi kirjoitetaan kursiivilla Action +excecute() : String DeleteAction EditAction InsertAction ListAction UpdateAction +excecute() +excecute() +excecute() +excecute() +excecute() määritellään abstract-määreellä public abstract class Action sen aliluokille voidaan luoda olioita, mikäli ne eivät ole abtrakteja luokkia

20 20(37) Kun luokka määritellään abstraktiksi: sille voidaan määritellä abstrakteja metodeja abstrakti metodi: määritellään abstract-määreellä eli näkyvyys abstract metodi ( parametrit ); esim. public abstract String excecute (HttpServletRequest req,httpservletresponse res) throws IOException, ServletException, SQLException; abstrakti metodi on korvattava luokan aliluokissa yliluokka vaatii, että sen aliluokilla on kyseinen metodi (ns. metodien nimeämisstandardi) jos yliluokassa määriteltyä abstraktia metodia ei korvata aliluokassa kääntäjä haluaa, että aliluokasta tehdään abstrakti luokka abstraktia metodia ei toteuteta abstraktissa luokassa Kun luokkaan lisätään yksikin abstrakti-metodi: luokka on määriteltävä abstraktiksi

21 21(37) MONIMUOTOISUUS (polymorfism) on eri olioiden kykyä vastata samaan viestiin eri tuloksella kun olion viittaaman muuttujan luokka on eri kuin olion luokka eli Action actionolio = new InsertAction(); kun olion metodia kutsutaan, ajonaikana tapahtuu ns. dynaaminen sidonta eli metodia haetaan ensin olion luokasta ja jos metodia ei löydy, olion yliluokasta jne Kääntäjä hakee ohjelmaa käännettäessä metodia muuttujan luokasta eli Action-luokasta, joka löytyy sieltä

22 22(37) esim. Action actionolio = new InsertAction(); actionolio.excecute(req, res) Ohjelman ajoaikana excecute-metodia haetaan olion luokasta eli InsertAction-luokasta, jos metodi on toteutettu siellä, se valitaan, mutta jos ei, metodia haetaan InsertAction-luokan yliluokasta eli Action-luokasta. Jos metodi löytyy, se suoritetaan, mutta jos ei, metodia haetaan Object-luokasta Viittausmuuttujat ja periytyminen Periytymisen idea mahdollistaa, että olion viittaavan muuttujan tyyppi voi olla eri kuin olion tyyppi Olioon viittaavan muuttujan tyyppi voi olla luokkahierarkkiassa olion yläluokan tyyppi tai olion luokan tyyppi, mutta ei olion alaluokan tyyppi eikä ns. sisar-luokan tyyppi

23 23(37) Object A_luokka B_luokka C_luokka D-luokka E-luokka E-luokan olioon viittava muuttujan tyyppi voi olla: E-luokka, C-luokka, A-luokka tai Object-luokka

24 24(37) Dynaaminen sidonta Käännösaikana metodin kutsun yhteydessä kääntäjä tutkii muuttujan tyypin ja tarkastaa, että muuttujan luokalla tai sen yliluokalla on kutsuttu metodi. Dynaaminen sidonta tapahtuu ohjelma suoritusaikana olion metodin kutsussa, kun olion tyyppi on eri kuin olioon viittaavan muuttujan tyyppi Kun dynaaminen sidonta tapahtuu, etsitään kutsuttua metodia ensin olion luokasta, jos ei löydy tämän yliluokasta jne.

25 25(37) Mitä sitten kun aliluokalla on metodi, jota yliluokalla ei ole? Koira -nimi : String -syntymavuosi : int +Koira() +Koira(in nimi : String, in vuosi : int) +Koira(in koira : Koira) +setnimi(in nimi : String) +setsyntymavuosi(in vuosi : int) +getnimi() : String +getsyntymavuosi() : int +tostring() : String RotuKoira -rotu : String +RotuKoira() +RotuKoira(in nimi : String, in vuosi : int, in rotu : String) +RotuKoira(in koira : RotuKoira) +tostring() : String +setrotu(in rotu) +setrotu(string rotu) +getrotu() : String +getrotu():string public class KoiraSovellus private ArrayList <Koira> lista; private Scanner input; public KoiraSovellus() lista = new ArrayList<Koira>(); input = new Scanner(System.in); public void aja()...

26 26(37) // lisätään parametrina oleva Koira-olio tai RotuKoira-olio // listaan private void lisaakoira(koira koira) String nimi,rotu; RotuKoira apu=null; int vuosi; do System.out.println("Anna koiran nimi:"); nimi = input.nextline(); koira.setnimi(nimi); while (koira.getnimi()==null); do System.out.println("Anna koiran syntymävuosi:"); vuosi = input.nextint(); input.nextline(); koira.setsyntymavuosi(vuosi); while (koira.getsyntymavuosi()!= vuosi); // koiran rotu pyydetään ainoastaan, jos parametri koira viittaa Rotukoira-olioon if (koira instanceof RotuKoira) do System.out.println("Anna koira rotu"); rotu = input.nextline(); apu apu = = (RotuKoira)koira; apu.setrotu(rotu); //tyyppimuunnos while (apu.getrotu()==null); lista.add(koira); // lisää Koira-/RotuKoira-olio listaan

27 27(37) tyyppimuunnos private void tulosta() for (int i=0;i<lista.size();i++) // tutki ensin onko käsiteltävä olio aliluokan olio if (lista.get(i) instanceof RotuKoira) RotuKoira apu = (RotuKoira)lista.get(i); System.out.println("Koiran nimi on "+ apu.getnimi() + ", rotu on " + apu.getrotu() + " ja on syntynyt vuonna " + lista.get(i).getsyntymavuosi()); else // tutki sitten vasta onko käsiteltävä olio yliluokan olio if (lista.get(i)instanceof Koira) System.out.println("Koiran nimi on " + lista.get(i).getnimi() + " ja on syntynyt vuonna " + lista.get(i).getsyntymavuosi()); public static void main( String[] args)..

28 28(37) TYYPPIMUUNNOS LUOKKAHIERARKIASSA aliluokan olio voidaan tyyppimuuttaa yliluokan olioksi ( Yliluokka ) aliluokanolio YHTEENVETO MONIMUOTOISUUDESTA Aliluokan olioon voidaan viitata yliluokan muuttujan avulla Aliluokan metodien kutsuminen onnistuu yliluokan tyyppisen viittausmuuttujan avulla, kunhan kutsuttava metodi on määritelty yliluokassa Aliluokan metodien kutsuminen ei onnistu yliluokan tyyppisen viittausmuuttujan avulla, jos kutsuttava metodi ei ole määritelty yliluokassa ainoastaan aliluokassa. Ratkaisu on apu-muuttuja ja tyyppimuunnos: System.out.println("Anna koira rotu"); rotu = input.nextline(); RotuKoira RotuKoira apu apu = (RotuKoira)koira; (RotuKoira)koira; // tyyppimuunnos apu.setrotu(rotu); Yliluokan olioon ei voi viitata aliluokan tyyppisen viittausmuuttujan avulla Aliluokan olioita voidaan käsitellä kuten yliluokan olioita.

29 29(37) Rajapinta (interface) rajapintojen avulla määrätään, mitä metodeja luokan tulee sisältää, jos tämä ns. toteuttaa rajapinnan nyt ei enää puhuta periytymisestä vaan rajapinnan toteuttamisesta rajapinta sisältää vain abstrakteja metodeja rajapinta ei sisällä attribuutteja luokat toteuttavat rajapinnan implements määreellä Esim. public class Tietokone implements Taltioitava UML-kaaviossa rajapinnan nimen edessä <<interface>> merkintä «interface» Taltioitava Tietokone Rajapinnan toteuttaminen: nuolityyppi kuten periytymisessä, mutta katkoviiva

30 30(37) Rajapinta määritellään seuraavasti public interface Taltioitava Esim. jossa rajapintaa on määritelty vakioita public interface VAKIOT public static final int YKSI = 1; public static final int KAKSI = 2; public static final int KOLME = 3;

31 31(37) KERTAUS Yhteyssuhde: A * 1 B A:n yhteys B:hen luetaan viivan B päästä eli A:lla on täsmälleen yhteen B:hen yhteys Ja vastaavasti B:n yhteys A:han luetaan viivan A päästä eli B:lla on nollaan tai useisiin A-olioihin yhteyksiä Siihen luokkaan, jolla on yhteys NOLLAAN tai YHTEEN toisen luokan olioon, lisätään attribuutiksi viittaus yhteydessä olevan luokan olioon eli public class A private B yhteys; Jos luokkien välillä on yhden suhde yhteen, viittaus lisätään siihen luokkaan, jonka kautta yleensä kumpaakin tietoa käsitellään.

32 32(37) Esim. Oy Yritys Ab Saahankatu Hki Tuote maara á hinta hinta yht A23 Harja B67 Luuta Yhteensä: EUR Luokkakaavio: ASIAKAS 1 * TILAUS 1 PVM 1..* TILAUSRIVI 1 TUOTE *

33 33(37) Mihin luokkiin laitetaan viittaukset yhteyssuhteessa oleviin luokkiin? public class Tilaus private Asiakas tilaaja;. public class Tilausrivi private Tilaus tilaus; private Tuote tuote;. Miten yhteyssuhde attribuuttina toteutetaan? Olio, johon viitataan toisesta luokasta, o elää omaa elämäänsä, o sen elinikä EI ole sidoksissa siihen luokkaan, jossa se on ns. yhteyssuhdeattribuuttina, o sillä saattaa olla useita muita yhteyksiä eri luokkiin ja niiden elämä pitää jatkua vaikka viittaaja kuolisikin Oletusmouodostin, laita yhteyssuhdetta kuvaavan attribuutin arvoksi null public Tilaus() tilaaja = null;

34 34(37) Parametrillisessa muodostimessa yleensä tuodaan viitattava olio parametrina public Tilaus (,Asiakas tilaaja) this.tilaaja = tilaaja; Kopiointimuodostimessa kopioitu olio viittaa samaan ilmentymään kuin kopioitava olio public Tilaus (Tilaus olio) this.tilaaja = olio.tilaaja; getattribuutti, jossa Attribuutti on yhteyssuhteessa oleva olio public Asiakas gettilaaja() return tilaaja; setattribuutti, jossa Attribuutti on yhteyssuhteessa oleva olio public void settilaaja(tilaaja tilaaja) this.tilaaja = tilaaja;

35 35(37) Koostumussuhde TILAUS PVM public class Tilaus private Pvm tilauspvm; Koosteluokka sisältää osaluokkia eli Tilaus-luokka on koosteluokka, joka sisältää osaluokan Pvm Koostumussuhteessa oleva osaluokka elää täysin koosteolion elämän mukaan eli se syntyy koosteluokassa ja kuolee, kun koosteluokkakin kuolee Yleensä oletusmuodostimessa osaluokaan viittaavan attribuutin arvoksi laitetaan null public Tilaus() tilauspvm = null; Parametrillisessa muodostimessa, jossa osaluokan olio on parametrina, yleensä kopioidaan parametrina oleva olio public Tilaus(Pvm pvm) if (pvm!= null) tilauspvm = new Pvm (pvm); else tilauspvm = null;

36 36(37) Kopiointimuodostimessa kopioitavalle luodaan oma osaluokan olio public Tilaus(Tilaus olio) if (olio!= null && olio.tilauspvm!= null) tilauspvm = new Pvm (olio.tilauspvm); else tilauspvm = null; getattribuutti, jossa attribuutti on koosteolion osaolio public Pvm gettilauspvm() Pvm apu = null; if (tilauspvm!= null) apu = new Pvm (tilauspvm); return apu; setattribuutti, jossa attribuutti on koosteolion osaolio public void settilauspvm(pvm pvm) tilauspvm = null; if (pvm!= null) tilauspvm = new Pvm (pvm);

37 37(37) Esimerkki: yhdellä ajoneuvolla voi olla nolla tai useita omistuksia Yksi omistus kohdistuu vain yhteen ajoneuvoon ja yhteen henkiloon Ajoneuvo -rekisterinumero : String -merkki : String -lukema : int -keskikulutus : double 1 * Omistus * 1 -hinta : double 1 ostopvm 1 Henkilo -etunimi : String -sukunimi : String HenkiloAuto -henkilolkm : int KuormaAuto -kantavuus : double Pvm Yhdellä henkilolla voi olla omistuksessaan nolla tai useita ajoneuvoja Omistus kuvaa yhden ajoneuvon ja yhden omistajan suhdetta. Luokan attribuutit ovat seuraavat: private Ajoneuvo ajoneuvo; private Henkilo omistaja; private double hinta; private Pvm ostopvm; // yhteyssuhde // yhteyssuhde //koostumussuhde

YHTEYSSUHDE (assosiation)

YHTEYSSUHDE (assosiation) YHTEYSSUHDE (assosiation) -Mikä on yhteyssuhde? -Miten toteutan yhteyssuhteen? 1 Mikä on yhteyssuhde? Yhteyssuhde kuvaa kahden olion välistä suhdetta: Esim. Auto Henkilö, omistussuhde Tili Asiakas, omistussuhde

Lisätiedot

UML ja luokkien väliset suhteet

UML ja luokkien väliset suhteet UML ja luokkien väliset suhteet -Luokan kuvaaminen UML-tekniikalla -Yhteyssuhde ja koostumussuhde 1 Luokan kuvaaminen UML-tekniikalla : Luokka - attribuutti1 : tietotyyppi # attribuutti2 : tietotyyppi

Lisätiedot

Mikä yhteyssuhde on?

Mikä yhteyssuhde on? 1 Yhteyssuhde Mikä yhteyssuhde on? Yhteyssuhde Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä yhteyssuhde on? Tili - : String - : double * 1 Asiakas - hetu: String - : String

Lisätiedot

Rajapinta (interface)

Rajapinta (interface) 1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä

Lisätiedot

Listarakenne (ArrayList-luokka)

Listarakenne (ArrayList-luokka) Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen

Lisätiedot

Periytyminen (inheritance)

Periytyminen (inheritance) 1 Periytyminen (inheritance) Mitä periytyminen on? Yli- ja aliluokka Konstruktorit Get- ja set-metodi Muut metodit tostring Yksinkertainen pääohjelma 1 Mitä periytyminen on? Periytymisen avulla olemassa

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

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

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä 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

Lisätiedot

Luokan muodostimet (Constructors)

Luokan muodostimet (Constructors) Mikä on muodostin? Luokan muodostimet (Constructors) Millaisia muodostimia on? Oletusmuodostin (Default Constructor) Parametrillinen muodostin Kopiointimuodostin (Copy Constructor) this-muuttuja Miten

Lisätiedot

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

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance) Sisällys JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys Periytyminen (inheritance) Näkyvyys (visibility) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E. Hyvönen: Java Osa

Lisätiedot

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

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 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

Lisätiedot

Metodien tekeminen Javalla

Metodien tekeminen Javalla 1 Metodien tekeminen Javalla Mikä metodi on? Metodin syntaksi Metodi ja sen kutsuminen Parametreista Merkkijonot ja metodi Taulukot ja metodi 1 Mikä metodi on? Metodilla toteutetaan luokkaan toiminnallisuutta.

Lisätiedot

Vahva koostumussuhde (Composition)

Vahva koostumussuhde (Composition) Vahva koostumussuhde (Composition) - Mitä vahva koostumsusuhde tarkoittaa? - Vahva koostumussuhde vs. yhteyssuhde - Miten toteutan vahvan koostumussuhteen? - Muodostimet - Set ja get-metodit - tostring-metodi

Lisätiedot

Java kahdessa tunnissa. Jyry Suvilehto

Java kahdessa tunnissa. Jyry Suvilehto Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.

Lisätiedot

KOHDELUOKAN MÄÄRITTELY

KOHDELUOKAN MÄÄRITTELY 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

Lisätiedot

Javan perusteita. Janne Käki

Javan perusteita. Janne Käki Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).

Lisätiedot

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

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

16. Javan omat luokat 16.1

16. Javan omat luokat 16.1 16. Javan omat luokat 16.1 Sisällys Johdanto. Object-luokka: tostring-, equals-, clone- ja getclass-metodit. Comparable-rajapinta: compareto-metodi. Vector- ja ArrayList-luokat. 16.2 Javan omat luokat

Lisätiedot

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

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

Lista luokan sisällä

Lista luokan sisällä Lista luokan sisällä Luokan sisällä on lista Joukkue-luokka, joka sisältää listän joukkueen pelaajista Pelaaja Joukkueen metodit, jotka käyttävät listaa Ohjelmaluokka Luokan sisällä on lista Tarkoitta

Lisätiedot

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN SISÄLLYS 3. Luokkakaavio UML -mallinnuskielessä 3.1 Luokkakaavion luokan rakenteet 3.2 Luokan kuvauksesta C++ ohjelmakoodiksi 3.3 Luokkakaavion luokkien yhteystyypit

Lisätiedot

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

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.

Lisätiedot

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

12. Monimuotoisuus 12.1

12. Monimuotoisuus 12.1 12. Monimuotoisuus 12.1 Sisällys Johdanto. Periytymismekanismi määrittää alityypityksen. Viitteiden sijoitus ja vertailu. Staattinen ja dynaaminen luokka. Myöhäinen ja aikainen sidonta. Parametrinvälitys

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

2. Olio-ohjelmoinista lyhyesti 2.1

2. Olio-ohjelmoinista lyhyesti 2.1 2. Olio-ohjelmoinista lyhyesti 2.1 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen. 2.2 Yleistä Olio-ohjelmointia käsitellään hyvin

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

public static void main (String [] args)

public static void main (String [] args) HAAGA-HELIA OHJELMOINTI 1(5) OHJELMALUOKKA Ohjelma-luokan käynnistää public static void main (String [] args) main-metodiin voi koodata 1. ohjelman logiikan tai 2. luoda ohjelma-olion ja kutsua metodia,

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Rajapinnat Java-kieli ei tue luokkien moniperintää. Jokaisella luokalla voi olla vain yksi välitön yliluokka. Toisinaan olisi

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja

Lisätiedot

12. Monimuotoisuus 12.1

12. Monimuotoisuus 12.1 12. Monimuotoisuus 12.1 Sisällys Johdanto. Periytymismekanismi määrittää alityypityksen. Viitteiden sijoitus ja vertailu. Staattinen ja dynaaminen luokka. Parametrinvälitys eräs monimuotoisuuden sovellus.

Lisätiedot

1 Tehtävän kuvaus ja analysointi

1 Tehtävän kuvaus ja analysointi Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet String-merkkijonoluokka 1 Ohjelmointikielten merkkijonot Merkkijonot ja niiden käsittely on välttämätöntä ohjelmoinnissa Valitettavasti ohjelmointikielten tekijät eivät tätä ole ottaneet

Lisätiedot

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi. 11. Rajapinnat 11.1 Sisällys Johdanto. Abstrakti luokka vai rajapinta? Rajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen

Lisätiedot

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmointi 2 / 2010 Välikoe / 26.3 Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään

Lisätiedot

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Sisällys. 11. Rajapinnat. Johdanto. Johdanto Sisällys 11. ajapinnat. bstrakti luokka vai rajapinta? ajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen avulla.

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

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

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

Kooste. Esim. Ympyrän keskipiste voidaan ajatella ympyrän osaksi.

Kooste. Esim. Ympyrän keskipiste voidaan ajatella ympyrän osaksi. 17. Kooste 17.1 Kooste Kooste (aggregation) on luokkien A ja B välinen suhde, joka tarkoittaa A on B:n osa tai A kuuluu B:hen. Koostesuhteessa olevat luokat eivät yleensä ole periytymissuhteessa. Kooste

Lisätiedot

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int

Lisätiedot

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

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu Taulukot Taulukon määrittely ja käyttö Taulukko metodin parametrina Taulukon sisällön kopiointi toiseen taulukkoon Taulukon lajittelu esimerkki 2-ulottoisesta taulukosta 1 Mikä on taulukko? Taulukko on

Lisätiedot

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

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki Tehtävä 1 Koherentti selitys Koherentti esimerkki ½p ½p Tehtävä 2 Täysiin pisteisiin edellytetään pelaajien tulostamista esimerkin järjestyksessä. Jos ohjelmasi tulostaa pelaajat jossain muussa järjestyksessä,

Lisätiedot

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

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

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

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 6. Metodit 6.1 Sisällys Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 Oliot viestivät metodeja kutsuen Olio-ohjelmoinnissa ohjelma

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

Ohjelmointi 2, välikoe

Ohjelmointi 2, välikoe Ohjelmointi 2, välikoe 21.3.2014 Vastaa neljään tehtävään kuudesta siten, että jokainen tehtävä tulee omalle konseptilleen. Mikäli vastaat useampaan kuin neljään tehtävään, pisteiden laskussa huomioidaan

Lisätiedot

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

812341A Olio-ohjelmointi Peruskäsitteet jatkoa 812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää

Lisätiedot

Poikkeustenkäsittely

Poikkeustenkäsittely 1 Poikkeustenkäsittely Mitä poikkeustenkäsittely tarkoittaa? Poikkeuksen käsitteleminen Poikkeusluokkien hierarkia Poikkeuksen heittäminen 1 Mitä poikkeustenkäsittely tarkoittaa? Poikkeus (Exception) on

Lisätiedot

Taulukoiden käsittely Javalla

Taulukoiden käsittely Javalla 1 Taulukoiden käsittely Javalla Mikä taulukko on? Taulukon syntaksi Merkkijonotaulukko Lukutaulukko Taulukon kopiointi 1 Mikä taulukko on? Taulukko on rakenne, minne saadaan talteen usea saman tyyppinen

Lisätiedot

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

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004 Vertailulauseet Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra == yhtäsuuruus!= erisuuruus < pienempi suurempi >= suurempi tai yhtäsuuri Esimerkkejä: int i=7; int j=10;

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

Luokan sisällä on lista

Luokan sisällä on lista 1 Luokan sisällä on lista Luokan sisällä lista Listan sisältävä luokka Konstruktorit get-metodi Lista muissa metodeissa addxx-metodi Yksinkertainen pääohjelma Kertauksen List-luokan metodeja 1 Luokan sisällä

Lisätiedot

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 12. Periytyminen Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi

Lisätiedot

Java-API, rajapinnat, poikkeukset, UML,...

Java-API, rajapinnat, poikkeukset, UML,... Java-API, rajapinnat, r poikkeukset, UML,... Janne Käki 12.10.2006 Keskeisimmät Java-API:n pakkaukset API = Application Programming Interface eli sovellusohjelmointirajapinta (!) pakkaus (engl. package)

Lisätiedot

Luokkamalli LUOKKAKAAVIO. Tämän osan sisältö. Luokkamalli. Luokka ja olio. Luokkakaavio (class diagram)

Luokkamalli LUOKKAKAAVIO. Tämän osan sisältö. Luokkamalli. Luokka ja olio. Luokkakaavio (class diagram) 4 Luokkamalli Rakenteet mittojen mukaan. Mitat rakenteen mukaan. Tämän osan sisältö Luokkakaavio luokkakaavion elementti attribuutit operaatiot määreet Olioiden väliset suhteet kytkös kooste yleistys rajapinta

Lisätiedot

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

TyontekijaOhjelma. +main() (käyttää) + = public - = private 1 (6) OPPIMISTEHTÄVÄT 11 (opetusviikko 15) Periytyminen, Rajapinta, Kertaus 1) Periytyminen: Periytä Henkilo-luokasta Tyontekija-aliluokka. Tyontekija-luokalla on attribuutti tuntipalkka (desimaaliluku).

Lisätiedot

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen Sisällys 6. Metodit Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit).. Metodien ja muun luokan sisällön järjestäminen. 6.1 6.2 Oliot viestivät metodeja kutsuen Oliot viestivät

Lisätiedot

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin Olio-ohjelmointi: Luokkien toteuttaminen Jukka Juslin Luokkien kirjoittaminen Tähän mennessä on käytetty valmiiksi määritettyjä luokkia. Nyt opimme kirjoittamaan omia luokkia olioiden kuvaamiseksi Seuraavaksi

Lisätiedot

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät Tenttikysymykset 1. Selitä mitä asioita kuuluu tietojärjestelmän käsitteeseen. 2. Selitä kapseloinnin ja tiedon suojauksen periaatteet oliolähestymistavassa ja mitä hyötyä näistä periaatteista on. 3. Selitä

Lisätiedot

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä

Lisätiedot

Metodien tekeminen Javalla

Metodien tekeminen Javalla 1 Metodien tekeminen Javalla Mikä metodi on? Metodin syntaksi Metodi ja sen kutsuminen Parametreista Merkkijonot ja metodi Taulukot ja metodi 1 Mikä metodi on? Metodilla toteutetaan luokkaan toiminnallisuutta.

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä

Lisätiedot

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

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. 1 Luokka Murtoluku uudelleen Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. Sievennettäessä tarvitaan osoittajan ja nimittäjän suurin yhteinen tekijä (syt).

Lisätiedot

Sisällys. 19. Unified Modeling Language (UML) Johdanto. Johdanto. Johdanto. Luokkakaavio:

Sisällys. 19. Unified Modeling Language (UML) Johdanto. Johdanto. Johdanto. Luokkakaavio: Sisällys 9. Unified Modeling Language (UML) Perustuu Kai Koskimiehen Oliokirjaan ja aikaisempaan luentomateriaaliin. Johdanto. Luokkakaavio: Luokkasymboli, attribuutit ja metodit. Suhteet: Assosiaatiot:

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:

Lisätiedot

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely

Lisätiedot

P e d a c o d e ohjelmointikoulutus verkossa

P e d a c o d e ohjelmointikoulutus verkossa P e d a c o d e ohjelmointikoulutus verkossa Java-kielen jatkokurssi Teoria ja ohjelmointitehtävät Java-kielen jatkokurssi 3 YLEISKATSAUS KURSSIN SISÄLTÖIHIN... 8 JAVA-KIELEN JATKOKURSSI... 8 OPISKELUN

Lisätiedot

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

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

4. Olio-ohjelmoinista lyhyesti 4.1

4. Olio-ohjelmoinista lyhyesti 4.1 4. Olio-ohjelmoinista lyhyesti 4.1 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen. 4.2 Yleistä Olio-ohjelmointia käsitellään hyvin

Lisätiedot

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

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen Yksikkötestaus Kattava testaus Moduulitestaus Ohjelman testaus 1 Kattava testaus Testauksen perimmäinen tarkoitus on LÖYTÄÄ VIRHEITÄ Testaus pitäisi olla täydellinen: - Jokainen pyydetty arvo pitäisi testata

Lisätiedot

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto Sisällys 18. bstraktit tietotyypit Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.1 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

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

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi

Lisätiedot

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

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

Tietokannat II -kurssin harjoitustyö

Tietokannat II -kurssin harjoitustyö Tietokannat II -kurssin harjoitustyö Jyri Lehtonen (72039), jkoleh@utu.fi Azad Hajipour (72187), azhaji@utu.fi 10.6.2007 Sisältö 1. Tietokannan kuvaus... 1 1.1 Tietokannan rakenne... 1 1.2 Relaatiokaava

Lisätiedot

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

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 11. Luokka Opetellaan seuraavaksi, miten omia luokkia kirjoitetaan. Aikaisemmin olikin jo esillä, että luokka on tietorakenne, joka sisältää sekä tiedot (attribuutit) että niitä käsittelevät aliohjelmat

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Oliot viestivät metodeja kutsuen

Oliot viestivät metodeja kutsuen 6. Metodit 6.1 Sisällys Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit). Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 Oliot viestivät metodeja kutsuen

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita Käyttäjän kanssa keskusteleva ohjelma 1 Kirjoittaminen konsolinäkymään //Java ohjelma, joka tulostaa konsoli-ikkunaan public class HeiMaailma { public void aja() { // kirjoitus ja

Lisätiedot

18. Abstraktit tietotyypit 18.1

18. Abstraktit tietotyypit 18.1 18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

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

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus Sisällys 19. Olio-ohjelmointia Javalla Olioiden esittely ja alustus. Metodit Yleistä metodeista. Mihin metodeja tarvitaan? Metodien määrittely. Omat metodit: nimeäminen, paikka, kutsuminen, parametrit

Lisätiedot

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

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

Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1 Oliot ja luokat Javaohjelmoinnissa Vesa Laakso 22.9.2012 Sisällysluettelo Sisällysluettelo... 1 Johdanto... 2 1. Luokka... 2 2. Olio... 2 3. Luokan

Lisätiedot

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä 582104 Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä 1 Luokkamallin lisäpiirteitä Erilaiset yhteystyypit kooste kompositio Muita luokkien välisiä suhteita riippuvuudet periytyminen eli luokkahierarkia

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Poikkeukset Poikkeuksella tarkoitetaan yllättävää ajonaikaista tilannetta, joka

Lisätiedot

19. Olio-ohjelmointia Javalla 19.1

19. Olio-ohjelmointia Javalla 19.1 19. Olio-ohjelmointia Javalla 19.1 Sisällys Olioiden esittely ja alustus. Metodit Yleistä metodeista. Mihin metodeja tarvitaan? Metodien määrittely. Omat metodit: nimeäminen, paikka, kutsuminen, parametrit

Lisätiedot

Ohjelmistojen mallintaminen. Luento 7, 23.11.

Ohjelmistojen mallintaminen. Luento 7, 23.11. Ohjelmistojen mallintaminen Luento 7, 23.11. Kertaus: olioiden yhteistyön kuvaaminen Luokkakaavion avulla voidaan kuvata ohjelman rakenne Minkälaisista luokista ohjelma koostuu ja miten luokat liittyvät

Lisätiedot

Ohjelmistotekniikan menetelmät, koe 2.5.2014

Ohjelmistotekniikan menetelmät, koe 2.5.2014 Ohjelmistotekniikan menetelmät, koe 2.5.2014 Vastaa tehtävään 3 erilliselle konseptille. Tehtävät 1 ja 2 saavat olla samalla konseptilla. Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen

Lisätiedot

Olio-ohjelmointi Syntaksikokoelma

Olio-ohjelmointi Syntaksikokoelma C++-kielen uusia ominaisuuksia Olio-ohjelmointi Syntaksikokoelma 31.10.2008 Bool-tietotyyppi: Totuusarvo true (1), jos ehto on tosi ja false (0) jos ehto epätosi. Dynaaminen muistinvaraus: Yhden muuttuja

Lisätiedot

20. Javan omat luokat 20.1

20. Javan omat luokat 20.1 20. Javan omat luokat 20.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

UML Luokkakaavio 14:41

UML Luokkakaavio 14:41 UML Luokkakaavio UML Olio-ohjelman luokkien pääpiirteet voidaan kätevähkösti esittää ns. UML-luokkakaaviona. Näin usein tehdäänkin esim. suunniteltaessa, millaisia luokkia ohjelmaan on tarkoitus laatia,

Lisätiedot

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

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang Sisällys 20. Javan omat luokat Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.1 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot