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++: Knižnica cctype (3)
Pokračujeme v predstavovaní knižnice cctype a jej podporovaných funkcii.
-
Programovanie v jazyku C++: Knižnica cctype (2)
V minulom diele sme si prvý krát predstavili knižnicu cctype a zamerali sme sa na test veľkostí znakov. V tomto článku budeme pokračovať tým, ako zmeniť veľké písmeno na malé a opačne.
-
Programovanie v jazyku C++: Knižnica cctype (1)
V tomto článku si prvý krát ukážeme knižnicu cctype , ktorá nám umožní manipulovať zo znakmi. Knižnica je využiteľná všade tam, kde chcete meniť charakter znakov, napríklad zmeniť malé písmeno (znak) na veľké. V prvom dieli mini série o knižnici cctype si ukážeme testovanie veľkostí znakov. Pôjde o funkcie islower a isupper .
-
Programovanie v jazyku C++: Generátor pseudonáhodných čísel (2)
Pokračujeme druhým dielom o generátore pseudonáhodných čísel. Diel bude zameraný na tvorbu programov, kde si precvičite generátor pseudonáhodných čísel.
-
Programovanie v jazyku C++: Generátor pseudonáhodných čísel (1)
Začneme v článku s úvodom do funkcii a ukážeme funkcie na generovanie pseudonáhodných čísel.
-
Programovanie v jazyku C++: Iteratívne programy s pomocou cyklov (2)
Pokračujeme tvorbou iteratívnych programov s pomocou cyklov. Ukážeme si program na tvorbu jednoduchej tabuľky. V závere nás čaká program, ktorý nám vykreslí stromček.
-
Programovanie v jazyku C++: Iteratívne programy s pomocou cyklov (1)
S pomocou cyklov vieme vytvoriť zaujímave iteratívne programy, ktoré si ukážeme v tomto a nasledujúcom diele. Tieto programy vám umožnia získať nejakú programatorsku prax.
-
Programovanie v jazyku C++: Podmienka switch-case
Okrem podmienok s konštrukciou if-else poznáme aj switch-case. Tento typ podmienky sa hodí všade tam, kde potrebujeme rýchlo rozhodnuť o hodnote premennej, objektu atď…
-
Programovanie v jazyku C++: Príkaz goto
Minule sme riešili príkazy break a continue. V tomto článku pokračujeme ďalším zo základných príkazov jazyka C++: príkazom goto.
-
Programovanie v jazyku C++: Príkazy break a continue
V článku sa budeme zaoberať dvoma príkazmi, ktoré patria do základnej konštrukcie jazyka C++. Pôjde o príkazy break a continue.
-
Programovanie v jazyku C++: Chyby
V článku sa zameriame na tri typy chýb, s ktorými sa môžete stretnúť behom programovania v jazyku C++. Samozrejme, s chybami sa stretnete vo všetkých programovacích jazykov a preto je dôležite byť oboznámený s touto oblasťou.
-
Programovanie v jazyku C++: Operátory (3)
Pokračujeme tretím a zároveň posledným dielom z cyklu operátory. Okrem dokončenia bitových operátorov na vás v závere čaká ternárny operátor.
-
Programovanie v jazyku C++: Operátory (2)
Tento článok bude viac teoretický. Čaká nás putovanie do zaujímavej oblastí, kde premostíme nejaké poznatky z diskrétnej matematiky do jazyka C++.
-
Programovanie v jazyku C++: Operátory (1)
Doteraz sme si vysvetlili viacero veci napríklad polia, reťazce či cykly. Avšak, neprebrali sme dôležitú oblasť jazyka C++, operátory. V článku som zľahka načrtol, čo sú tie operátory a vysvetlil aritmetické operátory. A nie sú jediným typom operátorov. Predpokladám, že začiatočník by uvítal nejaký súhrn z tejto problematiky.
-
Programovanie v jazyku C++: Cyklus while (2)
Druhý diel sa zapodieva cyklom do while. Dočítate sa o funkcionalite spomenutého cyklu a naučíte sa s ním pracovať na základe ukážkových príkladov.
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++.