Abstraktne klass vs betooni klass
Enamik populaarseid tänapäevaseid objektorienteeritud programmeerimiskeeli, nagu Java ja C #, on klassipõhised. Nad saavutavad klasside abil objektorienteeritud kontseptsioonid nagu kapseldamine, pärimine ja polümorfism. Klassid on reaalse maailma objektide abstraktne kujutis. Klassid võivad olla kas konkreetsed või abstraktsed, sõltuvalt nende metoodiliste funktsioonide rakendamise tasemest. Betooniklass rakendab täielikult kõiki oma meetodeid. Abstraktset klassi võib pidada tavalise (konkreetse) klassi piiratud versiooniks, kus see võib sisaldada osaliselt rakendatud meetodeid. Tavaliselt viidatakse betoonklassidele (lihtsalt) klassidena.
Mis on betoonklass?
Vaikeklass on konkreetne klass. Klassi märksõna kasutatakse klasside määratlemiseks (nt Java). Ja tavaliselt nimetatakse neid lihtsalt klassideks (ilma omadussõnata betooni). Betoonklassid kujutavad reaalmaailma objektide kontseptuaalset kujutamist. Klassidel on omadused, mida nimetatakse atribuutideks. Atribuute rakendatakse globaalsete ja esinemismuutujatena. Klasside meetodid tähistavad või määratlevad nende klasside käitumist. Klasside meetodeid ja atribuute nimetatakse klassi liikmeteks. Tavaliselt saavutatakse kapseldamine atribuutide privaatseks muutmisega, luues samal ajal avalikud meetodid, mida saab kasutada nendele atribuutidele juurdepääsu saamiseks. Objekt on klassi eksemplar. Pärimine võimaldab kasutajal laiendada klasse (nn alamklasse) teistest klassidest (nn superklassid). Polümorfism võimaldab programmeerijal oma superklassi objekti asemel asendada klassi objekt. Tavaliselt muutuvad probleemi määratlusest leitud nimisõnad programmis vahetult klassideks. Ja samamoodi saavad verbidest meetodid. Tundides kasutatavad tüüpilised juurdepääsu modifikaatorid on avalik, privaatne ja kaitstud.
Mis on abstraktne klass?
Abstraktsed klassid deklareeritakse märksõnaga Abstract (nt Java,). Tavaliselt ei saa abstraktseid klasse, mida tuntakse ka kui abstraktseid alusklasse (ABC), realiseerida (selle klassi eksemplari ei saa luua). Seega on abstraktsetel klassidel tähendus ainult siis, kui programmeerimiskeel toetab pärimist (võime luua alamklassid klassi laiendamisest). Abstraktsed klassid tähistavad tavaliselt abstraktset kontseptsiooni või üksust kas osaliselt või ilma rakendamata. Seetõttu toimivad abstraktsed klassid lapsevanemaklassidena, millest tuletatakse lasteklassid, nii et lasteklass jagab vanemklassi mittetäielikke funktsioone ja funktsionaalsuse saab nende täiendamiseks lisada.
Abstraktsed klassid võivad sisaldada abstraktseid meetodeid. Abstraktset klassi laiendavad alaklassid võivad neid (päritud) abstraktseid meetodeid rakendada. Kui lasteklass rakendab kõiki selliseid abstraktseid meetodeid, saab sellest konkreetne klass. Kuid kui see ei õnnestu, muutub lasteklass ka abstraktseks klassiks. See kõik tähendab, et kui programmeerija nimetab klassi abstraktseks, väidab ta, et klass on puudulik ja sellel on elemente, mis tuleb pärandi alaklasside järgi täita. See on kena viis kahe programmeerija vahel lepingu sõlmimiseks, mis lihtsustab tarkvaraarenduse ülesandeid. Programmeerija, kes kirjutab pärimiseks koodi, peab täpselt järgima meetodi määratlusi (kuid loomulikult võib tal olla oma teostus).
Mis vahe on abstraktsel klassil ja betoonklassil??
Abstraktsed klassid on tavaliselt osalised või puuduvad üldse. Teisest küljest on betoonklassid selle käitumist alati täielikult rakendanud. Erinevalt betoonklassidest ei saa abstraktseid klasse kiirendada. Seetõttu tuleb abstraktseid klasse laiendada, et need oleksid kasulikud. Abstraktsed klassid võivad sisaldada abstraktseid meetodeid, kuid konkreetsed klassid ei saa. Abstraktse klassi laiendamisel päranduvad kõik meetodid (nii abstraktsed kui ka konkreetsed). Päritud klass saab rakendada kõiki või kõiki meetodeid. Kui kõiki abstraktseid meetodeid ei rakendata, muutub see klass ka abstraktseks klassiks.