© Jukka Harju, 2005 - 2007 Viittausmuuttujat. © Jukka Harju, 2005 - 20072 Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

18. Abstraktit tietotyypit
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
6. Metodit.
JavaScript (c) Irja & Reino Aarinen, 2007
16. Javan omat luokat.
Tuloksellinen Java-ohjelmointi Luku 9 Taulukot ja perustietorakenteet
Jukka Juslin Poikkeukset ja niiden paikallistaminen * Jukka Juslin * Liittyy oppikirjan lukuun 11.
Taulukot Jukka Juslin © Jukka Juslin 2006.
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
22. Taulukot.
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
13. Pakkaukset.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.
9. Periytyminen Javassa.
Dynaamiset oliottMyn1 Dynaamiset oliot Dynaamisen olion tunnuksen esittely ja olion määrittely voivat tapahtua yhtäaikaisesti tai eri aikaan. Dynaamisen.
Olioon kohdistuvia perustoimintoja tMyn1 Olioon kohdistuvia perustoimintoja Kopiointimuodostin (copy constructor) alustaa olion tietojäsenet saman luokan.
13. Hyvä ohjelmointitapa (osa 1)
Virtuaaliset jäsenfunktiot tMyn1 Virtuaaliset jäsenfunktiot Virtuaalinen jäsenfunktio on esiteltävä monimuotoisessa kantaluokassa. Virtuaalisen jäsenfunktion.
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
7. Oliot ja viitteet.
Map-luokka Mikä Map on? Mapin esittely ja luonti Map-luokan metodeja Mappiin lisääminen Mapin läpikäynti Mapista poistaminen 1.
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
String-vertailusta ja Scannerin käytöstä (1/2)
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
19. Olio-ohjelmointia Javalla
20. Javan omat luokat.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
22. Taulukot.
Poikkeukset Yleistä Virheeseen varautuminen tarkoittaa sitä, että ohjelmoija huomioi koodia kirjoittaessaan ajonaikaisen virheen mahdollisuuden.
17. Kooste Kooste Kooste (aggregation) on luokkien A ja B välinen suhde, joka tarkoittaa “A on B:n osa” tai “A kuuluu B:hen”. − Koostesuhteessa.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
© Jukka Juslin1 Osio2 Olio-ohjelmointi: Merkkijonot eli Stringit Jukka Juslin.
2. Lisää Java-ohjelmoinnin alkeita
FunktiottMyn1 Funktiot Funktiot voidaan jakaa –Kirjastofunktioihin, jotka ovat valmiina kaikkien käytössä. Erikoisempien kirjastofunktioiden käyttöönotto.
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
16. Javan omat luokat Sisällys Johdanto. Object -luokka: − toString -, equals -, clone - ja getClass -metodit. Comparable -rajapinta: − compareTo.
String-vertailusta ja Scannerin käytöstä (1/2)
17. Kooste.
5. Kapselointi.
1. Omat operaatiot.
7. Oliot ja viitteet.
2. Taulukot.
14. Poikkeukset.
7. Hyvä ohjelmointitapa..
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto)
14. Hyvä ohjelmointitapa.
2. Taulukot.
7. Oliot ja viitteet.
4. Attribuutit.
7. Hyvä ohjelmointitapa..
14. Poikkeukset.
3. Attribuutit.
14. Poikkeukset.
4. Luokan testaus ja käyttö olion kautta
eli oliotiedostojen käsittely
Esityksen transkriptio:

© Jukka Harju, Viittausmuuttujat

© Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio sijaitsee. •Viittausmuuttuja esitetään usein graafisesti "laatikkona" joka viittaa olioon. •Oliota kuvataan tässä esityksessä pyöristetyllä suorakulmiolla. Oppilas oppilas1 = new Oppilas();

© Jukka Harju, null -viittaus •Viittausmuuttujan arvo on null, mikäli se ei viittaa yhteenkään olioon. •Viittausmuuttujan arvoksi voidaan asettaa null, mikäli viittaus halutaan tuhota. oppilas1 = null; •Voidaan myös tarkistaa onko viittausmuuttujan arvona null. Tällöin käytetään aina tavallista yhtäsuuruusvertailua. if (oppilas1 == null) System.out.println ("Virhe");

© Jukka Harju, null -viittaus •Attribuuttina oleva viittausmuuttuja alustetaan automaattisesti null -arvoiseksi. •Ohjelmassa tulee aina varmistaa että viittausmuuttuja todella viittaa olioon, eikä sisällä null -arvoa. •Yritys käyttää null -arvoista viittausmuuttujaa johtaa poikkeuksen ( NullPointerException) syntymiseen. •Poikkeus kaataa ohjelman suorituksen, mikäli ohjelmassa ei ole poikkeuskäsittelyä.

© Jukka Harju, this -viittaus •this –viittauksella olio voi viitata itseensä: •this -viittauksen käyttö metodissa viittaa olioon jolle metodia on kutsuttu. •Toteutetaan metodi nimeltä lisaaOpintosuoritus, jossa käytetään this -viittausta. public class Oppilas{ private double opintopisteet; private Vector opintosuoritukset;... public void lisaaOpintosuoritus(Suoritus opintosuoritus) { this.opintopisteet += opintosuoritus.getOpintopisteet(); this.opintosuoritukset.add(opintosuoritus); }... }

© Jukka Harju, this -viittaus •Kun lisaaOpintosuoritus -metodia kutsutaan seuraavasti, viittaa metodissa oleva this -viittaus olioon oppilas1. oppilas1.lisaaOpintosuoritus(suoritus); •Seuraavassa kutsussa metodissa oleva this -viittaus taas viittaa olioon oppilas2 : oppilas2.lisaaOpintosuoritus(suoritus); opintopisteet opintosuoritukset lisaaOpintosuoritus oppilas1 opintopisteet opintosuoritukset oppilas2 lisaaOpintosuoritus

© Jukka Harju, this -viittaus •this -viittauksella pystytään erottamaan attribuutit saman nimisistä paikallisista muuttujista. •Myös parametrimuuttuja on paikallinen muuttuja. public class Oppilas { private String nimi; private int numero; private double opintopisteet; public Oppilas(String nimi, int numero, double opintopisteet) { this.nimi = nimi; this.numero = numero; this.opintopisteet = opintopisteet; }... }

© Jukka Harju, Sijoittaminen •Sijoittamisessa kopioidaan lähdemuuttujan arvo kohdemuuttujaan. •Lähdemuuttujan arvo ei muutu sijoittamisessa. •Esim int -primitiivityypille: int luku1 = 10, luku2 = 6; luku2 = luku1; kohdemuuttuja lähdemuuttuja Alkutilanne luku1 10 luku2 6 Tilanne sijoituksen jälkeen luku1 10 luku2 10

© Jukka Harju, Viittaukset & sijoittaminen •Myös viittausmuuttujille sijoittamisessa kopioidaan lähdemuuttujan arvo kohdemuuttujaan. •Viittausmuuttuja sisältää tiedot missä muistipaikassa olio sijaitsee, käytännössä sijoittamisessa kopioidaan tämän muistipaikan ilmaiseva arvo. oppilas2 = oppilas1; Alkutilanne oppilas1oppilas2 Tilanne sijoituksen jälkeen oppilas1oppilas2 nimi = ”Tero Tietäväinen" nimi = "Pertti Pöntinen" nimi = ”Tero Tietäväinen" nimi = "Pertti Pöntinen"

© Jukka Harju, Viittausmuuttujat •Samaan olioon voidaan viitata useamman kuin yhden viittausmuuttujan kautta  oliolle voidaan kutsua metodeja useamman kuin yhden viittausmuuttujan kautta. •Useiden viittausmuuttujien käytössä on oltava huolellinen: •Mikäli oppilaan nimi muutetaan viittausmuuttujan oppilas1 - kautta, näkyy muutettu nimi myös viittausmuuttujan oppilas2 - kautta. •Voidaan joutua tilanteeseen jossa käytännössä pitäisikin olla kaksi oliota sen sijaan että viitataan yhteen olioon kahden eri viittausmuuttujan kautta.

© Jukka Harju, Olioiden vertaaminen •Operaattorilla == voidaan verrata osoittavatko kaksi viittausmuuttujaa samaan olioon •Operaattori palauttaa arvon true, mikäli muuttujat viittaavat samaan olioon. if(oppilas1 == oppilas2) { System.out.println("Muuttujat oppilas1 ja oppilas2 viittaavat samaan olioon."); } •Kaikki luokat perivät equals -nimisen metodin Object - kantaluokalta. •Peritty equals -metodi toimii kuten == -operaattori.

© Jukka Harju, Olioiden vertaaminen •Yleensä equals -metodi tarvitsee korvata aliluokassa, jotta sen toiminta saadaan järkeväksi. public class Oppilas { private String nimi; private int numero; public boolean equals(Oppilas verrattava) { boolean paluuarvo; if(this.nimi.equals(verrattava.nimi) && this.numero==verrattava.numero) { paluuarvo = true; } else { paluuarvo = false; } return paluuarvo; }... } •Kutsuvassa ohjelmassa: if (oppilas1.equals(oppilas2)) { System.out.println("Oppilas1- ja oppilas2-muuttujat viittaavat olioihin jotka sisältävät samat nimi- ja numero-tiedot"); }

© Jukka Harju, Roskienkeruu •Kun olioon ei enää viitata mistään viittausmuuttujasta, ei oliota enää pystytä ohjelmassa käsittelemään. •Olion säilyttäminen muistissa on tällöin turhaa. •Java suorittaa automaattisen roskienkeruun tietyin väliajoin, jolloin "irralliset" oliot tuhotaan muistista. •Useimmissa muissa ohjelmointikielissä ohjelmoija on itse vastuussa ohjelman varaaman muistin vapauttamisesta. •Javan roskienkeruuta pystyy kutsumaan "pakotetusti" komennolla System.gc().

© Jukka Harju, Olio parametrina •Parametrit ovat Javassa ns. arvoparametreja: •Parametrina annettava muuttujan arvo kopioidaan kutsuttavan metodin paikalliseen muuttujaan. •Parametrien välityksessä tapahtuu siis sijoittamisia. •Kun parametrina välitetään olio, sijoitetaan parametrina annetun muuttujan sisältämä viittausarvo metodin paikalliseen muuttujaan. public class Oppilas { private double opintopisteet; private ArrayList opintosuoritukset;... public void lisaaOpintosuoritus(Suoritus opintosuoritus){ this.opintopisteet += opintosuoritus.getOpintopisteet(); this.opintosuoritukset.add(opintosuoritus); }... } •Kutsuvassa ohjelmassa: Suoritus ict02d = new Suoritus("Ohjelmointitaito","ict02d",12.0,5); oppilas1.lisaaOpintosuoritus(ict02d);

© Jukka Harju, Olio parametrina Kutsuva ohjelmaKutsuttava metodi nimi = "Ohjelmointitaito" tunnus = "ict02d" laajuus = 12.0 arvosana = 5 ict02d opintosuoritus metodin kutsussa tapahtuu sijoitus

© Jukka Harju, Olio parametrina •Kun oliota, johon saatiin viittaus parametrina, käsitellään metodissa (esim. muutetaan olion attribuutin arvoa), näkyy muutos kutsuneelle ohjelmalle. •Jos sen sijaan parametrina saatua viittausarvoa muutetaan kutsutussa metodissa, eli asetetaan viittaus osoittamaan toiseen olioon, ei tämä näy millään tapaa kutsuneelle ohjelmalle.

© Jukka Harju, Olio paluuarvona •Metodi voi palauttaa viittauksen olioon. •Paluuarvon tyyppi on tällöin sen luokan nimi, josta olio on luotu. •Palautettu viittaus on otettava kutsuneessa ohjelmassa talteen sijoituksella. public class Oppilas { private double opintopisteet; private Vector opintosuoritukset;... public Suoritus haeSuoritus(int jarjestys) { Suoritus paluuarvo = null; if(jarjestys<opintosuoritukset.size()) { paluuarvo =(Suoritus)opintosuoritukset.elementAt(jarjestys); } return paluuarvo; }... } •Kutsuvassa ohjelmassa Suoritus haettu = oppilas1.haeSuoritus(5);

© Jukka Harju, Viittausmuuttuja taulukon alkion tyyppinä •Taulukon alkion tyyppinä voi Javassa olla mikä tahansa luokka. •Taulukon alkio on tällöin viittausmuuttuja, joka voi sisältää viitteen ko luokan tai minkä tahansa sen aliluokan olioon. •Mikäli alkion tyyppinä on Object, voi alkio viitata minkä tahansa luokan olioon. Object[] taulukko = new Object[5]; taulukko

© Jukka Harju, Viittausmuuttuja linkitetyn listan sisältönä •ArrayList iin voi tallettaa viittauksia minkä tahansa luokan olioon. •ArrayList in solmu sisältää tällöin viittauksen datana olevaan olioon. ArrayList[] lista = new ArrayList(); alkuloppu