V čom sa objektovo orientované programovanie v jazyku C++ líši od procedurálneho programovania a ako je implementované?

V tomto blogovom príspevku sa pozrieme na to, ako sa objektovo orientované programovanie líši od procedurálneho programovania a ako je tento koncept implementovaný v jazyku C++.

 

V raných dobách programovania, krátko po vývoji počítačov, bolo procedurálne programovanie hlavným konceptom. Procedurálne programovanie je koncept vykonávania kódu zadaného používateľom vo vopred určenej sekvencii. Ako čas plynul a kód sa stával čoraz zložitejším a ťažšie pochopiteľným, objavil sa koncept objektovo orientovaného programovania. Na rozdiel od procedurálneho programovania zahŕňa objektovo orientované programovanie vytváranie viacerých malých jednotiek nazývaných objekty a ich kombinovanie na vykonanie programu. Jazyk C++ vznikol integráciou tohto konceptu objektovo orientovaného programovania do existujúceho procedurálneho jazyka C.
Hoci okrem C++ existujú aj rôzne iné objektovo orientované jazyky, spôsob, akým implementujú objektovo orientované koncepty, sa líši. C++ implementuje objektovo orientované programovanie prostredníctvom konceptu „triedy“. V C++ musíte pri použití premennej explicitne oznámiť počítaču, aký je typ tejto premennej. Napríklad pri použití premennej s názvom „a“ musíte jasne určiť, či je „a“ celé číslo, číslo s pohyblivou desatinnou čiarkou atď. Trieda nie je základný typ ako celé číslo alebo číslo s pohyblivou desatinnou čiarkou; je to typ novo definovaný programátorom. V rámci používateľom definovanej triedy môžete vytvárať rôzne premenné a funkcie. Napríklad, ak vytvoríte triedu s názvom „zviera“, môžete v nej definovať premennú s pohyblivou desatinnou čiarkou „váha“, ktorá reprezentuje hmotnosť, a môžete tiež definovať funkciu na vydávanie zvukov. Trieda iba poskytuje štruktúru; skutočné použitie je možné vytvorením premenných typu triedy „zviera“. Tento koncept sa často prirovnáva k forme na chlieb a chlebu. Vytvoríte formu na chlieb nazývanú trieda a potom túto formu použijete na tvarovanie premenných, ako je chlieb. Premenné vytvorené pomocou triedy sa nazývajú „objekty“.
Hlavné komponenty objektovo orientovaných konceptov sa všeobecne delia na dedičnosť, zapuzdrenie a polymorfizmus. C++ implementuje tieto prvky v rámci tried. Dedenie je koncept, kde jedna trieda dedí funkcionalitu z inej triedy. Predpokladajme napríklad, že existuje trieda „zviera“ a triedy „lev“ a „králik“. Keďže levy a králiky sú zvieratá, dobre navrhnutý program by mal triedy „lev“ a „králik“ dediť väčšinu funkcionality z triedy „zviera“. To umožňuje stručný kód jednoduchým zadaním, že „lev“ a „králik“ dedia z triedy „zviera“ bez prepisovania toho istého kódu. V tomto prípade sa trieda „zviera“, ktorá poskytuje dedičnosť, nazýva rodičovská trieda, zatiaľ čo triedy „lev“ a „králik“, ktoré dedia, sa nazývajú podradené triedy.
Zapuzdrenie riadi prístup k interným informáciám triedy. Ak sa dôležité údaje nachádzajú v triede, povolenie nerozlišovacieho prístupu k nim je riskantné. Nemôžete však celú triedu nastaviť ako súkromnú len kvôli ochrane konkrétnych údajov. Preto sa kľúčové slová používajú na rozlíšenie toho, ktoré informácie sú zverejnené a ktoré skryté.
Polymorfizmus znamená, že rovnaký názov sa môže správať odlišne v závislosti od kontextu. V jazyku C++ musíte pri definovaní funkcie explicitne zadať názov funkcie, návratový typ a typy a počet premenných odovzdaných funkcii. Napríklad pri vytváraní funkcie na sčítanie dvoch čísel vykonáva funkcia, ktorá sčítava celé čísla a funkcia, ktorá sčítava čísla s pohyblivou desatinnou čiarkou, rôzne akcie. Aj keď sú to podobné funkcie, ak im musíte dať rôzne názvy, ich zapamätanie a používanie sa stáva veľmi ťažkopádnym. Avšak v jazyku C++, ak sa návratový typ, typy vstupných premenných alebo počet premenných líšia, funkcie s rovnakým názvom sa rozpoznávajú ako odlišné. Okrem toho, podradená trieda nemusí replikovať všetku funkcionalitu svojej rodičovskej triedy. Napríklad, ak existuje funkcia, ktorá vydáva zvuk zvieraťa, pretože každé zviera vydáva iný zvuk, podradená trieda môže túto funkciu prepísať (predefinovať) tak, aby používala svoju vlastnú verziu.
C++ je jazyk vytvorený pridaním ďalšej syntaxe do jazyka C, takže môže využívať väčšinu jeho funkcií. Preto sa ukazovatele, jedna z kľúčových funkcií jazyka C, používajú priamo aj v jazyku C++. Každá pamäťová oblasť v pamäti počítača má jedinečnú adresu. Ukazovateľ slúži na ukazovanie na túto adresu. Keď funkcia potrebuje prijať premennú na vykonanie, počítač túto premennú skopíruje, uloží ju do nového priestoru a potom vykoná funkciu pomocou tejto premennej. Po dokončení vykonávania funkcie skopírovaná premenná zmizne. Napríklad pri vykonávaní funkcie „swap“, ktorá vymieňa hodnoty dvoch premenných, sa hodnota skopírovanej premennej zmení, ale pôvodná premenná zostane nezmenená. Ak však funkcia „swap“ prijme ukazovateľ na premennú a zmení jej hodnotu, ukazovateľ ukazuje na jedinečnú adresu, takže hodnota premennej sa skutočne zmení. C++ tiež poskytuje funkciu odkazovania, ktorá odovzdáva samotnú premennú namiesto ukazovateľa, čo ju robí užitočnou.
Ďalšou kľúčovou funkciou je podpora generického programovania. Generické programovanie je koncept navrhnutý tak, aby zlepšil opätovnú použiteľnosť kódu a pohodlie programátora. Hlavnou funkciou jazyka C++ na dosiahnutie tohto cieľa sú šablóny. Ako už bolo spomenuté, hoci je možné vytvoriť viacero funkcií s rovnakým názvom, vytváranie viacerých jednoduchých sčítacích funkcií je nehospodárne. Pomocou šablón počítač automaticky určí typ (či už celé číslo alebo číslo s pohyblivou desatinnou čiarkou), ktorý funkcia prijíma, a podľa toho vykoná operáciu. To skracuje čas kódovania, robí kód stručnejším a zlepšuje čitateľnosť.
Ďalším prvkom generického programovania je STL (Standard Template Library). Využitie dát je v programovaní kľúčové. Algoritmy na spracovanie dát sú matematicky organizované a dátové štruktúry sú ich implementáciou. Avšak, programátori musia zakaždým od začiatku znovu vytvárať dátové štruktúry, čo je nielen časovo náročné, ale neponúka ani žiadnu záruku, že algoritmus je optimalizovaný. C++ poskytuje dátové štruktúry optimalizované pre expertov na úrovni jazyka, ktorou je STL. Programátori si jednoducho vyberú a použijú požadovanú dátovú štruktúru.
Týmto spôsobom poskytuje C++ mnoho funkcií na úrovni jazyka pre pohodlie používateľa. Keďže bol vytvorený ako rozšírenie jazyka C, samotný jazyk má zložité aspekty. Učenie sa a pochopenie všetkých týchto konceptov môže byť náročné, ale vďaka výkonným možnostiam jazyka C++ ho stále používa mnoho programátorov. Štandard pre syntax jazyka C++ sa v priebehu času neustále vyvíja a v budúcnosti budú pridávané rôzne funkcie pre pohodlie programátorov.

 

O autorovi

spisovateľ

Som „mačací detektív“ a pomáham zjednotiť stratené mačky s ich rodinami.
Dobíjam si energiu pri šálke latte, užívam si prechádzky a cestovanie a rozširujem si myšlienky písaním. Dúfam, že moje slová môžu pomôcť a utešiť ostatných, pretože ako blogerka pozorne sledujem svet a riadim sa svojou intelektuálnou zvedavosťou.