1. díl - Úvod a historie C++

C++ Základní konstrukce C++ Úvod a historie C++

Kdo by si měl tento kurz přečíst
Tento kurz je určen hlavně pro ty, co se s tímto jazykem ještě vůbec nesetkali, nebo přecházejí z jazyka C do C++. Experti zde asi nic nového nenajdou, ale aspoň si můžou osvěžit své znalosti...:o)

Budu se snažit, aby všechna témata byla srozumitelná i naprostým začátečníkům. Všechny lekce se budou do hloubky zabývat vybraným tématem, takže by vám nemělo nic uniknout.

Pozn.: V tomto kurzu udělám menší vyjímku - nebudu se soustředit pouze na kód pro systémy Windows (důvodem je cíl tohoto kurzu - naučit C++, což je multiplatformní jazyk). Vše co se zde tedy naučíte, můžete využít jak ve Windows, tak například v Unixu i Linuxu.

Vývojová prostředí Pokud budeme vyvíjet pod Windows, je nejjednodušší stáhnout Microsoft Visual Studio Community. Je zdarma a obsahuje vše potřebné pro vývoj - editor i kompiler. Pokud vyvíjíte pod Linuxem, je nejjednodušší použít g++ jako kompiler. Jako IDE můžete zvolit Eclipse, které je taktéž zdarma.

Věřím, že vám můj kurz pomůže alespoň trochu zjednodušit vstup na již tak docela trnitou cestu programováním v tomto báječném (ale těžkém) jazyce.

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.

Teorie

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 vzniká 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 (respektive procesoru) předat "zakódovaný", tedy přeložený z řeči lidí do řeči strojů. Tak například čísla nebo znaky musíme počítači předávat ve dvojkové soustavě (tedy ony jedničky a nuly). 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ávislost. 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. Příkladem vysokoúrovňového jazyka by mohli být C#, Java nebo PHP.

C++ je ale trochu jiný, především proto, že v sobě spojuje obojí. Pro zápis algoritmů používáme příkazy, ale C++ nám dovolí přistupovat přímo do paměti a k hardwaru počítače. To z něj dělá 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í velmi rychle. 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 zrychlovaly, měly 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ě se už začínal zavádět nový přístup, a to objektově 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, konkurentem 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 povím. 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 celý jazyk C, ale navíc přidává vysokoúrovňové vlastnosti vyšších jazyků. Z toho plyne, že 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? 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 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. V klasickém pojetí je totiž program tvořen se dvou částí: dat a 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 trojúhelník. Dobrá, navrhneme tedy třídu reprezentující trojúhelník. Bude obsahovat nějaké vlastnosti, třeba barvu a souřadnice rohů. To je datová čá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 navrženou třídu, můžeme vytvořit konkrétní objekt o určitých souřadnicích a barvě a můžeme 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++ mohou používat i softwarové knihovny jazyka C, C++ má ale své 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 - 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.

Pokud vás objektově orientované programování zajímá, můžete pokračovat na článek článek Objektově orientované programování a evoluce vývoje softwaru.

Závěr

Obecně se říká, že C/C++ jsou jazyky složité. Je to pravda, ale 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 je i kamenem úrazu, zvlášť když dotyčný neví co dělá - příkladem může být práce s pamětí.


 

  Aktivity (3)

Článek pro vás napsal Jiří Pipošiar
Avatar
Moc toho tady o sobě prozrazovat nebudu, raději:)) Takže momentálně žiju v Klatovech(velkoměsto v západních Čechách), a 22.5.2003 jsem zde i odmaturoval na střední průmyslové škole. No a novinka - byl jsem přijat na Západočeskou univerzitu - Faku...

Jak se ti líbí článek?
Celkem (17 hlasů) :
4.823534.823534.823534.823534.82353


 


Miniatura
Všechny články v sekci
Základy C++

 

 

Komentáře
Zobrazit starší komentáře (10)

Avatar
-snaživec-
Člen
Avatar
-snaživec-:

nevedel by si mi oňom povedať viac

Odpovědět  +1 24.3.2014 15:43
Pomali ďalej zájdeš.
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na -snaživec-
Filip Šohajek:

Prvni se nauc C a C++ a potom se poustej do techto exotik.

Editováno 24.3.2014 15:49
 
Odpovědět 24.3.2014 15:48
Avatar
Michal
Člen
Avatar
Michal:

C ani C++ v žádném případě nejsou nízkoúrovňové jazyky, na rozdíl od například Asm.
C++ se stále hojně vyvíjí, poslední standard vyšel před několika měsíci (C++14). Již několik let se podle TIOBE indexu drží mezi programovacími jazyky na čtvrtém místě, před C#.
Ohledně Game Makeru; dle mého názoru na jeho pravé nevýhody narazíte až když se pokusíte vytvořit nějakou složitější 3D hru - pro tvorbu 3D her existují o mnoho vhodnější GCE. Na tvorbu 2D her je však ideální, nic proti němu nemám.

Odpovědět  +2 24.3.2014 16:30
Don’t worry if it doesn’t work right. If everything did, you’d be out of a job.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Michal
Zdeněk Pavlátka:

C a C++ jsou nízkoúrovňové. To se totiž neurčuje podle toho, jak jazyk vypadá, jak je oblíbený a co umí, ale podle toho, jak se překládá. (Jak funguje "vnitřně")

Odpovědět  +1 24.3.2014 16:39
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Michal
Člen
Avatar
Michal:

No nepovídej. :) Vkládáš mi do úst něco, co jsem neřekl. Opravoval jsem několik nepřesností, které David řekl, a jednotlivé myšlenky jsem oddělil odstavci - první řádek je první odstavec, na druhém řádku začíná druhý. Nikde jsem nenapsal, že by se to určovalo podle jejich oblíbenosti/schop­nostem/etc.

C a C++ jsou HLL (Céčko je jazyk třetí generace - 3GL), jediné nízkoúrovňové jazyky jsou asm a strojový kód, protože poskytují minimální/žádnou abstrakci oproti instrukční sadě počítače.

Editováno 24.3.2014 18:40
Odpovědět  +1 24.3.2014 18:38
Don’t worry if it doesn’t work right. If everything did, you’d be out of a job.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal
David Čápka:

Hranice se posouvají, céčko bylo v minulosti highlevel, dnes je lowlevel. Je fakt, že C++ je takový mix, ale patří spíše k těm nižším jazykům. Vysoký jazyk je třeba Java.

Odpovědět  ±0 24.3.2014 18:44
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jaroslav Polívka:

Tak ona to bude taky asi věc názoru, často každý vychvaluje to, co sám používá, ale všechno má své výhody a nevýhody. Osobně jsem si C++ velmi oblíbil a s čistým svědomím můžu říct, že ho zdaleka 100% neovládám, je to velmi pestrý a myslím náročný jazyk, vezmi třeba v úvahu, tu manuální práci s pamětí, stačí jeden špatně inicializovaný ukazatel a pak to v tom hledej.

Odpovědět  +1 3.7.2014 21:15
Velice často si věci žijí svým životem
Avatar
LukyH
Člen
Avatar
LukyH:

V různých zdrojích se můžeme dočíst, že programovací jazyky vysoké úrovně jsou ty, které poskytují vysoký stupeň abstrakce nad hardwarovou vrstvou a jsou problémově orientované. Dokonce některé definice říkají, že mezi tyto jazyky patří i ty jenž vyžadují určitý druh kompilace nebo interpretace přičemž u kompilace nejsme omezeni na jedinou cílovou instrukční sadu procesoru. Proto jsou nejčastěji označování jako zástupci low-level jazyků strojový kód a assembler.
To proč je dnes čím dál časteji C/C++ označován jako nízkoúrovňový je fakt, že v základu neposkytuje takové schopnosti jakými disponuje tak populární Java a C#. Jedná se především o garbage collector a managed code.
Můj názor je tedy, že C/C++ by měli stále patřit k vysokoúrovňovým jazykům tak jak je to uváděno v mnoha zdrojích.

 
Odpovědět  +1 6.7.2014 15:02
Avatar
Zoltan Lukac
Člen
Avatar
Zoltan Lukac:

Nuž, teória je základ....

 
Odpovědět 21. března 22:39
Avatar
Miklik
Člen
Avatar
Miklik:

překlepy:
záwislost
byl k pro

 
Odpovědět 11. srpna 19:27
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 20. Zobrazit vše