Abstraktne klass vs liides
Abstraktne klass ja liides on kaks objektorienteeritud konstruktsiooni, mida leidub paljudes objektorienteeritud programmeerimiskeeltes, nagu Java. Abstraktset klassi võib pidada tavalise (konkreetse) klassi abstraktseks versiooniks, liidest aga lepingu rakendamise vahendiks. Abstraktne klass on klass, mida ei saa initsialiseerida, kuid mida saab laiendada. Liides on tüüp, mida teised klassid peavad rakendama. Javas deklareeritakse abstraktsed klassid märksõnaga Abstract, samas kui liidese märksõna kasutatakse liidese määratlemiseks.
Mis on abstraktne klass?
Tavaliselt ei saa abstraktseid klasse, tuntud 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, on see konkreetne klass. 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 on liides?
Liides on abstraktne tüüp, mida kasutatakse lepingu määratlemiseks, mille peaksid rakendama klassid, mis seda liidest rakendavad. Liidese märksõna kasutatakse liidese määratlemiseks ja rakenduste märksõna kasutatakse liidese realiseerimiseks klassi kaupa (Java programmeerimiskeeles). Tavaliselt sisaldab liides ainult meetodi allkirju ja konstantseid deklaratsioone. Iga liides, mis rakendab konkreetset liidest, peaks rakendama kõiki liideses määratletud meetodeid või tuleks deklareerida abstraktse klassina. Javas saab objektiviite tüübi määratleda liidese tüübina. Kuid see objekt peab olema null või sisaldama klassi objekti, mis seda konkreetset liidest rakendab. Kasutades Javas märksõna Implements, saate ühte klassi rakendada mitu liidest.
Mis vahe on abstraktsel klassil ja liidesel?
Abstraktsed klassid esindavad tavaliselt abstraktset mõistet või olemit, mille rakendamine on osaliselt või olematu. Teisest küljest on liides abstraktne tüüp, mida kasutatakse klasside kaupa rakendatava lepingu täpsustamiseks. Abstraktsed klassid peaksid olema päritud (või laiendatud), samas kui liidesed tuleks rakendada. Abstraktsed klassid võivad sisaldada abstraktseid meetodeid, samas kui liides peaks sisaldama ainult abstraktseid meetodeid. Abstraktsed klassid võivad sisaldada mis tahes muutujaid, kuid liidesed saavad määratleda ainult konstante. Klass ei saa pärida rohkem kui ühest abstraktsest klassist, kuid võib rakendada mitut liidest. Liides ei saa rakendada teist liidest. Liides võib aga klassi laiendada.