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

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

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

9. Periytyminen Javassa 9.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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

9. Periytyminen Javassa 9.1

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

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

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

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Olioiden yhteistoiminta

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Olio-ohjelmointi Javalla

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

Metodien tekeminen Javalla

Mikä yhteyssuhde on?

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

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

Pakkauksen kokoaminen

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

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

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

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

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

Periytyminen (inheritance)

Rajapinta (interface)

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

Luokat ja oliot. Ville Sundberg

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

public static void main (String [] args)

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

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

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

Javan perusteita. Janne Käki

Pakkauksen kokoaminen

1 Tehtävän kuvaus ja analysointi

16. Javan omat luokat 16.1

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

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

7. Näytölle tulostaminen 7.1

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

1. Omat operaatiot 1.1

KOHDELUOKAN MÄÄRITTELY

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

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

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Oliot viestivät metodeja kutsuen

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Java kahdessa tunnissa. Jyry Suvilehto

C# olio-ohjelmointi perusopas

Sisällys. 15. Lohkot. Lohkot. Lohkot

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

Osio2: Taulukot Jukka Juslin

14. Poikkeukset 14.1

15. Ohjelmoinnin tekniikkaa 15.1

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

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

Poikkeustenkäsittely

812347A Olio-ohjelmointi, X Reflektiivisyys

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

P e d a c o d e ohjelmointikoulutus verkossa

Luokan sisällä on lista

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Tietokannat II -kurssin harjoitustyö

20. Javan omat luokat 20.1

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

YHTEYSSUHDE (assosiation)

7. Oliot ja viitteet 7.1

8. Näppäimistöltä lukeminen 8.1

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmoinnin jatkokurssi, kurssikoe

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

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

19. Olio-ohjelmointia Javalla 19.1

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

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

Java-kielen perusteet

Listarakenne (ArrayList-luokka)

815338A Ohjelmointikielten periaatteet

14. Poikkeukset 14.1

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Metodien tekeminen Javalla

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

5. HelloWorld-ohjelma 5.1

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

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

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

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

12. Näppäimistöltä lukeminen 12.1

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Java ja grafiikka. Ville Sundberg

Transkriptio:

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

Pakkaukset ja määreet Toisiinsa liittyvät luokkatiedostot voidaan koota pakkauksiksi. Luo hierarkiaa ja järjestystä ohjelmistotuotteeseen. Helpottaa uudelleenkäyttöä. Näkyvyysmääreet (muuntimet) säätelevät luokkien näkyvyyttä ja käytettävyyttä. Suojaa ohjelmistokehittäjiä virheiltä ja sivuvaikutuksilta. public ja private metodien ja instanssimuuttujien yhteydessä ovat esimerkkejä määreistä. Vesa Ollikainen & Outi Grotenfelt 2

Pakkaukset ja määreet Pakkaukset ovat nimettyjä luokkaryhmiä. Pakkaukset voivat sisältää toisia pakkauksia. Yllä kutsutaan javax-pakkaukseen kuuluvan swing-pakkauksen JOptionPane-luokan staattista metodia ShowMessageDialog(). pakkaus on graafinen käyttöliittymäkirjasto Vesa Ollikainen & Outi Grotenfelt 3

Pakkausten tuonti Yllä import-lauseella tuodaan kaikki javax.swingpakkaukseen kuuluvat luokat näkyville. Pakkauksen nimeä ei tarvitse erikseen antaa. NetBeans-/JBuilder-ympäristössä lähdekoodit menevät oletusarvoisesti oletuspakkaukseen. pakkauksen nimen voi vaihtaa luokkaa luotaessa. Saman projektin toisen pakkauksen luokat saa näkyville lauseella import pakkauksennimi.*; Vesa Ollikainen & Outi Grotenfelt 4

Luokkien näkyvyys Luokka voi olla julkinen tai pakkauskohtainen Julkinen luokka (public-määre) näkyy kaikkiin muihin luokkiin Pakkauskohtainen luokka (ei määrettä) näkyy samaan pakkaukseen Vesa Ollikainen & Outi Grotenfelt 5

Metodien ja muuttujien näkyvyys Metodit ovat näkyvyydeltään julkisia (public) pakkauksen sisälle ja aliluokkiin näkyviä (protected) pakkauksen sisäisiä (ei määrettä) luokan sisäisiä (private) Myös asetus- ja saantimetodien ( setterit ja getterit ) näkyvyys on syytä harkita tapauskohtaisesti Asetetaan pienin riittävä näkyvyys Kaikille ei tarvitse antaa samaa näkyvyyttä. Vesa Ollikainen & Outi Grotenfelt 6

final-muunnin final-luokka ei voi saada aliluokkaa. Esimerkiksi String-luokka on final-määreinen. motiivina kielen perusteiden selkeys final-muuttuja on vakio. Arvoa ei voi koskaan muuttaa. Arvo asetetaan käännöksen tai suorituksen aikana. Kääntäjä vaatii, että arvo asetetaan ennen käyttöä. final-metodia ei voi ylikirjoittaa aliluokassa. Konstruktorien kutsumista metodeista suositellaan tehtävän final-määreisiä. Tällöin aliluokassa ylikirjoitettu koodi ei voi aiheuttaa sivuvaikutuksia konstruktorin toimintaan. Vesa Ollikainen & Outi Grotenfelt 7

Esimerkki: final-muuttuja Yllä olevassa esimerkissä on kaksi vakiota. vakion eka arvo asetetaan käännösaikaisesti. vakion toka arvo asetetaan suorituksen aikana. Vesa Ollikainen & Outi Grotenfelt 8

Esimerkki: final-metodi Kulkuneuvo-luokan konstruktori kutsuu parannaääntä()- metodia. Jos konstruktorin kutsuma metodi ylikirjoitettaisiin aliluokassa, koodin modulaarisuus kärsisi. Asetetaan metodilla final-määre. Nyt kulkuneuvon luonti hoidetaan varmasti kokonaan tässä luokassa. Vesa Ollikainen & Outi Grotenfelt 9

final-määreisen metodin parannaääntä() ylikirjoitusyritys aiheuttaa käännösaikaisen virheilmoituksen. Vesa Ollikainen & Outi Grotenfelt 10

Staattiset metodit ja muuttujat Staattinen metodi tai muuttuja (static-määre) on yhteinen luokan kaikille olioille. Staattista metodia kutsutaan luokkametodiksi. Staattista muuttujaa kutsutaan luokkamuuttujaksi. Metodin tai muuttujan vaatima muistitila varataan vain kerran. Staattisiin muuttujiin voi koota luokan olioille yhteiset tiedot. Staattinen metodi ei voi suoraan viitata luokan instanssimuuttujaan. tarvitaan olioviittaus myös this-avainsana on kielletty. ei ole olemassa ilmentymää, johon this viittaisi. Vesa Ollikainen & Outi Grotenfelt 11

Esimerkki 1: Staattinen muuttuja public class Countable { private static int instancecount = 0; public Countable() { instancecount++; // increments the static field } public int getinstancecount(){ return instancecount; // number of created instances } } public class StaticDemo { public static void main(string[] args) { int objectcount; Countable obj1 = new Countable(); Countable obj2 = new Countable(); Countable obj3 = new Countable(); } } objectcount = obj1.getinstancecount(); System.out.print("Countable class has +objectcount+" objects."); Outi Grotenfelt 12

Esimerkki2: Staattinen muuttuja ja metodi Muuttuja henkilöidenlkm on laskuri luoduille luokan olioille. Olioille yhteisenä muuttujana se määritellään luokkamuuttujaksi (static). Staattisen muuttujan arvo haetaan staattisella metodilla gethenkilöidenlkm(). Vesa Ollikainen & Outi Grotenfelt 13

Esimerkki2: Staattinen muuttuja ja metodi.. Huomaa luokkametodin kutsu. Myös kutsu eka.gethenkilöidenlkm() olisi syntaktisesti oikein, mutta olioviittauksen käyttö tässä olisi harhaanjohtavaa koodia. Vesa Ollikainen & Outi Grotenfelt 14

public class PassObject { public static void main(string[] args) { Rectangle box = new Rectangle(14.0, 3.3); System.out.println("Contents of the box object:" + "\n length: "+box.getlength()+ "\n widht: "+box.getwidth()); changerectangle(box); System.out.println("Contents of the box object now:" + "\n length: "+box.getlength()+ "\n widht: "+box.getwidth()); } } public static void changerectangle(rectangle r){ r.setlength(0.0); r.setwidth(0.0); } 15 20/9/12 Helsinki Metropolia

import javax.swing.joptionpane; public class ReturnObject { public static void main(string[] args) { BankAccount myaccount; myaccount = getaccount(); JOptionPane.showMessageDialog(null, "Your account has + the balance of "+ myaccount.getbalance()); } public static BankAccount getaccount(){ String input; double balance; input = JOptionPane.showInputDialog("Give the account + balance:"); balance = Double.parseDouble(input); } } return new BankAccount(balance); 16 20/9/12 Helsinki Metropolia

Abstraktit luokat ja metodit Abstraktista luokasta ei voi luoda ilmentymää. Abstraktista metodista ei määritellä toteutusta. Toteutus on määriteltävä abstraktin luokan aliluokassa. Aliluokan määritys kelpaa kääntäjälle vasta, kun yliluokan abstrakti metodi on saanut toteutuksen. AccessSpecifier abstract class ClassName; Luokka on määriteltävä abstraktiksi (avainsana abstract) aina, jos sillä on vähintään yksi abstrakti metodi. AccessSpecifier abstract ReturnType MethodName(ParameterList); Vesa Ollikainen & Outi Grotenfelt 17

Esimerkki: abstraktit luokat ja metodit Abstraktin skaalaa()-metodin määritys pakottaa toteuttamaan skaalausoperaation kaikissa Kuvio-luokalle määriteltävissä aliluokissa. Vesa Ollikainen & Outi Grotenfelt 18

Esimerkki: abstraktit luokat ja metodit.. Vesa Ollikainen & Outi Grotenfelt 19

Esimerkki: abstraktit luokat ja metodit.. Vesa Ollikainen & Outi Grotenfelt 20

Esimerkki: abstraktit luokat ja metodit.. Vesa Ollikainen & Outi Grotenfelt 21

KIITOS! www.metropolia.fi www.facebook.com/metropoliaamk Outi.grotenfelt@metropolia.fi