Przestrzenie nazw. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Podobne dokumenty
Przesłanianie nazw, przestrzenie nazw

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

Szablony funkcji i szablony klas

Schemat konstrukcja pliku Makefile

Wprowadzenie do szablonów klas

Wprowadzenie do szablonów szablony funkcji

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Wprowadzenie do szablonów szablony funkcji

Pola i metody statyczne

Czujniki PSD i dalmierze triangulacyjne

Praca z aplikacją designer

Dalmierze optyczne. Bogdan Kreczmer.

OpenGL oświetlenie. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Czujniki PSD i dalmierze triangulacyjne

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Qt sygnały i designer

Operacje wejścia/wyjścia odsłona pierwsza

Zasoby, pliki graficzne

Wprowadzenie do UML, przykład użycia kolizja

Szablon klasy std::vector

Referencje do zmiennych i obiektów

Style programowania - krótki przeglad

Diagramy UML, przykład problemu kolizji

Weryfikatory, zasoby graficzne

Wartości domyślne, przeciażenia funkcji

Język C++ Różnice między C a C++

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Organizacja kursu, paradygmaty, ogólnie o C i C++

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii

Operacje wejścia/wyjścia (odsłona druga) - pliki

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Wartości domyślne, przeciażenia funkcji

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Hermetyzacja oraz pola i metody statyczne

GStreamer. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Geneza C++, manipulatory

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Programowanie - wykład 4

Wyliczanie wyrażenia obiekty tymczasowe

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Programowanie Obiektowew języku C++ Zadania L9

Szablon klasy std::list

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Wartości domyślne, szablony funkcji i klas

Programowanie komputerowe. Zajęcia 7

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Bogdan Kreczmer. Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Projektowanie klas c.d. Projektowanie klas przykład

Konstruktor kopiujacy

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Pytania sprawdzające wiedzę z programowania C++

Dziedziczenie i poliformizm

Powłoki systemu operacyjnego i intepretery

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

PARADYGMATY PROGRAMOWANIA Wykład 2

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Wstęp do programowania. Wykład 1

Podstawy algorytmiki i programowania - wykład 5 C-struktury cd.

Wstęp do programowania

Dia rysowanie diagramów

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Wstęp do Programowania 2

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Programowanie Obiektowew języku C++ Zadania L8

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Obiekty i metody stałe

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Lista dwukierunkowa - przykład implementacji destruktorów

Przykład implementacji przeciażeń operatorów problem kolizji

Programowanie Obiektowew języku C++ Zadania L4

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Programowanie obiektowe Wykład 7. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Podstawy Programowania Obiektowego

Transkrypt:

Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową.

Niniejsza prezentacja została wykonana przy użyciu systemu składu L A TEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer: http://latex-beamer.sourceforge.net

Plan prezentacji 1

Plan prezentacji 1

Zarys problemu Należy stworzyć zbiór klas modelujących pojęcie prostej w przestrzeni i na płaszczyźnie. Ich metody powinny umożliwić w łatwy sposób określenie, czy dany punkt w przestrzeni lub na płaszczyźnie należy do danej prostej czy też nie.

Te same nazwy, różne definicje prosta-plaszczyzna.hh class Wektor double x, y; ; prosta-przestrzen.hh class Wektor double x, y, z; ; class Prosta Wektor WekNorm; double c; ; class Prosta Wektor Wektor ; WekOsiowy; PnkProstej; #include prosta-plaszczyzna.hh #include prosta-przestrzen.hh Prosta Pr2; Prosta Pr3;

Te same nazwy, różne definicje prosta-plaszczyzna.hh class Wektor double x, y; ; prosta-przestrzen.hh class Wektor double x, y, z; ; class Prosta Wektor WekNorm; double c; ; class Prosta Wektor Wektor ; WekOsiowy; PnkProstej; #include prosta-plaszczyzna.hh #include prosta-przestrzen.hh Prosta Pr2; Prosta Pr3;

Zroznicownie nazw prosta2d.hh class Wektor2D double x, y; ; prosta3d.hh class Wektor3D double x, y, z; ; class Prosta2D Wektor2D WekNorm; double c; ; class Prosta3D Wektor3D Wektor3D ; WekOsiowy; PnkProstej; #include prosta2d.hh #include prosta3d.hh Prosta2D Pr2; Prosta3D Pr3;

Zroznicownie nazw w stylu C d2 prosta.hh class D2 Wektor double x, y; ; d3 prosta.hh class D3 Wektor double x, y, z; ; class D2 Prosta D2 Wektor WekNorm; double c; ; class D3 Prosta D3 Wektor D3 Wektor ; WekOsiowy; PnkProstej; #include d2 prosta.hh #include d3 prosta.hh D2 Prosta Pr2; D3 Prosta Pr3;

d2 prosta.hh namespace D2 class Wektor double x, y; ; d3 prosta.hh namespace D3 class Wektor double x, y, z; ; class Prosta Wektor WekNorm; double c; ; class Prosta Wektor Wektor ; WekOsiowy; PnkProstej; #include d2 prosta.hh #include d3 prosta.hh D2::Prosta Pr2; D3::Prosta Pr3;

Plan prezentacji 1

Blok przestrzeni nazw int ZmGlobalna; namespace D3 class Wektor double x, y, z; ; class Prosta Wektor Wektor ; WekOsiowy; PnkProstej; ZmGlobalna = 4; D3::Wektor Wk; D3::Prosta Pr; W danej jednostce translacyjnej można stworzyć jednolity blok grupujący wszystkie definicje w wybranej przewstrzeni nazw.

Blok przestrzeni nazw int ZmGlobalna; namespace D3 class Wektor double x, y, z; ; namespace D3 class Prosta Wektor Wektor ; WekOsiowy; PnkProstej; ZmGlobalna = 4; D3::Wektor Wk; D3::Prosta Pr; Tę samą przestrzeń nazw można jednak rozbić na dowolną liczbę bloków.

Ta sama przestrzeń nazw w różnych modułach d3 wektor.hh namespace D3 class Wektor double x, y, z; ; #include d3 wektor.hh #include d3 prosta.hh D3::Wektor D3::Prosta Wk; Pr; d3 prosta.hh #include d3 wektor.hh namespace D3 class Prosta Wektor Wektor ; WekOsiowy; PnkProstej; Ta sama przestrzeń nazw może być rozbita na zbiór różnych jednostek translacyjnych (np. 3d wektor.cpp i 3d prosta.cpp) z własnymi plikami nagłówkowymi (np. 3d wektor.hh i 3d prosta.hh) zawierającymi definicje klas i zapowiedzi definicji metod.

Co dają przestrzenie nazw Definiowanie przestrzeni nazw pozwala rozwiązać konflikty nazw. Tym samym daje znacznie większą swobodę programiście. Definicja przestrzeni nazw może być kontynuowana w kilku jednostek translacyjnych. Jedną z ważniejszych konsekwencji wykorzystywania przestrzeni nazw jest możliwość tworzenia modułów w sensie logicznym, a nie tak jak to ma miejsce, np. w języku C tylko w sensie stricte fizycznym.

Co dają przestrzenie nazw Definiowanie przestrzeni nazw pozwala rozwiązać konflikty nazw. Tym samym daje znacznie większą swobodę programiście. Definicja przestrzeni nazw może być kontynuowana w kilku jednostek translacyjnych. Jedną z ważniejszych konsekwencji wykorzystywania przestrzeni nazw jest możliwość tworzenia modułów w sensie logicznym, a nie tak jak to ma miejsce, np. w języku C tylko w sensie stricte fizycznym.

Co dają przestrzenie nazw Definiowanie przestrzeni nazw pozwala rozwiązać konflikty nazw. Tym samym daje znacznie większą swobodę programiście. Definicja przestrzeni nazw może być kontynuowana w kilku jednostek translacyjnych. Jedną z ważniejszych konsekwencji wykorzystywania przestrzeni nazw jest możliwość tworzenia modułów w sensie logicznym, a nie tak jak to ma miejsce, np. w języku C tylko w sensie stricte fizycznym.

Dostęp do przesłoniętych zmiennych globalnych int Zm = 7; void Funkcja( ) int Zm = 55; ::Zm = Zm; cout << Zm. Globalna: << Zm << endl; Funkcja( ); cout << Zm. Globalna: << Zm << endl;

Dostęp do przesłoniętych zmiennych globalnych int Zm = 7; void Funkcja( ) int Zm = 55; ::Zm = Zm; cout << Zm. Globalna: << Zm << endl; Funkcja( ); cout << Zm. Globalna: << Zm << endl; Wynik działania: Zm. Globalna: 7 Zm. Globalna: 55 W nienazwanej przestrzeni nazw znajdują się wszystkie globalnie definiowane zmiennych, typy oraz funkcje. Zmienne te można zawsze odsłonić stosując nazwę kwalifikowaną.

Dostęp do przesłoniętych zmiennych globalnych int Zm = 7; void Funkcja( int Zm ) ::Zm = Zm; cout << Zm. Globalna: << Zm << endl; Funkcja( 10 ); cout << Zm. Globalna: << Zm << endl; Wynik działania: Zm. Globalna: 7 Zm. Globalna: 10 W nienazwanej przestrzeni nazw znajdują się wszystkie globalnie definiowane zmiennych, typy oraz funkcje. Zmienne te można zawsze odsłonić stosując nazwę kwalifikowaną.

Dostęp do przesłoniętych typów enum Symbole a, b, c; void Funkcja LokalnyTyp( Symbole Param ) enum Symbole x, y, z ; Symbole Zm1 = x; ::Symbole ::Symbole Symbole x = a; Zm2 = Param; Zm3 = ::a; Funkcja LokalnyTyp( x ); Wynik działania: Zm. Globalna: 7 Zm. Globalna: 10 W nienazwanej przestrzeni nazw znajdują się wszystkie globalnie definiowane zmiennych, typy oraz funkcje. Zmienne te można zawsze odsłonić stosując nazwę kwalifikowaną.

Zagnieżdżanie przestrzeni nazw int ZmGlobalna; namespace D3 class Wektor ; namespace Bryly class Szescian ; ZmGlobalna = 4; D3::Wektor D3::Bryly::Szescian Wk; Sz; mogą być zagnieżdżane.

Dyrektywa using namespace int ZmGlobalna; namespace D3 class Wektor ; namespace Bryly class Szescian ; using namespace D3; ZmGlobalna = 4; Wektor Wk; Bryly::Szescian Sz; Użycie dyrektyw using namespace powoduje przeniesienie wszystkich nazw z danej podrzestrzeni, do której się ona odnosi, do przestrzeni nazw, w której jest zastosowana. W przedstawionym przykładzie nazwy z podprzestrzeni D3 zostały przeniesione do przestrzeni nienazwanej związanej z tradycyjnymi zmiennymi globalnymi.

Użycie dyrektywy using namespace Dyrektywy using namespace nie należy używać w plikach nagłówkowych. Jej użycie tam jest przejawem bardzo złego stylu programowania.

Dyrektywa using namespace int ZmGlobalna; namespace D3 class Wektor ; namespace Bryly class Szescian ; using namespace D3::Bryly; ZmGlobalna = 4; D3::Wektor Wk; Szescian Sz; Dyrektywę using namespace możemy stosować selektywnie do wybranych podprzestrzeni. W tym przykładzie została ona zastosowana do podprzestrzeni D3::Bryly. Do pozostałych elementów przestrzeni nazw D3 musimy odwoływać się poprzez pełną nazwę kwalifikowaną.

Dyrektywa using namespace namespace D3 class Wektor ; namespace Bryly class Szescian ; Szescian using namespace Bryly; Szescian DrugiSzes; SzesWzorcowy; D3::DrugiSzes = D3::SzesWzorcowy; Dyrektywę using namespace możemy stosować również w podprzestrzeniach. Jej działanie ograniczone jest tylko do danej podprzestrzeni. W tym przykładzie dyrektywa using namespace powoduje przeniesienie wszystkich nazw z podprzestrzeni Bryla do przestrzeni nazw D3.

Dyrektywa using namespace namespace D3 class Wektor ; namespace Bryly class Szescian ; Szescian Bryly::Szescian SzesWzorcowy; DrugiSzes; Bez tej dyrektywy nie stracimy podprzestrzeni Bryly i niezbędne jest wówczas odwoływanie się do jej poszczególnych elementów poprzez nazwy kwalifikowane. D3::DrugiSzes = D3::Bryly::SzesWzorcowy;

Deklaracja using namespace D3 class Wektor ; namespace Bryly class Szescian ; Szescian SzesWzorcowy; Bryly::Szescian DrugiSzes; using D3::Bryly::SzesWzorcowy; Elementy danej podprzestrzeni nazw możemy przenosić selektywnie stosując deklarację using. D3::DrugiSzes = SzesWzorcowy;

Dyrektywa using namespace ograniczanie zakresu namespace D3 class Wektor ; namespace Bryly class Szescian ; Szescian Bryly::Szescian using namespace D3; SzesWzorcowy; DrugiSzes; Ograniczenie użycia dyrektywy using namespace możemy zrealiwać poprzez jej wykorzystanie w bloku ciała funkcji. Ogranicza on wówczas ważność stosowania tej deklaracji do tego bloku. DrugiSzes = Bryly::SzesWzorcowy; D3::DrugiSzes = D3::Bryly::SzesWzorcowy;

Deklaracja using ograniczanie zakresu namespace D3 class Wektor ; namespace Bryly class Szescian ; Szescian Bryly::Szescian SzesWzorcowy; DrugiSzes; Analogicznie można ograniczyć zakres ważności deklaracji using. using D3::Bryly::SzescWzorcowy; D3::DrugiSzes = SzesWzorcowy; D3::DrugiSzes = D3::Bryly::SzesWzorcowy;

Użycie deklaacji using W plikach nagłówkowych nie powinno używać się zarówno dyrektywy using namespace jak też deklaracji using.

Koniec prezentacji Dziękuję za uwagę