Rajapinnat ja olioiden välittäminen

Samankaltaiset tiedostot
7. Oliot ja viitteet 7.1

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

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

Muutamia peruskäsitteitä

Osoitin ja viittaus C++:ssa

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

Ohjelmoinnin peruskurssien laaja oppimäärä

11/20: Konepelti auki

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

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

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

15. Ohjelmoinnin tekniikkaa 15.1

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

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

Mikä yhteyssuhde on?

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

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

Objective-C. Ryhmä 35: Ilpo Kärki Aleksi Pälä

815338A Ohjelmointikielten periaatteet

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

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

C++11 lambdat: [](){} Matti Rintala

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

Olio-ohjelmointi Syntaksikokoelma

Harjoitustyö: virtuaalikone

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Graafisen käyttöliittymän ohjelmointi Syksy 2013

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

Olio-ohjelmointi Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton. 1. Proxy (Edustaja)

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

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

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

Rakenteiset tietotyypit Moniulotteiset taulukot

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

C++-tyyliopas Tampereen teknillinen yliopisto, Ohjelmistotekniikka, 2005

1 Tavoitteet. 2 Periaatteet ja ominaisuudet. 2.1 Tyyppipäättely

TIE Ohjelmistojen suunnittelu. Kopiointia ja sijoittelua

1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on

Ohjelmoinnin peruskurssien laaja oppimäärä

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

TIE Ohjelmistojen suunnittelu

Ohjelmoinnin peruskurssien laaja oppimäärä

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Ohjelmoinnin peruskurssien laaja oppimäärä

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

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

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

Kooste. Esim. Ympyrän keskipiste voidaan ajatella ympyrän osaksi.

14. Poikkeukset 14.1

P e d a c o d e ohjelmointikoulutus verkossa

14. Poikkeukset 14.1

C# ja.net. Juha Järvensivu 2007

812341A Olio-ohjelmointi, I Johdanto

TIE Ohjelmistojen suunnittelu

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

15. Ohjelmoinnin tekniikkaa 15.1

VTJ:n pysyvän rakennustunnuksen käyttöönotto

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

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

Olio-ohjelmointi Johdanto olio-ohjelmointiin

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Olio-ohjelmointi Javalla

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

Käyttäjähallintapalvelun REST-rajapinnat

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

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

KOHDELUOKAN MÄÄRITTELY

Tie Principles of Programming Languages Seminar Essay. Lua. Group 23 Miikka Koskinen Joose Sainio

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

Ohjelmoinnin peruskurssien laaja oppimäärä

TIE Ohjelmistojen suunnittelu

TIE Ohjelmistojen suunnittelu

Delegaatit ja tapahtumakäsittelijät

C#-luokkien perusteet

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

8/20: Luokat, oliot ja APIt

Olio-ohjelmointi Poikkeusten käsittelystä. 1. Johdanto

Listarakenne (ArrayList-luokka)

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmistojen mallintaminen. Luento 11, 7.12.

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Lyhyt kertaus osoittimista

Rajapinta (interface)

4.2 Muistinhallintaa avustava kirjasto Tutnew

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Tietorakenteet ja algoritmit

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. I Johdanto ohjelmointiin C++kielellä

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017.

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

Ohjelmoinnin peruskurssien laaja oppimäärä

KADA (Drupal 7) migraatio uuteen (versioon) webiin

Ohjelmoinnin peruskurssien laaja oppimäärä

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Demo 6 vastauksia. 1. tehtävä. #ifndef #define D6T1 H D6T1 H. #include <iostream> using std::ostream; using std::cout; using std::endl;

Transkriptio:

Rajapinnat ja olioiden välittäminen Moduulit/oliot kutsuvat toisiaan kapseloitujen rajapintojen läpi Kutsuissa välitetään usein olioita paikasta toiseen Jos olion omistus (= tuhoamisvastuu) säilyy koko ajan yhdessä paikassa, hyvä Usein kuitenkin tarve luoda olio toisella puolen rajapintaa, tuhota toisella puolella: olion omistus siirtyy rajapinnan yli Omistuksen siirtyminen dokumentoitava rajapintadokumentaatioon! 226 Olioiden ohjelmointi C++:lla, Matti Rintala & Jyke Jokinen1941

Olioiden omistus Omistuksen dokumentointi tärkeää monesta syystä: Olion tuhoamisvastuu (kielissä, jossa tätä ei ole automatisoitu) Olion vaatimat siivoustoimenpiteet (resurssien vapautus, tuhoutumisen ilmoittaminen muualle (poisrekisteröinti) yms.) = purkajan toiminnallisuus Automaattinen roskienkeruu (esim. Python) hoitaa ensimmäisen, mutta ei jälkimmäistä C++:ssa ei (vielä) roskienkeruuta ollenkaan, toisaalta purkaja hoitaa siivouksen, kunhan olio tuhotaan (ei automaattinen, jos new:llä luotu) Perinteisesti new:llä luodun olion tuhoaminen ohjelmoijan vastuulla (delete) C++11 tarjoaa omistuksen hallintaan myös älykkäät osoittimet 227 Olioiden ohjelmointi C++:lla, Matti Rintala & Jyke Jokinen1941

Omistuksen dokumentointi UML:ssä eri assosiaatiotyyppejä (tavallinen, jaettu kooste, muodostuminen... ) Assosiaatiot vaikuttavat myös olioiden omistussuhteisiin C++:ssa nykyisin useita eri tapoja viitata/osoittaa olioon (viite, osoitin, automaattiosoitin, jaettu osoitin, heikko osoitin) C++:n osoitintyypin valinnalla voi dokumentoida koodissa UML:ssä tehtyjä suunnitteluratkaisuja. Lisäksi osoitintyyppi helpottaa ko. assosiaation toteutusta. Kätevää! 228 Olioiden ohjelmointi C++:lla, Matti Rintala & Jyke Jokinen1941

Omistuksen dokumentointi C++:ssa Viite (&) Ei omistusta, ei voi olla NULL (0) Kohde säilyy samana viitteen elinkaaren ajan Ei käy STL-säiliöiden alkioksi (Assignable) Osoitin (*) Ei omistusta (tai omistuksen hallinta tehty käsin) Käy STL-säiliöiden alkioksi (Assignable) 229 Olioiden ohjelmointi C++:lla, Matti Rintala & Jyke Jokinen1941

Omistuksen dokumentointi C++11:ssa Jaettu osoitin (std::shared ptr, <memory>) Jaettu omistus usean jaetun osoittimen kesken Viimein jaettu osoitin poistaa omistettavan Varottava syklejä! (Ratkaisu: viite/heikko osoitin) Tavallinen osoitin: get(), (ei luopumista) Uusi omistus tavallisesta osoittimesta: reset() Jakotilanteen selvitys: use count(), unique() (dynamic pointer cast, static pointer cast, const pointer cast) (enable shared from this-kantaluokka) Olion luominen suoraan jaettun osoittimen päähän: std::make shared<x>(...) 230 Olioiden ohjelmointi C++:lla, Matti Rintala & Jyke Jokinen1941

Omistuksen dokumentointi C++11:ssa Uniikkiosoitin (std::unique ptr, <memory>) Omistus yksinoikeudella Omistuksen voi eksplisiittisesti siirtää kopioinnissa ja sijoituksessa (alkuperäinen tyhjenee) p2 = std::move(p1) Tavallinen osoitin: get(), luopuminen: release() Uusi omistus tavallisesta osoittimesta: reset() Olion luominen suoraan uniikkiosoittimen päähän (C++14): std::make unique<x>(...) 231 Olioiden ohjelmointi C++:lla, Matti Rintala & Jyke Jokinen1941

Omistuksen dokumentointi C++11:ssa Heikko osoitin (std::weak ptr, <memory>) Osoittaa kiinnostuksen jaettuun kohteeseen, ei riitä pitämään hengissä Kätevä jaettu osoitin -syklien rikkomiseen Kätevä myös, jos halutaan tietää onko kohde jo tuhottu Viimeinen jaettu osoitin poistaa kohteen, vaikka heikkoja osoittimia jäljellä (heikot expired()) Ei tarjoa suoraan pääsyä kohteeseen, mutta tuottaa jaetun osoittimen Jaetun osoittimen luonti: lock(), shared ptr sp(wp) (jos jo tuhottu, lock 0, sp:n luonnista poikkeus) Kiinnostuksesta luopuminen (nollaus): reset() Jakotilanteen selvitys: expired(), (use count()) 232 Olioiden ohjelmointi C++:lla, Matti Rintala & Jyke Jokinen1941