TIE-20200 Ohjelmistojen suunnittelu



Samankaltaiset tiedostot
TIE Ohjelmistojen suunnittelu


815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

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

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

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

812336A C++ -kielen perusteet,

Virtuaalifunktiot ja polymorfismi

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

5. Suunnittelumallit. TTY Ohjelmistotekniikka

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

TIE Ohjelmistojen suunnittelu

15. Ohjelmoinnin tekniikkaa 15.1

TIE Ohjelmistojen suunnittelu. Kopiointia ja sijoittelua

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

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

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

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

12 Mallit (Templates)

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

Kehyspohjainen ohjelmistokehitys

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

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

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

15. Ohjelmoinnin tekniikkaa 15.1

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

Olio-ohjelmointi Syntaksikokoelma

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

Olio-ohjelmointi Javalla

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

Tietorakenteet ja algoritmit

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

12. Kehysarkkitehtuurit

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

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

5. Suunnittelumallit. TTY Ohjelmistotekniikka

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

TIE Ohjelmistojen suunnittelu

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

MUSEOT KULTTUURIPALVELUINA

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

TIE Ohjelmistojen suunnittelu. Kopiointia ja sijoittelua

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

13 Operaattoreiden ylimäärittelyjä

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

T Henkilökohtainen harjoitus: FASTAXON

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

Oliosuunnittelu. Oliosuunnittelu

RINNAKKAINEN OHJELMOINTI A,

1. Olio-ohjelmointi 1.1

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

Capacity Utilization

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

815338A Ohjelmointikielten periaatteet

TIE Ohjelmistojen suunnittelu

TIE Ohjelmistojen suunnittelu

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

Periytyminen. Luokat ja olio-ohjelmointi

Rajapinta (interface)

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

5. Design patterns. TTY Ohjelmistotekniikka

TIE Ohjelmistojen suunnittelu

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

Suunnittelumallit (design patterns)

Tietorakenteet ja algoritmit

The CCR Model and Production Correspondence

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Muutamia peruskäsitteitä

TIE Ohjelmistojen suunnittelu. Luento 2: protot sun muut

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

Ohjelmoinnin jatkokurssi, kurssikoe

SIMULINK S-funktiot. SIMULINK S-funktiot

Graafisen käyttöliittymän ohjelmointi Syksy 2013

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

9. Periytyminen Javassa 9.1

1. Mitä tehdään ensiksi?

Ohjelmistotekniikan menetelmät, suunnittelumalleja

TIE Ohjelmistojen suunnittelu

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

Muusta kuin vesisioista

Olet vastuussa osaamisestasi

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

Security server v6 installation requirements

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

A TIETORAKENTEET JA ALGORITMIT

Graafisen käyttöliittymän ohjelmointi Syksy 2013

TIE Ohjelmistojen suunnittelu

C# ja.net. Juha Järvensivu 2007

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

OHJ-1450 Olio-ohjelmoinnin jatkokurssi lisämateriaalia

Luokat ja oliot. Ville Sundberg

16. Allocation Models

Other approaches to restrict multipliers

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

Transkriptio:

TIE-20200 Ohjelmistojen suunnittelu Luento 1: Virtuaalifunktiot, Template method 1

Seuraavaksi 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 3

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) 4

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.. 5

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; } 6

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. 7

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. 8

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 tulostajosloytyy, joka 1. tulostaa parametrinaan saamansa avainsanan 2. tarkastaa löytyykö annettu avainsana kirjan tiedoista ja jos löytyy, tulostaa kirjan tiedot. 3. Jos avainsana löytyy myös/vain juonikuvauksesta, tulostetaan löydetystä avainsanasta seuraavat 20 merkkiä kuvauksesta. 10

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 11

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 jäsentelijä, esim. lataa tietoja tietyssä muodossa: Abstrakti kantaluokka DataImporter parsedata funktio (valitaan tiedosto, jäsennellään tiedot tiedostotyypin mukaisesti, kirjataan logiin tapahtumia, tuotetaan lopputulos käyttäjälle) Valmista omaa toteutusta: dataimporterfunktion runko, write2log, output Erikoistettavat toiminnot: parsefile Erikoistajat (eri) 15

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 16

Yhteenveto Perintä, virtuaalifunktiot yms. perustekniikoita, joita hyödynnetään useissa toteuteusmalleissa ja ympäristöissä Jatkossa lisää asiasta, käyttöliittykäkomponenttien erikoistamista sun muuta mukavaa 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) Älä käytä ilman järkevää syytä, ongelmalähtöisyys 17