Abstraktā klase pret betona klasi
Lielākā daļa populāro mūsdienu uz objektu orientētās programmēšanas valodu, piemēram, Java un C #, ir balstītas uz klasēm. Izmantojot klases, viņi sasniedz uz objektu orientētus jēdzienus, piemēram, iekapsulēšanu, mantojumu un polimorfismu. Klases ir abstrakts reālās pasaules objektu attēlojums. Klases var būt gan konkrētas, gan abstraktas, atkarībā no viņu metožu funkcionalitātes ieviešanas līmeņa. Betona klase pilnībā īsteno visas savas metodes. Abstraktu klasi var uzskatīt par parastās (konkrētas) klases ierobežotu versiju, ja tajā var būt daļēji ieviestas metodes. Parasti betona klases sauc par (tikai) klasēm.
Kas ir betona klase?
Noklusējuma klase ir konkrēta klase. Klases atslēgvārds tiek izmantots, lai definētu klases (piemēram, Java). Un parasti tos vienkārši sauc par klasēm (bez īpašības vārda betona). Betona klases attēlo reālās pasaules objektu konceptuālo attēlojumu. Klasēm ir īpašības, ko sauc par atribūtiem. Atribūti tiek ieviesti kā globālie un instanču mainīgie. Klases metodes atspoguļo vai nosaka šo klašu izturēšanos. Nodarbību metodes un atribūtus sauc par klases dalībniekiem. Parasti iekapsulēšana tiek panākta, padarot atribūtus privātus, vienlaikus izveidojot publiskas metodes, kuras var izmantot, lai piekļūtu šiem atribūtiem. Objekts ir klases piemērs. Mantojums ļauj lietotājam paplašināt klases (sauktas par apakšklasēm) no citām klasēm (ko sauc par superklases). Polimorfisms ļauj programmētājam aizstāt klases objektu tās superklases objekta vietā. Parasti problēmas definīcijā atrodamie lietvārdi programmā tieši kļūst par klasēm. Un līdzīgi darbības vārdi kļūst par metodēm. Nodarbībās parasti tiek izmantoti publiski, privāti un aizsargāti piekļuves pārveidotāji.
Kas ir abstraktā klase?
Abstraktās klases tiek deklarētas, izmantojot abstraktu atslēgvārdu (piemēram, Java,). 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ā kļūst par konkrētu klasi. 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).
Kāda ir atšķirība starp abstraktu klasi un betona klasi?
Abstraktās klases parasti tiek īstenotas daļēji vai vispār netiek ieviestas. No otras puses, konkrētās klasēs tā darbība ir pilnībā realizēta. Atšķirībā no konkrētām klasēm, abstraktās klases nevar tikt aktualizētas. Tāpēc abstraktās klases ir jāpagarina, lai tās būtu noderīgas. Abstraktās klases var saturēt abstraktas metodes, bet konkrētas klases nevar. Pagarinot abstrakto klasi, visas metodes (gan abstraktās, gan konkrētās) tiek iedzimtas. Mantotā klase var īstenot jebkuru vai visas metodes. Ja visas abstraktās metodes netiek ieviestas, tad arī šī klase kļūst par abstraktu klasi.