Kā objektorientētā programmēšana C++ valodā atšķiras no procedurālās programmēšanas, un kā tā tiek ieviesta?

Šajā emuāra ierakstā mēs aplūkosim, kā objektorientētā programmēšana atšķiras no procedurālās programmēšanas, un izpētīsim, kā šī koncepcija tiek ieviesta C++ valodā.

 

Programmēšanas pirmsākumos, neilgi pēc datoru izstrādes, procedurālā programmēšana bija galvenā koncepcija. Procedurālā programmēšana ir lietotāja ievadītā koda izpildes koncepcija iepriekš noteiktā secībā. Laikam ejot un kodam kļūstot arvien sarežģītākam un grūtāk saprotamam, radās objektorientētas programmēšanas koncepcija. Atšķirībā no procedurālās programmēšanas, objektorientētā programmēšana ietver vairāku mazu vienību, ko sauc par objektiem, izveidi un to apvienošanu, lai izpildītu programmu. C++ radās, integrējot šo objektorientētās programmēšanas koncepciju esošajā procedurālajā valodā C.
Lai gan papildus C++ pastāv arī dažādas citas objektorientētas valodas, to objektorientēto koncepciju ieviešanas veids atšķiras. C++ ievieš objektorientētu programmēšanu, izmantojot "klases" koncepciju. C++ valodā, izmantojot mainīgo, ir skaidri jānorāda datoram, kāda veida mainīgais ir šis mainīgais. Piemēram, izmantojot mainīgo ar nosaukumu "a", ir skaidri jānorāda, vai "a" ir vesels skaitlis, peldošā komata skaitlis utt. Klase nav pamata tips, piemēram, vesels skaitlis vai peldošā komata skaitlis; tas ir tips, ko programmētājs definējis no jauna. Lietotāja definētas klases ietvaros var izveidot dažādus mainīgos un funkcijas. Piemēram, ja izveidojat klasi ar nosaukumu "dzīvnieks", tajā var definēt peldošā komata mainīgo "svars", lai attēlotu svaru, un var arī definēt funkciju skaņu radīšanai. Klase tikai nodrošina struktūru; faktiska izmantošana ir iespējama, izveidojot mainīgos ar klases tipu "dzīvnieks". Šo koncepciju bieži salīdzina ar maizes veidni un maizi. Jūs izveidojat maizes veidni, ko sauc par klasi, un pēc tam izmantojat šo veidni, lai veidotu mainīgos, piemēram, maizi. Mainīgos, kas izveidoti, izmantojot klasi, sauc par "objektiem".
Objektorientētu koncepciju galvenās sastāvdaļas ir plaši iedalītas mantošanā, iekapsulēšanā un polimorfismā. C++ šos elementus ievieš klasēs. Mantošana ir koncepcija, kurā viena klase manto funkcionalitāti no citas klases. Piemēram, pieņemsim, ka pastāv klase “dzīvnieks” un klases “lauva” un “trušs”. Tā kā lauvas un truši ir dzīvnieki, labi izstrādātā programmā klases “lauva” un “trušs” mantotu lielāko daļu funkcionalitātes no klases “dzīvnieks”. Tas ļauj izveidot kodolīgu kodu, vienkārši norādot, ka klases “lauva” un “trušs” manto no klases “dzīvnieks”, nepārrakstot to pašu kodu. Šeit klase “dzīvnieks”, kas nodrošina mantošanu, tiek saukta par vecāku klasi, savukārt klases “lauva” un “trušs”, kas saņem mantojumu, tiek sauktas par bērnu klasēm.
Iekapsulēšana kontrolē piekļuvi klases iekšējai informācijai. Ja klasē atrodas svarīgi dati, nediskriminējoša piekļuve tiem ir riskanta. Tomēr jūs nevarat padarīt visu klasi privātu tikai tāpēc, lai aizsargātu konkrētus datus. Tāpēc atslēgvārdi tiek izmantoti, lai atšķirtu, kura informācija ir atklāta un kura ir slēpta.
Polimorfisms nozīmē, ka viens un tas pats nosaukums var darboties atšķirīgi atkarībā no konteksta. C++ valodā, definējot funkciju, ir skaidri jānorāda funkcijas nosaukums, atgriešanas tips un funkcijai nodoto mainīgo veidi un skaits. Piemēram, veidojot funkciju divu skaitļu saskaitīšanai, funkcija, kas saskaita veselus skaitļus, un funkcija, kas saskaita peldošā komata skaitļus, veic dažādas darbības. Tomēr, pat ja tās ir līdzīgas funkcijas, ja tām ir jāpiešķir atšķirīgi nosaukumi, to atcerēšanās un lietošana kļūst ļoti sarežģīta. Tomēr C++ valodā, ja atgriešanas tips, ievades mainīgo veidi vai mainīgo skaits atšķiras, funkcijas ar vienādu nosaukumu tiek atpazītas kā atšķirīgas. Turklāt bērnu klasei nav jāatkārto visa tās vecākklases funkcionalitāte. Piemēram, ja ir funkcija, kas rada dzīvnieka skaņu, tā kā katrs dzīvnieks rada atšķirīgu skaņu, bērnu klase var ignorēt (pārdefinēt) šo funkciju, lai izmantotu savu versiju.
C++ ir valoda, kas izveidota, pievienojot C papildu sintaksi, lai tā varētu izmantot lielāko daļu C funkciju. Tāpēc rādītāji, kas ir viena no C galvenajām funkcijām, tiek izmantoti arī tieši C++ valodā. Katrai datora atmiņas vietai ir unikāla adrese. Rādītājs kalpo, lai norādītu uz šo adresi. Kad funkcijai izpildei ir jāsaņem mainīgais, dators kopē šo mainīgo, saglabā to jaunā vietā un pēc tam izpilda funkciju, izmantojot šo mainīgo. Kad funkcijas izpilde ir pabeigta, kopētais mainīgais pazūd. Piemēram, izpildot 'swap' funkciju, kas apmaina divu mainīgo vērtības, kopētā mainīgā vērtība mainās, bet sākotnējais mainīgais paliek nemainīgs. Tomēr, ja 'swap' funkcija saņem rādītāju uz mainīgo un maina tā vērtību, rādītājs norāda uz unikālo adresi, tāpēc mainīgā vērtība faktiski tiek mainīta. C++ nodrošina arī atsauces funkciju, kas nodod pašu mainīgo rādītāja vietā, padarot to noderīgu.
Vēl viena svarīga iezīme ir atbalsts vispārīgajai programmēšanai. Vispārīgā programmēšana ir koncepcija, kas izstrādāta, lai uzlabotu koda atkārtotu izmantojamību un programmētāja ērtības. C++ galvenā funkcija šī mērķa sasniegšanai ir veidnes. Kā minēts iepriekš, lai gan ir iespējams izveidot vairākas funkcijas ar vienādu nosaukumu, vairāku vienkāršu saskaitīšanas funkciju izveide ir nelietderīga. Izmantojot veidnes, dators automātiski nosaka funkcijas saņemto tipu (vesels skaitlis vai peldošais komats) un attiecīgi izpilda darbību. Tas samazina kodēšanas laiku, padara kodu kodolīgāku un uzlabo lasāmību.
Vēl viens vispārīgās programmēšanas elements ir STL (standarta veidņu bibliotēka). Datu izmantošanai ir izšķiroša nozīme programmēšanā. Datu apstrādes algoritmi ir matemātiski organizēti, un datu struktūras ir to implementācijas. Tomēr programmētāju datu struktūru atkārtota izveide no nulles katru reizi ir ne tikai laikietilpīga, bet arī negarantē, ka algoritms ir optimizēts. C++ nodrošina ekspertu optimizētas datu struktūras valodas līmenī, kas ir STL. Programmētāji vienkārši atlasa un izmanto nepieciešamo datu struktūru.
Tādā veidā C++ nodrošina daudzas funkcijas valodas līmenī lietotāja ērtībai. Tā kā tā tika izveidota kā C paplašinājums, pašai valodai ir sarežģīti aspekti. Visu šo jēdzienu apguve un izpratne var būt sarežģīta, taču, pateicoties C++ jaudīgajām iespējām, daudzi programmētāji to joprojām izmanto. C++ sintakses standarts laika gaitā turpina attīstīties, un nākotnē tiks pievienotas dažādas funkcijas programmētāju ērtībai.

 

Par autoru

Scenārija autors

Esmu "kaķu detektīvs", kas palīdz atkalapvienot pazudušos kaķus ar viņu ģimenēm.
Es atjaunoju spēkus, malkojot kafijas krūzi, izbaudu pastaigas un ceļošanu, un paplašinu savas domas, rakstot. Vērojot pasauli uzmanīgi un sekojot savai intelektuālajai zinātkārei kā bloga rakstītāja, es ceru, ka mani vārdi var sniegt palīdzību un mierinājumu citiem.