16. Javan omat luokat 16.1

Samankaltaiset tiedostot
20. Javan omat luokat 20.1

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

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

17. Javan omat luokat 17.1

17. Javan omat luokat 17.1

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1

12. Monimuotoisuus 12.1

15. Ohjelmoinnin tekniikkaa 15.1

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

12. Monimuotoisuus 12.1

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

15. Ohjelmoinnin tekniikkaa 15.1

Rajapinta (interface)

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++?

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

7. Oliot ja viitteet 7.1

7. Näytölle tulostaminen 7.1

Olio-ohjelmointi Javalla

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

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

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

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

Mikä yhteyssuhde on?

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

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

14. Poikkeukset 14.1

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

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

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

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

Listarakenne (ArrayList-luokka)

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

Java kahdessa tunnissa. Jyry Suvilehto

Metodien tekeminen Javalla

14. Poikkeukset 14.1

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

Ohjelmoinnin jatkokurssi, kurssikoe

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

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

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

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

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

Java-kielen perusteet

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

7/20: Paketti kasassa ensimmäistä kertaa

4. Olio-ohjelmoinista lyhyesti 4.1

1. Omat operaatiot 1.1

1 Tehtävän kuvaus ja analysointi

Pakkauksen kokoaminen

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

Pakkauksen kokoaminen

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

Periytyminen (inheritance)

Ohjelmointi 2, välikoe

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

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

Javan perusteita. Janne Käki

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

Luokan sisällä on lista

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

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

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

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

18. Abstraktit tietotyypit 18.1

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

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

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

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

Osio2: Taulukot Jukka Juslin

2. Olio-ohjelmoinista lyhyesti 2.1

KOHDELUOKAN MÄÄRITTELY

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

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Sisällys. Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2

19. Olio-ohjelmointia Javalla 19.1

Mitä on periytyminen?

Java-kielen perusteet

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

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

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

Oliot viestivät metodeja kutsuen

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

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

Harjoitus 5 (viikko 48)

Luokkakirjastot. esiintymämetodien käytöstä:

Olio-ohjelmointi Syntaksikokoelma

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

ITKP102 Ohjelmointi 1 (6 op)

Transkriptio:

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 Javan omat luokat muodostavat ohjelmointirajapinnan (Application Programming Interface, API), jonka avulla voidaan suorittaa mitä erilaisempia tehtäviä. API-luokat on jaettu pakkauksiin, joista java.lang on aina käytettävissä automaattisesti. Tässä pakkauksessa ovat kielen keskeisimmät luokat kuten esimerkiksi Object, String ja Double. 16.3

Javan omat luokat Java tarjoaa perustyypeille niin sanotut kääreluokat (wrapper classes), jotka ovat perustyypin viitetyyppisiä vastineita: double ja Double, int ja Integer jne. Java muuntaa implisiittisesti alkeistyypin sitä vastaavan kääreen tyypiksi. java.lang-pakkauksesta löytyy myös Math-luokka, jossa joitakin matemaattisia operaatioita ja vakioita. Tiedostojenkäsittelyyn tarvitaan java.io-pakkauksen luokkia. (Tiedostot on esitelty Lausekielinen ohjelmointi - kurssin luentorungossa.) 16.4

Javan omat luokat java.util-pakkauksesta löytyvät esimerkiksi Random-, Scanner-, Formatter, LinkedList-, Vector-, ArrayList- ja Stack-luokat. Javan versiokohtainen API-dokumentaatio on luettavissa Internetissä. Esimerkiksi version 1.8 dokumentit löytyvät osoitteesta: http://docs.oracle.com/javase/8/docs/api/index.html Linkki kurssin verkkosivuilla. 16.5

Object-luokka Java-kielen luokkahierarkian juuriluokka. Automaattisesti itse ohjelmoitujen luokkien juuriluokaksi. Näin kaikilla omilla luokilla muun muassa metodit: tostring: tuotetaan olion merkkijonoesitys, equals: olioiden vertailu, clone: luodaan olion kopio ja getclass: olion luokan tutkiminen metaolion avulla. Metodit voidaan korvata omassa luokassa. 16.6

tostring-metodi public String tostring() Palauttaa oletusarvoisesti merkkijonon, jossa on olion luokan nimi, @-merkki ja olion hajautuskoodi. Javan API-dokumentaatiossa suositellaan, että jokainen Objectluokan jälkeläinen korvaa tämän metodin. /* Kissa-luokassa korvattu tostring-metodi, * josta kutsutaan yliluokan korvausta. */ public String tostring() { return super.tostring() + EROTIN + vari + EROTIN + hanta; 16.7

equals-metodi public boolean equals(object obj) Tutkitaan ovatko oliot samat (paluuarvo true). Olkoon viitteet x!= null, y!= null ja z!= null. Tällöin: x.equals(x) == true x.equals(y) == y.equals(x) Jos x.equals(y) == true ja y.equals(z) == true, niin x.equals(z) == true Vertailee oletusarvoisesti viitteitä. // refleksiivisyys // symmetrisyys // transitiivisuus Korvattava siten, että metodissa vertaillaan olioiden tietoja (eli attribuuttien arvoja). Määrittele parametri aina Object-tyyppiseksi, koska muun tyyppisellä parametrilla metodi kuormitetaan. Korvattaessa tulisi korvata myös hashcode-metodi. 16.8

Object, eläin, nisäkäs ja kissa Object equals(object), tostring() Nisakas turkillinen syo(), onkoiso() equals(object), tostring() Elain elossa, paino syo(), onkoiso() equals(object), tostring() compareto(elain) Kissa vari, hanta syo(), onkoiso() aantele(), kehraa() equals(object), tostring() moikkaa() << interface >> Comparable compareto(t) << bind >> Elain << interface >> Tervehtiva moikkaa() T 16.9

clone-metodi protected Object clone() throws CloneNotSupportedException Luo kopion viestin saavasta oliosta. Palauttaa Object-tyyppisen viitteen kopioon. Metodia kutsuvan luokan tai sen esi-isän täytyy toteuttaa tyhjä Cloneable-rajapinta, jotta metodia voi käyttää. Metodi on usein korvattava, koska se pintakopioi (shallow copy) viitetyyppiset attribuutit. Metodin korvaus on annettava public-määreellä. Olion kopiointi clone-metodilla on monimutkaista. Jotkin lähteet suosittelevat metodin välttämistä. Vaihtoehdoissa myös omat ongelmansa. 16.10

getclass-metodi Class-luokka on luokkia mallintava metaluokka. Jokaiseen olioon liittyy metaolio, joka sisältää tietoja sen luokasta (dynaaminen luokka). Class-luokka ja java.lang.reflect-pakkaus mahdollistavat ohjelman rakenteen tutkimisen ja muokkaamisen sen ajon aikana (reflektio). public final Class<?> getclass() Palauttaa olion metaolion (Class-luokan ilmentymä). // Luodaan olio ja asetetaan viite siihen ja sen metaolioon. String s = new String(); Class m = s.getclass(); 16.11

getclass-metodi Joitakin Class-luokan metodeja. getname- ja getsimplename-metodit palauttavat olion luokan nimen hieman eri muodoissa. isinstance-metodi on instanceof-operaattorin vastine. Paluuarvo true, jos metodin parametriin p liittyvän olion luokka P ja metaolion kuvaaman olion m luokka M ovat yhteensopivia (P <: M). Jos P <: M, niin lauseke p instanceof M, on true. instanceof-operaattoria joustavampi menetelmä olion luokan tunnistamiseen. 16.12

Comparable-rajapinta (java.lang) public interface Comparable<T> Rajapinta on generisoitu: T on geneerinen tyyppinimi. Esim. Toteutetaan rajapinta siten, että voidaan vertailla kaiken tyyppisiä viitteitä:... implements Comparable<Object>... public abstract int compareto(t o) Rajapinnan ainoa metodi, jonka toteuttajan on kiinnitettävä T. Palauttaa -1, kun viestin saava olio on pienempi kuin parametrina saatu olio. Palauttaa 0, kun viestin saava olio on yhtä suuri kuin parametrina saatu olio. Palauttaa 1, kun viestin saava olio on suurempi kuin parametrina saatu olio. 16.13

Vector-luokka Viitetyyppisten alkioiden taulukko, jonka koko voi kasvaa tai pienetä. Lisätilaa varataan automaattisesti aina tarvittaessa. Alkioihin voi viitata indeksin avulla. Erittäin hyödyllinen apuluokka, joka on käytettävissä kaikissa Javan versioissa ( 1.0). ArrayList-luokka modernimpi vaihtoehto. Sijaitsee java.util-pakkauksessa omassa ohjelmassa tarvitaan import-lause. 16.14

Vector-luokka import java.util.vector; public class VektoriTesti { public static void main(string[] args) { int ALKLKM = 7; Vector v = new Vector(3, 2); for (int i = 0; i < ALKLKM; i++) { Integer o = new Integer(i); v.add(o); System.out.println(v.size() + "\t" + v.capacity()); while (v.size() > 0) { Integer o = (Integer)v.remove(0); System.out.println(v.size() + "\t" + v.capacity()); 1 3 2 3 3 3 4 5 5 5 6 7 7 7 6 7 5 7 4 7 3 7 2 7 1 7 0 7 Huom! Kääntäjä varoittaa, koska kokoelman alkioiden tyyppiä ei ole annettu. 16.15

ArrayList-luokka import java.util.arraylist; public class TaulukkolistaTesti { public static void main(string[] args) { int ALKLKM = 7; ArrayList<Integer> l = new ArrayList<Integer>(); for (int i = 0; i < ALKLKM; i++) { Integer o = new Integer(i); l.add(o); System.out.println(l.size()); while (l.size() > 0) { Integer o = l.remove(0); System.out.println(l.size()); Huom! Kokoelman alkioiden tyyppi on kiinnitetty geneerisellä määreellä. 1 2 3 4 5 6 7 6 5 4 3 2 1 0 16.16