Abstract klase vs interfeiss
Abstraktā klase un interfeiss ir divi objektorientēti konstrukti, kas atrodami daudzās objektorientētās programmēšanas valodās, piemēram, Java. Abstraktu klasi var uzskatīt par parastās (konkrētas) klases abstraktu versiju, savukārt saskarni var uzskatīt par līguma izpildes līdzekli. Abstraktā klase ir klase, kuru nevar inicializēt, bet kuru var pagarināt. Interfeiss ir tips, kas jāīsteno citām klasēm. Java valodā abstraktās klases tiek deklarētas, izmantojot atslēgvārdu Abstract, savukārt interfeisa definēšanai tiek izmantots interfeisa atslēgvārds.
Kas ir abstraktā klase?
Parasti abstraktās klases, kas pazīstamas arī kā Abstract Base Classes (ABC), nevar tikt realizētas (šīs klases gadījumu nevar izveidot). Tātad abstraktajām klasēm ir jēga tikai tad, ja programmēšanas valoda atbalsta mantojumu (spēja radīt apakšklases no klases pagarināšanas). 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āku klases, no kurām tiek iegūtas bērnu klases, lai bērnu klase dalītos ar nepilnīgām vecāku klases īpašībām, un, lai tās pabeigtu, var pievienot funkcionalitāti.
Abstraktās klases var saturēt abstraktās metodes. Apakšklases, kas paplašina abstraktu klasi, var ieviest šī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, bērnu klase kļūst arī par abstraktu klasi. Tas viss nozīmē, ka tad, kad programmētājs nominē klasi kā abstraktu, viņa saka, ka klase būs nepilnīga un tajā būs elementi, kas jāpabeidz mantojošajā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, kurš raksta mantošanas kodu, precīzi jāievēro metožu definīcijas (bet, protams, tam var būt sava ieviešana).
Kas ir interfeiss?
Saskarne ir abstrakts tips, ko izmanto, lai norādītu līgumu, kas jāīsteno klasēm, kuras ievieš šo saskarni. Interfeisa atslēgu izmanto, lai definētu interfeisu, un Implements atslēgvārdu, lai ieviestu interfeisu klasē (Java programmēšanas valodā). Parasti saskarnē būs tikai metodes paraksti un pastāvīgas deklarācijas. Jebkurai saskarnei, kas ievieš noteiktu saskarni, jāīsteno visas saskarnē noteiktās metodes vai tā jādeklarē kā abstrakta klase. Java programmā objekta atsauces veidu var definēt kā interfeisa tipu. Bet šim objektam jābūt vai nu nullim, vai arī tam vajadzētu būt klases objektam, kurš ievieš šo konkrēto saskarni. Izmantojot Java atslēgvārdu Implements, vienā klasē var ieviest vairākas saskarnes.
Kāda ir atšķirība starp abstraktu klasi un interfeisu?
Abstraktās klases parasti attēlo abstraktu jēdzienu vai entītiju ar daļēju ieviešanu vai bez tās. No otras puses, saskarne ir abstrakts tips, ko izmanto, lai precizētu līgumu, kas jāīsteno pa klasēm. Abstraktās klases būtu jāpārmanto (vai jāpagarina), bet jāievieš saskarnes. Abstraktās klases var saturēt abstraktas metodes, turpretī interfeisā vajadzētu būt tikai abstraktām metodēm. Abstraktās klases var saturēt jebkurus mainīgos, bet saskarnes var noteikt tikai konstantes. Klase nevar mantot no vairāk nekā vienas abstraktas klases, bet var ieviest vairākas saskarnes. Saskarne nevar ieviest citu saskarni. Tomēr interfeiss var pagarināt klasi.