Abstraktne klass vs liides
Abstraktne klass ja liides on kaks objektile orienteeritud konstruktsiooni, mida leidub paljudes objektorienteeritud programmeerimiskeeltes nagu Java. Abstraktset klassi võib pidada tavalise (konkreetse) klassi abstraktseks versiooniks, liidest aga lepingu täitmise vahendiks. Abstraktne klass on klass, mida ei saa lähtestada, kuid mida saab pikendada. Liides on tüüp, mida peavad rakendama teised klassid. Java-s deklareeritakse abstraktsed klassid abstraktse märksõnaga, liidese määramiseks aga liidese märksõna.
Mis on abstraktne klass?
Tavaliselt ei saa abstraktseid klasse, mida nimetatakse ka abstraktseteks baasklassideks (ABC), kiireks muuta (selle klassi eksemplari ei saa luua). Seega on abstraktsetel klassidel mõttekas olla ainult siis, kui programmeerimiskeel toetab pärimist (võime klassi laiendamisest luua alaklasse). Abstraktsed klassid esindavad tavaliselt abstraktset mõistet või üksust, mille rakendamine on osaline või puudub. Seetõttu toimivad abstraktsed klassid vanemklassidena, millest tuletatakse lapseklassid, nii et lasteklass jagab vanemklassi puudulikke omadusi ja nende täitmiseks saab lisada funktsionaalsust.
Abstraktsed klassid võivad sisaldada abstraktseid meetodeid. Abstraktset klassi laiendavad alaklassid võivad rakendada neid (päritud) abstraktseid meetodeid. Kui lapseklass rakendab kõiki selliseid abstraktseid meetodeid, on see konkreetne klass. Kuid kui see nii ei ole, saab ka lasteklassist abstraktne klass. See kõik tähendab seda, et kui programmeerija nimetab klassi abstraktseks, ütleb ta, et klass on puudulik ja sellel on elemente, mis tuleb pärivate alamklasside kaudu täita. See on kena viis kahe programmeerija vahel lepingu loomiseks, mis lihtsustab tarkvaraarenduse ülesandeid. Programmeerija, kes kirjutab koodi pärimiseks, peab täpselt järgima meetodi definitsioone (kuid loomulikult võib sellel olla ka oma rakendus).
Mis on liides?
Liides on abstraktne tüüp, mida kasutatakse lepingu määramiseks, mida peaksid rakendama klassid, kes seda liidest rakendavad. Liidese märksõna kasutatakse liidese määratlemiseks ja märksõna Implements kasutatakse liidese klassi juurutamiseks (Java programmeerimiskeeles). Tavaliselt sisaldab liides ainult meetodi allkirju ja pidevaid deklaratsioone. Iga liides, mis rakendab konkreetset liidest, peaks rakendama kõiki liideses määratletud meetodeid või tuleks see deklareerida abstraktse klassina. Java-s saab objekti viite tüübi määratleda liidese tüübina. Kuid see objekt peab olema null või peaks sellel olema klassi objekt, mis seda konkreetset liidest rakendab. Kasutades Java-s märksõna Implements, saate rakendada ühte klassi mitu liidest.
Mis vahe on abstraktse klassi ja liidese vahel?
Abstraktsed klassid esindavad tavaliselt abstraktset mõistet või olemit, mille rakendamine on osaline või puudub. Teiselt poolt on liides abstraktne tüüp, mida kasutatakse lepingu täpsustamiseks, mida klassid peaksid rakendama. Abstraktsed klassid peaksid olema päritavad (või laiendatud), samas kui liidesed tuleks rakendada. Abstraktsed klassid võivad sisaldada abstraktseid meetodeid, liides aga ainult abstraktseid meetodeid. Abstraktsed klassid võivad sisaldada mis tahes muutujaid, kuid liidesed saavad määratleda ainult konstandid. Klass ei saa pärida rohkem kui ühest abstraktsest klassist, kuid võib rakendada mitut liidest. Liides ei saa teist liidest rakendada. Kuid liides võib klassi laiendada.