Abstraktiluokka vs. konkreettinen luokka
Useimmat suositut nykyaikaiset olioohjelmointikielet, kuten Java ja C, ovat luokkapohjaisia. He saavuttavat olio-käsitteet, kuten kapseloinnin, periytymisen ja polymorfismin luokkien avulla. Luokat ovat abstrakteja reaalimaailman esineitä. Luokat voivat olla joko konkreettisia tai abstrakteja riippuen niiden menetelmätoimintojen toteutustasosta. Konkreettinen luokka toteuttaa täysin kaikki menetelmänsä. Abstraktia luokkaa voidaan pitää tavallisen (konkreettisen) luokan rajoitettuna versiona, jossa se voi sisältää osittain toteutettuja menetelmiä. Tyypillisesti konkreettisia luokkia kutsutaan (vain) luokiksi.
Mikä on betoniluokka?
Oletusluokka on konkreettinen luokka. Luokka-avainsanaa käytetään luokkien määrittelemiseen (esim. Javassa). Ja yleensä niitä kutsutaan yksinkertaisesti luokiksi (ilman adjektiivia konkreettinen). Konkreettiset luokat kuvaavat todellisen maailman esineiden käsitteellistä esitystä. Luokilla on ominaisuuksia, joita kutsutaan attribuuteiksi. Attribuutit toteutetaan globaaleina ja ilmentymämuuttujina. Luokkien menetelmät edustavat tai määrittelevät näiden luokkien käyttäytymistä. Luokkien menetelmiä ja attribuutteja kutsutaan luokan jäseniksi. Tyypillisesti kapselointi saavutetaan tekemällä attribuuteista yksityisiä, samalla kun luodaan julkisia menetelmiä, joita voidaan käyttää näiden määritteiden käyttämiseen. Objekti on luokan esiintymä. Perinnön avulla käyttäjä voi laajentaa luokkia (jota kutsutaan alaluokiksi) muista luokista (kutsutaan superluokiksi). Polymorfismin avulla ohjelmoija voi korvata luokan objektin sen superluokan objektin tilalle. Tyypillisesti ongelmanmäärittelystä löytyvistä substantiivista tulee suoraan ohjelman luokkia. Ja samoin verbeistä tulee menetelmiä. Julkinen, yksityinen ja suojattu ovat tyypillisiä luokkien käyttöoikeuksia.
Mikä on abstrakti luokka?
Abstraktit luokat ilmoitetaan abstraktilla avainsanalla (esim. Javassa,). Tyypillisesti abstrakteja luokkia, jotka tunnetaan myös nimellä Abstract Base Classes (ABC), ei voi ilmentää (tämän luokan esiintymää ei voida luoda). Abstrakteilla luokilla on siis merkitystä vain, jos ohjelmointikieli tukee periytymistä (kyky luoda alaluokkia luokan laajentamisesta). Abstraktit luokat edustavat yleensä abstraktia käsitettä tai kokonaisuutta, joka on osittain toteutettu tai ei ollenkaan. Siksi abstraktit luokat toimivat pääluokina, joista alaluokat johdetaan, joten aliluokka jakaa yläluokan epätäydelliset ominaisuudet ja toimintoja voidaan lisätä niiden täydentämiseksi.
Abstraktit luokat voivat sisältää abstrakteja menetelmiä. Abstraktia luokkaa laajentavat alaluokat voivat toteuttaa nämä (perityt) abstraktit menetelmät. Jos lapsiluokka toteuttaa kaikki tällaiset abstraktit menetelmät, siitä tulee konkreettinen luokka. Mutta jos ei, lapsiluokasta tulee myös abstrakti luokka. Kaikki tämä tarkoittaa, että kun ohjelmoija nimeää luokan tiivistelmäksi, hän sanoo, että luokka on epätäydellinen ja siinä on elementtejä, jotka perivien alaluokkien on täydennettävä. Tämä on mukava tapa tehdä sopimus kahden ohjelmoijan välille, mikä yksinkertaistaa ohjelmistokehityksen tehtäviä. Ohjelmoijan, joka kirjoittaa perittävän koodin, on noudatettava menetelmän määritelmiä tarkasti (mutta tietysti hänellä voi olla oma toteutus).
Mitä eroa on abstraktin luokan ja konkreettisen luokan välillä?
Abstrakteilla luokilla on yleensä toteutus osittain tai ei ollenkaan. Toisa alta konkreettisilla luokilla on aina täysi toteutus sen käyttäytymisestä. Toisin kuin konkreettisia luokkia, abstrakteja luokkia ei voida instantoida. Siksi abstrakteja luokkia on laajennettava, jotta niistä tulisi hyödyllisiä. Abstraktit luokat voivat sisältää abstrakteja menetelmiä, mutta konkreettiset luokat eivät. Kun abstraktia luokkaa laajennetaan, kaikki menetelmät (sekä abstraktit että konkreettiset) periytyvät. Peritty luokka voi toteuttaa minkä tahansa tai kaikki menetelmät. Jos kaikkia abstrakteja menetelmiä ei ole toteutettu, siitä luokasta tulee myös abstrakti luokka.