1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi Luokka mitä tietoja kohteesta on (attribuutit) miten tietoja voidaan käsitellä (metodit) attribuutti private double ; public void pano(double maara){ metodi Tili.java luokka Luokkaa käyttävä ohjelma luokkaa käytetään hyväksi luokasta tehdyllä oliolla olio public class TiliOhjelma { public static void main (String[] args) { Tili tili = new Tili(); tili.pano(200.0); TiliOhjelma.java
2 Luokka Luokka on kokonaisuus, joka sisältää tiedot ja niiden käsittelyn. Luokka talletetaan tiedostoon, minkä nimenä on LuokanNimi.java luokan nimi kirjoitetaan suurella public class LuokanNimi { // luokan attribuutit // luokan metodit määritellään luokan ominaisuudet määritellään luokan toiminnallisuus Luokan näkyvyys muille luokille public luokka näkyy kaikille luokille puuttuu luokka näkyy samassa paketissa oleville luokille 3 Attribuutti Attribuutti sisältää tiedon, jota käsitellään metodeilla. public class LuokanNimi { // attribuutti private tyyppi attribuutinnimi; attribuutin nimi kirjoitetaan pienellä attribuutin näkyvyys muille luokille private attribuutti näkyy vain kyseiselle luokalle eli attribuuttia voidaan käyttää vain kyseisen luokan metodeilla protected käsitellään periytymisen yhteydessä public attribuutti näkyy kaikille luokille eli attribuuttia voidaan käyttää mistä tahansa luokasta (ei suositella!) puuttuu attribuutti näkyy samassa paketissa oleville luokille 4
3 Tili-luokassa on attribuutit ja. Jokaisella Tililuokan oliolla on samat attribuutit, mutta jokaisella Tililuokasta tehdyllä oliolla on oma nsa ja nsa private String ; private double ; attribuutti määritellään yleensä privatetyyppiseksi, jolloin vain luokan metodeilla voidaan käsitellä attribuutin arvoja. Ideana on piilottaa luokan toteutus luokkaa käyttävältä ohjelmalta. Tili tili = null; tili null tili = new Tili(); esitellään Tili-luokan olio (syntyy viite) luodaan Tili-luokan olio, oliolla on Tili-luokassa määritellyt attribuutit tili null 0.0 arvo on null, koska -attribuutin tietotyyppi on String 5 Konstruktorilla alustetaan olion attribuutit. Konstruktori (muodostin) Jos luokkaan ei itse koodaa konstruktoria, luokassa on valmiina oletuskonstruktori, mikä alustaa luvut nolliksi, merkkijonot ja oliot null:ksi kuten kalvon 4 alin kuva esittää. Jos luokkaan koodataan itse yksikin konstruktori, oletuskonstruktoria ei enää ole luokassa. Luokkaan voidaan koodata itse yksi tai useampi konstruktori. 6
4 private String ; private double ; public Tili() { = ""; = 0.0; konstruktorilla on sama nimi kuin luokalla eikä sille ole paluuarvon tietotyyppiä (return-lausetta) parametriton konstruktori parametrillinen konstruktori public Tili(String, double ) { this. = ; this. = ; Tarkoittaa olion attribuuttia. this attribuutin edessä, koska olion attribuutti täytyy pystyä erottamaan samannimisestä parametrista. Parametriton konstruktori tili = new Tili(); tarkoittaa parametrina tullutta tietoa Parametrillinen konstruktori tili = new Tili("Fi06512",20.0); tili 0.0 tili Fi06512 20.0 Olion luominen private String ; private double ; public Tili () { = ""; = 0.0; public Tili (String, double ) { this. = ; this. = ; Tili-luokka public class TiliOhjelma { public static void main(string[] args) { kutsutaan parametritonta konstruktoria konstruktorilla luodaan olio Tili tili1 = new Tili(); kutsutaan parametrillista konstruktoria Tili tili2 = new Tili("2", 10.0); Tili-luokkaa käyttävä ohjelma 8
5 Metodit Metodi suorittaa tietyn tehtävän. Metodi käsittelee attribuuttia/attribuutteja. get-metodilla (kalvo 9) pyydetään olion tietoja, set-metodilla (kalvo 10) muutetaan olion tietoja ja tostringmetodilla (kalvo 11) palautetaan olion tiedot yhtenä merkkijonona. public class LuokanNimi { // luokan metodi metodin nimi kirjoitetaan pienellä public palautusarvo metodinnimi(parametrit) { lauseita; metodin näkyvyys muille luokille public metodi näkyy kaikille luokille protected metodi näkyy periytyville luokille private metodi näkyy vain kyseisen luokan metodeille puuttuu metodi näkyy samassa paketissa oleville luokille 9 get-metodi get-metodilla (getxx ) palauttaa tietyn attribuutin arvon public double getsaldo() { return ; public String getnumero() { return ; double, koska metodi palauttaa return-lauseella desimaaliluvun (-attribuutin arvon) String, koska metodi palauttaa return-lauseella merkkijonon (-attribuutin arvon) metodeja kutsutaan Tili tili = new Tili("Fi06512", 0.0); olio.metodi System.out.print("Saldo on " + tili.getsaldo()); System.out.print("Numero on " + tili.getnumero()); 10
6 set-metodi set-metodilla (setxx) muutetaan tietyn attribuutin arvoa. void, koska metodi ei palauta mitään return-lauseella public void setsaldo(double ) { this. = ; public void setnumero(string ) { this. = ; this attribuutin edessä, koska olion attribuutti täytyy pystyä erottamaan samannimisestä parametrista parametrina tullut arvo Tili tili = new Tili("Fi06512", 0.0); tili.setsaldo(20.0); tili.setnumero("fi065111111"); metodeja kutsutaan olio.metodi! Reaalimaailmassa kyseisiä metodeja ei voisi käyttää, koska tilin a ja a ei voida noin vain muuttaa. 11 tostring-metodi tostring-metodilla olion attribuuttien arvot muunnetaan merkkijonoksi, jolloin olion sisältö on helppo näyttää. tostring palauttaa returnlausella olion attribuuttien arvot yhtenä merkkijonona. public String tostring() { return "=" + + ", =" + ; Tili tili = new Tili("Fi06512", 20.0); System.out.println(tili.toString()); // tai System.out.println(tili); =Fi06512, =20.0 Tiedot voidaan näyttää myös get-metodeilla. System.out.println("Numero: " + tili.getnumero() + "\nsaldo: " + tili.getsaldo()); Numero: Fi06512 Saldo: 20.0 12
7 Muita metodeja Luokkaan voidaan koodata muita tarpeellisia metodeja. public void pano(double maara) { = + maara; public boolean otto(double maara) { if ( >= maara) { = - maara; return true; else { return false; otto-metodi palauttaa true, jos otto onnistuu, muuten false if (tili.otto(200.0)) { System.out.println("Otto onnistui"); else { System.out.println("Tilillä ei ole katetta"); 13 Olion kopiointi tili1 Fi11111 100.0 tili2 Fi22222 200.0 tili1 = tili2; sijoituslause kopio viitteen eli tiedon, missä olio on sijoituslauseen jälkeen tili1 ja tili2 viittaa samaan olioon Fi11111 100.0 tili2 tili1 Fi22222 200.0 Olion tietojen kopiointi voidaan tehdä muodostamalla olio toisen olion tiedoista tili1 = new Tili(tili2.getNumero(), tili2.getsaldo()); tili1 luodaan parametrillisella konstruktorilla, jolle annetaan parametrina kopioitavan olion tiedot. Konstruktori siis kopio luotavalle oliolle parametrina tulleen olion tiedot. 14
8 Staattinen attribuutti ja metodi Staattinen attribuutti on luokkakohtainen attribuutti eli yhteinen koko luokalle (kaikille olioille). Staattisella metodilla käsitellään staattisia attribuutteja. Se suoritetaan luokalla ei oliolla. private static double korkoprosentti = 0.2; public static double getkorkoprosentti() { return korkoprosentti; staattinen attribuutti on luokan attribuutti eli kaikille olioille yhteinen attribuutti public static void setkorkoprosentti(double korkoprosentti) { Tili.korkoprosentti = korkoprosentti; Tili (luokan nimi), koska korkoprosentti on luokka-attribuutti System.out.println("Korko on " + Tili.getKorkoprosentti()); staattista metodia kutsutaan luokalla 15 Yksinkertainen pääohjelma (ohjelmaluokka) public class TiliOhjelma { public static void main(string[] args) { Tili tili = new Tili(); Scanner input = new Scanner(System.in); System.out.print("Anna tilin: "); String = input.nextline(); System.out.print("Anna alku: "); double = input.nextdouble(); esitellään ja luodaan Tililuokan olio pääohjelman käyttöön tili.setnumero(); tili.setsaldo(); System.out.print("Panon määrä: "); double maara = input.nextdouble(); tili-olion käsittelyyn käytetään Tili-luokan metodeja tili.pano(maara); System.out.println("Saldo: " + tili.getsaldo()); 16
9 Ohjelmaluokka public class TiliSovellus { private Tili tili = new Tili(); esitellään ja luodaan Tililuokan olio sovellusluokan käyttöön public void teepano() { double maara;... tili.pano(maara); tehdään sovellusluokkaan metodi, joka hoitaa jonkin tehtävän (tässä panon) käyttäen Tili-luokan metodia tili-oliota voidaan käyttää vain sovellusluokan metodeissa public static void main(string args []) { Tilisovellus sovellus = new Tilisovellus(); sovellus.teepano(); luodaan sovellusluokan olio, millä kutsutaan sovellusluokan metodeja! tili-oliota ei voida käyttää pääohjelmassa, koska olio on esitelty TiliSovellusluokalle eikä pääohjelmalle. tili-oliota käytetään Tili-luokan metodeilla TiliSovellus-luokan metodeista. Jos olio esiteltäisiin pääohjelmaan, se pitäisi viedä parametrina TiliSovellus-luokan metodeihin.