Filozofia jazyka
Jazyk C++ má v sebe tri rozdielne filozofie písania kódu. Prvou filozofiou je štrukturované programovanie, druhou objektovo orientované programovanie a treťou je generické programovanie (programovanie na základe predlôh podporované šablónami jazyka C++).
Syntax jazyka C++ je prebraná z jazyka C. Jazyk C++ je veľmi podobný jazyku C, avšak je rozšírený o objektovo-orientované a generické programovanie. Na to, aby ste sa naučili jazyk C++ je potrebné vedieť štandard syntaxe jazyka C. Tam sú prítomne základné typy, riadiace štruktúry, operátory, syntaktické pravidla.
Otázkou je, čí je lepšie sa naučiť jazyk C a potom prejsť na jazyk C++. Na to neexistuje jednoznačná odpoveď, ale veľa autorov rôznych programátorských kníh tvrdí, že lepšie je sa hneď vrhnúť na jazyk C++, pretože prechod z jazyka C na C++ nemusí byť hladký.
Môžu nastať zle programátorské návyky pri programovaní v jazyku C. V jedno som ale zajedno – treba hlavne veľa programovať a snažiť sa zdokonaľovať algoritmické myslenie, syntax rôznych jazykov je potom len „brnkačka“.
Vznik programovacích techník vedúce až k jazyku C++
Prvé elektronické počítače sa objavili počas obdobia druhej svetovej vojny. Od vtedy sa počítače začali rýchlo šíriť po celom svete. Najprv pracovali programátori so strojovým kódom. Strojový kód obsahoval len primitívne inštrukcie tak, ako tomu rozumel procesor počítača. Tieto inštrukcie boli tvorené nulami a jedničkami.
Vývoj smeroval k vzniku jazykom vyššej úrovne(v porovnaní so strojovými jazykmi), ako jazyk Basic či COBOL. Tieto jazyky vyznávali procedurálne programovanie. Už netrebalo prácne si pamätať jednotlivé inštrukcie z núl a jedničiek, kód bol zložený z anglicky sa podobajúcim slovám a vetám a môžeme povedať, že tu sa začína zrod programovacích jazykov, také aké ich v súčasnosti poznáme.
Slová a vety z Basicu a COBOLU boli preložené do strojového jazyka pomocou interpretov a kompilátorov. Interpret programu preloží kód pri čítaní a mení slovné inštrukcie do jednotlivých akcii. Napríklad inštrukcia Premenna = 10 priradí premennej hodnotu 10. Miesto písania núl a jedničiek postačí vedieť slovné konštrukcie a jednoducho tvoriť programy pre počítač. Interpret to robí za pochodu čítania inštrukcii.
Kompilátor ale miesto krok po kroku (interpret) preloží celý kód do objektového súboru, ktorý ale nie je spustiteľný. Tomuto kroku nazývame kompilácia. Následne kompilátor spustí linker, ktorý objektový súbor prevedie do spustiteľného programu.
Poďme porovnať kompilátor s interpretom. S interpretom sa ľahšie pracuje, pretože interpret spracúvava inštrukciu za inštrukciou a hneď ju prevedie do strojovej podoby. V súčasnosti väčšinu interpretovaných programov označujeme ako skripty a interpret nazývame ako skriptove jadro. V programovacom jazyku Java nazývame interpret virtuálnym strojom. Vo Visual Basicu behovou knižnicou.
Virtuálny stroj Javy ovšem už dávno nie je prostým interpretom. Podporuje dynamickú kompiláciu rôznych častí kódu a ich optimalizáciu podľa cieľovej platformy.
Aké sú výhody kompilátora? Síce prináša krok naviac, keďže musí skompilovať zdrojový kód na objektový súbor a z neho vytvoriť spustiteľný súbor. Avšak, skompilované programy bežia rýchlejšie ako interpretované.
Treba si uvedomiť, že požiadavka kompilácie nastane len raz. Po nej ostane objektový súbor, ktorý je zrozumiteľný pre počítač a spustiteľný súbor, ktorý je možne spustiť na každej procesorovej i softvérovej platforme. Interpretované programy stále potrebujú interpret, skompilovaný spustiteľný program je už všade k dispozícii.
-
Programovanie v jazyku C++: Pointer ako návratová hodnota funkcie (2)
Keď budete chcieť vrátiť pointer ako návratovú hodnotu funkcie, tak musíte myslieť na jednú dôležitú vec, pamäť. Neviažte pointer na lokálnu premennú, ale pre pointer získajte dynamický pridelenú pamäť.
-
Programovanie v jazyku C++: Pointer ako návratová hodnota funkcie
Funkcie môžu vrátiť premenné typu int, float či string. Môžu však funkcie vrátiť pointer, čiže adresu na nejakú premennú? Odpoveď na túto otázku sa dozviete v článku.
-
Programovanie v jazyku C++: Pointery ukazujúce na funkcie
Vedeli ste, že pointery môžu ukazovať nielen na rôzne typy premenných, ale aj na funkcie? Ukážeme si, ako vytvoriť pointer, ktorý ukazuje na zvolenú funkciu.
-
Programovanie v jazyku C++: Pointery – Tipy a triky (4)
Máme niekoľko možností kombinácie pointerovej aritmetiky a dereferenčného operátora. Okrem ukážok si o každej možností niečo povieme, napr. ako sa vyvarovať potencionálnych chýb s pamäťou.
-
Programovanie v jazyku C++: Pointery – Pointerová aritmetika (3)
Naučte sa vytvoriť odkaz (pointer) na vaše vytvorené pole. Zoznámte sa s problematikou pointerovej aritmetiky a jej fungovania.
-
Programovanie v jazyku C++: Pointery – Deklarácia pointerov (2)
Naučte sa deklarovať pointery. V článku si podrobne ukážeme rozdiel medzi adresou a hodnotou premennej, čo je pri pointeroch veľmi dôležité rozlišovať.
-
Programovanie v jazyku C++: Pointery – úvod (1)
Tento článok slúži ako úvod k problematike pointerov. Základom pre pochopenie využitia pointerov je názorný problém, ktorý je riešený v článku.
-
Programovanie v jazyku C++: Rekurzívne funkcie
Naučte sa využívať rekurzívne funkcie, vďaka ktorým môžete ušetriť nemálo času a kódu pri vývoji a získať benefity ako napr. zjednodušenie či spriehľadnenie programu.
-
Programovanie v jazyku C++: Tvorba funkcii (2)
Naučte sa pracovať s návratovou hodnotou funkcii. Uvidíte aj implementáciu faktoriálu s využitím funkcie.
-
Programovanie v jazyku C++: Tvorba funkcii (1)
Článok vás uvedie do oblastí tvorby vlastných funkcii. Pochopíte význam a syntax funkcie a dozviete sa o rozdielu medzi parametrom a argumentom.
-
Programovanie v jazyku C++: knižnica string – funkcie substr a pop_back
V záverečnom dieli z minicyklu o knižnice string si povieme o funkciách substr a pop_back.
-
Programovanie v jazyku C++: Knižnica string – funkcia replace
Nahradiť časť reťazca inou časťou reťazca? V knižnici string sa nachádza funkcia replace, ktorá nám umožní jednoducho nahradzovať reťazce.
-
Programovanie v jazyku C++: Knižnica string – funkcia insert
V tomto článku si predstavíme funkciu insert . Zároveň sa naučíte s funkciou insert pracovať a ukážeme si aj rôzne argumenty, ktoré táto funkcia podporuje.
-
Programovanie v jazyku C++: Knižnica string – funkcie back, front a push_back
Ďalšia časť o knižnici string a jej podporovaných funkciách. Tentoraz sa pozrieme na funkcie back, front a push_back .
-
Programovanie v jazyku C++: funkcie rbegin, cbegin, crbegin a rend, cend, crend
V tomto článku si preberieme viacero funkcii, ale nebojte sa, ide len o deriváty funkcie begin a end s podobnou funkcionalitou. Ide konkrétne o funkcie rbegin a rend , cbegin a cend , crbegin a crend .
Procedurálne/štrukturované programovanie a jazyk C
Jazyk C sa zaslúžil o vytvorenie veľmi rýchlych programov, ktoré boli schopné rýchlo komunikovať s hardvérom. Dovtedy bolo skoro nemožné komfortne riadiť komunikačné porty či ovládače disku. Jedine pomocou strojového kódu.
Začalo sa to v 70 rokoch, keď Dennis Ritchie z Bellových laboratórii pracoval na vývoji operačného systému UNIX. Operačný systém definujeme ako nejakú sadu programov, ktoré spravujú hardvér i softvér a komunikujú s užívateľom. Napríklad, operačný systém vyšle výzvu, či spustiť nejaký program a užívateľ buď súhlasí alebo nie. Ak súhlasí, tak spustí dotyčný program.
Tu pri operačných systémoch je potrebná veľká dávka abstrakcie. Preto bola iniciatíva vyvinúť programovací jazyk, ktorý by vytváral rýchle programy, mal istú abstraktnú úroveň a zároveň, aby účinne riadil hardvér na najnižšej úrovne a taktiež, aby bol priehľadný pre programátorov.
Doterajšie asemblery riešili tento problém, avšak nevýhodou bolo, že čo iná platforma procesora, to iný asembler. Tým, že asembler je strojovo-orientovaný jazyk, bol silne závislý na type procesora. Každý typ procesora mal svoj asembler.
A ani procedurálne programovanie na túto úlohu nestačilo. Projekt UNIX ale predpokladal, že bude funkčný pre rôzne typy počítačov. Vznikla tak požiadavka vyvinúť vyšší programovací jazyk. Úlohou vyšších programovacích jazykov nebola orientácia na určitý hardvér, ale riešenie problémov. Silne s tým súvisí rozvoj istého stupňa abstrakcie.
Jazyk C je prvým jazykom, ktorý spája výhodu prístupu hardvéru na nízkej úrovne a prenosíteľnosti na rôzne typy počítačov a riešil i problémy procedurálneho programovania.
O prenositeľnosť sa staral kompilátor. Kompilátor, ako sme si hovorili, preloží zdrojový kód do strojového kódu, ktorému porozumie procesor. Aké jednoduché, spustiť kompilátor je možne v rôznych typoch počítačov a strojový kód, ktorý je i tak nespustiteľny, je vytvorený na mieru procesora. Linker sa už len postará o spustiteľnosť programu.
Procedurálne programovanie sa zameriava hlavne na algoritmus programu. Program môžeme chápať ako recept pre počítač. Máme tu sadu inštrukcii, ktorú má počítač vykonať. Algoritmy (čiže recepty) sú alfou-omegou procedurálneho programovania.
Procedurálne programovanie fungovalo na základe premisie, že sme kontrolovali ktorá funkcia vola ďalšiu funkciu a u ktorých dát došlo k zmene. Typickými predstaviteľmi procedurálneho programovania boli jazyk Basic a Fortran.
Čím sa stavali programy zložitejšie, prichádzali problémy. Pri veľmi dlhých zdrojových kódoch, kde bolo veľa funkcii a prehľadnosť sa strácala, byť len zmeniť jednu funkciu bolo utrpením.
Taktiež procedurálne programovanie používalo príkazy skoku, ich úlohou bolo zmeniť vykonávanie programu z iného miesta v kóde. Príkazy skoku realizovali cykly či podmienky.
Jazyk C priniesol spásu doterajších problémov. Štrukturované programovanie prináša len malú množinu príkazov (cykly for, while, do-while a podmienky if-else), ktoré nahradzujú príkazy skoku.
Ďalším dôvtipným rysom štrukturálneho programovania bol beh programu zhora nadol a to veľmi výrazne spriehľadnil zdrojový kód pre programátorov.
V jazyku C je napísaná drvivá väčšina kódu linuxového jadra. Stále sa často využíva aj v mnohých ďalších softvérových projektoch, napriek nástupu C ++ a mnohých ďalších jazykov.
Objektovo orientovaný prístup
V ďalšej častí sa dozviete o potrebe objektovo orientovaného prístupu a príbeh vzniku jazyka C++.