Abstraktne klass vs liides
Abstraktne klass ja liides on kaks objektorienteeritud konstruktsiooni, mida leidub paljudes objektorienteeritud programmeerimiskeeltes nagu Java. Abstraktset klassi võib pidada tavapärase (konkreetse) klassi abstraktseks versiooniks, liidest aga lepingu täitmise vahendiks. Abstraktne klass on klass, mida ei saa initsialiseerida, kuid mida saab laiendada. Liides on tüüp, mida peavad rakendama ka teised klassid. Java keeles deklareeritakse abstraktsusklassid märksõnaga Abstract, samas kui liidese määratlemiseks kasutatakse liidese märksõna.
Mis on abstraktne klass?
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, on see 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 on liides?
Liides on abstraktne tüüp, mida kasutatakse lepingu täpsustamiseks, mida tuleks rakendada klasside vahel, kes seda liidest rakendavad. Liidese märksõna kasutatakse liidese määratlemiseks ja rakenduse märksõna kasutatakse liidese loomiseks klassis (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 see tuleks deklareerida abstraktse klassina. Java-keeles saab objekti viite tüübi määratleda liidese tüübina. Kuid see objekt peab olema kas olematu või peaks sisaldama klassi objekti, mis rakendab seda konkreetset liidest. Kasutades Java rakenduses märksõna Implements, saate ühe klassi sisse viia mitu liidest.
Mis vahe on abstraktse klassi ja liidese vahel??
Abstraktsed klassid tähistavad tavaliselt abstraktset kontseptsiooni või üksust, millel on osaline rakendamine või ilma selleta. Teisest küljest on liides abstraktset tüüpi, mida kasutatakse lepingu täpsustamiseks, mida klassid peaksid rakendama. Abstraktsed klassid peaksid olema päritud (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 võivad 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. Liides võib aga klassi laiendada.