Abstraktā klase pret betona klasi
Lielākā daļa populāro mūsdienu objektorientēto programmēšanas valodu, piemēram, Java un C, ir balstītas uz klasēm. Izmantojot klases, viņi sasniedz objektu orientētus jēdzienus, piemēram, iekapsulēšanu, pārmantošanu un polimorfismu. Klases ir abstrakts reālās pasaules objektu attēlojums. Klases var būt gan konkrētas, gan abstraktas atkarībā no to metodes funkcionalitātes īstenošanas līmeņa. Konkrēta klase pilnībā īsteno visas tās metodes. Abstrakto klasi var uzskatīt par parastās (konkrētās) klases ierobežotu versiju, kur tā var saturēt daļēji realizētas metodes. Parasti konkrētas klases tiek sauktas 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 tās vienkārši sauc par klasēm (bez īpašības vārda konkrēts). Konkrētās klases attēlo reālās pasaules objektu konceptuālu attēlojumu. Klasēm ir īpašības, ko sauc par atribūtiem. Atribūti tiek ieviesti kā globālie un instanču mainīgie. Klasēs izmantotās metodes atspoguļo vai definē šo klašu uzvedību. Klašu metodes un atribūtus sauc par klases dalībniekiem. Parasti iekapsulēšanu panāk, padarot atribūtus privātus, vienlaikus izveidojot publiskas metodes, kuras var izmantot, lai piekļūtu šiem atribūtiem. Objekts ir klases eksemplārs. Mantojums ļauj lietotājam paplašināt klases (sauktas par apakšklasēm) no citām klasēm (sauktas par superklasēm). Polimorfisms ļauj programmētājam aizstāt klases objektu tās superklases objekta vietā. Parasti problēmas definīcijā atrodamie lietvārdi tieši kļūst par klasēm programmā. Un līdzīgi darbības vārdi kļūst par metodēm. Publiskie, privātie un aizsargātie ir tipiski klasēm izmantotie piekļuves modifikatori.
Kas ir abstraktā klase?
Abstract klases tiek deklarētas, izmantojot abstraktu atslēgvārdu (piemēram, Java,). Parasti abstraktās klases, kas pazīstamas arī kā abstraktās bāzes klases (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ā kļūst par konkrētu klasi. 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).
Kāda ir atšķirība starp abstrakto klasi un betona klasi?
Abstraktajām klasēm parasti ir daļēja ieviešana vai tās nav. No otras puses, konkrētās klasēs vienmēr ir pilnībā īstenota tā uzvedība. Atšķirībā no konkrētām klasēm, abstraktās klases nevar izveidot. Tāpēc abstraktās klases ir jāpaplašina, lai tās būtu noderīgas. Abstraktās klases var saturēt abstraktas metodes, bet konkrētas klases nevar. Paplašinot abstrakto klasi, visas metodes (gan abstraktās, gan konkrētās) tiek mantotas. Mantotā klase var ieviest jebkuru vai visas metodes. Ja visas abstraktās metodes nav ieviestas, arī šī klase kļūst par abstraktu klasi.