Ohjelmoinnin peruskurssien laaja oppimäärä
|
|
- Harri Manninen
- 7 vuotta sitten
- Katselukertoja:
Transkriptio
1 Ohjelmoinnin peruskurssien laaja oppimäärä Luento 16: Generics Javassa ja Scalassa Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä)
2 Sisältö 1 Generics Javassa ja Scalassa 2 Generics-yksityiskohtia 3 Taustaa geneerisistä tyypeistä
3 Generics Java-kielen versiossa 5 kieleen lisättiin tuki geneerisille tyypeille Mahdollistavat luokan tai metodin sisältämien muuttujien ja paluuarvojen tyypin määrittämisen tapauskohtaisesti käyttämällä tyyppiparametreja Vähentävät tarvetta suorittaa tyyppipakotusta luokan ulkopuolella Esim Javan version 4 ArrayList säilöi vain Object-viittauksia jotka piti tyyppipakottaa rakenteesta otettaessa Vähentävät samalla ajonaikaisia tyyppipakotusvirheitä (ClassCastException) koska generics:it hoidetaan jo käännösvaiheessa 16:54
4 Generics Allaoleva rivi luo ArrayList:in joka säilöö String-olioita ArrayList<String> sanalista ArrayList<String>(); Tässä String on tyyppiparametrille annettava arvo Määritelmästä johtuen sanalistan add-metodi hyväksyy vain Stringluokan olioita parametrikseen aliluokan tai alirajapinnankin oliot kelpaavat. String:illä vaan ei ole aliluokkia eikä sitä voi periä koska luokka on final. ArrayList<String> ArrayList<String> sanalista sanalista ArrayList<String>(); ArrayList<String>(); sanalista.add( Hei sanalista.add( Hei vaan! ); vaan! ); String String sana sana sanalista.get(0); sanalista.get(0); 16:54
5 Geneerinen Luokka Seuraava pätee sekä luokille, että rajapinnoille,mutta yksinkertaisuuden vuoksi puhumme seuraavassa vain luokista Geneerisessä luokassa on aina yksi tai useampi tyyppiparametri Tyyppiparametrille annetaan jokin muuttujanimi, joka korvataan käännösaikaisesti oikeilla tyypeilla (esimerkissämme tämän tyyppimuuttujan nimi on OmaTyyppi) Luokkamäärittelyn yhteydessä tyyppiparametri esitellään < ja >- merkkien välissä heti luokan nimen jälkeen Muuuttujan kautta käytettävää tyyppiä voi tämän jälkeen käyttää luokassa esim. muuttujien ja paluuarvojen tyyppinä class class OmaLista<OmaTyyppi> OmaLista<OmaTyyppi> OmaTyyppi OmaTyyppi vaihdaalkio(omatyyppi vaihdaalkio(omatyyppi uusialkio) uusialkio) jne. jne. 16:54
6 Esimerkki Luokka jolla voi tallentaa millaisen tahansa olioparin. class class Pair Pair <FirstType, <FirstType, SecondType> SecondType> Pair(FirstType Pair(FirstType first, first, SecondType SecondType second) second) this.first this.first first; first; this.second this.second second; second; FirstType FirstType getfirst() getfirst() return return this.first; this.first; SecondType SecondType getsecond() getsecond() return return this.second; this.second; 16:54
7 Sama Scalalla edellisten kalvojen asiat toimivat samalla lailla Scalassakin syntaksiero: Javassa <>, Scalassa [ ] Aiempi ArrayList-esimerkki Scalalla import scala.collection.mutable.arraybuffer val sanalista ArrayBuffer[String] // tai: val sanalista: ArrayBuffer[String] ArrayBuffer sanalista + "Hei vaan!" sanalista ++ List("foo", "bar") val sana sanalista(0) // tai funktionaalisesti (konstruktorissa ei :tä eikä tarvita tyyppiä): val s1 Vector() // tai Vector[String]() tai List() val s2 s1 :+ "Hei vaan" val s3 s2 ++ List("foo", "bar") val sana s3(0) Aiempi Pair-esimerkki Scalalla class Pair[A, B](first: A, second: B) def getfirst(): A first // (Scala tekee vastaavat metodit def getsecond(): B second // automaattisestikin) Pair(1, "foo").getsecond() "foo"
8 Ongelma... import import java.util.arraylist; java.util.arraylist; class class PersonnelGroup PersonnelGroup <JobType> <JobType> private private ArrayList<JobType> ArrayList<JobType> people; people; PersonnelGroup() PersonnelGroup() this.people this.people ArrayList<JobType>(); ArrayList<JobType>(); addperson( addperson( JobType JobType Employee Employee ) ) people.add( people.add( Employee Employee ); ); printallnames() printallnames() for for (JobType (JobType person person : : people) people) System.out.println( System.out.println( person.getname() person.getname() ); ); 16:54
9 Ongelma... import import java.util.arraylist; java.util.arraylist; class class PersonnelGroup PersonnelGroup <JobType> <JobType> private private ArrayList<JobType> ArrayList<JobType> people; people; PersonnelGroup() PersonnelGroup() this.people this.people ArrayList<JobType>(); ArrayList<JobType>(); addperson( addperson( JobType JobType Employee Employee ) ) people.add( people.add( Employee Employee ); ); Ei toimi. Mistä tiedettäisiin että printallnames() printallnames() JobTypellä on metodi for for (JobType (JobType person person : : people) people) getname? System.out.println( System.out.println( person.getname() person.getname() ); ); 16:54
10 Geneerinen Luokka Tyyppiparametrille voi myös määrätä vaatimuksia <Tyyppi extends Tulostettava> Tyyppiparametriksi Tyyppi saa antaa vain : rajapinnan Tulostettava täyttäviä luokkia tai luokan Tulostettava aliluokkia <Tyyppi extends Tulostettava & Tallennettava> Tyyppiparametriksi Tyyppi saa antaa vain molemmat ehdot täyttäviä tyyppejä Tämä mahdollistaa rajoitteen määrittämien metodien kutsumisen Tyyppiparametrin tyyppisille olioille 16:54
11 import import java.util.arraylist; java.util.arraylist; class class PersonnelGroup PersonnelGroup <JobType <JobType extends extends BasicEmployee> BasicEmployee> private private ArrayList<JobType> ArrayList<JobType> people; people; PersonnelGroup() PersonnelGroup() this.people this.people ArrayList<JobType>(); ArrayList<JobType>(); printallnames() printallnames() for for (JobType (JobType person person : : people) people) System.out.println( System.out.println( person.getname() person.getname() ); ); addperson( addperson( JobType JobType Employee class BasicEmployee Employee ) ) class BasicEmployee private String name; people.add( people.add( Employee Employee ); private String name; ); BasicEmployee(String name) BasicEmployee(String name) this.name name; this.name name; String getname() String getname() return this.name; return this.name; 16:54
12 Geneerinen metodi Myös metodimäärittely voi olla geneerinen (riippumatta luokan geneerisyydestä) Tyyppiparametri esitellään puumerkissä ennen paluuarvon tyyppiä static <Tyyppi> ArrayList<Tyyppi> jokatoinen( Tyyppi[] taulu ) static <Tyyppi> ArrayList<Tyyppi> jokatoinen( Tyyppi[] taulu ) ArrayList<Tyyppi> uusitaulu ArrayList<Tyyppi>(); ArrayList<Tyyppi> uusitaulu ArrayList<Tyyppi>(); for (int i 0; i < taulu.length / 2; i++) for (int i 0; i < taulu.length / 2; i++) uusitaulu.add(taulu[i * 2]); uusitaulu.add(taulu[i * 2]); return uusitaulu; return uusitaulu; Metodia kutsuessa tyyppiparametria ei kuitenkaan erikseen anneta (kuten geneeristen luokkien kanssa) vaan se päätellään metodin parametrien tyypeistä 16:54 String[] taulukko Aa, Bb, Cc, Dd, Ee ; String[] taulukko Aa, Bb, Cc, Dd, Ee ; ArrayList<String> lista jokatoinen(taulukko); ArrayList<String> lista jokatoinen(taulukko);
13 Sama Scalalla Scalassakin tyyppiparametreja voi rajoittaa syntaksi on [A <: B] eikä <A extends B> myös geneeriset metodit toimivat Scalassa samaan tapaan kuin Javassa: tyyppiparametrit kerrotaan ennen parametrilistaa Aiempi jokatoinen-esimerkki Scalalla import scala.collection.mutable.arraybuffer def jokatoinen[a](taulu: Array[A]): ArrayBuffer[A] val uusi ArrayBuffer[A] for (i <- Range(0, taulu.length/2)) uusi + taulu(i*2) uusi jokatoinen(array(6,5,4,3,2,1)) ArrayBuffer(6,4,2) // tai Scala-maisemmin eli funktionaalisesti: def everyother[a](l: Seq[A]) l.indices.by(2).map l(_) everyother(array(6,5,4,3,2,1)) Vector(6,4,2) everyother(list(6,5,4,3,2,1)) Vector(6,4,2) everyother(arraybuffer(6,5,4,3,2,1)) Vector(6,4,2)
14 Sisältö 1 Generics Javassa ja Scalassa 2 Generics-yksityiskohtia 3 Taustaa geneerisistä tyypeistä
15 Mitä tyyppiparametrilla ei voi tehdä? Tyyppiparametrilla ei voi suoraan luoda olioita tai taulukoita Esim. edellisessä esimerkissä palautettiin lista olioita joiden tyyppi seurasi suoraan tyyppiparametrista. Vastaavaa taulukkoversiota ei olisi voinut tehdä seuraavasti : static <Tyyppi> Tyyppi[] jokatoinen( Tyyppi[] taulu ) static <Tyyppi> Tyyppi[] jokatoinen( Tyyppi[] taulu ) Tyyppi[] uusitaulu Tyyppi[ taulu.length / 2 ]; Tyyppi[] uusitaulu Tyyppi[ taulu.length / 2 ]; Jos tällainen tyyppiparametrin tyyppisen taulukon palauttava metodi olisi haluttu tehdä, joudutaan käyttämään Java:n reflection API:a ja luomaan tarvittavat oliot hieman hankalammin. (reflektiolla on lisäksi myös muita vaikutuksia) static <Tyyppi> Tyyppi[] jokatoinen2( Tyyppi[] taulu ) static <Tyyppi> Tyyppi[] jokatoinen2( Tyyppi[] taulu ) Tyyppi[] uusitaulu Tyyppi[] uusitaulu (Tyyppi[]) java.lang.reflect.array.instance( // Tämä tyyppipakotus (Tyyppi[]) java.lang.reflect.array.instance( // Tämä tyyppipakotus taulu.getclass().getcomponenttype(), // aiheuttaa warningin, taulu.getclass().getcomponenttype(), // aiheuttaa warningin, taulu.length / 2); // mutta koodissa ei ole taulu.length / 2); // mutta koodissa ei ole // virhettä // virhettä for (int i 0; i < taulu.length / 2; i++) for (int i 0; i < taulu.length / 2; i++) uusitaulu[ i ] taulu[ i * 2 ]; uusitaulu[ i ] taulu[ i * 2 ]; return uusitaulu; return uusitaulu; 16:54
16 Scalan tapa korjata edellinen rajoitus se, ettei taulukoita voi tehdä tyyppiparametrista, johtuu Javan taulukkotyypin rajoituksista muilla tyypeillä (kuten ArrayList ja Scalan ArrayBuffer edellä) ongelmaa ei ole Scalassa myös Java-taulukoita Array voi tehdä tyyppiparametrista mutta kääntäjää auttamaan tarvitaan ylimääräinen yksityiskohta tämä liittyy Java-virtuaalikoneen geneeristen tyyppien puutteisiin tyyppiparametrin syntaksi : ClassManifest lisää funktiolle ylimääräisen piilotetun (implicit) argumentin, joka välittää puuttuvan tyyppi-informaation uusia tyyppiparametrin mukaisia olioita ei Scalassakaan voi luoda Esimerkki mistä kääntäjä tietäisi konstruktorin argumenttien tyypit? def jokatoinen[a : ClassManifest](taulu: Array[A]): Array[A] val uusi Array[A](taulu.length/2) for (i <- Range(0, taulu.length/2)) uusi(i) taulu(i*2) uusi
17 Vaatimuksia tyyppiparametrin arvolle java.util.comparable-rajapinnan avulla voi tehdä paljon alkioiden järjestykseen liittyvää (järjestämistä, hakuja, jne) Rajapinta on yksinkertainen sen täyttävä luokka lupaa hyväksyä compare-metodin parametriksi annetun tyyppiparametrin tyyppisiä olioita. interface interface Comparable Comparable <T> <T> int int compareto(t compareto(t other); other); Voidaan siis toteuttaa luokka OmaLuku: class class Omaluku Omaluku implements implements Comparable Comparable <Omaluku> <Omaluku> int int compareto(omaluku compareto(omaluku other) other)...jotain...jotain Näin määriteltynä OmaLuku-luokan olioita aan siis verrata 16:54 toisiin luokan OmaLuku olioihin.
18 Vaatimuksia tyyppiparametrin arvolle OmaLuku olisi voinut kuitenkin täyttää jonkin muun rajapinnan, vaikka Comparable<String> jolloin sen olioita olisi pitänyt a verrata merkkijonoihin. (ei ehkä niin kovin hyödyllistä) esim. Järjestämisalgoritmeille on olennaista että olioita aan verrata toisiin saman luokan olioihin. Tällainenkin vaatimus aan kirjoittaa Vaatimukset tyypille tulevat vasta luokan olioita käyttävältä koodilta, vaikkapa järjestämismetodilta. (allaoleva metodimäärittely luokassa Collections) <T <T extends extends Comparable<T>> Comparable<T>> sort(list<t> sort(list<t> list) list)...eli sort-metodi suostuu ottamaan listoja joiden alkiot ovat verrattavissa itseensä. Edellisen kalvon OmaLuku-luokka täyttää tämän vaatimuksen joten järjestäminen onnistuu helposti ArrayList<Omaluku> ArrayList<Omaluku> lista lista java.util.collections.sort(lista); java.util.collections.sort(lista); // // Järjestää Järjestää listan listan alkiot alkiot // // compare-metodia compare-metodia käyttäen. käyttäen. 16:54
19 Sama Scalassa vaatimukset tyyppiparametreille toimivat Scalassa kuten Javassa syntaksi esim. def f[a <: Foo[A]](x: A) x Scalan vastineet Comparablelle ovat Ordered ja Ordering Ordered on lähempi vastine, mutta Ordering suositeltavampi: Orderingilla voi määritellä samalle luokalle useamman järjestyksen Esimerkki oman luokan järjestyksen määrittelemisestä case class MyPair[A <% Ordered[A], B <% Ordered[B]](first: A, second: B) extends Ordered[MyPair[A,B]] def compare(that: MyPair[A, B]): Int val f this.first.compare(that.first) if (f 0) this.second.compare(that.second) else f MyPair(1,"foo") < MyPair(1,"bar") false esimerkissä oleva <% eli view bound on kuten <:, mutta kelpuuttaa myös tyypit, jotka voi implisiittisesti muuntaa Ordered[A]-rajapinnan toteuttavaksi tyypiksi käytännössä primitiivityypit, esim. Int ja String, ovat tällaisia
20 WildCard List<?> List<?> lista; lista; lista lista ArrayList<String>(); ArrayList<String>(); lista lista ArrayList<Integer>(); ArrayList<Integer>(); lista lista ArrayList<IhanMikaVaanTyyppi>(); ArrayList<IhanMikaVaanTyyppi>(); Wildcard? Tässä? on ns. wildcard tyyppiparametri, jota ei nimetä Sen avulla voi tehdä mm. ylläolevan viittauksen listaan jonka alkiot voivat olla mitä tahansa tyyppiä. Ikävä kyllä List<?> listaan ei voi lisätä mikään tyyppisiä alkioita Listan alkioiden tyyppi ei ole tiedossa joten mitään metodia jonka parametrin tyyppi on tyyppiparametrin määrittämä ei voi kutsua. Alkioiden hakukin on vähän hankalampaa Esim get:in paluuarvon tyyppiä ei tiedetä, joten alkioita voi sijoittaa vain Object-tyyppisiin muuttujiin ilman tyyppipakotusta. 16:54
21 WildCard tallennalistaan( tallennalistaan( List List <? <? super super String> String> lista, lista, String String alkio) alkio) super : Wildcard tulee hyödyllisemmäksi kun sitä rajoitetaan Ylläolevan metodin parametrina on lista johon voi tallentaa merkkijonoja sekä String:in yliluokan (Object) olioita. Käytännössä siis mikä tahansa lista johon aan varmasti tallentaa merkkijonoja. (String:inhän saa tallentaa Object-tyyppiseen muuttujaan) super-määre toimii vain wildcardeille. Sen yhteydessä ei voi käyttää tyyppiparametria tyyliin Tyyppi super String extends : Aiemmin nähty extends toimii myös wildcardeille tulostalista( List <? extends Tulostettava> lista) Lista josta otettavat alkiot ovat Tulostettava-luokan/rajapinnan instansseja kaannalista( List<?> kaannatama) Rajoittamaton wildcard - Lista mitä vain tyyppiä Käytännössä (lähes) sama kuin List<? extends Object> 16:54
22 Entä Scala-vastineet? Javan?:n vastine Scalassa on _ esim. def f(a: List[_]) a Javan tyyppien super:n vastine on >: (vrt. <: eli extends) mutta Scalassa kannattaa wildcardin sijasta usein tehdä tyyppiparametrin varianssiannotaatio + tai - class Stack1[A]... class Stack2[+A]... class Stack3[-A]... Stack1[String]:llä ja Stack1[Object]:lla ei ole alityyppisuhdetta (alityypitys on A:n suhteen invarianttia) Stack2[String] <: Stack2[Object], sillä String <: Object (kovarianttia) Stack3[Object] <: Stack3[String] (kontravarianttia) lisätietoja: SbE 8.2 näitä tarvinnee käytännössä melko harvoin...
23 Sisältö 1 Generics Javassa ja Scalassa 2 Generics-yksityiskohtia 3 Taustaa geneerisistä tyypeistä
24 Java-ongelma: tyyppien poistaminen käännetyssä Javan tavukoodissa ei ole tietoa tyyppiparametreista tieto poistetaan käännösaikana (type erasure) samalla Java-kääntäjä tuottaa tavukoodiin ylimääräisiä tyyppipakotuksia tyyppiparametreja käytettäessä Java-virtuaalikone vaatii pakotuksen aiheuttaman ajonaikaisen tyyppitarkistuksen, vaikka kääntäjä tietää että se aina onnistuu joskus ongelma näkyy koodissakin: esim. instanceof ei pysty tunnistamaan tyyppiparametria pohjimmiltaan ongelma johtuu siitä, että geneeristen tyyppien tuki lisättiin vasta Java 5:een eli kieleen, jossa ei aiemmin ollut tukea niille samasta syystä Javan taulukoissa on edellä mainittuja rajoituksia (ne ovat peräisin aiemmista Javan versioista) Java 5 halusi olla yhteensopiva aiempien virtuaalikoneiden kanssa (mutta tämä ei kuitenkaan muista syistä lopulta toteutunut) Scalassa on enimmäkseen sama ongelma (sama virtuaalikone) lisätietoja:
25 Geneeristen tyyppien toteuttamisesta miten geneerisiä tyyppejä käyttävä koodi ajon aikana toimii? kaksi perusratkaisua: 1 geneerisestä luokasta ja metodista on vain yksi toteutus: koodi ottaa ajon aikana tarvittaessa selville, mitä konkreettisia tyyppejä se käsittelee (mm. Java, Scala) 2 käännetään etukäteen oma koodi jokaiselle ohjelmassa käytetylle tyyppiparametrin arvolle (mm. C++) jälkimmäisellä tavalla koodista saadaan tehokkaampaa, koska se tietää tarkat tyypit ja voi erikoistua (specialize) niihin erityisesti primitiivityyppejä (ei-oliot) käytettäessä mutta käännetty koodi pitenee, sillä siinä on useita kopioita samoista metodeista ensimmäistä aan optimoida: ajon aikainen kääntäjä (JIT) voi tehdä erikoistuneita versioita metodeista huomatessaan, että niitä käytetään paljon ohjelmoija voi pyytää kääntäjää kääntämään tietyt erikoistuneet versiot etukäteen (esim. Scala
26 Parametrinen polymorsmi parametrinen polymorsmi on käsite, jonka mukaan funktio voi toimia eri tavalla riippuen tyyppiparametreistaan funktiolla on monta muotoa, ja kutsussa (usein implisiittisesti) annettu tyyppiparametri kertoo, mitä muotoa nyt käytetään käytännössä muodot eroavat vain niiltä kohdin, joissa tyyppiparametrien tyyppisiä arvoja käsitellään perinnän tuottama monimuotoisuus on vastaavasti alityyppipolymorsmia tai ad-hoc-polymorsmia (termien käyttö vaihtelee) aliluokan olio kelpaa yliluokan olion tilalle esim. metodi, joka ottaa argumentiksi yliluokan olion, voi muuntua käsittelemään myös aliluokan oliota generics on olio-ohjelmointikielten nimitys ja toteutus parametriselle polymorsmille
27 Parametrinen polymorsmi ilman olioita muissa kuin oliokielissä parametrinen polymorsmi on yleensä helpompaa ymmärtää ja eri kielissä enimmäkseen samanlaista (toisin kuin esim. moniperintä oliokielissä) vähemmän monimutkaisia yksityiskohtia se on hyvin yleisessä käytössä esim. Haskellissa ja ML:ssä näissä geneerisiä tyyppejä käytetään vielä enemmän kuin Javassa ja Scalassa tyyppipäättelijä tekee niistä ohjelmoijalle näkymättömämpiä monet genericsien monimutkaisuudet liittyvät parametrisen polymorsmin yhdistämiseen olioihin ja perintään eräs ohjelmointikielten teorian pitkäaikainen ongelma on ollut keksiä siisti tapa yhdistää parametrinen ja alityyppipolymorsmi tosin osa ongelmasta on ollut siinä, että perinnän toteutus ei ole yhtä vakiintunutta kuin parametrisen polymorsmin tutkimus jatkuu: Scalankaan ratkaisu ei liene viimeinen...
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ätiedot15. 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ätiedot15. 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ätiedot16. 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ätiedotJava 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ätiedotJAVA-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ätiedotOhjelmoinnin 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ätiedotRajapinta (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ätiedotOliot ja tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos
Oliot ja tyypit TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 19. maaliskuuta 2007 Olion tyyppi? attribuutti on oikeastaan metodi,
LisätiedotSisä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ätiedotOhjelmoinnin 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ätiedotListarakenne (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ätiedotOhjelmoinnin peruskurssien laaja oppimäärä
Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Olioiden toteuttaminen, abstraktit luokat yms. Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä) 27. 1. 2011 Sisältö 1 Kertausta Scheme-tulkista
LisätiedotTaulukot. Jukka Harju, Jukka Juslin 2006 1
Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti
Lisätiedot12. Monimuotoisuus 12.1
12. Monimuotoisuus 12.1 Sisällys Johdanto. Periytymismekanismi määrittää alityypityksen. Viitteiden sijoitus ja vertailu. Staattinen ja dynaaminen luokka. Myöhäinen ja aikainen sidonta. Parametrinvälitys
LisätiedotTaulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu
Taulukot Taulukon määrittely ja käyttö Taulukko metodin parametrina Taulukon sisällön kopiointi toiseen taulukkoon Taulukon lajittelu esimerkki 2-ulottoisesta taulukosta 1 Mikä on taulukko? Taulukko on
LisätiedotOhjelmoinnin 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ätiedotOhjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia
Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia Tehtävä 1 Tehtävässä 1 mallinnettiin Monopolipeliä. Alla olevassa esimerkissä peliin liittyy aina 2 noppaa, peliä pelataan pelilaudalla,
LisätiedotInformaatioteknologian 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ätiedotOpintojakso 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ätiedotLuokan sisällä on lista
1 Luokan sisällä on lista Luokan sisällä lista Listan sisältävä luokka Konstruktorit get-metodi Lista muissa metodeissa addxx-metodi Yksinkertainen pääohjelma Kertauksen List-luokan metodeja 1 Luokan sisällä
LisätiedotGroovy. 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ätiedotSisä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ätiedotSisä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ätiedotJavan 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ätiedot9. 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ätiedotOhjelmoinnin perusteet, syksy 2006
Ohjelmoinnin perusteet, syksy 2006 Esimerkkivastaukset 1. harjoituksiin. Alkuperäiset esimerkkivastaukset laati Jari Suominen. Vastauksia muokkasi Jukka Stenlund. 1. Esitä seuraavan algoritmin tila jokaisen
LisätiedotOhjelmoinnin 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ätiedot1. 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ätiedotOhjelmoinnin peruskurssien laaja oppimäärä
Ohjelmoinnin peruskurssien laaja oppimäärä Luento 5: Sijoituslause, SICP-oliot, todistamisesta (mm. SICP 33.1.3, 3.33.3.2) Riku Saikkonen 7. 11. 2011 Sisältö 1 Muuttujan arvon muuttaminen: set! 2 SICP-oliot
LisätiedotOhjelmoinnin 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ätiedotOhjelmoinnin peruskurssien laaja oppimäärä
Ohjelmoinnin peruskurssien laaja oppimäärä Luento 4: Perinnän käyttäminen Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 4. 2. 2012 Sisältö 1 Yksinkertainen esimerkki perinnästä
LisätiedotSisä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ätiedotSisä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ätiedotYleistä. 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ätiedotOlio-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ätiedottään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla
2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella
LisätiedotELM GROUP 04. Teemu Laakso Henrik Talarmo
ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................
LisätiedotKääreluokat (oppikirjan luku 9.4) (Wrapper-classes)
Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi
LisätiedotJava-kielen perusteet
Java-kielen perusteet String-merkkijonoluokka 1 Ohjelmointikielten merkkijonot Merkkijonot ja niiden käsittely on välttämätöntä ohjelmoinnissa Valitettavasti ohjelmointikielten tekijät eivät tätä ole ottaneet
LisätiedotOhjelmoinnin peruskurssien laaja oppimäärä
Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: Perinnän käyttäminen Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 1. 2. 2012 Sisältö 1 Esimerkki perinnästä 2 Pohdintaa perinnän
LisätiedotOpintojakso 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin peruskurssien laaja oppimäärä, kevät
Ohjelmoinnin peruskurssien laaja oppimäärä, kevät Luento 2: Ohjelman suunnittelua, miten oliot toimivat Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 21. 1. 2013 Sisältö 1 Suunnittelua:
LisätiedotAlgebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005
Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tällä luennolla Algebralliset tietotyypit Hahmonsovitus (pattern matching) Primitiivirekursio Esimerkkinä binäärinen hakupuu Muistattehan...
Lisätiedot12. Monimuotoisuus 12.1
12. Monimuotoisuus 12.1 Sisällys Johdanto. Periytymismekanismi määrittää alityypityksen. Viitteiden sijoitus ja vertailu. Staattinen ja dynaaminen luokka. Parametrinvälitys eräs monimuotoisuuden sovellus.
Lisätiedot815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/
LisätiedotSisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2
4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely
LisätiedotSisä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ätiedotSisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2
4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä
LisätiedotA) 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ätiedotGeneeriset tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos
Geneeriset tyypit TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 6. maaliskuuta 2007 Kysymys Mitä yhteistä on seuraavilla funktioilla?
LisätiedotOlion 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ätiedot815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset
815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/
LisätiedotRajapinnasta 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ätiedotAalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa
Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1 Oliot ja luokat Javaohjelmoinnissa Vesa Laakso 22.9.2012 Sisällysluettelo Sisällysluettelo... 1 Johdanto... 2 1. Luokka... 2 2. Olio... 2 3. Luokan
LisätiedotSisä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ätiedot9. 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ätiedotOliosuunnitteluesimerkki: 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ätiedot14. 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ätiedotTietorakenteet. 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ätiedotSisä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ätiedotOhjelmoinnin peruskurssi Y1
Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.
LisätiedotOhjelmointi 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ätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print
LisätiedotOhjelmoinnin peruskurssien laaja oppimäärä
Ohjelmoinnin peruskurssien laaja oppimäärä Luento 3: Funktionaalinen listankäsittely ja listankäsittelyoperaatiot (mm. SICP 22.2.3) Riku Saikkonen 31. 10. 2011 Sisältö 1 Linkitetyt listat 2 Listarakenteet
Lisätiedot812341A 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ätiedotTehtä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ätiedotC++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi
1 C++11 Syntaksi Jari-Pekka Voutilainen 13.4.2012 2 Range-for Iteroi säiliön kaikki alkiot for-silmukassa. Säiliöltä vaaditaan begin- ja end-iteraattorit. Pätee kaikille C++11 STL-säiliöille, taulukoille,
LisätiedotOhjelmoinnin perusteet, kurssikoe
Ohjelmoinnin perusteet, kurssikoe 18.6.2014 Kirjoita jokaiseen konseptiin kurssin nimi, kokeen päivämäärä, nimi, TMC-tunnus ja opiskelijanumero tai henkilötunnus. Vastaukset palautetaan tehtäväkohtaisiin
LisätiedotLuokan muodostimet (Constructors)
Mikä on muodostin? Luokan muodostimet (Constructors) Millaisia muodostimia on? Oletusmuodostin (Default Constructor) Parametrillinen muodostin Kopiointimuodostin (Copy Constructor) this-muuttuja Miten
LisätiedotTietorakenteet, laskuharjoitus 7,
Tietorakenteet, laskuharjoitus 7, 14.-19.3. 1. "Tira meets software engineering, osa 1" Lue luentomonisteen kalvot 233-236. Toteuta luokka Opiskelijarekisteri joka tarjoaa seuraavat palvelut: opiskelijoiden
LisätiedotLuokka 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ätiedotOpintojakso 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ätiedotMetodit. 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ätiedotSisä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ätiedotSisä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ätiedotOhjelmointitaito (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ätiedotOhjelmassa 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ätiedotTietorakenteet, laskuharjoitus 8, malliratkaisut
Tietorakenteet, laskuharjoitus 8, malliratkaisut 1. Seuraavassa on yksi tapa toteuttaa metodit hashcode ja equals: public int hashcode() { return this.x * 31 + this.y; public boolean equals(object o) {
LisätiedotSe mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.
Tehtävä. Tämä tehtävä on aineistotehtävä, jossa esitetään ensin tehtävän teoria. Sen jälkeen esitetään neljä kysymystä, joissa tätä teoriaa pitää soveltaa. Mitään aikaisempaa tehtävän aihepiirin tuntemusta
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat
LisätiedotKompositio. 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ätiedot14. 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ätiedotPythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b
Pythonin Kertaus Cse-a1130 Tietotekniikka Sovelluksissa Versio 0.01b Listat 1/2 esimerkkejä listan peruskäytöstä. > lista=['kala','kukko','kissa','koira'] ['kala','kukko','kissa','koira'] >lista.append('kana')
LisätiedotOsoitin ja viittaus C++:ssa
Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja
LisätiedotSokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.
Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi olioperustainen sokkeloseikkailu peli Javakielellä. Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen
Lisätiedot11/20: Konepelti auki
Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon
LisätiedotJava-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ätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 18.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 18.3.2009 1 / 51 Olioista (kertausta) Olioiden avulla voidaan kuvata useammasta arvosta koostuvaa kokonaisuutta
Lisätiedot7/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ätiedotOperaattoreiden 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ätiedot815338A 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen
LisätiedotGeneeriset luokat. C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet. Geneerisen luokan käyttö.
Geneeriset luokat C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet Geneerinen luokka tarkoittaa parametroitua luokkamallia, jonka avulla voidaan muodostaa useita,
LisätiedotOhjelmoinnin 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ätiedotMetodien 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ätiedotOhjelmoinnin peruskurssien laaja oppimäärä
Ohjelmoinnin peruskurssien laaja oppimäärä Luento 3: SICP kohdat 2.22.3, 33.1 ja 3.33.3.2 Riku Saikkonen 8. 11. 2010 Sisältö 1 Lisää listoista 2 Symbolit ja sulkulausekkeet 3 Derivoijaesimerkki 4 Muuttujan
LisätiedotHarjoitus 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