Peruskäsitteitä : Abstraktiivisuus (abstract)

Abstraktiivisuus

C# mahdollistaa erityisten abstraktien luokkien teon, joiden ominaisuudet ja toiminnot ovat käytettävissä ainoastaan ko.luokan perityissä aliluokissa. Näistä abstrakteista luokista ei voi tehdä instanssia suoraan. Nämä "abstraktit luokat" on määritelty ns. "uninstantiable"-tilaan eli niistä ei voi tehdä olioita new-operaattorilla ja konstruktorikutsulla. Abstrakteja luokkia on tarkoitus on käyttää vain varsinaisten luokkien kantaluokkana, eli nisitä periytetään luokkia, joista luodaan sitten olioita. Vertaus reaalielämään: "auto ja moottoripyörä ovat ajoneuvoja, mutta ajoneuvo itsessään ei ole mikään esine."

Abstraktit-luokat (abstract classes)

Luokat näyttävät määrittelyiltään tavallisilta luokilta, mutta luokkamäärittelyn yhdeyssä on käytetty abstract-avainsanaa. Nämä abstraktit luokat voivat sisältää ominaisuuksia, konstruktoreita ja toimintoja, kuten normaalit luokat. Luokan sisällä täytyy kuitenkin olla ainakin yksi metodi, jonka toteutus on jätetty toteuttamatta ja metodin esittelyn yhteydessä on käytetty abstract-avainsanaa. Tämä/nämä abstraktit metodit täytyy olla toteutettuna aliluokassa.


    
	

Abstraktit jäsenet

Luokan abstraktit jäsenet (siis esimerkiksi ominaisuudet ja metodit) ovat sellaisia, että niillä ei ole toteutusta, vaan se on toteutettava perivässä luokassa. Huomaa, että sinun tulee käyttää override-määrettä, kun toteutat perityssä luokassa ominaisuutta tai metodia. Abstrakti-luokka tavallaan "pakottaa" siitä perityn aliluokan toteuttamaan jonkin tietyn tehtävän eli metodin.



    

Esimerkki: Abstrakti piirto-objekti

Tutkitaan asiaa esimerkin valossa. Tehdään abstrakti DrawingObject-luokka, jolla on abstrakti Draw()-metodi.


    

Yllä olevasta DrawingObject-luokasta ei voi tehdä oliota, koska luokka on määritelty abstraktiksi. Luokka toimii tällöin kantaluokkana ja pakottaa perivänluokan toteuttamaan ko. Draw()-metodin.

Toteutetaan Circle-luokka, joka periytyy yllä olevasta DrawingObject-luokasta ja toteuttaa Draw()-metodin.


    

Voimme toteuttaa myös Square-luokan, joka periytyy yllä olevasta DrawingObject-luokasta ja toteuttaa Draw()-metodin.


    

Tämän jälkeen Circle- ja Square-luokka voidaan käyttää seuraavasti:


    
        
    

Lisätietoa:

Abstract and Sealed Classes and Class Members (C# Programming Guide)
Interfaces (C# Programming Guide)