15. Ohjelmoinnin tekniikkaa 15.1

Samankaltaiset tiedostot
15. Ohjelmoinnin tekniikkaa 15.1

9. Periytyminen Javassa 9.1

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

16. Javan omat luokat 16.1

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

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

14. Poikkeukset 14.1

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

14. Poikkeukset 14.1

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

12. Monimuotoisuus 12.1

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

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

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

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

20. Javan omat luokat 20.1

1. Omat operaatiot 1.1

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

Poikkeustenkäsittely

Harjoitus 5 (viikko 48)

Olio-ohjelmointi Javalla

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

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

Geneeriset luokat. C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet. Geneerisen luokan käyttö.

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmointi 2, välikoe

Ohjelmoinnin jatkokurssi, kurssikoe

4. Olio-ohjelmoinista lyhyesti 4.1

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

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

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

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

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

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

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

Tietueet. Tietueiden määrittely

Java-kielen perusteet

UML ja luokkien väliset suhteet

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

Java-kielen perusteet

12. Monimuotoisuus 12.1

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

Olio-ohjelmointi Syntaksikokoelma

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

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

2. Olio-ohjelmoinista lyhyesti 2.1

Java kahdessa tunnissa. Jyry Suvilehto

12 Mallit (Templates)

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Metodien tekeminen Javalla

Mikä yhteyssuhde on?

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

7. Oliot ja viitteet 7.1

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

Sopimuspohjainen olio-ohjelmointi

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

19. Olio-ohjelmointia Javalla 19.1

Mitä poikkeuskäsittely tarkoittaa?

1 Tehtävän kuvaus ja analysointi

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

Olio-ohjelmointi Virhetilanteiden käsittely

Listarakenne (ArrayList-luokka)

Rajapinta (interface)

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

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

17. Javan omat luokat 17.1

Ohjelmointi 1 Taulukot ja merkkijonot

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

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Harjoitus 4 (viikko 47)

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

Oliot viestivät metodeja kutsuen

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

5. HelloWorld-ohjelma 5.1

Taulukot. Taulukon käsittely. Tämän osan sisältö. Esimerkki. Taulukon esittely ja luonti. Taulukon alustaminen. Taulukon koko

17. Javan omat luokat 17.1

ITKP102 Ohjelmointi 1 (6 op)

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

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

Ohjelmoinnin perusteet Y Python

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

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. V Geneerisyys

Javan perusteita. Janne Käki

ITKP102 Ohjelmointi 1 (6 op)

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Periytyminen (inheritance)

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Luokat ja oliot. Ville Sundberg

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

Osoitin ja viittaus C++:ssa

Transkriptio:

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 silmukoimiseen: for (muuttuja : kokoelma) {... } missä muuttuja on samaa tyyppiä kuin kokoelman alkio. Java sijoittaa muuttujaan kullakin kierroksella kokoelman seuraavan alkion arvon. Esimerkki: lasketaan yksiulotteisen taulukon alkioiden summa eri tavoin. int[] luvut = { 1, 2, 3, 4, 5 };... for (int i = 0; i < luvut.length; i++) summa1 += luvut[i]; for (int luku : luvut) summa2 += luku; 15.3

For-each-rakenne Esimerkki: lasketaan kaksiulotteisen taulukon alkioiden summia. int[][] luvut = { { 1, 2, 3 }, { 4, 5, 6 } };... for (int i = 0; i < luvut.length; i++) for (int j = 0; j < luvut[i].length; j++) summa1 += luvut[i][j];... // Kaksiulotteisen taulukon rivit ovat yksiulotteisia taulukoita. for (int[] rivi : luvut) for (int luku : rivi) summa2 += luku; 15.4

Lueteltu tyyppi Lueteltu tyyppi (enumeration) on tietotyyppi, jossa tyypin arvoille kiinnitetään nimet luettelemalla kaikki tyypin arvot. Esimerkiksi pelikorttien maat ovat pata, risti, hertta ja ruutu. Javassa luokkatyypin erikoistapaus. Määritellään avainsanalla enum. Periytyy Enum-luokasta, joka on Object-luokan aliluokka. Arvot automaattisesti julkisia luokkavakioita (public static final). Paljon rajoitteita luokkatyyppiin verrattuna. Olioiden luominen ei ole mahdollista. Lueteltua tyyppiä ei voi periä toisesta luetellusta tyypistä. Rakentajia ei voi julkaista public- tai protected-määreillä. 15.5

Lueteltu tyyppi Tällä kurssilla lueteltu tyyppi esitellään hyvin yksinkertaisessa muodossa ja sijoitetaan luokan tapaan omaan tiedostoonsa. // Pelikorttien maat lueteltuna tyyppinä (Maa.java). // Tyypin määrittelyyn riittää jo pelkästään tyypin otsikko // ja arvojen esittely ne tyypin rungossa luettelemalla. public enum Maa { // Maa-tyyppisellä tunnuksella voi olla vain // jokin näistä arvoista. PATA, RISTI, HERTTA, RUUTU; } 15.6

Lueteltu tyyppi // Viikonpäivät lueteltuna tyyppinä (Viikonpaiva.java). public enum Viikonpaiva { // Luetellun tyypin rakentajaa kutsutaan arvojen esittelyn yhteydessä. MA("maanantai"), TI("tiistai"), KE("keskiviikko"), TO("torstai"), PE("perjantai"), LA("lauantai"), SU("sunnuntai"); private String nimi; // Viikonpäivän nimi. private Viikonpaiva(String uusinimi) throws IllegalArgumentException { if (uusinimi == null) throw new IllegalArgumentException("Virheellinen nimi!"); nimi = uusinimi; }... } 15.7

Lueteltu tyyppi Kullakin luetellulla tyypillä on erikoismetodit: // Palauttaa luetellun tyypin E arvot taulukossa. public static E[] values() // Muuntaa annetun merkkijonon luetellun tyypin E arvoksi. // Heittää IllegalArgumentException-poikkeuksen, // jos muunnos ei onnistu. public static E valueof(string name) Nämä metodit eivät periydy Enum-luokasta, vaan kääntäjä muodostaa ne. 15.8

Override-annotaatio Annotaatiot (annotation) ovat kommenttien tapaan ohjelmaan liittyvää metatietoa (tietoa tiedosta). Annotaatioilla voidaan ohjailla Java-kääntäjän toimintaa. Annotaation tunnus alkaa @-merkillä. Esimerkiksi @Override, @Deprecated ja @SuppressWarnings. Ohjelmoija lisää annotaatiot itse lähdekoodiin. Tällä kurssilla hyödyllisin annotaatio on Java-kielen oma Override-annotaatio joka pakottaa kääntäjän ilmoittamaan virheestä, jos annotoitu metodi ei korvaa yliluokan metodia. Estää pienellä vaivalla kirjoitus- ja ajatusvirheitä. 11.9

Override-annotaatio Override-annotaatio annetaan omalle rivilleen välittömästi ennen metodin otsikkoa. Esimerkki: Kissa-luokka ei käänny, koska sen metodi on määritelty korvattavaksi Override-annotaatiolla, mutta metodin otsikko on kirjoitettu vahingossa väärin (pitäisi olla onkoiso). @Override public boolean onkoiso() { } return paino() > 10; 11.10

Geneerinen ohjelmointi Geneerinen ohjelmointi (generic programming, generics) tarkoittaa muun muassa ohjelmointitekniikkaa, jossa algoritmeja toteutetaan yleisesti sitomatta niitä käsiteltävän tiedon tyyppiin. Tunnetuin geneerisyyden mahdollistava mekanismi lienevät C++-kielen kaavaimet (template). Geneerisyys lisättiin Javaan vasta versiossa 1.5. Javassa geneerisyys liittyy erityisesti kokoelmaluokkien (esimerkiksi Vector ja ArrayList) käsittelyyn. Algoritmien yleinen toteutus mahdollista periytymistä hyödyntäen. 15.11

Geneerinen ohjelmointi Geneerisesti ohjelmoiden saadaan turvallisempaa koodia: lisätyyppitarkistuksien avulla havaitaan virheitä helpommin, ohjelmassa tarvitaan vähemmän tyyppimuunnoksia ja voidaan kirjoittaa yleiskäyttöisempiä algoritmeja. Geneerisyyttä käytettäessä käännös ei onnistu, jos esimerkiksi kokoelmaa käytetään vaarallisesti. Geneerisyyden tuottamat lisätarkistukset eivät ole käytettävissä ohjelman ajon aikana. Geneerinen ohjelmointi ei ole pakollista Java-kääntäjä kuitenkin varoittaa, jos kokoelmaa käsitellään perinteisellä (vaarallisemmalla) tavalla. 15.12

Geneerinen ohjelmointi Tällä kurssilla riittää tietää kuinka voi halutessaan ottaa geneerisyyden käyttöön kulmasuljenotaatiolla. Yleisesti: LuokanNimi<TyypinNimi> missä geneerinen tyyppi voi olla vain viitetyyppiä. Esimerkiksi Vector-luokkaa voi käyttää turvallisemmin luomalla vektorin seuraavasti: // Taulukkolistaan voidaan sijoittaa kaiken tyyppisiä viitteitä. ArrayList<Object> v = new ArrayList<Object>(3, 2); // Ainoastaan Integer-tyyppiset viitteet kelpaavat. ArrayList<Integer> v = new ArrayList<Integer>(3, 2); 15.13