TIE-20200 Ohjelmistojen suunnittelu



Samankaltaiset tiedostot
TIE Ohjelmistojen suunnittelu


815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

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

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

Ohjelmistoarkkitehtuurit kevät

Tarjolla tänään: Sanastoa Koneenohjausjärjestelmien suunnittelumallit. Pattern Architecture Style. GoF. Design pattern

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

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

5. Suunnittelumallit. TTY Ohjelmistotekniikka

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Virtuaalifunktiot ja polymorfismi

812336A C++ -kielen perusteet,

Sisällys. Ratkaisumallien historia. Ratkaisumalli. Ratkaisumalli [2] Esimerkki: Composite [2] Esimerkki: Composite. Jaakko Vuolasto 25.1.

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

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VIII Suunnittelumallit Observer ja State

Käyttöliittymät II. Käyttöliittymät I Kertaus peruskurssilta. Keskeisin kälikurssilla opittu asia?

TIE Ohjelmistojen suunnittelu

15. Ohjelmoinnin tekniikkaa 15.1

TIE Ohjelmistojen suunnittelu

Kehyspohjainen ohjelmistokehitys

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

TIE Ohjelmistojen suunnittelu. Kopiointia ja sijoittelua

1. Olio-ohjelmointi 1.1

12. Kehysarkkitehtuurit

5. Suunnittelumallit. TTY Ohjelmistotekniikka

15. Ohjelmoinnin tekniikkaa 15.1

Olio-ohjelmointi Javalla

MUSEOT KULTTUURIPALVELUINA

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

Tietorakenteet ja algoritmit

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

Tiedostonkäsittely ja asetusten tallentaminen. Graafisen käyttöliittymän ohjelmointi Luento 14

Olio-ohjelmointi Syntaksikokoelma

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Luokat. Luokat ja olio-ohjelmointi

TIE Ohjelmistojen suunnittelu

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

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

12 Mallit (Templates)

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

T Henkilökohtainen harjoitus: FASTAXON

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

5. Design patterns. TTY Ohjelmistotekniikka

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

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

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

Suunnittelumallit (design patterns)

Mikä yhteyssuhde on?

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

TIE Ohjelmistojen suunnittelu

RINNAKKAINEN OHJELMOINTI A,

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

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

TIE Ohjelmistojen suunnittelu. Kopiointia ja sijoittelua

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

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

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

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Tehtävä 1. TL5302 Olio-ohjelmointi Koe Malliratkaisuja. Tässä sekä a)- että b)-kohdan toimiva ratkaisu:

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Olet vastuussa osaamisestasi

Ohjelmistoarkkitehtuurit Kevät 2016 Johdantoa

Rajapinta (interface)

Delegaatit ja tapahtumakäsittelijät

Rakentamisen 3D-mallit hyötykäyttöön

TIEKE Verkottaja Service Tools for electronic data interchange utilizers. Heikki Laaksamo

TIE Ohjelmistojen suunnittelu

Tyyppiluokat II konstruktoriluokat, funktionaaliset riippuvuudet. TIES341 Funktio-ohjelmointi 2 Kevät 2006

C# olio-ohjelmointi perusopas

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

Oliosuunnittelu. Oliosuunnittelu

Ohjelmoinnin jatkokurssi, kurssikoe

TIE Ohjelmistojen suunnittelu

9. Periytyminen Javassa 9.1

Capacity Utilization

The CCR Model and Production Correspondence

Tässä dokumentissa kuvataan Keimo-projektissa sovellettavia ohjelmointikäytäntöjä. Päivämäärä Projektiryhmä Keimo

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

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

TIE Ohjelmistojen suunnittelu

Security server v6 installation requirements

Other approaches to restrict multipliers

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

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

815338A Ohjelmointikielten periaatteet

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

BDD (behavior-driven development) suunnittelumenetelmän käyttö open source projektissa, case: SpecFlow/.NET.

13 Operaattoreiden ylimäärittelyjä

Funktiomallit Funktiomallin määrittely

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VI Johdanto suunnittelumalleihin

A TIETORAKENTEET JA ALGORITMIT

C++ tukee myös kaksoistarkkuuden ja yhden tarkkuuden liukulukutietotyyppejä:

Security server v6 installation requirements

Kuvailulehti. Korkotuki, kannattavuus. Päivämäärä Tekijä(t) Rautiainen, Joonas. Julkaisun laji Opinnäytetyö. Julkaisun kieli Suomi

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

The Viking Battle - Part Version: Finnish

Transkriptio:

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ä ryhmätönnä Pidetään ryhmäytymissessio luentotauolla/luentojen lopuksi Joo, nää luennot on eri aikaan ku normaalisti Seuraavalla kerralla protoilujuttuja (QML-pikaisesti), suunnittelupuolta Kokeesta : UML-juttuja luennoilla tuhrusteluna, jonkinlainen yleiskooste myös tarjolla Virtuaalifunktioita mm. tänään Kopiointia ja elinaikajuttuja tänään

Tänään tarjolla: Otekn-asiaa vähän pintaa syvemmältä Virtuaalifunktiot ja erikoistaminen, olioiden kopiointi ja elinaika Tyystin uusi asia, tutustutaan yksinkertaiseen suunnittelumalliin (=huomataan, että ratkaisu on tuttua kamaa ja yleisessä käytössä)

Dynaaminen sidonta, perintä Kerrataan virtuaalifunktioiden ideaa tutustumalla Template method -suunnittelumalliin Ei mitään tekemistä c++:n template:jen kanssa Voi hyvinkin näyttää tutultua jutulta omasta tai muiden koodista suunnittelu/toteutusmallien idea, hyväksi havaittu ratkaisu johonkin olemassa olevaan ongelmaan 4

Virtuaalifunktiot ja perintä pikaisesti Kantaluokka esittelee virtuaalifunktion (tai abstrakti kantaluokka puhtaasti virtuaalisen funktion) Aliluokka voi toteuttaa funktion omalla tavallaan (tai aliluokan täytyy toteuttaa, jos puhtaasti virtuaalinen) Dynaaminen sidonta ajoaikaisesti tapahtuva oikean toteutuksen kutsu (rajapinta ei kerro, mitä toteutusta ollaan kutsumassa) 5

Virtuaalifunktiot ja perintä pikaisesti Kantaluokka esittelee virtuaalifunktion: Aliluokka voi toteuttaa funktion omalla tavallaan (tai täytyy toteuttaa, jos puhtaasti virtuaalinen). Jos kantaluokka on määritellyt funktion virtuaaliseksi, aliluokka voi: Hyväksyä kantaluokan toteutuksen (eli ei tehdä mitään, toimia kuten laajentamisesimerkeissä). Kirjoittaa kokonaan uuden toteutuksen, korvaten kokonaan vanhan (overriding). Funktio pitää esitellä uudelleen aliluokan otsikkotiedostossa.. Edellisen erikoistapaus: käyttää kantaluokan toteutusta ja lisätä päälle omaa toiminnallisuutta.. 6

Virtuaalifunktiot ja perintä pikaisesti // kirja.hh // huomaa eri näkyvyysaluemääreet class Kirja { public: virtual void tulosta( std::ostream& out ) const;... protected: virtual bool etsitiedoista( const std::string& avainsana ) const; private: string kirjannimi_, kirjailija_, juonikuvaus_...; }; void Kirja::tulosta( std::ostream& out ) const { out << kirjailija_ << ":\"" << kirjannimi_ << '"' << " " << endl; } bool Kirja::etsiTiedoista( const std::string& avainsana ) const { // yritä löytää avainsana nimestä tai kirjailijan nimestä return kirjannimi_.find(avainsana)!= string::npos kirjailija_.find(avainsana)!= string::npos; } 7

Virtuaalifunktiot ja perintä pikaisesti class Kirjastonkirja: public Kirja {... virtual void tulosta( std::ostream& out ) const;... }; void KirjastonKirja::tulosta( ostream& out ) const { Kirja::tulosta( out ); // käytetään kantaluokan palvelua if( lainauspaiva_!= 0 ) { out << "-- lainattu " << *lainauspaiva_ << endl; } } Kirjastonkirja hyväksyy etsitiedoista() funktion kantaluokan tarjoaman toteutuksen, mutta erikoistaa tulostatiedot() -funktion Kirjastonkirja::tulosta() ei pysty (eikä pitäisikään pystyä ) käpistelemään kantaluokan jäsenmuuttujia. Se voi kuitenkin käyttää hyväkseen kantaluokan tulosta() funktiota kutsumalla sitä eksplisiittisesti. 8

Dynaaminen sidonta ja jäsenfunktiot void Kirja::tulostaJosLoytyy( std::string avainsana, std::ostream& out ) const { if( etsitiedoista( avainsana ) ) { out << "avainsana " << avainsana << " löytyi kirjasta: "; tulosta( out ); } } Dynaaminen sidonta toimii samaan tapaan myös luokkien sisällä Vaikka tulostajosloytyy() funktio on määritelty kantaluokassa Kirja, kutsutaan silti funktiota KirjastonKirja::tulosta() jos kirjan todellinen tyyppi on kirjaston kirja. 9

Puhtaasti virtuaalinen funktio ja toteutusrunko Puhtaasti virtuaalinen funktio voi sisältää myös toteutusta aliluokan on annettava toteutus, mutta se voi hyödyntää olemassa olevaa koodia Saman koodin copy-paste vähenee (virheet, muokattavuus yms.)

Ja takaisin asiaan, tehtävä: Kirjalla on nimi, kirjailija, juonikuvaus Virtuaalifunktiot: etsitiedoista, annajuonikuvaus, tulostatiedot Suunnittele kantaluokkaan kaikilla kirjatyypeillä toimiva funktio, joka 1. tulostaa parametrinaan saamansa avainsanan 2. kirjan tiedot 3. tarkastaa löytyykö annettu avainsana kirjan tiedoista ja jos löytyy, tulostaa kirjan tiedot. 4. Jos avainsana löytyy myös/vain juonikuvauksesta, tulostetaan löydetystä avainsanasta seuraavat 20 merkkiä kuvauksesta. 11

Ratkaisun analyysiä Pääsimme kohti yhden toteutusmallin ideaa, eivät tarjoa mitään mullistavan hienoa, vaan toimivia käytössä olevia ratkaisuja (GOF-patterns) Kantaluokkaan varsinainen haluttu toiminnallisuus aliluokat saavat määritellä oman osansa toiminnallisuudesta haluamallaan tavalla itse päätoiminnallisuus määritellään kertaalleen ja säilyy muuttumattomana 12

Template Method, puristisempi näkökulma Kantaluokka abstrakti, tarjoaa normaalin funktion (algoritmi) ja erikoistettavat funktiot Erikoistettavat funktiot protectediin, rajapinnan käyttäjällä vain kantaluokassa käyttäjän käyttöön mietityt palvelut Erikoistamisella voidaan muuttaa vain algoritmin osatoteutuksia Samaan hintaan Non-virtual interface pattern, julkinen rajapinta ei-virtuaalinen, erikoistusrajapinta protected

Suunnittelumallien rakenne Nimi Käyttötarkoitus Motivointi, ongelma-alueen kuvaus Konteksti Seuraukset (rajoitteet, toteutukset, tunnetut käyttökohteet)

GOF-kuvaus Design Patterns: Elements of Reusable Object-Oriented Software -Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides = Gang Of Four (GOF) Pattern Name and Classification: A descriptive and unique name that helps in identifying and referring to the pattern. Intent: A description of the goal behind the pattern and the reason for using it. Also Known As: Other names for the pattern. Motivation (Forces): A scenario consisting of a problem and a context in which this pattern can be used. Applicability: Situations in which this pattern is usable; the context for the pattern. Structure: A graphical representation of the pattern. Class diagrams and Interaction diagrams may be used for this purpose. Participants: A listing of the classes and objects used in the pattern and their roles in the design. Collaboration: A description of how classes and objects used in the pattern interact with each other. Consequences: A description of the results, side effects, and trade offs caused by using the pattern. Implementation: A description of an implementation of the pattern; the solution part of the pattern. Sample Code: An illustration of how the pattern can be used in a programming language. Known Uses: Examples of real usages of the pattern. Related Patterns: Other patterns that have some relationship with the pattern; discussion of the differences between the pattern and similar patterns.

Idean käyttökohteita Tiedon julkaisujärjestelmä Abstrakti kantaluokka Julkaisija julkaisepäivitykset funktio (alustaa, tallentaa logiin, suorittaa päivityksen) Omaa toteutusta: tallennalogiin Erikoistettavat toiminnot: LähetäTiedot, alusta Erikoistajat (eri julkaisukanavat (webpalvelut jne.), testitoteutukset) 16

Lisää samasta asiasta Graafiset käyttöliittymäkirjastot / ympäristöt Tarjoavat suurimman osan perustoiminnoista Käyttäjä antaa toteutuksen muutamille toiminnoille esim. onpaint, close, Initialize,... Käytössä myös monia muita ratkaisutapoja 17

Yhteenveto Opittiin asioita olioiden elinajasta sun muusta Perintä, virtuaalifunktiot yms. perustekniikoita, joita hyödynnetään useissa toteuteusmalleissa ja ympäristöissä Toteutusmallit/suunnittelumallit (design patterns) Idean ymmärtäminen tärkeää, toteutustekniikka yleensä melko yksinkertainen Ratkaisuja ongelmiin, tapa kommunikoida ratkaisuja Ongelmalähtöisyys, tavoitteena ei ole keksiä ensin kasaa kivoja tekniikoita ja sitten miettiä miten ne saa mahdutettua omaan koodiin vaan... Malleja on hirveät määrät, ulkoa opettelu turhaa (yleisimmät hyvä tuntea, tärkeämpää kyky lukea malleja/ymmärtää niiden vahvuudet/heikkoudet) 18