Abstraktā klase pret interfeisu
Abstract class un Interface ir divas objektorientētas konstrukcijas, kas atrodamas daudzās objektorientētās programmēšanas valodās, piemēram, Java. Abstrakto klasi var uzskatīt par parastās (konkrētās) klases abstraktu versiju, savukārt interfeisu var uzskatīt par līguma īstenošanas līdzekli. Abstraktā klase ir klase, kuru nevar inicializēt, bet var paplašināt. Interfeiss ir veids, kas jāīsteno citām klasēm. Java valodā abstraktās klases tiek deklarētas, izmantojot atslēgvārdu Abstract, savukārt interfeisa atslēgvārds tiek izmantots, lai definētu saskarni.
Kas ir abstraktā klase?
Parasti abstraktās klases, kas pazīstamas arī kā Abstract Base Classes (ABC), nevar izveidot (šīs klases gadījumu nevar izveidot). Tātad abstraktajām klasēm ir nozīme tikai tad, ja programmēšanas valoda atbalsta pārmantošanu (spēju izveidot apakšklases, paplašinot klasi). Abstraktās klases parasti attēlo abstraktu jēdzienu vai entītiju ar daļēju ieviešanu vai bez tās. Tāpēc abstraktās klases darbojas kā vecākklases, no kurām tiek atvasinātas pakārtotās klases, tādējādi pakārtotajām klasēm būs kopīgas vecākas klases nepilnīgās funkcijas, un to pabeigšanai var pievienot funkcionalitāti.
Abstract klasēs var būt ietvertas abstraktās metodes. Apakšklases, kas paplašina abstrakto klasi, var īstenot šīs (mantotās) abstraktās metodes. Ja bērnu klase īsteno visas šādas abstraktās metodes, tā ir konkrēta klase. Bet, ja tā nenotiek, arī bērnu klase kļūst par abstrakto klasi. Tas viss nozīmē to, ka, programmētāja izvirzot klasi kā abstraktu, viņa saka, ka klase būs nepilnīga un tajā būs elementi, kas jāpabeidz mantotajām apakšklasēm. Tas ir jauks veids, kā izveidot līgumu starp diviem programmētājiem, kas vienkāršo programmatūras izstrādes uzdevumus. Programmētājam, kas raksta kodu, lai mantotu, ir precīzi jāievēro metodes definīcijas (bet, protams, var būt arī sava ieviešana).
Kas ir interfeiss?
Interfeiss ir abstrakts veids, ko izmanto, lai norādītu līgumu, kas jāīsteno klasēm, kuras īsteno šo saskarni. Interfeisa atslēgvārds tiek izmantots, lai definētu saskarni, un atslēgvārds Implements tiek izmantots interfeisa ieviešanai pēc klases (Java programmēšanas valodā). Parasti saskarne satur tikai metožu parakstus un nemainīgas deklarācijas. Jebkurai saskarnei, kas ievieš noteiktu interfeisu, ir jāievieš visas saskarnē definētās metodes vai arī jābūt deklarētai kā abstraktai klasei. Java programmā objekta atsauces veidu var definēt kā saskarnes tipu. Bet šim objektam ir jābūt nullei, vai arī tam jābūt klases objektam, kas ievieš konkrēto saskarni. Izmantojot Java atslēgvārdu Implements, vienā klasē varat ieviest vairākas saskarnes.
Kāda ir atšķirība starp abstrakto klasi un interfeisu?
Abstraktās klases parasti attēlo abstraktu jēdzienu vai vienību ar daļēju ieviešanu vai bez tās. No otras puses, saskarne ir abstrakts veids, ko izmanto, lai norādītu līgumu, kas jāievieš klasēm. Abstraktās klases ir jāpārmanto (vai jāpaplašina), savukārt saskarnes ir jārealizē. Abstraktās klases var saturēt abstraktas metodes, turpretim saskarnē ir jāietver tikai abstraktas metodes. Abstraktās klases var saturēt jebkurus mainīgos, bet saskarnes var definēt tikai konstantes. Klase nevar mantot no vairāk nekā vienas abstraktas klases, bet var ieviest vairākas saskarnes. Interfeiss nevar ieviest citu saskarni. Tomēr interfeiss var paplašināt klasi.