Prostory jmen. #include<iostream.h> namespace RadimuvProstor { int secti(int a, int b); class Trida { private: int Atribut; public: void metoda();



Podobné dokumenty
Cílem kapitoly je seznámit studenta se strukturou programu a jeho překladem.

Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,Benešovo náměstí 1, příspěvková organizace

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

Rozhodněte se, co budete dál dělat

ČÁST PÁTÁ POZEMKY V KATASTRU NEMOVITOSTÍ

Revize dokumentu B 1/11 TEACHER. Přidávání zvukových záznamů. Návody k programu Teacher, platí od verze 1.

Operace nad celými tabulkami

Jazyk C++ I. Šablony 3

Seznámení žáků s pojmem makra, možnosti využití, praktické vytvoření makra.

10 je 0,1; nebo taky, že 256

ABB i-bus KNX Inteligentní elektroinstalace pro Váš perfektní dům

I nohy si chtějí hrát! (cvičení nejen pro děti)

Rozšířená nastavení. Kapitola 4

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

O kritériu II (metodické okénko)

Obsah ÚVOD. Participanti. Nastavení testu. - úvod - participanti - nastavení testu - přehled úkolů testu - soupis problémů a návrh řešení - závěr

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Semestrální práce z NUR Uživatelské rozhraní pro automat MHD. Michal Samek (samekmic)

PROVÁDĚCÍ OPATŘENÍ KE KODEXU CHOVÁNÍ POSLANCŮ EVROPSKÉHO PARLAMENTU V SOUVISLOSTI S FINANČNÍMI ZÁJMY A STŘETY ZÁJMŮ

Metodické pokyny k pracovnímu listu č. 31 Photoshop Fotografování - Portrét. Učivo: Naučit se základním zásadám při pořizování portrétní fotografie.

urtotemp JEDNOTKA PRO PŘEVODY ODPORU ČIDLA NA TEPLOTU Příručka uživatele a programátora

Měřidla. Existují dva druhy měření:

Po počátečních manželských neshodách u nich vznikl pěkný rodinný krb.

6. DIDAKTICKÁ JEDNOTKA PREVENCE KONFLIKTŮ, KOMUNIKACE

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT. Cyklus while, do-while, dělitelnost, Euklidův algoritmus

STUDNY a jejich právní náležitosti.

4.5.1 Magnety, magnetické pole

Duchovní služba ve věznicích

Tutoriál Volné plošné zatížení

Standardní algoritmy v C++.

Příklad možnosti využití studentů k provádění evaluace v zařízeních poskytujících sociální služby

3.5.8 Otočení. Předpoklady: 3506

Úvod do jazyka C. Proč jazyk C

manuál pro segment Architektura

primární tlačítko (obvykle levé). Klepnutí se nejčastěji používá k výběru (označení) položky nebo k otevření nabídky.

Zadání soutěžních úloh

DATABÁZE DŮLEŽITÉ: Před načtením nové databáze do vaší databáze si prosím přečtěte následující informace, které vám umožní:

Algoritmizace a programování

Směrnice k Pravidlům hry ICCF Turnaje jednotlivců a družstev (platné od )

Vzdělávací program pro obchodní partnery společnosti ROCKWOOL průvodce školením

TVORBA MULTIMEDIÁLNÍCH PREZENTACÍ. Mgr. Jan Straka

Jak se ČNB stará o českou korunu

4 DVOJMATICOVÉ HRY. Strategie Stiskni páku Sed u koryta. Stiskni páku (8, 2) (5, 3) Sed u koryta (10, 2) (0, 0)

VÉCNÉ BŔEMENO 1. VĚCNÉ BŘEMENO. Věcné břemeno. Druhy věcných břemen. Vznik věcných břemen. Zánik věcných břemen. Předkupní právo

Obsah. Obsah. Úvod Makra v Excelu Nahrávání maker První setkání s editorem jazyka Visual Basic... 31

1.2.5 Reálná čísla I. Předpoklady:

Český med pokyny + přihláška

Slovní úlohy vedoucí na lineární rovnice I

I. Objemové tíhy, vlastní tíha a užitná zatížení pozemních staveb

téma: Formuláře v MS Access

Hoblíky s nízkým úhlem (výbrusem nahoru)

které je třeba si položit před zakoupením levného CAD programu

Kdy (ne)testovat web oční kamerou

Návazné opatření týkající se aplikačního nástroje pro sternální implantát ZipFix : Změny v návodu k chirurgické technice

Zadávání tiskových zakázek prostřednictvím JDF a Adobe Acrobat Professional

MECHANICKÁ PRÁCE A ENERGIE

sp. zn. sukls82959/2013

Rekonstrukce Svinovských mostů v Ostravě dopravní terminál

Obrázek. Základní popis, zadání úkolu. Struktura tříd,

Veřejné osvětlení v kostce

Zařízení autonomní detekce při požárech domácností v USA

Moderní technologie ve studiu aplikované fyziky CZ.1.07/2.2.00/ Reálná čísla

NÁVRHOVÝ PROGRAM VÝMĚNÍKŮ TEPLA FIRMY SECESPOL CAIRO PŘÍRUČKA UŽIVATELE

Obr Příklady ručních nástrojů

ALLEX FX Programovatelný logický automat. Katalogový list. říjen Programovatelné logické automaty

1 Matematické základy teorie obvodů

40. Mistrovství floristů ČR

Návod na montáž, obsluhu a údržbu

Co najdete v ASPI? (pro uživatele SVI FSE UJEP)

Informace o naší organizaci

PB161 Programování v jazyce C++ Objektově Orientované Programování

1.2.7 Druhá odmocnina

vismo Edituj, co vidíš.

Problém obchodního cestujícího s variabilními místy a časy [TMB-TSP]

1. LINEÁRNÍ APLIKACE OPERAČNÍCH ZESILOVAČŮ

V dalším textu je písmenem H: označen zápis Hladíka a písmenem P: zápis k bodům od Pristáše

WEBMAP Mapový server PŘÍRUČKA PRO WWW UŽIVATELE Hydrosoft Veleslavín, s.r.o., U Sadu 13, Praha 6

MOTOROVÝ VŮZ DR OD FIRMY KRES

NUR - Interaktivní panel, D1

Kapitola 5 WCF, webové služby a mezidoménové zásady

V této části manuálu bude popsán postup jak vytvářet a modifikovat stránky v publikačním systému Moris a jak plně využít všech možností systému.

Marketing. Modul 5 Marketingový plán

Včely jsou víc než med a náš život je s nimi spojený

Tekla Structures Multi-user Mode

Programy SFRB využijte co nejvýhodněji státní úvěr na opravu vašeho bytového domu.

Obsah. Úvodem 9 Komu je kniha určena 9 Forma výkladu 9 Konkrétní postup výuky 10 Příklady ke knize 11

Identifikace práce. POZOR, nutné vyplnit čitelně! Žák jméno příjmení věk. Bydliště ulice, č.p. město PSČ. C II: (25 b)

VZOR: VŠEOBECNÁ A ZÁVĚREČNÁ USTANOVENÍ PRO SMLOUVY PODLE NOZ

Jazyk C# přednáška 01. Fakulta elektrotechniky a informatiky Univerzita Pardubice 2014/2015

Vážení klienti, Upozorníme i na praktické důsledky nesjednání pravidelného pracoviště při poskytování cestovních náhrad. TaxVision, s.r.o.

KempHoogstad daňové novinky. Prosinec 2013

Návod pro parkovací senzory ps4c3, ps4cw3, ps4c4.2, ps4cw4.2, ps4lcd, ps4flcd, ps8lcd a ps4audio

Odsávač pár ZRW. Návod k obsluze

Kótování na strojnických výkresech 1.část

Projekt: Inovace oboru Mechatronik pro Zlínský kraj Registrační číslo: CZ.1.07/1.1.08/

Poměry a úměrnosti I

Preference v u ívání prost edk elektronické komunikace áky a studenty

Transkript:

Prostory jmen. Prostor jmen je oblast platnosti identifikátorů. Představme si situaci, kdy budeme chtít mít v jednom programu stejné identifikátory (názvy tříd, proměnných, metod, funkcí atd...). Nelze mít v jednom programu dvě různé třídy se stejným názvem. Překladači by se nelíbil konflikt jmen. Přesto taková situace může lehce nastat. Může třeba více programátorů, aniž by se domluvili na názvech identifikátorů, pracovat na jednom programu. To by byla zrovna velmi trapná situace, kdyby nebyli schopni se domluvit na názvech identifikátorů v programu. Může ale velmi často nastat situace, kdy je potřeba pracovat s více knihovnami, jejichž autoři se nejspíš nikdy neviděli, a nejspíše o sobě ani nevědí. Také může nastat situace, kdy píšeme svůj program, ve kterém používáme nějakou knihovnu. I zde může nastat konflikt našeho identifikátoru s jiným identifikátorem. Právě tyto konflikty jmen řeší tak zvané jmenné prostory. Jmenný prostor je oblast, ve které nesmí dojít ke konfliktu jmen. Jméno identifikátoru v prostoru jmen ale může být v konfliktu s jakýmkoliv jménem identifikátoru mimo tento prostor jmen. K definici prostoru jmen slouží klíčové slovo namespace. Za namespace následuje jméno prostoru jmen a v závorkách se nachází ona oblast platnosti identifikátorů. Jako příklad nyní vytvořím prostor jmen "RadimuvProstor" a vněm deklaruji a definuji třídu a funkci: #include<iostream.h> namespace RadimuvProstor int secti(int a, int b); class Trida ; private: int Atribut; public: void metoda(); void Trida::metoda() cout << "Ahoj" << endl; int RadimuvProstor::secti(int a, int b) return a + b;

V mém prostoru jmen jsem deklaroval funkci secti a třídu Trida. Dále jsem definoval tělo metody metoda. Tělo funkce secti jsem sice definoval "mimo" závorky, ale přesto patří do definovaného prostoru jmen. Vně závorky vymezující prostor jmen přistupujeme k identifikátorům z tohoto prostoru jmen jako by k prvkům třídy. Nyní zkusme definovat úplně jinou funkci secti, která je mimo tento prostor jmen. K předchozímu zdrojovému textu dopište: int secti(int a, int b) return 2 * a + 2 * b; int main(void) cout << secti(2,3) << endl; cout << RadimuvProstor::secti(2,3) << endl; return 0; Výstup programu je: V tomto případě nedojde ke konfliktům jmen. Je to proto, že vlastně neexistují dvě funkce secti, ale funkce secti(int,int) a RadimuvProstor::secti(int,int). Tím, že jsem funkci zařadil do prostoru jmen, jsem vlastně rozšířil její název. Byla by veliká náhoda, kdyby se našly dva prostory jmen stejného názvu. U názvů tříd, funkcí, globálních proměnných atd... je to ale dost možné. Název prostoru jmen by měl být vybrán tak, aby byl jednoznačný. Identifikátory uvnitř jednoho prostoru jmen se nepoužívají s názvem tohoto prostoru jmen.

Implicitní prostor jmen Dalo by se říci, že každý identifikátor je v nějakém prostoru jmen. Jestliže prostor jmen neuvedeme (Jako já u druhé funkce secti, u funkce main a také ve všech svých příkladech z předchozích článků.), je tento identifikátor v implicitním prostoru jmen, někdy se také nepřesně říká "globální prostor jmen", který není pojmenován. Pro přístup k němu se před operátorem "čtyř-tečka" neudává jméno. V naší funkci main můžu tedy místo cout << secti(2,3) << endl; napsat cout << ::secti(2,3) << endl;. V tomto případě je tato čtyř-tečka samozřejmě zbytečná, ale mohla by se hodit, kdybychom někde uvnitř mého prostoru jmen chtěli vyvolat "globální" funkci sečti. Například přepíšu metodu metoda, ve které zavolám obě funkce secti: void Trida::metoda() cout << ::secti(1,1) << endl; /* "globální" sečti */ cout << secti(1,1) << endl; /* sečti z tohoto prostoru jmen*/ Prostor jmen "std" Podle ANSI C++ existuje standardní prostor jmen std. V tomto prostoru jmen je definováno mnoho identifikátorů ze standardní knihovny jazyka C++. V std jsou také, jak jsem byl správně ve svých předchozích článcích čtenáři upozorněn, objekty cin, cerr, cout a mnoho dalších. Konkrétně u těchto 3 objektů se dnes překladače chovají dost tolerantně, a přeloží je i když jsou používány jako by v implicitním prostoru jmen. Postupem času se překladače budou blížit normě, a takové nepřesnosti nebudou tolerovat. Je tedy dobré tyto objekty identifikovat jako std::cout, std::cin, std::cout, nebo si pomoci klíčovým slovem using.

Klíčové slovo using Jak už jsem se zmínil, prostory jmen jsou proto, aby nedošlo ke konfliktům jmen. Pomáhají programátorovi v uspořádání zdrojových textů, ale používání prostoru jmen by se mohlo zdát jako "psaní něčeho navíc". Aby programátor nemusel vždy psát jméno prostoru společně i se jménem, které chce napsat, existuje klíčové slovo using. Napíši-li using namespace a jméno prostoru, bude v následujícím zdrojovém textu přístup k identifikátorům tohoto prostoru jako by jsem byl "uvnitř" tohoto prostoru. Tedy místo: int main(void) std::cout << "Ahoj svete" << endl; return 0; Lze napsat: #include<iostream.h> using namespace std; int main(void) cout << "Ahoj svete" << endl; return 0; Musíme mít ale natolik nový překladač, aby měl objekt cout v prostoru jmen std. Závěrem k prostorům jmen bych Vám chtěl doporučit prostory jmen používat. Narazíte-li na něco, co v prostoru jmen již je, nic jiného Vám ani nezbude. Je dobré také své identifikátory do prostoru jmen ukládat. Nemůže-li dojít ke konfliktu jmen, můžete použít slovo using, a v dalším zdrojovém textu si ani nevšimnete, že prostory jmen používáte. Naopak nebudete-li používat prostory jmen a ke konfliktu dojde, už Vám nezbude nic jiného, než přejmenovávat identifikátory. Ohledně používání prostorů jmen bych chtěl ještě upozornit na jednu častou nepřesnost. Syntakticky je prostor jmen velice podobný třídě. Jedná se ale o něco úplně jiného. Třída je abstrakcí nějakých objektů, které mají podobné vlastnosti. U třídy se počítá s tím, že bude mít instance. Pokud možno, každá třída by měla být navržená tak, aby mohla mít více instancí. Naopak prostor jmen žádnou instanci nemá, ani mít nemůže.

Jedná se jen o oddělení globálních proměnných, funkcí, uživatelem definovaných datových typů (tedy i tříd), které spolu nějak souvisejí od "zbytku" programu. Mnoho programátorů chybně prostory jmen nepoužívá, a místo prostoru jmen použije třídu.

Cvičení: Cv. 1: Z přednášek o Vyjímkách v C++ v příkladech cvičení 1, 2 použijte prostor jmen Vašeho příjmeni pro třídy vyjímek. Například prostor jmen novak...