• Ei tuloksia

5. Periytyminen 5. Periytyminen mekanismina mekanismina

N/A
N/A
Info
Lataa
Protected

Academic year: 2022

Jaa "5. Periytyminen 5. Periytyminen mekanismina mekanismina"

Copied!
3
0
0

Kokoteksti

(1)

Sopimuspohjainen olio-ohjelmointi

Sopimuspohjainen olio-ohjelmointi 2008-04-02 2008-04-02

(c) 2006-2008 Jouni Smed

(c) 2006-2008 Jouni Smed 1 1

5. Periytyminen 5. Periytyminen mekanismina mekanismina

1.

1. Alityypitys, periytyminen jaAlityypitys, periytyminen ja polymorfismi

polymorfismi 2.

2. Dynaaminen sidontaDynaaminen sidonta 3.

3. Määrittelyn erottaminenMäärittelyn erottaminen toteutuksesta

toteutuksesta

4.4. Rutiinien korvaus ja ylikuormitusRutiinien korvaus ja ylikuormitus 5.

5. LuokkahierarkiaLuokkahierarkia 6.6. EsimerkkejäEsimerkkejä 7.

7. Periytymisen käyttö eri tilanteisiinPeriytymisen käyttö eri tilanteisiin

Periytyminen Periytyminen

Asiakas Asiakas

Toteuttaja Toteuttaja

public public

sisäinen sisäinen toteutus toteutus

private private käyttökontrahti

käyttökontrahti

Uudelleen- Uudelleen- käyttäjä käyttäjä protected,

protected, public public toteutus- toteutus- kontrahti kontrahti

Alityypitys ja periytyminen Alityypitys ja periytyminen

Liskovin korvausperiaate: alityypitLiskovin korvausperiaate: alityypit käyttäytyvät siten kuin niiden käyttäytyvät siten kuin niiden ylityyppien määrittelyt ilmaisevat ylityyppien määrittelyt ilmaisevat

Oikeaoppinen tyyppiteorian käyttöOikeaoppinen tyyppiteorian käyttö

periytyjä on perimänsä luokan alityyppiperiytyjä on perimänsä luokan alityyppi

periytyjä noudattaa perimänsä luokanperiytyjä noudattaa perimänsä luokan operaatioiden määrittelyjä

operaatioiden määrittelyjä

Polymorfismi Polymorfismi

Tunnisten kyky viitataTunnisten kyky viitata moneen erityyppiseen moneen erityyppiseen olioon

olioon

Henkilö

Henkilö yksilö; yksilö;

Työntekijä

Työntekijä duunari; duunari;

duunari =

duunari = newnew TyöntekijäTyöntekijä((""B. VirtanenB. Virtanen""););

yksilö = duunari;

yksilö = duunari;

Työntekijä Työntekijä Henkilö Henkilö

Sidonta Sidonta

Luokka Luokka AA ja sen perijä ja sen perijä BB antavat antavat eri toteutuksen rutiinille

eri toteutuksen rutiinille ff,,

Luokan Luokan AA asiakas kutsuu rutiinia asiakas kutsuu rutiinia käyttäen muuttujaa

käyttäen muuttujaa xx, johon, johon liittyy polymorfisesti luokan liittyy polymorfisesti luokan BB olioolio

ts. ts. AA x = x = newnew BB(); x.f();(); x.f();

Mitä tapahtuu?Mitä tapahtuu?

Vaihtoehto 1: Staattinen Vaihtoehto 1: Staattinen sidonta

sidonta

Valintapäätös tehdään käännösaikanaValintapäätös tehdään käännösaikana

kääntäjä ei voi tietää muuttujan kääntäjä ei voi tietää muuttujan xx dynaamista dynaamista tyyppiä

tyyppiä

x.f()x.f() kutsuu luokan kutsuu luokan AA rutiinia rutiinia

Oletus mm. C++:ssa (ohjelmoijanOletus mm. C++:ssa (ohjelmoijan muutettavissa)

muutettavissa)

Javassa staattisesti sidotaanJavassa staattisesti sidotaan

jäsenmuuttujatjäsenmuuttujat

staticstatic-luokkametodit-luokkametodit

finalfinal-rutiinit-rutiinit

privateprivate-rutiinit-rutiinit

(2)

Sopimuspohjainen olio-ohjelmointi

Sopimuspohjainen olio-ohjelmointi 2008-04-02 2008-04-02

(c) 2006-2008 Jouni Smed

(c) 2006-2008 Jouni Smed 2 2

Vaihtoehto 2: Dynaaminen Vaihtoehto 2: Dynaaminen sidonta

sidonta

Valintapäätös tehdään ajoaikanaValintapäätös tehdään ajoaikana

rutiini rutiini ff valitaan muuttujaan valitaan muuttujaan xx sillä sillä hetkellä liitetyn olion tyypin mukaan hetkellä liitetyn olion tyypin mukaan

x.f()x.f() kutsuu luokan kutsuu luokan BB rutiinia rutiinia

Oletussidonta JavassaOletussidonta Javassa

ei ohjelmoijan muutettavissaei ohjelmoijan muutettavissa

Staattinen ja dynaaminen Staattinen ja dynaaminen tyyppi 1(3)

tyyppi 1(3)

Staattinen tyyppiStaattinen tyyppi

ilmaistaan muuttujan esittelyssäilmaistaan muuttujan esittelyssä

pysyy muuttumattomanapysyy muuttumattomana

Dynaaminen tyyppiDynaaminen tyyppi

määräytyy sen mukaanmääräytyy sen mukaan minkälaiseen olioon muuttuja minkälaiseen olioon muuttuja kullakin hetkellä viittaa kullakin hetkellä viittaa

Staattinen ja dynaaminen Staattinen ja dynaaminen tyyppi 2(3)

tyyppi 2(3)

Henkilö

Henkilö yksilö = yksilö = newnew Työntekijä

Työntekijä(("Lennart Nilk"Lennart Nilkénén""););

Työntekijä

Työntekijä duunari = duunari = newnew Työntekijä

Työntekijä(("B. Virtanen""B. Virtanen"););

Dynaaminen tyyppijoukkoDynaaminen tyyppijoukko

staattisen tyypin ja sen alityyppienstaattisen tyypin ja sen alityyppien muodostama joukko

muodostama joukko

sopivat yhteeen staattisen tyypinsopivat yhteeen staattisen tyypin kanssa

kanssa

Staattinen ja dynaaminen Staattinen ja dynaaminen tyyppi 3(3)

tyyppi 3(3)

Mahdottomia asetuksia kun Mahdottomia asetuksia kun HenkilöHenkilö yksilö

yksilö ja ja TyöntekijäTyöntekijä duunari duunari

duunari = yksilö;duunari = yksilö;

yksilö = duunari;yksilö = duunari;

ansio = yksilö.annaPalkka();

ansio = yksilö.annaPalkka();

Yleistulkinta (Yleistulkinta (upcastingupcasting))

yksilö = duunari;yksilö = duunari;

Erikoistulkinta (Erikoistulkinta (downcastingdowncasting))

duunari = (duunari = (TyöntekijäTyöntekijä)yksilö;)yksilö;

Luokkatyypit Luokkatyypit

Rajapintaluokka (Rajapintaluokka (interfaceinterface))

Abstrakti luokka (Abstrakti luokka (abstract classabstract class))

Konkreetti luokka (Konkreetti luokka (concrete classconcrete class))

Rajapintaluokka Rajapintaluokka

Luokkamäärittely: Luokkamäärittely: interfaceinterface

Ei sisällä rutiinitoteutuksiaEi sisällä rutiinitoteutuksia

Kaikki piirteet ovat tyypiltäänKaikki piirteet ovat tyypiltään

publicpublic

abstractabstract

Määrittelee roolin toteuttajilleMäärittelee roolin toteuttajille

(3)

Sopimuspohjainen olio-ohjelmointi

Sopimuspohjainen olio-ohjelmointi 2008-04-02 2008-04-02

(c) 2006-2008 Jouni Smed

(c) 2006-2008 Jouni Smed 3 3

Rajapintaesimerkki Rajapintaesimerkki

public interface

public interface KirjoittavaKirjoittava { { public voidpublic void kirjoita( kirjoita(AsiakirjaAsiakirja a); a);

} }

public interface public interface LukevaLukeva { {

public voidpublic void lue( lue(AsiakirjaAsiakirja a); a);

}}

public interface

public interface PoliisiPoliisi extendsextends LukevaLukeva, , KirjoittavaKirjoittava { { public voidpublic void sakota( sakota(HenkilöHenkilö h, h, doubledouble summa); summa);

public voidpublic void pidätä( pidätä(HenkilöHenkilö h); h);

}}

public class

public class HarjunpääHarjunpää implementsimplements PoliisiPoliisi { { /* ... *//* ... */ } }

Abstrakti luokka Abstrakti luokka

Luokkamäärittely: Luokkamäärittely: abstract classabstract class

Voi sisältää sekä abstrakteja ettäVoi sisältää sekä abstrakteja että konkreetteja rutiineja

konkreetteja rutiineja

Ei voida konstruoida!Ei voida konstruoida!

Voi silti toteuttaa konstruktorinVoi silti toteuttaa konstruktorin periytymistä varten

periytymistä varten

Esimerkki: Esimerkki: RajoitettuPinoRajoitettuPino

Konkreetti luokka Konkreetti luokka

Luokkamäärittely: Luokkamäärittely: classclass

Kaikki piirteet on määriteltyKaikki piirteet on määritelty

VoVoidaan konstruoidaidaan konstruoida

Rutiinien korvaus ja Rutiinien korvaus ja ylikuormitus

ylikuormitus

Ta

Ta paluutyyppipaluutyyppi niminimi (argumentit)(argumentit) poikkeuksetpoikkeukset

TbTb paluutyyppipaluutyyppi niminimi (argumentit)(argumentit) poikkeuksetpoikkeukset

Ta

Ta paluutyyppipaluutyyppi niminimi (argumentit)(argumentit) poikkeuksetpoikkeukset

TbTb paluutyyppipaluutyyppi niminimi (argumentit)(argumentit) poikkeuksetpoikkeukset

Viittaukset

LIITTYVÄT TIEDOSTOT

Permiläisissä kielissä ei esiinny itsenäisenä lekseeminään sanaa *gɔr ’vuori’, mutta komin yhdyssana goruv ’vuoren alarinne’ (uv ’alaosa, -puoli’) ja udmurtin johdos

  Liskovin korvausperiaate: alityypit Liskovin korvausperiaate: alityypit käyttäytyvät siten kuin niiden käyttäytyvät siten kuin niiden ylityyppien määrittelyt

Jos periytyminen määritellään olevan tyyppiä private, ovat kaikki johdetun luokan jäsenet tyyppiä private (siis kantaluokan sekä public- että.. protected-jäsenet

Kun Borelli näki eläinten lihakset ja luuston teknisenä mekanismina, hän sai käyttöönsä tar- kemmin määritellyn käsitteellisen verkoston kuin Harvey sosiaalisten

Tällaiset vangit käyttäytyvät aina siivosti, sillä aivan väärä luulo on se, että näm ä henkilöt olisivat luonteeltaan

Ilmoitettiin, että asia on lähetetty valiokunnalle mahdollisia toi- menpiteitä

Sustainable Fashion in a Circular

6 § M 2/2004 vp Perustuslain 115 §:n mukainen muistutus valtioneu- voston oikeuskanslerin Paavo Nikulan virkatointen lainmukaisuu- den tutkimisesta (Hannu Hoskonen /kesk ym.)..