Lekce 1 - Úvod do jazyka C++
Vítejte u první lekce on-line kurzu o programování v jazyce C++. Budeme se učit postupně, od úplných začátků až po složité konstrukce, objektové modely, ukazatele a např. práci se soubory. S trochou trpělivosti a vytrvalosti se z tebe tak stane dobrý programátor.
Na úplný úvod je vhodné zmínit, že jazyk C++ je velmi komplexní a pravděpodobně vůbec jeden z nejtěžších jazyků na naučení. Kombinuje vysokou rychlost jazyka C s novým objektově orientovaným přístupem moderních jazyků jako např. Java, C# .NET nebo PHP. Je velmi dobrou volbou pro aplikace, které vyžadují vysoký výkon (např. webové prohlížeče nebo AAA hry) nebo pro specifické systémové knihovny, např. práci se zvukem nebo videem. Pokud neplánujete vyvíjet právě tyto náročné aplikace, bude pravděpodobně rozumnější uchýlit se raději k nějakému z modernějších jazyků, zmíněných výše. Pokud je vyvíjet plánujete, jste na cestě stát se opravdovým profíkem v oboru, i když to bude poměrně těžká práce.
Abychom plně porozuměli jazyku C++, ohlédněme se do minulosti na to, jak se programovací jazyky vyvíjely. Bude pro nás totiž důležité pochopit, jak C++ pracuje.
Vývoj programovacích jazyků
1. generace jazyků - Strojový kód
Procesor počítače umí vykonávat jen omezené množství jednoduchých instrukcí, které jsou uloženy jako sekvence bitů, jsou to tedy čísla. Ta se mu obvykle zadávají v hexadecimální (šestnáctkové) soustavě. Instrukce jsou tak elementární, že umožňují pouze např. sčítání adres nebo skoky mezi instrukcemi. Nelze např. jednoduše sečíst dvě čísla, musíme se na čísla dívat jako na adresy v paměti a takové sečtení čísel zabere několik instrukcí. Program sčítající dvě čísla by vypadal např. takto:
2104 1105 3106 7001 0053 FFFE 0000
Instrukce se procesoru předloží v binární podobě. Takovýto kód je samozřejmě extrémně nečitelný a závisí na instrukční sadě daného CPU. Určitě v tomto jazyce nebude jednoduché tvořit nějaké programy, bohužel každý program musí být nakonec do tohoto jazyka přeložen, aby mohl být na procesoru počítače spuštěn.
2. generace jazyků - Assembler
Assembler (zkráceně ASM) není o nic jednodušší, než strojový kód, ale je lidsky čitelný. Jedná se o strojový kód, ve kterém mají instrukce slovní označení (kód), čili si člověk nemusí pamatovat čísla. Kódy instrukcí se poté přeloží na výše uvedený strojový kód. Stejný program by v ASM vypadal takto:
ORG 100 LDA A ADD B STA C HLT DEC 83 DEC –2 DEC 0 END
Vidíme, že je to poněkud lidštější, ale stále nezasvěcení lidé vůbec netuší, jak program funguje (včetně mne).
3. generace jazyků
Jazyky v třetí generaci konečne nabízí uživateli určitou abstrakci nad tím, jak program vidí počítač, zaměřují se na to, jak program vidí člověk. Naše čísla jsou vnímána již jako proměnné, zdrojový kód připomíná matematický zápis.
Sečtení dvou čísel by v jazyce C vypadalo takto:
int main(void) { int a, b, c; a = 83; b = -2; c = a + b; return 0; }
Všichni asi tušíme, co program dělá, sečte čísla 83
a
-2
a výsledek uloží do proměnné c
. U všech
jazyků třetí generace je samozřejmě výhodou vysoká čitelnost. Určitě
si dokážete představit, jakou revoluci v programování jazyk C způsobil, i
když nebyl zdaleka prvním jazykem tohoto typu.
Céčko navrhl Dennis Ritchie, tvůrce operačního systému UNIX, v 70.
letech 20. století. Právě celý UNIXový kernel je v céčku naprogramovaný,
což pravděpodobně stojí za jeho velkým rozšířením a také poukazuje na
extrémní výkonnost tohoto jazyka. C++ staví na jazyce C (příkaz
++
vykoná v jazyce C zvýšení hodnoty o 1
, název
tedy označuje něco jako lepší céčko).
Kompilované jazyky
Kompilované (neřízené) jazyky mají svůj zdrojový kód v jazyce, kterému lidé dobře rozumí. Tento zdrojový kód se samozřejmě musí přeložit do strojového kódu, aby ho bylo možné na procesoru spustit. Tento překlad zajišťuje překladač (kompiler), který přeloží najednou celý program do stroj. kódu.
Objektově orientované programování
Objektově orientované programování (OOP) je klíčová vlastnost jazyka C++, kterou k C přidává. C++ je vlastně jazyk C s další syntaxí (příkazy) navíc. To umožňuje C++ kompilovat všechny programy v C a také používat céčkové knihovny. OOP umožňuje vytvářet i komplexní aplikace extrémně čitelné a udržovatelné pomocí rozdělení na komunikující objekty. Tyto vlastnosti dělají z C++ rychlý a moderní jazyk. Bohužel je ale stále považován zároveň za těžký jazyk a používá se zejména pro specifické účely.
Ten samý program pro sečtení čísel 83
a -2
by
s využitím OOP vypadal v C++ asi takto:
#include <iostream> using namespace std; class Kalkulacka { public: int secti(int a, int b); }; int Kalkulacka::secti(int a, int b) { return a + b; } int main(void) { Kalkulacka kalkulacka; int c = kalkulacka.secti(83, -2); cout << "Výsledek:" << c; cin.get(); return 0; }
Všimněte si, že se již nejedená pouze o čistý algoritmus, ale přidáváme další vrstvu abstrakce, kterou je volání funkcí na objektu kalkulačka. Samozřejmě, že to zde nedává pro tak jednoduchou úlohu, jako je sečtení 2 čísel, příliš velký smysl. Komplexní algoritmy jsou takto však několikanásobně čitelnější. V základech C++ OOP zanedbáme a budeme se soustředit hlavně na základní syntaxi C++. OOP je potom detailně věnován samostatný navazující kurz.
Garbage Collector
Co C++ postrádá je tzv. Garbage Collector
, který v moderních
jazycích automaticky uvolňuje paměť, kterou náš program využívá. C++
nic takového neposkytuje, což jej dělá rychlejší, ale také mnohem
nebezpečnější, protože úklid paměti zbude na programátorovi. Toto je
pravděpodobně největší odlišnost C++ při porovnání s moderními
programovacími jazyky a jedná se o výhodu a zároveň nevýhodu. Získáváme
rychlost, která je vykoupena složitějším kódem.
Nyní jsme tedy seznámeni s tím, co nás čeká.
V příští lekci, Visual Studio a první konzolová aplikace v C++, si nainstalujeme všechny potřebné nástroje a vytvoříme svůj první program.