Abstrakta klase pret mantojumu
Abstraktā klase un mantojums ir divi svarīgi objektorientēti jēdzieni, kas sastopami daudzās objektorientētās programmēšanas valodās, piemēram, Java. Abstrakto klasi var uzskatīt par parastas (konkrētas) klases abstraktu versiju, savukārt Mantošana ļauj jaunām klasēm paplašināt citas klases. Abstraktā klase ir klase, kuru nevar inicializēt, bet kuru var pagarināt. Tātad, abstraktām klasēm ir jēga tikai tad, ja programmēšanas valoda atbalsta mantošanu. Java valodā abstraktās klases tiek deklarētas, izmantojot abstrakto atslēgvārdu, savukārt paplašināšanas atslēgvārds tiek izmantots mantošanai no (super) klases.
Kas ir abstraktā klase?
Parasti abstraktās klases, kas pazīstamas arī kā Abstract Base Classes (ABC), nevar instantizēt (šīs klases instanci nevar izveidot). Tātad, abstraktām klasēm ir nozīme tikai tad, ja programmēšanas valoda atbalsta mantošanu (spēja izveidot apakšklases, paplašinot klasi). Abstraktās klases parasti attēlo abstraktu jēdzienu vai entītiju ar daļēju vai bez ieviešanas. Tāpēc abstraktās klases darbojas kā vecāku klases, no kurām tiek iegūtas bērnu klases, lai bērnu klasei būtu kopīgas vecāku klases nepilnīgās iezīmes, un to pabeigšanai var pievienot funkcionalitāti.
Abstraktās klasēs var būt abstraktas metodes. Apakšklases, kas paplašina abstraktu klasi, var ieviest šīs (pārmantotā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ē to, ka tad, kad programmētājs izvirza 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 uzdevumus programmatūras izstrādē. Programmētājam, kurš raksta kodu, lai iegūtu mantojumu, precīzi jāievēro metožu definīcijas (bet, protams, tai var būt sava ieviešana).
Kas ir mantojums?
Mantošana ir uz objektu orientēts jēdziens, kas ļauj jaunām klasēm paplašināt citas klases. Atslēgvārds paplašinājums tiek izmantots, lai Java programmēšanas valodā ieviestu mantojuma jēdzienu. Mantošana būtībā nodrošina koda atkārtotu izmantošanu, ļaujot paplašināt esošās klases rekvizītus un uzvedību ar jaunu definētu klasi. Kad jauna apakšklase (vai atvasināta klase) paplašina superklasi (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ākkārtējai mantošanai. Lai iegūtu vairākkārtēju mantojumu, 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 vai bez ieviešanas. Mantošana ļauj jaunām klasēm paplašināt citas klases. Tā kā abstraktās klases nav iespējams precizēt, jums jāizmanto mantojuma jēdziens, lai izmantotu abstraktās klases. Pretējā gadījumā abstraktā klase nav izmantojama. Abstraktās klasēs var būt abstraktas metodes, un, kad klase tiek paplašināta, visas metodes (abstraktās un konkrētās) tiek mantotas. Mantotā klase var īstenot jebkuru vai visas metodes. Ja visas abstraktās metodes nav ieviestas, tad šī klase kļūst arī par abstraktu klasi. Klase nevar mantot no vairāk nekā vienas abstraktas klases (tā nav abstraktu klašu kvalitāte pati par sevi, bet gan mantojuma ierobežojums).