15. Ohjelmoinnin tekniikkaa 15.1

Samankaltaiset tiedostot
15. Ohjelmoinnin tekniikkaa 15.1

16. Javan omat luokat 16.1

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

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

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

14. Poikkeukset 14.1

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

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

9. Periytyminen Javassa 9.1

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

20. Javan omat luokat 20.1

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

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

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

4. Olio-ohjelmoinista lyhyesti 4.1

14. Poikkeukset 14.1

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

12. Monimuotoisuus 12.1

UML ja luokkien väliset suhteet

9. Periytyminen Javassa 9.1

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

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

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

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

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Rajapinta (interface)

Poikkeustenkäsittely

Mikä yhteyssuhde on?

17. Javan omat luokat 17.1

Olio-ohjelmointi Javalla

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

Taulukot. Jukka Harju, Jukka Juslin

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

Ohjelmointi 1 Taulukot ja merkkijonot

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

Olio-ohjelmointi Virhetilanteiden käsittely

17. Javan omat luokat 17.1

Java kahdessa tunnissa. Jyry Suvilehto

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

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

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

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

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

1. Omat operaatiot 1.1

Mitä poikkeuskäsittely tarkoittaa?

2. Olio-ohjelmoinista lyhyesti 2.1

Harjoitus 5 (viikko 48)

12 Mallit (Templates)

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

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

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

Tietueet. Tietueiden määrittely

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

7. Oliot ja viitteet 7.1

Sopimuspohjainen olio-ohjelmointi

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

18. Abstraktit tietotyypit 18.1

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

19. Olio-ohjelmointia Javalla 19.1

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

12. Monimuotoisuus 12.1

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

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

Oliot viestivät metodeja kutsuen

Metodien tekeminen Javalla

Listarakenne (ArrayList-luokka)

Java-kielen perusteet

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

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

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

Olio-ohjelmointi Syntaksikokoelma

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Javan perusteita. Janne Käki

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

7. Näytölle tulostaminen 7.1

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

1 Tehtävän kuvaus ja analysointi

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

Taulukoiden käsittely Javalla

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

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

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

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

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

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

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

Kielioppia: toisin kuin Javassa

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

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Luento 2. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Transkriptio:

15. Ohjelmoinnin tekniikkaa 15.1

Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 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. 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 Lasketaan kaksiulotteisen taulukon alkioiden summa eri tavoin. 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

Geneerinen ohjelmointi Geneerinen ohjelmointi (generic programming, generics) tarkoittaa muun muassa ohjelmointitekniikkaa, jossa algoritmeja toteutetaan yleisesti sitomatta niitä käsiteltävän tiedon tyyppiin. Algoritmien yleinen toteutus on mahdollista myös tyyppien monimuotoisuuden avulla, mutta tällöin on kiinnitettävä tyyppejä jo algoritmin suunnittelun aikana. Tunnetuin geneerisyyden mahdollistava mekanismi lienevät C++-kielen kaavaimet (template). Geneerisyys lisättiin Javaan vasta versiossa 1.5. Javassa geneerisyyttä tarvitaan erityisesti kokoelmaluokkien (esimerkiksi ArrayList) yhteydessä. 15.5

Geneerinen ohjelmointi Geneerisesti ohjelmoiden saadaan turvallisempaa koodia, koska lisätyyppitarkistuksien avulla havaitaan virheitä helpommin ja ohjelmassa tarvitaan vähemmän tyyppimuunnoksia. 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 luokkaa tai rajapintaa käytetään perinteisellä (vaarallisemmalla) tavalla. 15.6

Geneerinen ohjelmointi Geneerisen luokan tai rajapinnan otsikossa on määritelty kulmasuljeparin sisällä yksi tai useampia tyyppiparametreja. Tyyppiparametri E tarkoittaa kokoelman alkioiden tyyppiä. public class ArrayList<E> Tyyppiparametrille annetaan arvo kulmasuljenotaatiolla aina, kun koodissa esiintyy geneerisen tyypin tunnus. // Taulukkolistaan voidaan sijoittaa kaiken tyyppisiä viitteitä. ArrayList<Object> mitatahansa = new ArrayList<Object>(); // Ainoastaan Integer-tyyppiset viitteet kelpaavat. ArrayList<Integer> kokonaislukuja = new ArrayList<Integer>(); Tällä kurssilla riittää tietää kuinka voi ottaa geneerisyyden käyttöön, geneerisiä luokkia tai rajapintoja ei tarvitse tehdä. 15.7

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.8

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 luettelemalla ne tyypin rungossa. public enum Maa { // Maa-tyyppisellä tunnuksella voi olla jokin näistä arvoista. PATA, RISTI, HERTTA, RUUTU; } 15.9

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.10

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.11