Abstraktne klass vs konkreetne klass
Enamik populaarseid kaasaegseid objektorienteeritud programmeerimiskeeli, nagu Java ja C, on klassipõhised. Nad saavutavad klasside kasutamise kaudu objektorienteeritud mõisted, nagu kapseldamine, pärimine ja polümorfism. Klassid on reaalse maailma objektide abstraktne esitus. Klassid võivad olla kas konkreetsed või abstraktsed, olenev alt nende meetodi 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 realiseeritud meetodeid. Tavaliselt nimetatakse konkreetseid klasse (lihts alt) klassideks.
Mis on betooniklass?
Vaikeklass on konkreetne klass. Klassi märksõna kasutatakse klasside määratlemiseks (nt Javas). Ja tavaliselt nimetatakse neid lihts alt klassideks (ilma omadussõnata konkreetne). Konkreetsed klassid kujutavad reaalse maailma objektide kontseptuaalset esitust. Klassidel on omadused, mida nimetatakse atribuutideks. Atribuudid rakendatakse globaalsete ja eksemplari muutujatena. Klasside meetodid esindavad 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ääsuks. Objekt on klassi eksemplar. Pärimine võimaldab kasutajal laiendada klasse (nn alamklassid) teistest klassidest (nimetatakse superklassideks). Polümorfism võimaldab programmeerijal asendada klassi objektiga selle superklassi objektiga. Tavaliselt muutuvad probleemi definitsioonis leitud nimisõnad programmis otse klassideks. Ja samamoodi muutuvad verbid meetoditeks. Avalik, privaatne ja kaitstud on tüüpilised klasside jaoks kasutatavad juurdepääsu modifikaatorid.
Mis on abstraktne klass?
Abstraktsed klassid deklareeritakse märksõnaga Abstract (nt Javas,). Tavaliselt ei saa abstraktseid klasse, mida tuntakse ka kui Abstract Base Classes (ABC), instantseerida (selle klassi eksemplari ei saa luua). Seega on abstraktsed klassid mõttekad ainult siis, kui programmeerimiskeel toetab pärimist (võime luua alamklasse klassi laiendamisest). Abstraktsed klassid esindavad tavaliselt abstraktset kontseptsiooni või olemit, mille rakendamine on osaliselt või üldse mitte. Seetõttu toimivad abstraktsed klassid vanemklassidena, millest alamklassid tuletatakse, nii et alamklassid jagavad põhiklassi mittetäielikke funktsioone ja nende täiendamiseks saab lisada funktsioone.
Abstraktsed klassid võivad sisaldada abstraktseid meetodeid. Abstraktset klassi laiendavad alamklassid võivad rakendada neid (päritud) abstraktseid meetodeid. Kui alamklass rakendab kõiki selliseid abstraktseid meetodeid, muutub see konkreetseks klassiks. Kui aga seda ei juhtu, muutub ka lasteklass abstraktseks klassiks. See kõik tähendab, et kui programmeerija nimetab klassi abstraktseks, ütleb ta, et klass on mittetäielik ja sellel on elemente, mida pärivad alamklassid peavad täitma. See on hea 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 ka oma rakendus).
Mis vahe on abstraktse klassi ja konkreetse klassi vahel?
Abstraktsete klasside rakendamine on tavaliselt osaline või puudub. Teisest küljest rakendavad konkreetsed klassid oma käitumist alati täielikult. Erinev alt konkreetsetest klassidest ei saa abstraktseid klasse instantseerida. Seetõttu tuleb abstraktseid klasse laiendada, et need oleksid kasulikud. Abstraktsed klassid võivad sisaldada abstraktseid meetodeid, kuid konkreetsed klassid mitte. Abstraktse klassi laiendamisel päritakse kõik meetodid (nii abstraktsed kui ka konkreetsed). Päritud klass võib rakendada mis tahes või kõiki meetodeid. Kui kõiki abstraktseid meetodeid ei rakendata, muutub see klass ka abstraktseks klassiks.