Ohjelmoinnin peruskurssien laaja oppimäärä

Koko: px
Aloita esitys sivulta:

Download "Ohjelmoinnin peruskurssien laaja oppimäärä"

Transkriptio

1 Ohjelmoinnin peruskurssien laaja oppimäärä Luento 17: Scalan case class ja trait, sisäluokat, enumeraatiot Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä)

2 Sisältö 1 Hahmonsovitus ja case class Scalassa 2 Scalan moniperintä: trait 3 Sisäluokat Javassa ja Scalassa 4 Enumeraatiot Javassa ja Scalassa 5 Lisää suunnittelumalleja

3 Mikä case class? (SbE 7.1) case class on muuten kuin tavallinen luokka, mutta: olioita luodessa ei tarvita new:tä metodit equals, hashcode ja tostring ovat valmiina valmis tostring tulostaa konstruktorikutsun näköisen tekstin valmis equals vertaa olion rakennetta rekursiivisesti case-luokkien kanssa voi käyttää Scalan hahmonsovitusta tarkoitettu luokille, jotka kuvaavat rakenteista dataa, usein niin että rakenteessa on useita vaihtoehtoja case-luokkaa ei yleensä peritä eikä sen kenttiä muuteta luomisen jälkeen Esimerkkikoodia abstract class Expr case class Number(n: Int) extends Expr case class Sum(e1: Expr, e2: Expr) extends Expr Sum(Number(1), Number(2)) == Sum(Number(1), Number(2)) true Sum(Sum(Number(1), Number(2)), Number(3)).toString "Sum(Sum(Number(1),Number(2)),Number(3))" (SbE 7.1)

4 Hahmonsovitus Scalassa (SbE 7.2) hahmonsovituksella voi sovittaa jotakin arvoa eri hahmoihin ja samalla antaa nimiä hahmon osille (ks. luento 5) syntaksi Scalassa on yleensä: arvo match { case hahmo-1 => koodia case hahmo-2 => koodia... hahmot käydään läpi järjestyksessä (kuten ifelse-if -ketju) usein hahmoilla myös luodaan uusia paikallisia muuttujia tunnistetun rakenteen osista (esimerkki alla) tämä on Scalan vastine switchille (mutta paljon monipuolisempi) Jatkoa edelliseen esimerkkiin (SbE 7.2) def eval(e: Expr): Int = e match { case Number(n) => n case Sum(l, r) => eval(l) + eval(r) eval(sum(sum(number(1), Number(2)), Number(3))) 6

5 Hahmot ja vahdit hahmo voi olla esimerkiksi: yksittäinen vakio case 0 =>... muuttuja ja luokka case x: Int =>... case-luokan konstruktorisyntaksin näköinen rakenne case Sum(Number(x), y) =>... pelkkä muuttujannimi tai _ sopii mihin tahansa lisäksi hahmossa voi olla vahti (guard) eli tarkistettava ehto: case Number(x) if x < 0 =>... case Sum(x,y) if x == y =>... muuttujannimen käyttäminen hahmossa tekee uuden muuttujan val x = 3; val y = 5; y match { case x => x+1 6 olemassaolevia muuttujia pitää käyttää vasta vahdissa: y match { case z if z == x => z+1; case _ => 0 4

6 Esimerkki case-luokista ja hahmonsovituksesta Symbolisen lausekkeen sievennystä simplify.scala abstract class Expr { def simplifystep: Expr = this match { case Sum(Num(0), x) => x.simplify // sievennyssääntöjä case Sum(x, Num(0)) => x.simplify case Product(Num(1), x) => x.simplify case Product(x, Num(1)) => x.simplify case Product(Num(0), _) => Num(0) case Product(_, Num(0)) => Num(0) case Sum(x, y) if x == y => Product(Num(2), x.simplify) case Sum(x, y) => Sum(x.simplify, y.simplify) // rekursio case Product(x, y) => Product(x.simplify, y.simplify) case x => x def simplify: Expr = { val r = this.simplifystep if (this == r) r else r.simplify // toista kunnes ei muutu case class Num(v: Int) extends Expr case class Var(name: String) extends Expr case class Sum(e1: Expr, e2: Expr) extends Expr case class Product(e1: Expr, e2: Expr) extends Expr Product(Sum(Num(0), Var("x")), Num(5)) Product(Var("x"), Num(5))

7 catch käyttää hahmonsovitusta myös Scalan trycatch-rakenne käyttää hahmonsovitusta hahmonsovituksen kohteena on heitetty poikkeusolio (Exception-luokan perillinen) Poikkeusesimerkki (osittainen) try { // lukee esim. rivin ''12 54'' kahteen muuttujaan val s = readline() filter { " ".contains(_) val parts = s split ' ' filter {!_.isempty val y = parts(0).toint val x = parts(1).toint... catch { case e: IndexOutOfBoundsException => // hahmo println("i didn't understand.") // koodi case e: NumberFormatException => // toinen hahmo println("i didn't understand.") // toinen koodi

8 Option-luokan hahmonsovitus Scalan Option-luokkaa voi käyttää myös hahmonsovituksella Optionin perii kaksi case-luokkaa: Some(x) ja None Esimerkki Option-hahmonsovituksesta (osittainen) def findit(a: Int): Option[Int] = { var r: Option[Int] = None data foreach { item => if (found(item, a)) r = Some(item) r findit(4) match { case Some(item) =>... item... case None =>...

9 Parien ja monikoiden hahmonsovitus Scalan parit esim. (1,2) ja monikot esim. (1,2,3) on myös toteutettu case classeilla tämä syntaksi muuntuu valmiin case-luokan konstruktorikutsuksi, esim. Tuple2[Int,Int](1,2) matchin hahmoissa voi siis käyttää niitä: case (0, 0) =>... case (k:int, v:string) =>... case (x, y, z) =>... niillä on lisäksi metodit _1, _2, _3 jne., joilla monikon osia voi käsitellä val t = (4,5) t._1 + t._2 9 ja parin voi hajottaa osiin muuttujia määritellessä: val (x,y) = (3,5)

10 Sisältö 1 Hahmonsovitus ja case class Scalassa 2 Scalan moniperintä: trait 3 Sisäluokat Javassa ja Scalassa 4 Enumeraatiot Javassa ja Scalassa 5 Lisää suunnittelumalleja

11 trait rajapintana Javan rajapintojen vastine Scalassa on trait mutta traitissa voi olla myös metodien toteutuksia traitin syntaksi on sama kuin classin trait T {...:n toteuttaminen/periminen: class C extends T class C extends T with T2 (toteuttaa rajapinnat T ja T2) trait U extends T trait U extends T with T2 Rajapintaesimerkki (osittainen) trait Movable { def move(dx: Int, dy: Int) trait Selectable { def select() def deselect() class MyButton extends Selectable {... class MyWindow extends Movable with Selectable {... class MovableButton extends MyButton with Movable {...

12 Mihin muuhun traitia käytetään? koska traitissa voi olla metodien toteutuksia, sillä voi tehdä yksinkertaista moniperintää erityisesti ns. mixinejä mixin on termi luokalle, jonka perimällä toinen luokka saa lisättyä itseensä tietyn ominaisuuden osa tai kaikki metodeista on valmiina mixinissä, osan voi joutua tekemään itse periessä yleensä lisättävä ominaisuus on jonkin verran irrallinen muun luokan toiminnasta esimerkki: Scalan Ordered on trait, jossa on valmiina mm. metodit < ja <=, jotka kutsuvat compare-metodia yleensä Scalan traiteilla toteutetaan joko Java-tyylisiä rajapintoja tai pieniä mixin-luokkia

13 Miten traitin moniperintä toimii? traitin perivä luokka voi käyttää traitin metodeja suoraan ja ylikirjoittaa toteutuksia override-avainsanalla (samoin kuin luokkia periessä) ajattelutapa: metodit kopioidaan traitista luokkaan jos luokka perii useamman traitin, joissa on sama metodi: class A extends B with C with D kutsuttava metodi valitaan traiteista oikealta vasemmalle traitin sisällä super valitsee seuraavan vaihtoehdoista ajattelutapa: with X lisää sen edellä olevaan luokkaan X:n koodin, kuin koodi olisi kopioitu X:stä joten with X with Y lisää ensin X:n ja sitten Y:n trait voi myös periä luokan jolloin traitin koodista voi käyttää luokan metodeja mutta traitin voi ottaa mukaan vain tämän luokan aliluokkiin

14 Lisää traiteista Scalassa traitin voi luokan perimisen lisäksi lisätä yksittäiseen olioon konstruktoria kutsuttaessa oikeastaan tässä tehdään sisäluokka, joka perii nimetyn luokan ja toteuttaa traitin syntaksi: new-lausekkeen loppuun with trait class C {... trait T { def f() = {... val c1 = new C(...) val c2 = new C(...) with T c2.f() vielä muutama trait-yksityiskohta: abstraktia metodia toteuttaessa override ei ole pakollinen traitin konstruktorilla ei voi olla argumentteja

15 Sisältö 1 Hahmonsovitus ja case class Scalassa 2 Scalan moniperintä: trait 3 Sisäluokat Javassa ja Scalassa 4 Enumeraatiot Javassa ja Scalassa 5 Lisää suunnittelumalleja

16 Sisäluokat Sisäluokat ovat toisten luokkien luokkamäärittelyn sisällä määriteltyjä luokkia. Sisäluokkia on käytännössä neljää tyyppiä jäsenluokat (member classes) staattiset sisäluokat paikalliset sisäluokat anonyymit sisäluokat Esimerkki sisäluokan käytöstä ovat mm. java APIn HashMaprakenne joka tallentaa avain-arvo-parin Map.Entry tyyppiseen olioon. 16:54 (ei-laajan kurssin kalvo)

17 Sisäluokat Staattiset sisäluokat (Static nested classes) Muuten kuin tavallisia luokkia, mutta pystyvät lukemaan luokan staattisia kenttiä ja suorittamaan sen staattisia metodeja Eivät liity mihinkään ulompaan olioon! Joissakin tilanteissa tämä on erittäin kätevää Jäsenluokat (inner classes) Jäsenluokan olio liittyy aina tiettyyn ulomman luokan olioon. (enclosing instance) Se voi kutsua kaikkia tämän olion metodeita ja lukea sekä asettaa sen kaikkia kenttiä. Ulommalla oliolla on vastaavat oikeudet sisempään olioon. Ulomalla oliolla voi olla mikä tahansa määrä sisempiä olioita 16:54 (ei-laajan kurssin kalvo)

18 Sisäluokat Paikalliset sisäluokat (local class) Metodin tms. lohkon sisällä esiteltyä nimettyä luokkaa kutsutaan paikalliseksi sisäluokaksi. Paikallisen sisäluokan tyyppi on näkyvissä vain esittelylohkonsa sisällä. Paikallinen sisäluokka näkee ulkoluokan kentät ja metodit, mutta myös sen metodin joka sisäluokan olion loi, vakiomuuttujat Tämä estää sisäluokkaa vaikuttamasta metodin muuttujiin, jolloin vältetään mahdolliset rinnakkaisuusongelmat Vastaavasti vakiomuuttujien arvot ovat varmasti selvillä Lisäksi tämä toimii myös kun metodin suoritus on jo päättynyt Usein metodin parametrista voi tehdä vakion final-määreellä sisäluokkaa ajatellen. 16:54 (ei-laajan kurssin kalvo)

19 Paikalliset sisäluokat ja ympäröivät muuttujat miksi Javassa paikallinen sisäluokka näkee ympäröivästä metodista vain vakiomuuttujat? sisäluokan oliohan voidaan tallettaa jonnekin ja sitä voidaan käyttää ympäröivän metodin paluun jälkeen käytännössä sisäluokka saa automaattisesti kopion niistä ympäröivän metodin muuttujista, joita se käyttää final-muuttujilla kopion tekeminen ei haittaa (paitsi kuluttaa hiukan muistia), mutta muuten muuttujan kopioituminen olisi sekavaa, joten Java kieltää sen tämä rajoitus tulee virtuaalikoneen kutsupinon toteutuksesta kutsupino on tavallinen pino: metodin palatessa osa siitä poistetaan esim. Schemessä kutsupino on (ellei kääntäjä optimoi) linkitetty lista kehyksiä, joten yksittäisiä kutsupinon kehyksiä voidaan pitää tallessa myös funktion paluun jälkeen Scala kiertää tämän ongelman siirtämällä alkuperäisen var-muuttujan uuteen olioon (ns. boxed): osoitin tähän on vakio, joten sen voi rauhassa kopioida sisäluokkaan

20 Sisäluokat Anonyymit sisäluokat (anonymous inner classes) Luokille voi rakentaa lennossa aliluokkia samantapaisella menetelmällä kuin tavallisestikin. Käytännössä anonyymi sisäluokka on paikallinen luokka jolle ei anneta erillistä nimeä. Vastaavasti voidaan kirjoittaa toteutus rajapinnalle Anonyymin sisäluokan toteutus kirjoitetaan välittömästi konstruktorikutsun perään. Toteutus on kuten tavallinen luokan toteutusosa. Anonyymin sisäluokan voi tehdä kaikkialla missä voi kutsua konstruktoria Comparable Comparable vertailija vertailija = = new new Comparable(){ Comparable(){ public public int int compareto(object compareto(object o){ o){...jotain...jotain koodia... koodia... ; ; huomaa huomaa puolipiste puolipiste 16:54 (ei-laajan kurssin kalvo)

21 Sisäluokat Anonyymit sisäluokat Graafisissa käyttöliittymissä käytetään tyypillisesti paljon anonyymejä sisäluokkia. Tyypillisesti nämä ovat tapahtumankuuntelijoita Pikkuasioiden hoitoon ei kannata käyttää omaa tiedostoa Koodi on editoitavissa siellä missä sitä tarvitaan Päästään tarvittaessa käsiksi ulkoluokkaan 16:54 (ei-laajan kurssin kalvo)

22 Sisäluokat Scalassa Scalan vastine sisäluokille: objecteja ja classeja voi laittaa sisäkkäin toimivat loogisesti (muuttujat ym. leksikaalisesti sidottuja) erikoisuus: class A { class B { tekee jokaiselle A-luokan oliolle oman B-luokan (sisempi class suoritetaan konstruktorissa) Scalassa sisäluokkia käytetään vähemmän kuin Javassa monikko (tuple) korvaa Map.Entry-tyyppiset sisäluokat metodin sisäinen funktio korvaa tapahtumankuuntelijat yms. luokat (paitsi jos käyttää Java-kirjastoja, jotka haluavat luokkia eivätkä Scala-funktioita) muidenkin funktioargumenttien ja anonyymien funktioiden tilalla käytettäisiin Javassa (esim. anonyymeja) luokkia: esim. Scalan sortby ottaa funktioargumentin

23 Sisältö 1 Hahmonsovitus ja case class Scalassa 2 Scalan moniperintä: trait 3 Sisäluokat Javassa ja Scalassa 4 Enumeraatiot Javassa ja Scalassa 5 Lisää suunnittelumalleja

24 Enumeroidut tyypit Enumeroitu tyyppi, enum on tyyppi, jonka kaikki (vakio)arvot ovat tiedossa jo tyyppiä määriteltäessä enum Paiva {MAANANTAI, TIISTAI, KESKIVIIKKO...jne... enum:in arvot ovat enumeroidun tyypin staattisia kenttiä Paiva tanaan = Paiva.TORSTAI; enumeroitu tyyppi on täysin tyyppiturvallinen Paiva-tyyppinen muuttuja ei voi saada mitään muita arvoja kuin listatut vakiot ja arvon null; Enum-määrittely on pitkälti samanlainen kuin tavallisen luokan...paitsi että käytetään avainsanaa enum...ja määrittelyn pitää alkaa vakioiden listalla...ja että enumit eivät voi käyttää perintää ja ovat aina final16:54 (ei-laajan kurssin kalvo)

25 Enumeroidut tyypit Lisää enumeista... Enum:it voivat täyttää rajapintoja ja ovat oletusarvoisesti jo Serializable sekä Comparable Enumit voivat sisältää kenttiä, metodeja, sisäluokkia ja jopa enumeja Enumeilla on aina seuraavat metodit: public static EnumType[] values() Palauttaa enum-vakiot määrittelyjärjestyksen mukaisessa taulukossa public static EnumType valueof(string name) palauttaa merkkijonon nimisen enum-vakion 16:54 (ei-laajan kurssin kalvo)

26 Enumeroidut tyypit Käytännössä aiemmin nähty lista oli joukko parametrittoman konstruktorin kutsuja enum Paiva {MAANANTAI, TIISTAI, KESKIVIIKKO...jne... Jokainen enumin arvo on viittaus olioon, jonka enumin alun vakiomäärittely on luonut. Jos enumille kirjoittaa konstruktorin, voi olioden luontia ohjata tarkemmin. kts. Seuraava kalvo 16:54 (ei-laajan kurssin kalvo)

27 public public enum enum Paiva Paiva { { MAANANTAI( Viikko MAANANTAI( Viikko alkaa ), alkaa ), TIISTAI( uh ), TIISTAI( uh ), KESKIVIIKKO( Puolivälissä ), KESKIVIIKKO( Puolivälissä ), TORSTAI( Enää TORSTAI( Enää vähän ), vähän ), PERJANTAI( Kohta PERJANTAI( Kohta on on viikonloppu ), viikonloppu ), LAUANTAI( Huh ), LAUANTAI( Huh ), SUNNUNTAI( Kohta SUNNUNTAI( Kohta alkaa alkaa työ ); työ ); private private String String viesti; viesti; Paiva(String Paiva(String viesti) viesti) { { this.viesti this.viesti = = viesti; viesti; public public String String tostring() tostring() { { return return this.viesti; this.viesti; Kutsuu konstruktoria System.out.println(Paiva.MAANANTAI.toString()); System.out.println(Paiva.MAANANTAI.toString()); 16:54 (ei-laajan kurssin kalvo)

28 Enumeroidut tyypit Vakio-olioiden toimintaa voi eriyttää toisistaan sisäluokkamäärittelyä muistuttavalla syntaksilla System.out.println( System.out.println( Paiva.MAANANTAI.onkoEka()); Paiva.MAANANTAI.onkoEka()); true true System.out.println( System.out.println( Paiva.TORSTAI.onkoEka()); Paiva.TORSTAI.onkoEka()); false false public enum Paiva { public enum Paiva { MAANANTAI( Viikko alkaa ){ MAANANTAI( Viikko alkaa ){ public boolean onkoeka() { public boolean onkoeka() { return true; return true;,, TIISTAI( uh ), TIISTAI( uh ), KESKIVIIKKO( Puolivälissä ), KESKIVIIKKO( Puolivälissä ), TORSTAI( Enää vähän ), TORSTAI( Enää vähän ), PERJANTAI( Kohta on viikonloppu ), PERJANTAI( Kohta on viikonloppu ), LAUANTAI( Huh ), LAUANTAI( Huh ), SUNNUNTAI( Kohta alkaa työ ); SUNNUNTAI( Kohta alkaa työ ); private String viesti; private String viesti; Paiva(String viesti) { Paiva(String viesti) { this.viesti = viesti; this.viesti = viesti; public String tostring() { public String tostring() { return this.viesti; return this.viesti; public boolean onkoeka() { public boolean onkoeka() { return false; return false; Korvaa (overrides) vastaavan metodin enumissa Maanantain osalta 16:54 (ei-laajan kurssin kalvo)

29 Enumeroidut tyypit Muuta: Enumeja voi verrata suoraan == operaattorilla ja käyttää switch-lauseissa Koska enumeja ei voi periä, niitä ei voi laajentaa muuttamatta alkuperäistä enumeroitua tyyppiä Paiva alkupaiva =... Paiva alkupaiva =... if (alkupaiva == Paiva.TIISTAI) {... if (alkupaiva == Paiva.TIISTAI) {... switch (alkupaiva) { switch (alkupaiva) { case MAANANTAI: case MAANANTAI: System.out.println( MA ); System.out.println( MA ); break; break; case TIISTAI : case TIISTAI : Este jatkokehitykselle (täytyy koskea olemassaolevaan luokkaan perinnän sijaan) 16:54 (ei-laajan kurssin kalvo)

30 Enumeraatiot Scalassa Esimerkki enumeraatioista case classeilla sealed abstract class Paiva case object Maanantai extends Paiva case object Tiistai extends Paiva... p match { case Maanantai =>...; case Tiistai =>...;... Scalassa ei ole Javan enumia sen sijaan voi käyttää argumentittomia case classeja case object on tehokkaampi kuin case class (enumeraatioarvon esittämiseen käytetään aina samaa oliota) avainsana sealed kertoo, että kaikki luokan perijät on määritelty samassa tiedostossa matchissa saa virheilmoituksen, jos unohtaa jonkin tapauksista toinen tapa on periä Scalan Enumeration-luokka silloin em. virheilmoitusta ei saa mutta Enumeration-luokassa on kokoelmarajapinnan metodeita (esim. foreach), joista voi olla apua

31 Sisältö 1 Hahmonsovitus ja case class Scalassa 2 Scalan moniperintä: trait 3 Sisäluokat Javassa ja Scalassa 4 Enumeraatiot Javassa ja Scalassa 5 Lisää suunnittelumalleja

32 Decorator Mahdollistaa lisäominaisuuksien lisäämisen olioon lennossa, muuttamatta alkuperäistä luokkaa. Perusidea on, että dekoraattori liittää johonkin alkuperäiseen toimintoon oman lisänsä ja pyytää sitten koristelemaansa oliota (oli se sitten dekoraattori tai varsinainen olio) suorittamaan alkuperäisen toiminnon. Lopulta varsinainenkin operaatio tulee tehtyä Koska sekä dekoraattorit että varsinainen koristeltava olio täyttävät saman rajapinnan, ovat dekoraattorit käyttävälle luokalle näkymättömiä. Reunustaja Värittäjä TodellinenOlio Käyttävä Luokka +operaatio() +omatoiminto() +operaatio() +omatoiminto() +operaatio() 10:03 (ei-laajan kurssin kalvo)

33 Decorator Edellisen esimerkin UML-kaavio Käyttävä Luokka TodellinenKomponentti +operaatio() <<interface>> Komponentti +operaatio( ) <<abstract>> Dekoraattori koristettava +operaatio() +omatoiminto() operaatio(){ this.omatoiminto(); koristettava.operaatio(); Koristelija Värittäjä Reunustaja 10:03 (ei-laajan kurssin kalvo)

34 Decorator ja trait eräs Scalan traitien käyttötarkoitus on juuri luokan koristelu ylimääräisillä ominaisuuksilla traiteilla siis voi tehdä Decorator-suunnittelumallin yksinkertaisemmin dekoraattoriluokasta tehdäänkin trait edellä ollutta koristettava.operaatio()-kutsua vastaisi traitin koodin sisällä tehtävä super.operaatio()

35 Strategy Oletetaan että on olemassa joukko erilaisia tapoja ratkaista jokin laskennallinen ongelma Strategy-mallissa kirjoitetaan ensin ratkaisulle yleinen toteutus jossa vaihtoehtoiset kohdat on ulkoistettu muiden luokkien tehtäväksi Vaihtoehtoisille kohdille on kirjoitetaan rajapinta jonka kautta yleinen toteutus käyttää ulkoistettuja osia. voidaan toteuttaa erilaisia ratkaisutapoja jotka toteuttavat k.o. rajapinnan kautta jonkin osan ratkaisua, mutta ei tarvitse kirjoittaa koko koodia Nyt ratkaisutapaa voidaan haluttaessa helposti muuttaa esim. tekstin jakaminen riveihin vaihtelee kielen mukaan esim. alkioiden vertailu keskenään järjestettäessä 10:03 (ei-laajan kurssin kalvo)

36 Strategy import java.util.*; public class StrategyExample{ public static void main(string[] args){ Arrays.sort(args, String.CASE_INSENSITIVE_ORDER); for (int i=0; i< args.length; i++) System.out.println(args[i]); /* Vaihdetaan järjestämisstrategiaksi toisen * merkin mukaan järjestäminen */ Arrays.sort(args, new Comparator(){ public int compare(object one, Object other){ return ((String)one).charAt(1)- ((String)other).charAt(1); public boolean equals(object other){ return this.equals(other); ); System.out.println(); for (int i=0; i< args.length; i++) System.out.println(args[i]); (ei-laajan kurssin kalvo) Tässä esimerkissä järjestämisalgoritmi on kirjoitettu Arraysluokkaan. Ulkoistettu osa algoritmia on vertailu, jonka koodari voi asettaa antamalla haluamansa Comparator-olion. Esimerkissä luodaan Comparator joka järjestää merkkijonot niiden toisen merkin mukaan. 10:03

37 Template Method Template method toimii muuten kuin Strategy, mutta puuttuvat osat algoritmia on kirjoitettu abstrakteiksi metodeiksi Metodit toteutetaan aliluokassa jonka jälkeen algoritmi on käyttökelpoinen 10:03 (ei-laajan kurssin kalvo)

38 Strategy ja Template Method funktioargumenteilla edelliset kaksi suunnittelumallia muistuttavat kovasti funktioargumenttien käyttöä abstraktioiden tekemisessä tosin molemmissa luokan avulla voidaan yhdistää useampi funktioargumentti yhteen kokonaisuuteen Strategy-idean voi toki yleistää esim. moduuleihin (useita vaihtoehtoisia moduuleja, joissa on sama rajapinta)

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Rajapinnat Java-kieli ei tue luokkien moniperintää. Jokaisella luokalla voi olla vain yksi välitön yliluokka. Toisinaan olisi

Lisätiedot

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

Luento 2. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä Luento 2 T-106.1240 Ohjelmoinnin jatkokurssi T1 & T-106.1243 Ohjelmoinnin jatkokurssi L1 Luennoitsija: Otto Seppälä Kurssin WWW: http://www.cs.hut.fi/opinnot/t-106.1240/s2007 Abstrakti luokka Abstrakti

Lisätiedot

Java kahdessa tunnissa. Jyry Suvilehto

Java kahdessa tunnissa. Jyry Suvilehto Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

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

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 13: Isomman ohjelman suunnittelusta, suunnittelumalleja Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä) 3. 2. 2011 Sisältö 1 Top-down-

Lisätiedot

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

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004 Vertailulauseet Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra == yhtäsuuruus!= erisuuruus < pienempi suurempi >= suurempi tai yhtäsuuri Esimerkkejä: int i=7; int j=10;

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 5: Sijoituslause, SICP-oliot, tietorakenteen muuttaminen (mm. SICP 33.1.3, 3.33.3.2) Riku Saikkonen 6. 11. 2012 Sisältö 1 Muuttujan arvon muuttaminen:

Lisätiedot

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int

Lisätiedot

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

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.

Lisätiedot

16. Javan omat luokat 16.1

16. Javan omat luokat 16.1 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

Lisätiedot

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

812341A Olio-ohjelmointi Peruskäsitteet jatkoa 812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää

Lisätiedot

Rajapinta (interface)

Rajapinta (interface) 1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä

Lisätiedot

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

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. 1 Luokka Murtoluku uudelleen Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. Sievennettäessä tarvitaan osoittajan ja nimittäjän suurin yhteinen tekijä (syt).

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 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:

Lisätiedot

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

Luento 4. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä Luento 4 T-106.1240 Ohjelmoinnin jatkokurssi T1 & T-106.1243 Ohjelmoinnin jatkokurssi L1 Luennoitsija: Otto Seppälä Kurssin WWW: http://www.cs.hut.fi/opinnot/t-106.1240/s2007 Projektiaiheista Jos et ole

Lisätiedot

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Mikä yhteyssuhde on?

Mikä yhteyssuhde on? 1 Yhteyssuhde Mikä yhteyssuhde on? Yhteyssuhde Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä yhteyssuhde on? Tili - : String - : double * 1 Asiakas - hetu: String - : String

Lisätiedot

Listarakenne (ArrayList-luokka)

Listarakenne (ArrayList-luokka) Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

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

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

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

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 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

Lisätiedot

Metodien tekeminen Javalla

Metodien tekeminen Javalla 1 Metodien tekeminen Javalla Mikä metodi on? Metodin syntaksi Metodi ja sen kutsuminen Parametreista Merkkijonot ja metodi Taulukot ja metodi 1 Mikä metodi on? Metodilla toteutetaan luokkaan toiminnallisuutta.

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

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

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Kompositio Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä kompositio on? Tili - : String - : double 1 1 Kayttoraja

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

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

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance) Sisällys JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys Periytyminen (inheritance) Näkyvyys (visibility) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E. Hyvönen: Java Osa

Lisätiedot

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

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

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

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Poikkeukset Poikkeuksella tarkoitetaan yllättävää ajonaikaista tilannetta, joka

Lisätiedot

11. Javan valintarakenteet 11.1

11. Javan valintarakenteet 11.1 11. Javan valintarakenteet 11.1 Sisällys If- ja if-else-lauseet. Orpo else. Valintaa toisin: switch-lause. 11.2 If-lause Merkitään varatulla sanalla if. Kuvaa yksisuuntaisen päätöksen: rakenteen lauseet

Lisätiedot

Javan perusteita. Janne Käki

Javan perusteita. Janne Käki Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).

Lisätiedot

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006 TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa

Lisätiedot

7. Oliot ja viitteet 7.1

7. Oliot ja viitteet 7.1 7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin

Lisätiedot

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

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi. 11. Rajapinnat 11.1 Sisällys Johdanto. Abstrakti luokka vai rajapinta? Rajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen

Lisätiedot

TIETORAKENTEET JA ALGORITMIT

TIETORAKENTEET JA ALGORITMIT TIETORAKENTEET JA ALGORITMIT Timo Harju 1999-2004 1 typedef link List; /* Vaihtoehtoisia nimiä */ typedef link Stack; /* nodepointterille */ typedef link Queue typedef struct node Node; /* itse nodelle

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

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

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3 16. Lohkot 16.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.2 Lohkot Kaarisulut

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 4: Symbolit, derivojaesimerkki, kierroksen 1 ratkaisut (mm. SICP 2.32.3.2) Riku Saikkonen 1. 11. 2011 Sisältö 1 Symbolit ja sulkulausekkeet 2 Lisää Schemestä:

Lisätiedot

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmointi 2 / 2010 Välikoe / 26.3 Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa

Lisätiedot

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

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä LUOKAN MÄÄRITTELY Luokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion muodostimet ja luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Olion kopioiminen

Lisätiedot

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

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Olioiden toteuttaminen Riku Saikkonen 28. 11. 2011 Sisältö 1 Miten oliot ja metodikutsut toimivat? 2 Oliot Minkä luokan metodia kutsutaan? Python-esimerkki

Lisätiedot

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

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3 15. Lohkot 15.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.2 Lohkot Aaltosulkeet

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 8: Lisää suunnittelumalleja, suorituskyvystä ja laadusta Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 21. 3. 2012 Sisältö 1 Suunnittelumalleja:

Lisätiedot

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti Rinnakkaisohjelmointi kurssi Opintopiiri työskentelyn raportti Opintopiiri: Heikki Karimo, Jesse Paakkari ja Keijo Karhu Päiväys: 15.12.2006 Ohjelmointitehtävä C i C i : Säikeet ja kriittisen vaiheen kontrollointi

Lisätiedot

5/20: Algoritmirakenteita III

5/20: Algoritmirakenteita III Ohjelmointi 1 / syksy 2007 5/20: Algoritmirakenteita III Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/17 Tämän

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 10: Paikalliset muuttujat, kirjan tulkki kokonaisuutena (mm. SICP 3.2, 4.1.24.1.6) Riku Saikkonen 22. 11. 2012 Sisältö 1 Ympäristöt: miten paikalliset

Lisätiedot

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

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Sisällys. 11. Rajapinnat. Johdanto. Johdanto Sisällys 11. ajapinnat. bstrakti luokka vai rajapinta? ajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen avulla.

Lisätiedot

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

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki Tehtävä 1 Koherentti selitys Koherentti esimerkki ½p ½p Tehtävä 2 Täysiin pisteisiin edellytetään pelaajien tulostamista esimerkin järjestyksessä. Jos ohjelmasi tulostaa pelaajat jossain muussa järjestyksessä,

Lisätiedot

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

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) 1(37) PERIYTYMINEN (inheritance) YLILUOKKA (superclass) ALILUOKKA (subclass) A) on käytännöllinen ohjelmointitekniikka = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) B) on käsitteiden

Lisätiedot

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen Sisällys 6. Metodit Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit).. Metodien ja muun luokan sisällön järjestäminen. 6.1 6.2 Oliot viestivät metodeja kutsuen Oliot viestivät

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Keskeneräinen luento 3: Listat (mm. SICP 22.2.3) Riku Saikkonen 31. 10. 2011 Sisältö 1 Linkitetyt listat 2 Linkitetyt listat (SICP 2.1.1, 2.2.1) funktionaalinen

Lisätiedot

Sisällys. 15. Lohkot. Lohkot. Lohkot

Sisällys. 15. Lohkot. Lohkot. Lohkot Sisällys 15. Lohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.1 15.2 Lohkot Aaltosulkeet

Lisätiedot

Groovy. Niko Jäntti Jesper Haapalinna Group 31

Groovy. Niko Jäntti Jesper Haapalinna Group 31 Groovy Niko Jäntti Jesper Haapalinna Group 31 Johdanto Groovy on Apachen kehittämä Javaan perustuva dynaaminen oliopohjainen ohjelmointikieli. Kielen kehitys alkoi vuonna 2003, versio 1.0 julkaistiin 2007

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet 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.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

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

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 6. Metodit 6.1 Sisällys Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 Oliot viestivät metodeja kutsuen Olio-ohjelmoinnissa ohjelma

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

Lisätiedot

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

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public) Tietorakenteet JAVA-OHJELMOINTI Osa 5: Tietorakenteita Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto Olioita ja tietoja voidaan organisoida määrämuotoisiksi tietorakenteiksi Hyödyllisiä

Lisätiedot

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

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 6. Tiedostot 6.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöte- ja tulostusvirtojen avulla. Tiedostoja voidaan

Lisätiedot

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

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet Metodit Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin return; -lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua Metodi voi palauttaa alkeistyypin tai olion Tällöin

Lisätiedot

11. Javan valintarakenteet 11.1

11. Javan valintarakenteet 11.1 11. Javan valintarakenteet 11.1 Sisällys If- ja if--lauseet. Orpo. Valintaa toisin: switch-lause. 11.2 Valintarakenteet Valintarakenteilla ilmaistaan formaalisti, kuinka algoritmin suoritus voi haarautua

Lisätiedot

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

Java-API, rajapinnat, poikkeukset, UML,... Java-API, rajapinnat, r poikkeukset, UML,... Janne Käki 12.10.2006 Keskeisimmät Java-API:n pakkaukset API = Application Programming Interface eli sovellusohjelmointirajapinta (!) pakkaus (engl. package)

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 8: Pienen ohjelmointikielen tulkki (ohjelmoitava laskin) (mm. SICP 4-4.1.5 osin) Riku Saikkonen 15. 11. 2012 Sisältö 1 Nelilaskintulkki, globaalit muuttujat

Lisätiedot

7/20: Paketti kasassa ensimmäistä kertaa

7/20: Paketti kasassa ensimmäistä kertaa Ohjelmointi 1 / syksy 2007 7/20: Paketti kasassa ensimmäistä kertaa Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Tulkin muokkaaminen, sisäiset määrittelyt, makrot (mm. SICP 3.2.4, 4-4.1.6) Riku Saikkonen 29. 11. 2012 Sisältö 1 Kirjan tulkin muokkaaminen 2 Yksityiskohta:

Lisätiedot

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: SICP kohdat 22.2.3 Riku Saikkonen 2. 11. 2010 Sisältö 1 Linkitetyt listat 2 Listaoperaatioita 3 Listarakenteet 4 Gambit-C:n Scheme-debuggeri Linkitetyt

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

T Henkilökohtainen harjoitus: FASTAXON

T Henkilökohtainen harjoitus: FASTAXON T-76.115 Henkilökohtainen harjoitus: FASTAXON Suunnittelumallit Group: Muuntaja Pentti Vänskä 52572W 2 1. Toteutus Tämä henkilökohtainen harjoitustyö käsitteli suunnittelumallien (Design Patterns) käyttöä

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

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

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2 26. Tiedostot 26.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöte- ja tulostusvirtojen avulla. Tiedostoja

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä

Lisätiedot

20. Javan omat luokat 20.1

20. Javan omat luokat 20.1 20. Javan omat luokat 20.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

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

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang Sisällys 20. Javan omat luokat Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.1 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

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

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

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

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

Lisätiedot

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

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.

Lisätiedot