Erinevus abstraktse klassi ja liidese vahel

Abstraktne klass vs liides

Abstraktne klass (või tüüp) on programmi poolt deklareeritud nominatiivse tüübisüsteemi tüüp. Ehkki nimest võib seda järeldada, võib abstraktne klass sisaldada või mitte sisaldada abstraktseid meetodeid või omadusi. Eristusklass viitab erinevatele keelekonstruktsioonidele, mida võib kasutada abstraktsete tüüpide rakendamiseks. Abstraktseid klasse saab iseloomustada kujundusküsimusega, mis vastab parimatele objektorienteeritud programmidele, ja nende lõpetamata olemusest.

Liides on abstraktne tüüp, mida klassid peavad liidese täpsustamiseks rakendama (üldiselt öeldes). Liidesed võivad sisaldada ainult meetodi allkirju ja püsivaid deklaratsioone (nii staatilisi kui ka lõplikke), mitte kunagi meetodimääratlusi. Liidesed simuleerivad mitut pärandit ja neid kasutatakse erinevat tüüpi klasside vahel jagatud sarnasuste kodeerimiseks.

Abstraktseid tüüpe on võimalik luua, tähistada või simuleerida mitmel erineval viisil. Programmeerija saab abstraktseid tüüpe tähistada, kasutades märksõna abstraktselt selgesõnaliselt, lisades klassi määratlusesse ühe või mitu meetodit, pärides teiselt abstraktselt tüübilt, ilma et klasside määratluse lõpuleviimiseks vajalikud puuduvad tunnused üle kirjutataks, või saates konkreetse meetodi objektorienteeritud programmeerimiskeelt, mida tuntakse selle nime all ja mis ei rakenda meetodit otse.

Liideseid saab määratleda abstraktsete meetodite abil. Klasse võib rakendada ka liidestes. Kui klass rakendab liidest ja ei rakenda kõiki selle meetodeid, tuleb kasutada tähistaja abstraktsust, vastasel juhul pole tähistaja vajalik (kuna kõik liidesed on oma olemuselt abstraktsed). Klassid võivad ka rakendada mitut liidest.

Ehkki liideste abil määratletakse üldised liidesed, saab protokolli määratlemiseks ja jõustamiseks kasutada abstraktseid tüüpe (see on toimingute kogum, mida peavad toetama kõik soovitud protokolli rakendavad objektid). Abstraktseid tüüpe ei esine keeltes ilma alamtüüpideta. Kuna sellised alatüübid on sunnitud rakendama kõiki vajalikke funktsioone, tagades programmi täitmise õigsuse. Abstraktsete tüüpide loomiseks on mitu võimalust: täielikud abstraktsed põhiklassid on klassid, mis on kas otseselt kuulutatud abstraktseteks või sisaldavad abstraktseid (teostamata) meetodeid; Tavalised Lisp-objektisüsteemid hõlmavad miksine, mis põhinevad maitsesüsteemil; Java, muidugi; ja Traits, mis toimib Smalltalki laiendusena.

Kokkuvõte:
1. Abstraktsed klassid (või tüübid) deklareerivad programme; liidesed on abstraktsed tüübid, mida kõik klassid peavad oma liidese täpsustamiseks rakendama.
2. Abstraktseid tüüpe saab tähistada märksõnaga selgesõnaliselt; liidesed on olemuselt abstraktsed, seetõttu ei pea neid üldse märksõna abil tähistama (välja arvatud juhul, kui konkreetne klass rakendab liidest, kuid ei rakenda kõiki selle meetodeid).