Jazyk C++

Krátký úvod
Než se pustíme do hlubin samotného jazyka C++, měl bych vám asi vysvětlit, jak to všechno vůbec funguje, a také osvětlit základní pojmy. Správný programátor by totiž takovéto základní věci měl určitě vědět.

Tak třeba algoritmus, co to může být? Stručně by se dal nazvat jako určitý postup řešení daného problému. Je to předem daná posloupnost více kroků, ze které pak vznikná program. Program sám o sobě předepisuje počítači množinu procedur (funkcí, algoritmů), kterými se daný počítač řídí, aby provedl určitý výstup. Je to téměř jako recept, který předepisuje kuchaři postup, jak upéct lahodný koláč:-).

Aby mohl být algoritmus na počítači prováděn, musíme ho počítači(respektivě procesoru) předat "zakódovaný", tedy přeložený z řeči lidí do řeči strojů. Tak například čisla nebo znaky musíme počítači předávat ve dvojkové soustavě(tedy oné jedničky a nuly, jako v Metrixu:-)). Protože člověk je tvor lenivý, vytvořil si program, který tohle všechno udělá za něj - překladač (angl. compiler). Ten je pro každý programovací jazyk odlišný, protože každý jazyk bude mít jiný způsob, jak program v něm napsaný převádět.

Co je to vlastně ten programovací jazyk? Laicky řečeno je to nástroj, pomocí kterého zapisujeme algoritmus ve formě bližší člověku. Programovací jazyky dělíme na nízkoúrovňové - LLL (Low Level Language), a vysokoúrovňové (HLL - High Level Language). Nízkoúrovňové jazyky využívají především zápisu instrukcí procesoru. Pro své vlastnosti jsou používány hlavně odborníky v systémovém programování - a to především díky tomu, že umožňují větší kontrolu nad počítačem a hardware samotným. Nevýhodou může být hardwarová záwislost. Mezi nízkoúrovňové jazyky bezpochyby patří Assembler.

Vysokoúrovňové jazyky používají pro zápis algoritmů postupy bližší lidskému chápání. Algoritmus se zapisuje pomocí příkazů, které nakonec tvoří samotný program. Ve většině prog. jazyků je každý příkaz zakončen středníkem (;). Příkladem vysokoúrovňového jazyka by mohli být Pascal, Turbo Pascal, Fortran, Basic.

C++ je ale trochu jiný, především proto, že v sobě spojuje obojí, a to jak nízkoúrovňové, tak i vysokoúrovňové vlastnosti. To z něj vytváří jeden z nejrozšířenějších a nejvýkonnějších jazyků, co kdy spatřily světlo světa.

Trochu historie
Výpočetní technika se vyvíjí strašnou rychlostí. Pryč jsou ty doby, kdy jeden počítač s majestátnými 100KB paměti zabíral prostor v celém sále. Postupem doby se počítače zrychlovali, měli větší kapacitou pamětí a umožňovaly spouštět složitější programy, které ale na oplátku způsobovaly nové problémy v jejich správě a údržbě.

A právě to byl tehdy v 70. letech důvod k zavedení strukturovaného programování. Přineslo to jistý řád a kázeň do této oblasti, která tak silně tyto vlastnosti potřebovala. Kromě těchto vlastností byl jazyk C známý produkcí kompaktních a rychlých programů spolu se schopností adresovat hardwarové prostředky, jako řídící komunikační porty nebo ovladače disků. I tyto dary mu pomohly, aby se stal dominantním jazykem 80tých let.

V té době už se ale začínal zavádět nový přístup, a to oběktově orientované programování (OOP). Byl tedy nejvyšší čas, aby nastoupil nový a především modernější nástupce jazyka C, C++(C++ ale není jediným OOP jazykem, konkutenrem je například jazyk Smalltalk). Možná se ptáte co znamenají ty dvě plus (++) za písmenem C. Tak já vám to tedy povim. Je to něco ve smyslu "o krok dále", nebo také "o jednotku výše" (v definici jazyka je totiž ukotveno, že ++ zvyšuje celé číslo o jedničku, o tom ale později). Dobře tak vystihuje, že C++ je nástupcem jazyka C. C++ dokonce obsahuje skoro celý jazyk C, ale navíc přidává vysokoúrovňové vlastnosti vyšších jazyků. Z toho plyne, že (skoro) každý platný program v C je také platným programem v C++. Naopak to samozřejmě neplatí:-)

Jazyk C
Proč se tento jazyk jmenuje C? Protože před ním byl jazyk B (zkratka od B CPL - central programming language), jak snadné:-) A kdo vlastně stojí za jeho vznikem? No nikdo jiný než Dennis Ritchie z Bell Laboratories. Stalo se tak když pracoval na rozvoji operačního systému UNIX. Potřeboval jazyk, který by byl stručný, výstižný, vytvářel kompaktní a rychlé programy a jenž mohl účinně řídit hardware. Tradičně byl k pro tyto účely využíván Assembler, ale to je strojově orientovaný jazyk (tzn. že je závislý na určitém procesoru počítače), což Ritchie nechtěl, protože UNIX měl být určený pro práci na různých typech počítačů. Proto si vytvořil jazyk svůj, a nazval ho C.

Jazyk C++ a objektově orientované programování
Tato moderní inkarnace jazyka C v sobě spojuje sílu tradičního "céčka" a a navíc přidává vysokoúrovňové vlastnosti vyšších jazyků. Jazyk C++ byl stejně jako jazyk C vytvořen v Bell Labs, ale tentokráte v tom má prsty někdo jiný: Bjarne Stroustrup. Podle jeho vlastních slov "byl C++ původně navržen tak, abychom (mí přátelé a já) nemuseli programovat v assembleru nebo jiných moderních vyšších jazycích" (Bjarne Stroustrup, The C++ programming Language, The third edition). Hlavním rozdílem mezi C a C++ je způsob programování.

C je ryze procedurální jazyk, tzn. že zdůrazňuje algoritmy(pozn. Program jako takový se skládá ze dvou částí: dat a algoritmů. Data jsou informace, které program používá, zpracovává nebo vytváří pomocí algoritmů). Naproti tomu C++ je objektově orientovaný jazyk, tzn. že zdůrazňuje data. Myšlenka OOP spočívá v návrhu datových tříd, které popisují určitý souhrn vlastností a jak s těmito vlastnostmi zacházet.

A teď je ta správná chvíle vysvětlit, co je to vlastně ten objekt. Když napíšu, že se jedná o instanci třídy, většině z vás to asi nic neřekne. Tak tedy jinak. Představme si to na třídě, která bude reprezentovat nějakého sportovce. Dejme tomu že bude obsahovat jméno, sport který vykonává, jestli má psa a kolik vydělává. No a objektem je konkrétní sportovec: Pepa Novák, atlet, má psa a vydělává 20000Kč. Objektů(neboli instancí dané třídy) může být nekonečně mnoho (přesněji závisí na velikosti paměti počítače). Další příklad zahrne do návrhu třídy i metody(něco na způsob funkcí). Dejme tomu že vytváříte program pro práci s grafikou. Program by měl umět nakreslit třeba trojuhelník. Dobrá, navrhneme tedy třídu reprezentující trojuhelník. Bude obsahovat nějaké vlastnosti, třeba barvu a souřadnice rohů. To by smě měli datovou část. Část určující činnosti(metody) objektu bude obsahovat definice metod pro posunutí, rotaci nebo třeba změnu barvy. Tak a teď když máme navrhlou třídu, můžeme vytvořit konkrétní objekt o určitých souřadnicích a barvě a můžem ho pomocí jeho metod posouvat, nebo otočit. Skvělé, nemyslíte?

Celý program se poté skládá z velkého počtu objektů vytvořených na základě tříd. Programy v C++ můžou používat i softwarové knihovny jazyka C, C++ má ale svoje vlastní, lepší, podporující OOP (pozn. Knihovny jsou kolekce programových modulů, které můžeme volat z našeho programu. Jsou to ověřená řešení mnoha problémů, jako je práce s řetězci - což je v C/C++ obzvláště velký problém. Ušetří tak mnoho času a úsilí).

Toto je ale jen nepatrná část z toho, co nám OOP přináší. Dalším tématem by mohlo být například generické programování, které C++ řeší pomocí šablon. O tom ale až někdy jindy.

Závěr
Obecně se má zato, že C/C++ jsou jazyky složité. Je to pravda. Není to ani tak kvůli syntaxi jazyka, ta je naopak relativně jednoduchá. Je to spíše tím, že tyto jazyky umožňují snad všechno na co si vzpomenete(To však bývá i kamenem úrazu, zvlášť když dotyčný neví co dělá - příkladem může být práce s adresami). Je k nim k dispozici obrovské množštví knihoven a není v lidské moci ovládat celou stránku tohoto jazyka.

On line Poker Machines charts. Party Poker Texas Holdem poker game rules. Casino poker chips are improved constantly as poker is improved also.

Autor: Jiří Pipošiar