Ohjelmoinnin peruskurssien laaja oppimäärä

Koko: px
Aloita esitys sivulta:

Download "Ohjelmoinnin peruskurssien laaja oppimäärä"

Transkriptio

1 Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: Perinnän käyttäminen Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista)

2 Sisältö 1 Esimerkki perinnästä 2 Pohdintaa perinnän käyttämisestä 3 Pythonin olioiden yksityiskohtia 4 Abstraktit luokat ja isinstance 5 Moniperintä

3 (ei-laajan kurssin kalvo: luento 3 sivu 6) Esimerkki Kirjaston tietokanta sisältää nykyisin varsin monenlaisia lainattavia asioita Kirjoja Kasetteja CD:itä Videoita DVD-levyjä Nuotteja, mikrofilmejä, jne Näillä on paljon yhteisiä ominaisuuksia Luokkia mallinnettaessa yhteiset ominaisuudet tulisi mahdollisuuksien mukaan kerätä yliluokkaan. 10:31

4 (ei-laajan kurssin kalvo: luento 3 sivu 7) Esimerkki: ennen perintää Luokissa on yhteisiä tai melkein yhteisiä toteutusosia Koodia toistetaan turhaan Ohjelmaa muutettaessa samat korjaukset tehdään kaikkiin luokkiin class CD(object): def get_name(self): def get_artists(self): class Book(object): def def get_play_time(self): get_name(self): def get_authors(self): class Magazine(object): def get_name(self): def get_pages(self): def get_editors(self): Nimi on kaikilla Artist, author ja editor ovat oikeastaan sama asia def get_issn(self): 10:31

5 (ei-laajan kurssin kalvo: luento 3 sivu 8) Esimerkki: perinnän jälkeen Yhteiset piirteet luokassa LibraryItem Kaikilla aliluokilla metodit get_name ja get_authors class LibraryItem(object): def get_name(self): def get_authors(self): class CD(LibraryItem): def get_play_time(self): class Book(LibraryItem): def get_pages(self): class Magazine(LibraryItem): def get_issn(self): 10:31

6 (ei-laajan kurssin kalvo: luento 3 sivu 9) Perintähierarkia Yhdellä luokalla voi olla monta aliluokkaa ja millä tahansa aliluokalla taas omia aliluokkia jne. Perintähierarkia on termi, jolla viitataan siihen kuinka luokat perinnän kautta muodostavat puumaisen rakenteen jonka huipulla on Pythonissa luokka object. Object Person Numbers Mappings jne Admin User Integers 10:31

7 (ei-laajan kurssin kalvo: luento 3 sivu 22) Korvaaminen (Overriding) Lisätään kirjastoesimerkkiin metodi get_details() Metodi palauttaa merkkijonoesityksen kulloisestakin esineestä. Metodin voi korvata aliluokassa, jolloin eri esineet voivat tulostaa erilaisen kuvauksen tyypistään riippuen Ongelma Nyt jokaisen aliluokan täytyisi toteuttaa ISBNkenttien tms. tulostukset toisistaan erillään. Turhaa toistoa Voidaanko yliluokan get_details-metodia käyttää apuna? 10:31

8 (ei-laajan kurssin kalvo: luento 3 sivu 23) Korvaaminen (Overriding) Aliluokasta (ja vain sieltä) voidaan eksplisiittisesti kutsua yliluokan metodia super(aliluokka, ilmentymä).metodi(parametrit) Yleensä kutsu tehdään vastaavassa aliluokan metodissa import abc class LibraryItem(object): metaclass = abc.abcmeta def get_details(self): return 'name: {}, author(s): {}, class Magazine(LibraryItem): def get_details(self): return 'Magazine:\n' + super(magazine, self).get_details() + 10:31

9 Sisältö 1 Esimerkki perinnästä 2 Pohdintaa perinnän käyttämisestä 3 Pythonin olioiden yksityiskohtia 4 Abstraktit luokat ja isinstance 5 Moniperintä

10 (ei-laajan kurssin kalvo: luento 3 sivu 24) Perinnän etuja Koodia tarvitsee kirjoittaa vähemmän Uudelleenkäyttö (Reuse) Koodin ylläpito selkiytyy Muutokset yliluokkaan päivittyvät myös aliluokkiin Mallinnusnäkökulma Olioita voidaan tarvittaessa käsitellä luokasta riippumatta yliluokan tasolla. 10:31

11 Perinnän ongelmia 1/2 edellisestä kirjastoesimerkistä: entä jos aluksi olisi tiedossa vain LibraryItemin tiedot, ja vasta myöhemmin selviäisi että olio onkin CD? entä jos sama LibraryItem sisältäisi kirjan ja CD:n? em. ongelmat syntyvät siitä, että oliolla on vain yksi luokka eikä sitä voi luomisen jälkeen muuttaa vrt. että LibraryItemin tyyppi ja lisätiedot olisivat kenttiä toisenlainen ongelma: mitä toimintoja ja koodia esim. jokin CD-olio kaiken kaikkiaan sisältää? tai: mihin koodiin on mahdollista mennä, kun CD-luokan metodi kutsuu toista saman olion metodia? periaatteessa pitää käydä koko perintähierarkia läpi dokumentointi ja ohjelmointityökalut (esim. Eclipse) auttavat mm. tämänkaltaisista syistä perintää käytetään usein paljon vähemmän kuin voisi kuvitella luokkahierarkiaa aluksi suunnitellessa syntyy helposti paljon syvempi hierarkia kuin mitä lopulta käytetään

12 Perinnän ongelmia 2/2 entä jos yliluokan toimintaa joutuu muuttamaan olennaisesti? kaikki aliluokat pitää käydä läpi ja tarkistaa siis yliluokkien toimintoja suunnitellessa pitää olla varovainen, jos aliluokkia on paljon mitä metodeja saa muuttaa luokkaa periessä ja miten? (siis mikä on perimisen kannalta luokan sisäistä tietoa) monimutkaista määritellä, joten jätetään usein tekemättä usein käytännössä tulee paljon tyhmiä metodeja, jotka vain välittävät viestejä eteenpäin toiselle oliolle tai rajapinnalle toinen joukko tyhmiä metodeja ovat useimmat get- ja set-metodit sekä jotkin konstruktorit monissa oliokielissä (mm. Common Lisp, Scala, Python) on tapa välttää niitä tai tehdä niitä automaattisesti osalle näistä ongelmista on vastine myös ei-olio-ohjelmoinnissa

13 Miten pitäisi periä? olio-ohjelmoinnissa aliluokan olio on (is a) myös yliluokan jäsen luokkaa periessä pitäisi aina säilyttää yliluokan toiminnot siis mihin tahansa koodiin, jossa käytetään yliluokan oliota, voisi sijoittaa aliluokan olion, niin että koodi edelleen toimii järkevästi toisin sanottuna: jokaisen yliluokan metodin (myös niiden, joita ei periessä korvaa!) semantiikka eli merkitys pitää säilyttää tämä nk. substituutioperiaate (Liskov Substitution Principle, LSP) on eräs perinnän käyttämisen perusohjeista käytännössä tästä kuitenkin aina välilllä poiketaan ja samalla oletetaan, ettei yliluokkaa käytetä väärin... usein ei ole tarpeeksi tarkkaan mietitty, mitä metodin pitäisi tehdä Substituutioperiaate formaalisti ((sub)type (ali)luokka) Let φ(x) be a property provable about objects x of type T. Then φ(y) should be true for objects y of type S where S is a subtype of T. B. Liskov, J. Wing: A behavioral notion of subtyping. ACM Trans. on Prog. Lang. and Syst., 16(6), 1994.

14 Substituutioperiaatteen seurauksia substituutioperiaatteesta seuraa: metodin argumentin tyyppiä voi aliluokassa yleistää muttei tiukentaa (eli argumenttityyppi on kontravariantti) metodin paluutyyppiä voi aliluokassa tiukentaa muttei yleistää (eli paluutyyppi on kovariantti) säännöt koskevat sekä ohjelmoijan kirjoittamia tyyppejä (staattisesti tyypitetyissä kielissä) että yleisemmin sitä, mikä kelpaa argumentiksi tai mitä metodi voi palauttaa esim. jos yliluokan metodi haluaa argumentiksi luvun välillä [1..10], aliluokan metodi saa hyväksyä muitakin lukuja mutta paluuarvolla toisin päin mm. Java ei kuitenkaan anna muuttaa staattista argumenttityyppiä koko olion toimintaan liittyen periaatteesta seuraa mm: (esim. metodien) esiehtoja ei saa tiukentaa aliluokassa jälkiehtoja ei saa heikentää aliluokassa aliluokan olio ei saa muuttua yliluokan metodeista näkyvällä tavalla, joka ei olisi mahdollinen yliluokassa

15 Perinnän käyttötapoja 1/2 Kaksi tietystä näkökulmasta vastakkaista perinnän käyttötapaa: aliluokka erikoistuu johonkin eli tarjoaa yliluokan toimintojen lisäksi jotain omaa, pyrkien säilyttämään substituutioperiaatteen tai toteuttaa abstraktissa yliluokassa kuvatut metodit esim. aliluokka CD yliluokasta LibraryItem tämä lienee tyypillisin perinnän käyttötapa aliluokka yleistää yliluokkaa muokkaamalla sen toimintoja monipuolisemmiksi (ja mahdollisesti lisäämällä uusia) esim. aliluokka ColoredPoint yliluokasta Point toimintojen muokkaaminen voi rikkoa substituution: esim. Point:n draw-metodia aiemmin käyttänyt koodi voisi olla olettanut, että piirretyt pisteet ovat kaikki saman näköisiä joskus perintähierarkia olisi loogisempi toisin päin (yleisempi isänä: värillinen piste ei ole erikoistapaus pisteestä vaan lisätoiminto) perintä väärin päin voi syntyä esim. a) jos perintähierarkia suunnitellaan lähtien datasta eikä toiminnoista tai b) kun olemassaolevaa yliluokkaa itseään ei haluta muuttaa

16 Perinnän käyttötapoja 2/2 Lisää tapoja, joilla perintää usein käytetään: em. yleistämisen sijaan yliluokan laajentaminen eli kokonaan uusien irrallisten toimintojen tarjoaminen aliluokassa ei ole ongelma substituutioperiaatteen kannalta aliluokka voi rakentaa uuden (yliluokasta riippumattoman) toiminnon käyttäen apuna yliluokan toimintoja tässä yliluokan päätoimintoa ei yleensä enää käytetä aliluokan koodin ulkopuolelta (jolloin substituutioperiaate saa rikkoutua) usein delegointi toiselle oliolle on perintää selkeämpi vaihtoehto aliluokka rajoittaa yliluokan toimintoja, esim. tarkistaa että metodeja käytetään halutulla tavalla esim. aliluokka Stack yliluokasta Deque tämä perintätapa rikkoo aina substituutioperiaatteen aliluokalla ja yliluokalla on yhteistä koodia, mutta ne eivät konseptuaalisesti liity toisiinsa kumminkaan päin ehkä yhteisen koodin voisi siirtää molemmille yhteiseen yliluokkaan

17 Millainen abstraktio olio on? olio-ohjelmoinnissa ratkaistava ongelma jaetaan osiin luokkien ja yksittäisten olioiden avulla puhtaimmillaan olio on (yleensä) itsenäinen kokonaisuus jolla on omaa tilaa (kentät) joka reagoi viesteihin (= metodikutsuihin) muuttamalla tilaansa tai lähettämällä muille viestejä olio-ohjelmoinnin tavoite (?): olioita käyttävä ohjelma on (vain) joukko itsenäisiä olioita, jotka hoitavat kukin omaa tehtäväänsä ja tarvittaessa kommunikoivat keskenään viesteillä kaikki ohjelman luokat eivät ole täysin erilaisia, vaan niillä kannattaa olla yhteisiä osia perintä on mekanismi tämän helpompaan toteuttamiseen

18 Sisältö 1 Esimerkki perinnästä 2 Pohdintaa perinnän käyttämisestä 3 Pythonin olioiden yksityiskohtia 4 Abstraktit luokat ja isinstance 5 Moniperintä

19 (ei-laajan kurssin kalvo: luento 3 sivu 20) Perintä ja näkyvyys Nimi sellaisenaan kertoo, että muuttuja/metodi on käytettävissä luokan ulkopuolelta '_' (yksi alaviiva) nimen edessä kertoo, että muuttujaa tai metodia ei ole tarkoitus käyttää suoraan luokan ulkopuolelta Aliluokat voivat kuitenkin käyttää sitä ' ' (kaksi alaviivaa) nimen edessä kertoo, että tulkki muuttaa nimen muotoon _luokka nimi, jolloin aliluokkakaan ei voi käyttää sitä (name mangling) Tarkoituksena estää yli- ja aliluokkien väliset nimitörmäykset Private methods are private for a reason, but like many other things in Python, their privateness is ultimately a matter of 10:31 convention, not force. (http://www.diveintopython.net/object_oriented_framework/private_functions.html)

20 (ei-laajan kurssin kalvo: luento 3 sivu 11) Luokka oliona Kun tulkki kohtaa avainsanan class, se luo muistiin olion TestiLuokka Koska oliosta TestiLuokka voi luoda ilmentymiä, sen täytyy olla luokka class TestiLuokka(object): pass olio = TestiLuokka() olio.muuttuja = 456 print olio.muuttuja TestiLuokka.muuttuja = 123 print TestiLuokka.muuttuja Koska oliolle TestiLuokka voi lisätä muuttujan, sen täytyy olla myös olio Koska luokka on olio, se voidaan luoda ohjelman suorituksen aikana. def luo_luokka_uusi(): class Uusi(object): def init (self, arvo): self.arvo = arvo return Uusi luokka = luo_luokka_uusi() print luokka toinen_olio = luokka(8) print toinen_olio.arvo 10:31

21 (ei-laajan kurssin kalvo: luento 6 sivu 2) Sisäkkäiset luokat Sisäkkäiset luokat ovat toisten luokkien sisällä määriteltyjä luokkia Toisen luokan sisällä määritelty luokka käyttäytyy kuten mikä tahansa luokka Kuitenkin: Olion luominen ulommasta luokasta ei automaattisesti luo oliota sen sisällä olevasta luokasta Sisällä olevasta luokasta voi luoda olion ilman, että ulommasta luokasta luodaan olio. Luokka ei pääse käyttämään ulomman luokan metodeja eikä muuttujia, vain omiaan 18:47

22 (ei-laajan kurssin kalvo: luento 6 sivu 3) class A(object): def init (self): self.y = 0 class B(object): def init (self): self.x = 0 def f(self): print 'Hei' if name == ' main ': a = A() print a.y #print B.f() 0 Hei b = A.B() b.f() #print b.y #print a.x 18:47

23 (ei-laajan kurssin kalvo: luento 6 sivu 4) Sisäkkäiset luokat Pythonissa ei ole paljon käyttöä sisäkkäisille luokille, koska useampia luokkia voi olla samassa moduulissa. Luokan voi myös määritellä metodin tai funktion sisällä. class SomeClass(object): def init (self, x): self.x = x def get_value(self): return self.x def make_new_class(self): class New(object): def init (self, value): self.value = value def get_value(self): return self.value return New first = SomeClass(3) print first.get_value() new_class = first.make_new_class() new_object = new_class(8) print new_object.get_value() 18:47

24 (ei-laajan kurssin kalvo: luento 3 sivu 12) type-funktio Funktio type näyttää olion tyypin Se pystyy myös luomaan luokan saamistaan parametreista: def alusta(self, arvo): self.arvo = arvo def hae_nimi(self): return self.nimi print type(olio) print type(olio.muuttuja) print type(luokka) <class ' main.testiluokka'> <type 'int'> <type 'type'> Uusi = type('uusi', (), {' init ': alusta, 'hae_nimi': hae_nimi, 'nimi': 'jussi'}) On sama kuin: class Uusi(object): def init (self, arvo): self.arvo = arvo self.nimi = 'jussi' def hae_nimi(self): return self.nimi Ja kummallekin toimii: print Uusi hemmo = Uusi(3) print hemmo print hemmo.hae_nimi() print hemmo.arvo 10:31

25 (ei-laajan kurssin kalvo: luento 3 sivu 13) Metaluokka Pythonissa luokat luodaan metaluokilla luokkien luokilla Funktio type on metaluokka, jota Python käyttää kaikkien luokkien luomiseen 4 on int-luokan ilmentymä, joka taas on type-luokan ilmentymä ja hae_nimi on instancemethod-luokan ilmentymä, joka sekin on type-luokan ilmentymä Metaluokka on siis periaatteessa Pythonin maailmankaikkeuden luoja. Kaikki Pythonin sisäänrakennetut luokat ovat sen ilmentymiä Sen avulla voi myös luoda omia luokkia ohjelman suorituksen aikana 10:31

26 Sisältö 1 Esimerkki perinnästä 2 Pohdintaa perinnän käyttämisestä 3 Pythonin olioiden yksityiskohtia 4 Abstraktit luokat ja isinstance 5 Moniperintä

27 (ei-laajan kurssin kalvo: luento 3 sivu 14) Omat metaluokat type on Pythonissa sisäänrakennettuna mutta metaluokkia voi myös luoda itse. Pythonin kirjastossa on moduuli abc, josta löytyy metaluokka ABCMeta Jos oman luokan metaluokaksi valitsee tämän ABCMeta type:n sijaan, luodaankin hieman toisenlainen luokkaolio Luokasta tulee abstrakti perusluokka Sillä on hieman erilaiset säännöt periytymisen suhteen 10:31

28 (ei-laajan kurssin kalvo: luento 3 sivu 16) Abstrakti luokka Kertomalla, että luokan metaluokka on ABCMeta, voidaan käyttää abstrakteja metodeja Jos luokkaan lisätään metodi, joka merkitään abstraktiksi, silloin luokasta ei voi luoda oliota Aliluokista voi luoda olioita vain silloin, kun kaikki abstraktit metodit on korvattu aliluokassa 10:31

29 (ei-laajan kurssin kalvo: luento 3 sivu 19) Esimerkki perinnästä Pohdintaa Yksityiskohtia Abstraktit luokat Moniperintä Abstrakti luokka (esimerkki) LibraryItem abstraktina luokkana Kaikissa siitä periytyvissä luokissa oltava metodit init ja is_available() Lehdet taas eivät kaikki ole lainattavissa, joten DailyPaper abstraktiksi import abc class LibraryItem(object): metaclass = def init (self, author_list, ): class DailyPaper(LibraryItem): metaclass = def init (self, name, year, ): LibraryItem. init (self, ) def get_number(self): return self.number def is_available(self): pass class Book(LibraryItem): def get_authors(self): return def is_available(self): '''Method docstring. ''' def init (self, author_list, ): LibraryItem. init (self, ) def is_available(self): if self.due_date: return False else: return True 10:31

30 isinstance: onko olio haluttua luokkaa? Pythonissa isinstance-funktiolla voi kysyä, onko jokin olio tietyn luokan tai sen aliluokan jäsen: x = Luokka() isinstance(x, Luokka) True isinstance(42, int) True (edellä mainittu type kysyi olion tarkkaa luokkaa) Javassa ja C++:ssa isinstance on nimeltään instanceof tyypillinen käyttötapa on toiminto, joka toimii hieman eri tavalla riippuen argumentin tyypistä esim. tekee hieman eri asian jokaiselle LibraryItem:n aliluokalle (vaikkapa tekee listasta LibraryItem:ejä HTML-taulukon) isinstance ei ole puhdasta olio-ohjelmointia: ongelma on, että uutta aliluokkaa tehdessä kaikkea isinstance:a käyttävää koodia voi joutua muokkaamaan (ottamaan huomioon myös uusi luokka)

31 Perinnän käyttäminen isinstance:n sijaan sen sijaan että olion tyyppiä kysyy koodissa isinstance:lla, pitäisi asia puhtaassa olio-ohjelmoinnissa hoitaa perinnällä siis aliluokkiin metodi, joka tekee sen, mitä isinstance-tyypin perusteella yritettiin tehdä (tulostaa HTML-taulukon yhden rivin) aina perinnän käyttö ei kuitenkaan ole järkevää Pythonissa voi joskus myös käyttää poikkeuksia: kutsutaan kaipaamaamme metodia, ja jos sitä ei löydy, käsitellään poikkeus eräs yleinen käyttö isinstance:lle on, että yritetään pitää tietty toiminto yhtenäisessä kohdassa koodia puhtaaseen oliotyyliin kuuluisi, että toiminnon koodi jaettaisiin osiin käsiteltävän asian (luokan) mukaan jolloin uuden käsiteltävän asian voi lisätä tekemällä aliluokan mutta uutta toimintoa lisätessä pitää muuttaa kaikkia luokkia tai tehdä metodi, jonka isinstance:n avulla tekee koko toiminnon mutta yleisesti ottaen isinstance:a kannattaa välttää

32 (ei-laajan kurssin kalvo: luento 3 sivu 15) Abstrakti perusluokka Abstrakti perusluokka on luokkamäärittely jossa mille tahansa luokalle voi määrätä virtuaalisen yliluokan. Pythonissa sarjatyypin luokille on määrätty metaluokaksi abstrakti perusluokka Sequence tai MutableSequence Tarkoituksena on että isinstance- ja issubclassfunktiot voivat tunnistaa olioita ja luokkia jonkin tietyn luokan ilmentymiksi tai aliluokiksi: isinstance([], Sequence) issubclass(list, Sequence) issubclass(list, MutableSequence) isinstance((), Sequence) not issubclass(tuple, MutableSequence) 10:31

33 Sisältö 1 Esimerkki perinnästä 2 Pohdintaa perinnän käyttämisestä 3 Pythonin olioiden yksityiskohtia 4 Abstraktit luokat ja isinstance 5 Moniperintä

34 (ei-laajan kurssin kalvo: luento 3 sivu 10) Moniperintä Luokka voi periä ominaisuutensa useammasta eri luokasta class Oval(Circle, Rectangle): def get_area(self): def get_perimeter(self): Viitattaessa aliluokan metodiin (tai muuttujaan) hakujärjestys perintärakenteessa on alhaalta ylös, vasemmalta oikealle. (ratkaisee ns. timanttiongelman) Ensin etsittäisiin siis Circle-luokasta ja sen yliluokista ja vasta sitten Rectangle-luokasta ja sen yliluokista. Python käyttää ensimmäistä osumaa. Sen ylä- ja oikealla puolella olevia täytyy erikseen kutsua class Oval(Circle, Rectangle): def init (self, x, y, r1, r2): Rectangle. init (self, x, y, r1, r2) 10:31

35 Moniperinnästä moniperinnän toiminta ei ole kovin vakiintunutta, vaan toimii eri kielissä hieman eri tavalla esim. Common Lisp, C++ ja Python tukevat moniperintää esim. Java taas ei (paitsi rajoittuneesti) mm. samannimisten metodien valintajärjestys vaihtelee hieman moniperintä sallisi joskus parempia abstraktioita kuten tavallisellakin perinnällä, sillä voi vähentää koodin kopiointia samoin ongelman mallinnus olioiksi ja luokiksi olisi joskus luonnollisempaa moniperinnän avulla, sillä luonnollinen malli ei aina ole puu mutta käytännössä moniperinnän (laajamittainen) käyttäminen usein monimutkaistaa ohjelmaa turhan paljon ja moniperinnän tukeminen monimutkaistaa olio-ohjelmointikieliä

36 Moniperinnän ongelmia ohjelmointikielissä moniperinnän perusongelma: jos useammassa perintäverkon haarassa on korvattu sama metodi, mitä niistä käytetään? eri moniperintää tukevilla kielillä on hieman erilainen ratkaisu, mutta yleensä ne perustuvat siihen, missä järjestyksessä yliluokkien nimet kerrotaan aliluokassa mutta toiminta ei ole aina kovin intuitiivista tai helppoa ymmärtää... kentissä on samankaltainen ongelma: jos jokin yliluokka A peritään kahta polkua pitkin, pitäisikö perivään luokkaan tulla yksi vai kaksi kappaletta yliluokan A kenttiä? näkevätkö D-oliossa alla B:n ja C:n metodit eri vai saman x:n? class A { class A(object): int x; } self.x = class B extends A { } class B(A): class C extends A { } class C(A): class D extends B and C { } class D(B, C): molempia tapoja on käytössä eri kielissä (Pythonissa saman)

37 Ohjelmointikielten tekemiä ratkaisuja jotkin ohjelmointikielet ratkaisevat em. ongelmia rajoittamalla moniperintää esim. kielletään periminen niin, että useammassa haarassa olisi korvattu samoja metodeita tai ohjelmoijan pitää erikseen kertoa, minkä yliluokan metodi aliluokan oliosta näkyy (esim. C++) Javan ja C#:n ratkaisu: vain rajapintojen moniperintä on mahdollista, varsinaisia suoria yliluokkia on aina yksi rajapinnassa ei ole kenttiä eikä metodien toteutuksia, joten em. ongelmia ei esiinny mutta jos useassa rajapinnassa on samanniminen metodi, onko se tarkoitettu samaksi? muitakin ratkaisuja on: esim. Scala-kielessä on rajapinnan sijaan sen ja luokan välimuoto nimeltä trait, jolla moniperintää voi tehdä

Perintä (inheritance)

Perintä (inheritance) Perintä (inheritance) Perintä on menetelmä, jonka avulla jostakin olemassaolevasta luokasta voidaan johtaa uusi luokka, joka saa automaattisesti käyttöönsä perimänsä luokan ominaisuuksia. Perittävää luokkaa

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

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

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

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena Ohjelmointikielet ja -paradigmat 5op Markus Norrena Ko#tehtävä 4 Viimeistele "alkeellinen kuvagalleria". Käytännössä kaksi sivua Yksi jolla voi ladata kuvia palvelimelle (file upload) Toinen jolla ladattuja

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

Luento 17: Perintä. self.points = 0 self.status = 'Student'

Luento 17: Perintä. self.points = 0 self.status = 'Student' Luento 17: Perintä class Staff(object): def init (self, name, salary): self.salary = salary self.status = 'Staff' def set_name(self, new_name): self.name = new_name def get_status(self): return self.status

Lisätiedot

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

Aalto 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ätiedot

TIE-20200 Ohjelmistojen suunnittelu. Luento 8..9: moniperintä

TIE-20200 Ohjelmistojen suunnittelu. Luento 8..9: moniperintä TIE-20200 Ohjelmistojen suunnittelu Luento 8..9: moniperintä 1 Ajankohtaista Harjoitustyön suunnittelusessiot pidetty, työt jatkuvat, välivaiheen esittely seuraavana Viimeinen viikkoharjoituskerta, palataan

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

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 12. Periytyminen Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi

Lisätiedot

1. Olio-ohjelmointi 1.1

1. Olio-ohjelmointi 1.1 1. Olio-ohjelmointi 1.1 Sisällys Olio-ohjelmointi on eräs ohjelmointiparadigma. Olio-ohjelmoinnin muotoja. Ohjelmiston analyysi ja suunnittelu. Olioparadigman etuja ja kritiikkiä. 1.2 Ohjelmointiparadigmoja

Lisätiedot

2. Olio-ohjelmoinista lyhyesti 2.1

2. Olio-ohjelmoinista lyhyesti 2.1 2. Olio-ohjelmoinista lyhyesti 2.1 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen. 2.2 Yleistä Olio-ohjelmointia käsitellään hyvin

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin 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ätiedot

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA: REFAKTOROINTI 2 (9) SEPA: REFAKTOROINTI 3 (9) VERSIOHISTORIA Version Date Author Description 0.1 2.12.2005 Erik Hakala Ensimmäinen

Lisätiedot

P e d a c o d e ohjelmointikoulutus verkossa

P e d a c o d e ohjelmointikoulutus verkossa P e d a c o d e ohjelmointikoulutus verkossa Java-kielen jatkokurssi Teoria ja ohjelmointitehtävät Java-kielen jatkokurssi 3 YLEISKATSAUS KURSSIN SISÄLTÖIHIN... 8 JAVA-KIELEN JATKOKURSSI... 8 OPISKELUN

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin 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ätiedot

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia. 4. Periytyminen 4.1. Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Rinnakkaisuus Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 25. 4. 2012 Sisältö 1 Rinnakkaisuusmalleja: säie ja prosessi 2

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 peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 10: Perintä, oliot vs. moduulit Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä) 26. 1. 2011 Sisältö 1 Ohjelmointikielten moduulijärjestelmistä

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

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman

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

Tentti: T-106.1210 Ohjelmoinnin peruskurssi, osa 1. Yleistä. Tehtävä 1

Tentti: T-106.1210 Ohjelmoinnin peruskurssi, osa 1. Yleistä. Tehtävä 1 ./ Tentti: T-106.1210 Ohjelmoinnin peruskurssi, osa 1 Tenttipäivä: 13.12. 2011 El APUVÄLINEITÄ Yleistä Tentissä on kaksi tehtävää. Ensimmäinen tehtävä on tärkeämpi: sillä pyritään varmistamaan, että jokaisella

Lisätiedot

P e d a c o d e ohjelmointikoulutus verkossa

P e d a c o d e ohjelmointikoulutus verkossa P e d a c o d e ohjelmointikoulutus verkossa Java-kielen perusteet Teoria ja ohjelmointitehtävät Java-kielen perusteet 3 YLEISKATSAUS KURSSIN SISÄLTÖIHIN 10 JAVA-KIELEN PERUSTEET 10 OPISKELUN ALOITTAMINEN

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 7.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 7.2.2011 1 / 39 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 12.4.2010 T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 1 / 34 Graafiset käyttöliittymät Tähän asti kirjoitetuissa ohjelmissa on ollut tekstipohjainen käyttöliittymä.

Lisätiedot

Muutamia peruskäsitteitä

Muutamia peruskäsitteitä Muutamia peruskäsitteitä Huom. 1: nämä peruskäsitteet eivät muodosta hyvin määriteltyä keskenään yhteensopivien käsitteiden joukkoa, vaan käsitteet ovat osittain päällekkäisiä ja eri yhteyksissä niillä

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

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

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

Lisätiedot

812336A C++ -kielen perusteet, 21.8.2010

812336A C++ -kielen perusteet, 21.8.2010 812336A C++ -kielen perusteet, 21.8.2010 1. Vastaa lyhyesti seuraaviin kysymyksiin (1p kaikista): a) Mitä tarkoittaa funktion ylikuormittaminen (overloading)? b) Mitä tarkoittaa jäsenfunktion ylimääritys

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

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena Ohjelmointikielet ja -paradigmat 5op Markus Norrena Kotitehtävä 6, toteuttakaa alla olevan luokka ja attribuutit (muuttujat) Kotitehtävä 6, toteuttakaa alla olevan luokka ja attribuutit (muuttujat) Huom!

Lisätiedot

Joskus yleistäminen voi tapahtua monen ominaisuuden pohjalta. Myös tällöin voi tulla moniperintätilanteita.

Joskus yleistäminen voi tapahtua monen ominaisuuden pohjalta. Myös tällöin voi tulla moniperintätilanteita. Moniperintä 2 Joskus yleistäminen voi tapahtua monen ominaisuuden pohjalta. Myös tällöin voi tulla moniperintätilanteita. Oliomallinnus TITE.2040 Hannu K. Niinimäki 1 Delegointi 1 Moniperinnän toteuttaminen

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

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 13: Scheme-tulkki Pythonilla, datan serialisointi, keväästä Riku Saikkonen 11. 12. 2012 Sisältö 1 Scheme-tulkki Pythonilla 2 Datan serialisointi 3 Suunnitelmia

Lisätiedot

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined Ohjelmointitekniikka Tyyppiturvallisuuden tavoittelua Javascriptissa muuttujat ovat tyypittömiä, mutta arvoilla on tyyppi. Muuttuja esitellään var -avainsanalla ja muuttujan tyypin arvoa ei erikseen määritellä.

Lisätiedot

C# olio-ohjelmointi perusopas

C# olio-ohjelmointi perusopas Paavo Räisänen C# olio-ohjelmointi perusopas www.ohjelmoimaan.net Tätä opasta saa vapaasti kopioida, tulostaa ja levittää ei kaupallisissa tarkoituksissa. Kuitenkaan omille nettisivuille opasta ei saa

Lisätiedot

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena Ohjelmointikielet ja -paradigmat 5op Markus Norrena Kotitehtävistä: Pankkitilit kotitehtävä 7 Toteuttakaa kotitehtävä 1:n kuvan mukaiset metodit open(), close(), deposit(), withdraw(), joilla voi Nostaa

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

1 Tehtävän kuvaus ja analysointi

1 Tehtävän kuvaus ja analysointi Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015

815338A Ohjelmointikielten periaatteet 2014-2015 815338A Ohjelmointikielten periaatteet 2014-2015 X Skriptiohjelmointi Sisältö 1. Johdanto 2. Skriptikielten yleispiirteitä 3. Python 815338A Ohjelmointikielten periaatteet, Skriptiohjelmointi 2 X.1 Johdanto

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin 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ätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 21.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 21.9.2015 1 / 25 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

TIE-20200 Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

TIE-20200 Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely Lyhyt UML-opas UML -pikaesittely UML, Unified Modeling Language Standardoitu, yleiskäyttöinen mallinnuskieli, jota ylläpitää/hallitsee (Object Management Group) OMG Historiaa: 90-luvulla oli paljon kilpailevia

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Opintojakso TT00AA11 Ohjelmoinnin jatko (Java) Tavoite Opiskelija ymmärtää olio-ohjelmoinnin problematiikan. Opiskelija osaa määritellä ja käyttää itse

Lisätiedot

UML Luokkakaavio 14:41

UML Luokkakaavio 14:41 UML Luokkakaavio UML Olio-ohjelman luokkien pääpiirteet voidaan kätevähkösti esittää ns. UML-luokkakaaviona. Näin usein tehdäänkin esim. suunniteltaessa, millaisia luokkia ohjelmaan on tarkoitus laatia,

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1 3. Komponentit ja rajapinnat 3.1 Komponenttien idea: ohjelmistotuotannon rationalisointi 3.2 Mikä on ohjelmistokomponentti? 3.3 Komponentit ohjelmistoyksikköinä 3.4 Rajapinnat 3.6 Komponenttien räätälöinti

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset

815338A 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ätiedot

Ohjelmistojen mallintaminen. Luento 7, 23.11.

Ohjelmistojen mallintaminen. Luento 7, 23.11. Ohjelmistojen mallintaminen Luento 7, 23.11. Kertaus: olioiden yhteistyön kuvaaminen Luokkakaavion avulla voidaan kuvata ohjelman rakenne Minkälaisista luokista ohjelma koostuu ja miten luokat liittyvät

Lisätiedot

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin Olio-ohjelmointi: Luokkien toteuttaminen Jukka Juslin Luokkien kirjoittaminen Tähän mennessä on käytetty valmiiksi määritettyjä luokkia. Nyt opimme kirjoittamaan omia luokkia olioiden kuvaamiseksi Seuraavaksi

Lisätiedot

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä 6.11.2002

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä 6.11.2002 JReleaser Yksikkötestaus ja JUnit Mikko Mäkelä 6.11.2002 Sisältö Johdanto yksikkötestaukseen JUnit yleisesti JUnit Framework API (TestCase, TestSuite) Testien suorittaminen eri työkaluilla Teknisiä käytäntöjä

Lisätiedot

Olio-ohjelmointi Johdanto olio-ohjelmointiin

Olio-ohjelmointi Johdanto olio-ohjelmointiin Olio-ohjelmointi Johdanto olio-ohjelmointiin Ohjelmistoa kehitettäessä voidaan tunnistaa ainakin kaksi abstraktiota: prosessiabstraktio ja dataabstraktio. Prosessiabstraktio huomattiin jo varhain, koska

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.2.2011 1 / 37 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät Tenttikysymykset 1. Selitä mitä asioita kuuluu tietojärjestelmän käsitteeseen. 2. Selitä kapseloinnin ja tiedon suojauksen periaatteet oliolähestymistavassa ja mitä hyötyä näistä periaatteista on. 3. Selitä

Lisätiedot

TIE-20200 Ohjelmistojen suunnittelu

TIE-20200 Ohjelmistojen suunnittelu TIE-20200 Ohjelmistojen suunnittelu Luento 1: Virtuaalifunktiot, Template method 1 Yleistä asiaa Muistakaa harkkatyöilmoittautuminen 23 ryhmää (mm. lihansyöjäkirahvi), vajaita ryhmiäkin on 44 henkeä vielä

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 3.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 3.2.2010 1 / 36 Esimerkki: asunnon välityspalkkio Kirjoitetaan ohjelma, joka laskee kiinteistönvälittäjän asunnon

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

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät Tenttikysymykset 1. Selitä mitä asioita kuuluu tietojärjestelmän käsitteeseen. 2. Selitä kapseloinnin ja tiedon suojauksen periaatteet oliolähestymistavassa ja mitä hyötyä näistä periaatteista on. 3. Selitä

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin 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ätiedot

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

Java-kielen perusteet

Java-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ä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

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 16.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 16.9.2015 1 / 26 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD)

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) Ohjelmointikäytännöt 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 1 Sisältö 1) Mitä on hyvä koodi? 2) Ohjelmointikäytäntöjen merkitys? 3) Koodin asettelu

Lisätiedot

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Pythonin 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ä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

TIE-20200 Ohjelmistojen suunnittelu

TIE-20200 Ohjelmistojen suunnittelu TIE-20200 Ohjelmistojen suunnittelu Luento 7: SOLID ja olioiden rakentelumalleja TIE-20200 Samuel Lahtinen 1 Ajankohtaista Harjoitustyössä suunnittelusessioiden ajanvaraus auki Viikkoharjoituksissa tehtaaseen/rakennuttajiin

Lisätiedot

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN SISÄLLYS 3. Luokkakaavio UML -mallinnuskielessä 3.1 Luokkakaavion luokan rakenteet 3.2 Luokan kuvauksesta C++ ohjelmakoodiksi 3.3 Luokkakaavion luokkien yhteystyypit

Lisätiedot

JWT 2016 luento 11. to 21.4.2016 klo 14-15. Aulikki Hyrskykari. PinniB 1097. Aulikki Hyrskykari

JWT 2016 luento 11. to 21.4.2016 klo 14-15. Aulikki Hyrskykari. PinniB 1097. Aulikki Hyrskykari JWT 2016 luento 11 to 21.4.2016 klo 14-15 Aulikki Hyrskykari PinniB 1097 1 Viime luennolla o AJAX ja JSON, harjoitustyön tehtävänanto, vierailuluento avoimesta datasta Tänään o APIt rajapinnoista yleisesti

Lisätiedot

Operaattorin ylikuormitus ja käyttäjän muunnokset

Operaattorin ylikuormitus ja käyttäjän muunnokset 13 Operaattorin ylikuormitus ja käyttäjän muunnokset Luvussa 7, "Ominaisuudet, taulukot ja indeksoijat," opit, miten luokan yhteydessä käytetään ohjelmallisesti []-operaattoria, jolloin objektia voidaan

Lisätiedot

Abstraktit tietotyypit ja olio-ohjelmointi

Abstraktit tietotyypit ja olio-ohjelmointi Abstraktit tietotyypit ja olio-ohjelmointi Edellisessä osassa käsiteltiin aliohjelmia prosessiabstraktion välineenä. Prosessiabstraktio onkin vanhimpia ohjelmointikielten suunnittelukäsitteitä ja sisältynyt

Lisätiedot

Luokan sisällä on lista

Luokan 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ä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

Kertaus: yleistys-erikoistus ja perintä

Kertaus: yleistys-erikoistus ja perintä Kertaus: yleistys-erikoistus ja perintä Nauta, Lehmä ja Kuttu ovat Kotieläimiä, Kotieläimet Eläimiä Kotieläimillä (siis myös Naudoilla, Lehmillä ja Kutuilla) on Omistaja Kuttu ja Lehmä toteuttavat rajapinnan

Lisätiedot

Pakkauksen kokoaminen

Pakkauksen kokoaminen 13. Pakkaukset 13.1 Sisällys Pakkauksen kokoaminen (package). Pakkaukset ja hakemistorakenne. Pakkauksen luokkien käyttö muissa pakkauksissa (import). Pakkaukset ja näkyvyys. 13.2 Pakkauksen kokoaminen

Lisätiedot

Tässä dokumentissa kuvataan Keimo-projektissa sovellettavia ohjelmointikäytäntöjä. Päivämäärä 10.11.2002 Projektiryhmä Keimo keimo-dev@list.hut.

Tässä dokumentissa kuvataan Keimo-projektissa sovellettavia ohjelmointikäytäntöjä. Päivämäärä 10.11.2002 Projektiryhmä Keimo keimo-dev@list.hut. T-76.115 Tietojenkäsittelyopin ohjelmatyö Sisältö Tässä dokumentissa kuvataan Keimo-projektissa sovellettavia ohjelmointikäytäntöjä. Päivämäärä 10.11.2002 Projektiryhmä Keimo keimo-dev@list.hut.fi Kirjoittajat

Lisätiedot

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

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

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

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Ohjelmointi II. Erkki Pesonen Luennot ja harjoitukset. Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015

Ohjelmointi II. Erkki Pesonen Luennot ja harjoitukset. Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015 Ohjelmointi II Erkki Pesonen Luennot ja harjoitukset Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015 1 Johdantoa kurssilla opiskeluun: oppimistavoitteet. 1. Tiedän mitä asioita kurssilla opiskellaan

Lisätiedot

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko JavaRMI 1 JAVA RMI Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko JavaRMI 2 Table of Contents...1 JAVA RMI...1 Yleistä...4 Arkkitehtuuri...5 Java RMI kerrosarkkitehtuuri...5

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

Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia.

Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia. MagicDraw-pikaohje Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia. Alkuvalmistelut Windows (sali TC205) 1) Kirjaudu sisään TTY:n intra-tunnuksella.

Lisätiedot

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 11. Luokka Opetellaan seuraavaksi, miten omia luokkia kirjoitetaan. Aikaisemmin olikin jo esillä, että luokka on tietorakenne, joka sisältää sekä tiedot (attribuutit) että niitä käsittelevät aliohjelmat

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2011 1 / 34 Luentopalaute kännykällä käynnissä! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

Lisätiedot

14.1 Rekursio tyypitetyssä lambda-kielessä

14.1 Rekursio tyypitetyssä lambda-kielessä Luku 14 Rekursiiviset tyypit Edellisessä luvussa esitetyt tietue- ja varianttityypit eivät yksinään riitä kovin mielenkiintoisten tietorakenteiden toteuttamiseen. Useimmissa ohjelmissa tarvitaan erilaisia

Lisätiedot