8. Periytyminen 8.1
Sisällys Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2
Mitä on periytyminen? Periytyminen (inheritance) tarkoittaa luokan piirteiden siirtymistä jollekin toiselle luokalle B. Tällöin sanotaan, että on B:n yliluokka (superclass) ja vastaavasti B on :n aliluokka (subclass). a b c B Piirteet: a, b Piirteet: a, b, c UML:n luokkakaaviossa luokkaa symboloi laatikko, jossa annetaan luokan nimi ja usein myös luokan piirteet. (ttribuutit ja metodit erotetaan myöhemmin väliviivalla, kun luokkasymboleita ryhdytään piirtämään hieman tarkemmin.) Periytymissuhde piirretään kolmiokärkisenä yliluokkaan osoittavana nuolena. 8.3
Mitä on periytyminen? Yliluokalla on yksi tai useampia aliluokkia. liluokka tuntee yliluokkansa, mutta ei aliluokkiaan. Luokka on luokan B esi-isä (ancestor) jos on B:n yliluokka tai B:n yliluokan esi-isä. Luokka B on luokan jälkeläinen (descendant), jos B on :n aliluokka tai :n jonkin aliluokan jälkeläinen. B D C 8.4
Mitä on periytyminen? Piirteet: a, b, c a b Piirteet: a, b Piirteet: a, b, d, e c B d e C f D Piirteet: a, b, d, e, f 8.5
Yksittäis- ja moniperiytyminen Yksittäisperiytymisessä (single inheritance) jokaisella aliluokalla on yksi yliluokka. Moniperiytymisessä (multiple inheritance) aliluokalla voi olla useampia yliluokkia. 1 2 B B 8.6
Yksittäis- ja moniperiytyminen Yksittäisperiytyminen tuottaa selkeän puumaisen rakenteen. Moniperiytyminen on kuvattavissa vaikeampiselkoisena verkkona. Molemmin tavoin saadaan aikaiseksi luokkahierarkia, jolla on juuri (root) tai juuria. B D C 8.7
Yksittäis- ja moniperiytyminen Moniperiytymisestä sekä hyötyä että haittaa. Joissakin kielissä, Java mukaan lukien, on vain yksittäisperiytyminen. Tämä Javan ominaisuus voidaan kiertää osin rajapintojen avulla. C++ on esimerkki kielestä, jossa luokalla voi olla useita yliluokkia. Jatkossa periytymisen esittely rajoitetaan vain yksittäisperiytymiseen. 8.8
Oliot ja perityt luokat Periytymisen kautta oliolla voi olla useampia luokkia. Jatkossa olion perusluokaksi sanotaan luokkaa, josta olio on luotu. Kukin yliluokka lisää olioon uuden kerroksen piirteitä (attribuutteja ja/tai metodeja). -luokan olio B B-luokan olio C C-luokan olio C D D-luokan olio 8.9
Periytymisen käyttö Pragmaattinen näkökulma: Periytyminen tukee koodin uudelleenkäyttöä: aliluokkien ei tarvitse toistaa perittyjä piirteitä. Periytymisen avulla voidaan kehittää ohjelmistoja tarkentaen (inkrementaalisesti): aliluokkia voidaan lisätä ilman, että yliluokkia tarvitsee muuttaa. Periytymisen avulla voidaan toteuttaa monimuotoisuutta. 8.10
Periytymisen käyttö Filosofinen näkökulma: Periytyminen tukee käsitteelliseen mallintamiseen perustuvaa ohjelmistokehitystä: aliluokka erikoistus ja yliluokka yleistys. Näin ollen periytymisellä voidaan mallintaa käsitehierarkioita. Periytymistä kutsutaankin joskus yleistämiseksi (generalization), koska periytyminen liittyy läheisesti käsitteellisestä mallintamisesta tuttuun Is-suhteeseen. Periytyminen on luontevaa, jos lause liluokka Is Yliluokka. tuntuu järkevältä. 8.11
Periytymisen käyttö Käsitehierarkia periytymisellä esitettynä: Eläin Nisäkäs Ihminen Kissa Opiskelija Opettaja Nisäkäs Is Eläin Ihminen Is Nisäkäs, Kissa Is Nisäkäs Opiskelija Is Ihminen, Opettaja Is Ihminen 8.12
Periytymisen käyttö liluokan tulisi aina tuoda yliluokkaansa jokin tarkennus (tai laajennus): liluokassa voidaan määritellä uusia piirteitä (attribuutteja ja metodeja). liluokka voi korvata (override) yliluokassa määritellyn toiminnallisuuden toteuttamalla perityn metodin eri tavoin. Korvaaminen on eräs monimuotoisuuden muoto. liluokka tyypillisesti rakentaa olion omalla tavallaan. 8.13
Nisäkäs, kissa ja ihminen Nisäkäs elossa, paino syö(), onkoiso() Piirteet: elossa, paino, syö(), onkoiso() Ihminen henkilötunnus puhu() Piirteet: elossa, paino, syö(), onkoiso(), henkilötunnus, puhu() Kissa väri, häntä ääntele(), kehrää() Piirteet: elossa, paino, syö(), onkoiso(), väri, häntä, ääntele(), kehrää() 8.14
Kissa-olio Misse-olio luodaan Kissaluokasta: Kissa on missen perusluokka. Koska jokainen kissa on nisäkäs, on misse on sekä Kissa että Nisäkäs. Misse perii Nisäkäs-luokasta attribuutit elossa ja paino sekä metodit syö() ja onkoiso(), jotka voidaan korvata Kissaluokassa siten, että ne toimivat kissalle ominaisesti. Lisäksi missellä on kissoille ominaiset piirteet (esim. attribuutti häntä ja metodi kehrää(). elossa, paino syö(), onkoiso() väri, häntä ääntele(), kehrää() Nisäkäs-kerros Kissa-kerros 8.15