Abstraktā klase pret mantojumu
Abstraktā klase un mantojums ir divi svarīgi uz objektu orientēti jēdzieni, kas atrodami 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 mantojums ļauj jaunām klasēm pagarināt citas klases. Abstraktā klase ir klase, kuru nevar inicializēt, bet kuru var pagarināt. Tātad abstraktajām klasēm ir jēga tikai tad, ja programmēšanas valoda atbalsta mantojumu. Java valodā abstraktās klases tiek deklarētas, izmantojot atslēgas vārdu Abstract, savukārt Extends atslēgvārdu izmanto mantošanai no (super) klases.
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 mantojums?
Mantojums ir uz objektu orientēts jēdziens, kas ļauj jaunām klasēm paplašināt citas klases. Paplašina atslēgvārdu, lai Java programmēšanas valodā ieviestu mantojuma jēdzienu. Mantojums būtībā nodrošina koda atkārtotu izmantošanu, ļaujot paplašināt esošās klases īpašības un izturēšanos ar nesen definētu klasi. Kad jauna apakšklase (vai atvasināta klase) paplašina superklases (vai vecāku klasi), šī apakšklase mantos visus superklases atribūtus un metodes. Apakšklase pēc izvēles var ignorēt uzvedību (nodrošināt metodēm jaunu vai paplašinātu funkcionalitāti), kas mantota no vecāku klases. Parasti apakšklase nevar paplašināt vairākas superklases (piemēram, Java). Tāpēc jūs nevarat izmantot pagarinājumus vairāku mantojumu gadījumos. Lai iegūtu vairākus mantojumus, jums jāizmanto saskarnes.
Kāda ir atšķirība starp abstrakto klasi un mantojumu?
Abstraktās klases parasti attēlo abstraktu jēdzienu vai entītiju ar daļēju ieviešanu vai bez tās. Mantojums ļauj jaunām klasēm pagarināt citas klases. Tā kā abstraktās klases nevar padarīt par mirkļiem, jums ir jāizmanto mantojuma jēdziens, lai izmantotu abstraktās klases. Pretējā gadījumā abstraktajai klasei nav jēgas. Abstraktās klases var saturēt abstraktās metodes, un, paplašinot klasi, visas metodes (abstraktās un konkrētās) tiek mantotas. Mantotā klase var īstenot jebkuru vai visas metodes. Ja visas abstraktās metodes netiek ieviestas, šī klase kļūst arī par abstraktās klases klasi. Klase nevar mantot no vairāk nekā vienas abstraktās klases (tā nav abstraktu klašu kvalitāte pati par sevi, bet drīzāk mantojuma ierobežojums).