-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Organizacja kursu, paradygmaty, ogólnie o C i C++
Bogdan [email protected]
Katedra Cybernetyki i RobotykiWydziału Elektroniki
Politechniki Wrocławskiej
Kurs: Programowanie obiektowe
Copyright c©2021 Bogdan Kreczmer
Niniejszy dokument zawiera materiały do wykładu dotyczącego
programowania obiektowego. Jest onudostępniony pod warunkiem
wykorzystania wyłącznie do własnych prywatnych potrzeb i może on
być kopiowanywyłącznie w całości, razem z niniejszą stroną
tytułową.
Programowanie obiektowe Organizacja kursu, paradygmaty, ogólnie
o C i C++
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Niniejsza prezentacja została wykonana przy użyciu sys-temu
składu LATEX oraz stylu beamer, którego autoremjest Till
Tantau.
Strona domowa projektu
Beamer:http://latex-beamer.sourceforge.net
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Moje dane
Bogdan Kreczmer, dr inż., pok. 307 bud. C-3
Terminy konsultacji: pn. 13:15 – 15:15pt. 11:15 – 13:15
Strona
kursu:http://sequoia.iiar.pwr.wroc.pl/∼kreczmer/kpohttp://rab.iiar.pwr.wroc.pl/∼kreczmer/kpo
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Spis treści
1 Organizacja kursu
2 Programowanie obiektowePodejście obiektoweJęzyki
programowaniaGeneza języka C++
3 Język C i C++ – najistotniejsze różniceKilka przykładowych
różnicRóżnice w zapisie podstawowych elementów programuPliki
nagłówkowe funkcji z języka CKonwencje nazw plików źródłowych dla
języka C++
4 Przeciążanie operatorówOperatory jako funkcjeŁączność
operatorów i porządek wykonywania operacji
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Warunki udziału i przebieg kursu
Warunki udziału w kursie
Wykłady i materiały do wykładów
Projekt
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Warunki udziału i przebieg kursu
Warunki udziału w kursie
Wykłady i materiały do wykładów
Projekt
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Warunki udziału i przebieg kursu
Warunki udziału w kursie
Wykłady i materiały do wykładów
Projekt
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Warunki zaliczeń
Kurs kończy się zaliczeniem. Zaliczenie kursu można uzyskać
podwarunkiem uzyskania zaliczenia z projektu oraz pozytywnej ocenyz
ekranówkiSposób liczenia oceny z kursu:
0,6E + 0,4P
Ocena celująca → ekranówka: 5,0; projekt: 5,5
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Warunki zaliczeń
Kurs kończy się zaliczeniem. Zaliczenie kursu można uzyskać
podwarunkiem uzyskania zaliczenia z projektu oraz pozytywnej ocenyz
ekranówkiSposób liczenia oceny z kursu:
0,6E + 0,4P
Ocena celująca → ekranówka: 5,0; projekt: 5,5
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Warunki zaliczeń
Kurs kończy się zaliczeniem. Zaliczenie kursu można uzyskać
podwarunkiem uzyskania zaliczenia z projektu oraz pozytywnej ocenyz
ekranówkiSposób liczenia oceny z kursu:
0,6E + 0,4P
Ocena celująca → ekranówka: 5,0; projekt: 5,5
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Literatura
Literatura podstawowa:
S. B. Leppman, Josée Lajoie, B. E. Moo; C++ Primer, 2012
J. Grębosz; Symfonia C ++ standard
J. Grębosz; Pasja C ++
Bjarne Stroustrup; Język C++ Kompedium wiedzy, Wydanie
IV,Helion, 2014
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Literatura
Literatura pomocnicza:
B. Eckel; Thinking in C++
Nicolai M. Josuttis; C++ Biblioteka standardowa, Podręcznik
pro-gramisty
David Vandevoorde, Nicolai M. Josuttis, C++ szablony
Grady Booch, James Rumbaugh, Ivar Jacobson; UML
przewodnikużytkownika
Michał Śmiałek; Zrozumieć UML 2.0 – Metody modelowania
obiek-towego, HELION 2005
James Martin, James J. Odell; Podstawy metod obiektowych
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Programowanie obiektowe – Czym jest?
Programowanie obiektowe oparte jest na podejściu obiektowym
doanalizy problemu oraz syntezy i implementacji jego
rozwiązania.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Programowanie obiektowe – Czym jest?
Programowanie obiektowe oparte jest na podejściu obiektowym
doanalizy problemu oraz syntezy i implementacji jego
rozwiązania.
Podejście obiektowe bazuje na fundamentalnej cesze
aktywnościintelektualnej, która pozwala ludziom (i nie tylko)
wyróżniać odrębneobiekty w swoim otoczeniu, przypisywać im
własności oraz określaćsposób ich interakcji między sobą i
otoczeniem.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Języki programowania obiektowego
To co cechuje języki programowania obiektowego (języki
obiekto-we) to to, że wspomagają i wymuszają stosowanie metod
podejściaobiektowego.
Najistotniejszą cechą podejścia obiektowego jest integracja
strukturdanych i kodu, który odwołuje się do tych struktur. Ten
rodzaj inte-gracji ma formę obiektów.
Typy struktur danych zintegrowanychw ten sposób z kodem nazywane
sąklasami.
Obiekt jest instancją klasy.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Języki programowania obiektowego
To co cechuje języki programowania obiektowego (języki
obiekto-we) to to, że wspomagają i wymuszają stosowanie metod
podejściaobiektowego.
Najistotniejszą cechą podejścia obiektowego jest integracja
strukturdanych i kodu, który odwołuje się do tych struktur. Ten
rodzaj inte-gracji ma formę obiektów.
Typy struktur danych zintegrowanychw ten sposób z kodem nazywane
sąklasami.
Obiekt jest instancją klasy.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Języki programowania obiektowego
To co cechuje języki programowania obiektowego (języki
obiekto-we) to to, że wspomagają i wymuszają stosowanie metod
podejściaobiektowego.
Najistotniejszą cechą podejścia obiektowego jest integracja
strukturdanych i kodu, który odwołuje się do tych struktur. Ten
rodzaj inte-gracji ma formę obiektów.
Typy struktur danych zintegrowanychw ten sposób z kodem nazywane
sąklasami.
Obiekt jest instancją klasy.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Warto wiedzieć
Ogólna koncepcja podejścia obiektowego do programowania
powstałana przełomie lat 50-tych i 60-tych w MIT.
W bardziej formalnej postaci koncepcje te zostały wprowadzone
wjęzyku Simula 67 w latach 60-tych.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Języki obiektowe
Przykłady języków obiektowych:
Smalltalk
Ruby
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
C++
Jakim językiem jest C++?
?
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
C++
Język C++ nie jest językiem obiektowym!
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Od koncepcji do paradygmatu
Podejście obiektowe do programowania wyznaczasposób patrzenia na
struktury danych i przepływsterowania w programie oraz wykonywanie
całegoprogramu.Wprowadza ono pewien zbiór pojęć i koncepcji,który
determinuje sposób rozumienia procesuprogramowania.
Ten zbiór pojęć i koncepcji odnoszący się doprogramowania
określany jest mianemparadygmatu programowania.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Od koncepcji do paradygmatu
Podejście obiektowe do programowania wyznaczasposób patrzenia na
struktury danych i przepływsterowania w programie oraz wykonywanie
całegoprogramu.Wprowadza ono pewien zbiór pojęć i koncepcji,który
determinuje sposób rozumienia procesuprogramowania.
Ten zbiór pojęć i koncepcji odnoszący się doprogramowania
określany jest mianemparadygmatu programowania.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przykładowe paradygmaty programowania
Programowanie proceduralne
Programowanie strukturalne
Programowanie modularne
Programowanie imperatywne
Programowanie obiektowe
Programowanie uogólnione
Programowanie sterowane zdarzeniami
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przykładowe paradygmaty programowania
Programowanie proceduralne – zaleca dzielenie programu
naprocedury i nie wykorzystywanie zmiennych globalnych.
Programowanie strukturalne
Programowanie modularne
Programowanie imperatywne
Programowanie obiektowe
Programowanie uogólnione
Programowanie sterowane zdarzeniami
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przykładowe paradygmaty programowania
Programowanie proceduralne
Programowanie strukturalne – wywoływanie procedur powinnotworzyć
hierarchiczną strukturę z wykorzystanie instrukcjiwarunkowych i
pętli. Zakazuje się używania instrukcji goto.
Programowanie modularne
Programowanie imperatywne
Programowanie obiektowe
Programowanie uogólnione
Programowanie sterowane zdarzeniami
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przykładowe paradygmaty programowania
Programowanie proceduralne
Programowanie strukturalne
Programowanie modularne – zaleca stosowanie modułówgrupujących
zbiory procedur.
Programowanie imperatywne
Programowanie obiektowe
Programowanie uogólnione
Programowanie sterowane zdarzeniami
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przykładowe paradygmaty programowania
Programowanie proceduralne
Programowanie strukturalne
Programowanie modularne
Programowanie imperatywne – opisuje proces wykonywaniaprogramu
jako sekwencję instrukcji zmieniających stan programu.
Programowanie obiektowe
Programowanie uogólnione
Programowanie sterowane zdarzeniami
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przykładowe paradygmaty programowania
Programowanie proceduralne
Programowanie strukturalne
Programowanie modularne
Programowanie imperatywne
Programowanie obiektowe – definiuje program jak zbiór
obiektów.Ich istotą jest łączenie stanu i zachowania. Program to
zbiórobiektów komunikujących się między sobą w celu wykonania
zadania.
Programowanie uogólnione
Programowanie sterowane zdarzeniami
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przykładowe paradygmaty programowania
Programowanie proceduralne
Programowanie strukturalne
Programowanie modularne
Programowanie imperatywne
Programowanie obiektowe
Programowanie uogólnione – kładzie nacisk na ogólną
konstrukcjęalgorytmu bez konieczności znajomości typów danych, np.
sortowanie.
Programowanie sterowane zdarzeniami
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przykładowe paradygmaty programowania
Programowanie proceduralne
Programowanie strukturalne
Programowanie modularne
Programowanie imperatywne
Programowanie obiektowe
Programowanie uogólnione
Programowanie sterowane zdarzeniami – opis programuuwypuklający
przekazywanie sterowania między poszczególnymimodułami. Odnosi się
on przede wszystkim do środowiskwieloprocesorowych. Jednak nie
tylko. Przykładem są okienkowesystememy graficzne, np. system
X-Window.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Języki programowania
Języki programowania mogą wspierać jednocześnie wiele
paradygma-tów programowania.
Czyste języki obiektowe wspierają zasadniczo tylko
paradygmatprogramowania obiektowego.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Języki programowania
Języki programowania mogą wspierać jednocześnie wiele
paradygma-tów programowania.
Czyste języki obiektowe wspierają zasadniczo tylko
paradygmatprogramowania obiektowego.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
C++
Język C++ jest językiem hybrydowym!
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Bjarne Stroustrup
Bjarne Stroustrup — (ur. 30.12.1950 – Århus, Dania) jest
twórcąjęzyka C++ i nadal aktywnie uczestniczy w jego dalszym
rozwoju.Inspiracją do stworzenia tego typu języka były problemy i
spostrze-żenia, których dokonał w trakcie swoich prac nad
doktoratem wUniwersytecie Cambridge.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Tło akcji
Bezpośrednim przyczynkiem do powstania koncepcji języka C++były
prace Stroustrupa w Cambridge nad doktoratem. W trakcieswoich prac
miał zbadać różne organizacje systemowego oprogra-mowania w
systemach rozproszonych.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Zdarzenia
Udana (w sensie konstrukcji aplikacji) realizacja
symulatorasystemu rozproszenego z wykorzystaniem Simuli. Pojęcie
klasyw Simuli było bardzo pomocne na etapie projektu
iimplmentacji.Poważne problemy związne z wydajnością
programównapisanego w Simuli zmusza do poszukiwania
bardziejwydajnego narzędzia.Traumatycznie bolesne doświadczenia
związane zkoniecznością implementacji symulatora w oparciu o
językBCPL. Osiągnięta została bardzo dobra wydajność kosztemwielu
problemów przy realizacji implementacji.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Zdarzenia
Udana (w sensie konstrukcji aplikacji) realizacja
symulatorasystemu rozproszenego z wykorzystaniem Simuli. Pojęcie
klasyw Simuli było bardzo pomocne na etapie projektu
iimplmentacji.Poważne problemy związne z wydajnością
programównapisanego w Simuli zmusza do poszukiwania
bardziejwydajnego narzędzia.Traumatycznie bolesne doświadczenia
związane zkoniecznością implementacji symulatora w oparciu o
językBCPL. Osiągnięta została bardzo dobra wydajność kosztemwielu
problemów przy realizacji implementacji.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Zdarzenia
Udana (w sensie konstrukcji aplikacji) realizacja
symulatorasystemu rozproszenego z wykorzystaniem Simuli. Pojęcie
klasyw Simuli było bardzo pomocne na etapie projektu
iimplmentacji.Poważne problemy związne z wydajnością
programównapisanego w Simuli zmusza do poszukiwania
bardziejwydajnego narzędzia.Traumatycznie bolesne doświadczenia
związane zkoniecznością implementacji symulatora w oparciu o
językBCPL. Osiągnięta została bardzo dobra wydajność kosztemwielu
problemów przy realizacji implementacji.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Epilog
Po zakończeniu prac nad doktoratem Stroustrup postanawia
stwo-rzyć język programowania, który łączyłby koncepcje klas z
Simulioraz elastyczność tego języka z efektywnością kodu języka
BCPL.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Niektóre spostrzeżenia
Kompilator Simuli dobrze wychwytywał błędy typu. Błędy
teprzeważnie były albo wynikiem “głupich” pomyłek w
trakcieprogramowania albo też potknięć koncepcyjnych.Ten drugi
rodzaj błędów ma wręcz fundamentalne znaczeniedla procesu
projektowania i pisania programownia (autor kursupozwolił sobie tę
uwagę wzmocnić).
Żaden inny prosty system sprawdzania ścisłej zgodności typównie
dostarczył tego rodzaju wsparcia.Przykładem może być system
Pascala. Sprawiał on więcejkłopotów niż pozwalał ich uniknąć.
Zmuszał do modyfikacjiprojektu, aby dostosować go do warunków
narzuconych przezimplementację (co nie zmienia faktu, że jest to
bardzo dobry język dlapoczątkowego kursu nauki informatyki – uwaga
autora kursu).
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Niektóre spostrzeżenia
Kompilator Simuli dobrze wychwytywał błędy typu. Błędy
teprzeważnie były albo wynikiem “głupich” pomyłek w
trakcieprogramowania albo też potknięć koncepcyjnych.Ten drugi
rodzaj błędów ma wręcz fundamentalne znaczeniedla procesu
projektowania i pisania programownia (autor kursupozwolił sobie tę
uwagę wzmocnić).
Żaden inny prosty system sprawdzania ścisłej zgodności typównie
dostarczył tego rodzaju wsparcia.Przykładem może być system
Pascala. Sprawiał on więcejkłopotów niż pozwalał ich uniknąć.
Zmuszał do modyfikacjiprojektu, aby dostosować go do warunków
narzuconych przezimplementację (co nie zmienia faktu, że jest to
bardzo dobry język dlapoczątkowego kursu nauki informatyki – uwaga
autora kursu).
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Niektóre spostrzeżenia
Kompilator Simuli dobrze wychwytywał błędy typu. Błędy
teprzeważnie były albo wynikiem “głupich” pomyłek w
trakcieprogramowania albo też potknięć koncepcyjnych.Ten drugi
rodzaj błędów ma wręcz fundamentalne znaczeniedla procesu
projektowania i pisania programownia (autor kursupozwolił sobie tę
uwagę wzmocnić).
Żaden inny prosty system sprawdzania ścisłej zgodności typównie
dostarczył tego rodzaju wsparcia.Przykładem może być system
Pascala. Sprawiał on więcejkłopotów niż pozwalał ich uniknąć.
Zmuszał do modyfikacjiprojektu, aby dostosować go do warunków
narzuconych przezimplementację (co nie zmienia faktu, że jest to
bardzo dobry język dlapoczątkowego kursu nauki informatyki – uwaga
autora kursu).
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Niektóre spostrzeżenia
Kompilator Simuli dobrze wychwytywał błędy typu. Błędy
teprzeważnie były albo wynikiem “głupich” pomyłek w
trakcieprogramowania albo też potknięć koncepcyjnych.Ten drugi
rodzaj błędów ma wręcz fundamentalne znaczeniedla procesu
projektowania i pisania programownia (autor kursupozwolił sobie tę
uwagę wzmocnić).
Żaden inny prosty system sprawdzania ścisłej zgodności typównie
dostarczył tego rodzaju wsparcia.Przykładem może być system
Pascala. Sprawiał on więcejkłopotów niż pozwalał ich uniknąć.
Zmuszał do modyfikacjiprojektu, aby dostosować go do warunków
narzuconych przezimplementację (co nie zmienia faktu, że jest to
bardzo dobry język dlapoczątkowego kursu nauki informatyki – uwaga
autora kursu).
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Niektóre spostrzeżenia
Pojęcie klasy było zasadniczym elementem różniącym„sztywny”
Pascal od „elastycznej” Simuli.
Wyczerpujące sprawdzanie zgodności typów w Simulisprawiało, że
liczba problemów i błędów nie wzrastała szybciejniż liniowo wraz ze
wzrostem programu.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Niektóre spostrzeżenia
Pojęcie klasy było zasadniczym elementem różniącym„sztywny”
Pascal od „elastycznej” Simuli.
Wyczerpujące sprawdzanie zgodności typów w Simulisprawiało, że
liczba problemów i błędów nie wzrastała szybciejniż liniowo wraz ze
wzrostem programu.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Ważniejsze daty
1979 – (Maj) Początek prac na C z Klasami. (Październik)
Od-danie do użytku pierwszej implementacji tego języka.
1983 – (Sierpień) Oddanie do użytku pierwszej implementacji
ję-zyka C++. (Grudzień) Powstanie nazwy C++.
1985 – (Luty) Powstanie pierwszej wersji języka C++ (wersjaE) do
użytku zewnętrznego. (Październik) Ukazanie siępierwszego wydania
książki “Język C++”.
1987 – (Grudzień) Ukazanie się kompilatora GNU C++.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Ważniejsze daty
1989 – (Grudzień) Powstanie zespołu ANSI X3J16 do spraw
nor-malizacji języka C++.
1990 – (Maj) Powstawnie w firmie Borland pierwszej
implemen-tacji języka C++.Lipiec: Przyjęcie koncepcji
szablonów.Listopad: Przyjęcie koncepcji wyjątków.
1990 – Wydanie książki: Ellis Margaret A., Stroustrup B.„The
Annotated C++ Reference Manual ”,Reading, MA, Addison-Wesley
1990.Stał się on nieformalnym standardem języka, określanegojako
C++ ARM.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Ważniejsze daty
1992 – (Luty) Powstanie pierwszej implementacji języka
C++(zawierającej szablony i wyjątki) w firmie DEC.
(Marzec)Powstanie pierwszej implementacji języka C++ w
firmieMicrosoft. (Maj) Powstanie pierwszej implementacji ję-zyka
C++ w firmie IBM.
1993 – Marzec: Przyjęcie koncepcji identyfikowania typu pod-czas
wykonywania programu.Lipiec: Przyjęcie koncepcji przestrzeni
nazw.
1998 – Przyjęcie standardu ANSI/ISO języka C++.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Genealogia
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Dalszy rozwój i wprowadzane standardy
1998 – (ISO/IEC 14882:2011) Przyjęcie standarduANSI/ISO języka
C++.
2003 – (ISO/IEC 14882:2003) Korekcja
wcześniejszegostandardu.
2007 – (ISO/IEC TR 19768:2007) Oparty na technicznymraporcie
„Library Technical Report 1 ”, który wpro-wadzał rozszerzenia do
biblioteki standardowej.
2011 – (ISO/IEC 14882:2011) 11 sierpnia 2011: Nowystandard
języka C++ wcześniej roboczo określanyjako C++0x.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Dalszy rozwój i wprowadzane standardy
1998 –C++98 (ISO/IEC 14882:2011) Przyjęcie standarduANSI/ISO
języka C++.
2003 –C++03 (ISO/IEC 14882:2003) Korekcja
wcześniejszegostandardu.
2007 –C++TR1 (ISO/IEC TR 19768:2007) Oparty na
technicznymraporcie „Library Technical Report 1 ”, który
wpro-wadzał rozszerzenia do biblioteki standardowej.
2011 –C++11 (ISO/IEC 14882:2011) 11 sierpnia 2011: Nowy
stan-dard języka C++ wcześniej roboczo określany jakoC++0x.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Mapa drogowa rozwoju C++
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Wzajemne powiązania
Kilka faktów:Słowo kluczowe class pochodzi z Simuli (podobnie
jaknotacja wskaźnika this).
Zapis funkcja(void) w ANSI C pochodzi z języka C zKlasami.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Dlaczego C
Dlatego żeC jest językiem elastycznym
C jest językiem wydajnym
C jest językiem szeroko dostępnym
C jest językiem przenośnym
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Dlaczego C
Dlatego żeC jest językiem elastycznym
C jest językiem wydajnym
C jest językiem szeroko dostępnym
C jest językiem przenośnym
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Dlaczego C
Dlatego żeC jest językiem elastycznym
C jest językiem wydajnym
C jest językiem szeroko dostępnym
C jest językiem przenośnym
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Dlaczego C
Dlatego żeC jest językiem elastycznym
C jest językiem wydajnym
C jest językiem szeroko dostępnym
C jest językiem przenośnym
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Dlaczego C
Dlatego żeC jest językiem elastycznym
C jest językiem wydajnym
C jest językiem szeroko dostępnym
C jest językiem przenośnym
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Dlaczego C
Dlatego żeC jest językiem elastycznym – nie ma
wewnętrznychograniczeń wykluczających możliwość napisania
jakiegośrodzaju programu, tzn. można korzystać w nim z
większościtechnik programowania.
C jest językiem wydajnym
C jest językiem szeroko dostępnym
C jest językiem przenośnym
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Dlaczego C
Dlatego żeC jest językiem elastycznym
C jest językiem wydajnym – semantyka języka znajduje się
na„niskim poziomie”, tzn. podstawowe pojęcia językaodzwierciedlają
podstawowe pojęcia tradycyjnego komputera.
C jest językiem szeroko dostępnym
C jest językiem przenośnym
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Dlaczego C
Dlatego żeC jest językiem elastycznym
C jest językiem wydajnym
C jest językiem szeroko dostępnym – implementacje tegojęzyka
istnieją zarówno dla mikrokomputerów jak też dladużych
superkomputerów.
C jest językiem przenośnym
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Dlaczego C
Dlatego żeC jest językiem elastycznym
C jest językiem wydajnym
C jest językiem szeroko dostępnym
C jest językiem przenośnym – programy napisane w Czazwyczaj nie
można automatycznie przenosić z jednegosystemu operacyjnego do
drugiego. Jednak przenośność zuwzględnieniem odpowiednich
uwarunkowań jest możliwa.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Po co to wszystko?
Dlaczego powstają nowe języki?
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przestrzenie rozwiązania i przestrzenie problemu
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przestrzenie rozwiązania i przestrzenie problemu
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przestrzenie rozwiązania i przestrzenie problemu
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przestrzenie rozwiązania i przestrzenie problemu
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przestrzenie rozwiązania i przestrzenie problemu
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przestrzenie rozwiązania i przestrzenie problemu
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przestrzenie rozwiązania i przestrzenie problemu
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Co się dzieje, gdy zabraknie zgodności
http://mars.jpl.nasa.gov/msp98/orbiter/moi.html
Mars Climate Orbiter
Terminarz
Data startu: 11 grudnia 1998Osiągnięcie celu: wrzesień 1999
Cel misji
Badanie klimatu Marsa jego atmosfery izmian na powierzchni. Miał
również służyćjako satelita komunikacyjny na potrzebyprogramu Mars
Surveyor ’98 oraz Mars PolarLander.
Sonda Mars Climate Orbiter za bardzo zbliżyła się do Marsa i
weszła w górne warstwy jegoatmosfery, co skutkowało jej
zniszczeniem.
Bezpośrednią przyczyną okazało się przyjęcie złych jednostek.
Oprogramowanie komputerapokładowego generowało dane w jednostkach
imperialnych zamiast w jednostkach SI. To, żemają to być jednostki
SI było uzgodnione w kontrakcie między NASA i firmą
Lockheedproducentem sondy.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Zastanówmy się ...
Czy C++ jest lepszym językiem niż C?
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przestrzeń rozwiązana i przestrzeń problemu
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przestrzeń rozwiązana i przestrzeń problemu
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przestrzeń rozwiązana i przestrzeń problemu
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przestrzeń rozwiązana i przestrzeń problemu
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Przestrzeń rozwiązana i przestrzeń problemu
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Podejście obiektoweJęzyki programowaniaGeneza języka C++
Konkluzja
Ani język C ani też C++ nie jest ani generalnie gorszy ani
teżgeneralnie lepszy. Ocena języka zależy od problemu, dla
któregochcemy stworzyć model implementacji rozwiązania
(programkomputerowy). Dopiero w tym kontekście można
uzasadniaćwybór języka programowania.
Dotyczy to również wszystkich innych języków programowania.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
C++ nie jest nadzbiorem C
Deklaracja stałych. Zachowanie zgodności wymaga jawnego
dowiązania.ANSI C: const int Zm=23; ≡ extern const int Zm=23;
ANSI/ISO C++: const int Zm=23; ≡ static const int Zm=23;
Rozmiary stałych znakowych:ANSI C: sizeof (’a’) ≡ sizeof
(int)
ANSI/ISO C++: sizeof (’a’) ≡ sizeof (char)
Niezadeklarowane funkcje:ANSI C: przyjmowane jest automatycznie
int fun(int, ...).
ANSI/ISO C++: jest to niedopuszczalne.
Deklaracja extern int fun():ANSI C: równoważna extern int
fun(...).
ANSI/ISO C++: extern int fun(void).
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
C++ nie jest nadzbiorem C
Deklaracja stałych. Zachowanie zgodności wymaga jawnego
dowiązania.ANSI C: const int Zm=23; ≡ extern const int Zm=23;
ANSI/ISO C++: const int Zm=23; ≡ static const int Zm=23;
Rozmiary stałych znakowych:ANSI C: sizeof (’a’) ≡ sizeof
(int)
ANSI/ISO C++: sizeof (’a’) ≡ sizeof (char)
Niezadeklarowane funkcje:ANSI C: przyjmowane jest automatycznie
int fun(int, ...).
ANSI/ISO C++: jest to niedopuszczalne.
Deklaracja extern int fun():ANSI C: równoważna extern int
fun(...).
ANSI/ISO C++: extern int fun(void).
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
C++ nie jest nadzbiorem C
Deklaracja stałych. Zachowanie zgodności wymaga jawnego
dowiązania.ANSI C: const int Zm=23; ≡ extern const int Zm=23;
ANSI/ISO C++: const int Zm=23; ≡ static const int Zm=23;
Rozmiary stałych znakowych:ANSI C: sizeof (’a’) ≡ sizeof
(int)
ANSI/ISO C++: sizeof (’a’) ≡ sizeof (char)
Niezadeklarowane funkcje:ANSI C: przyjmowane jest automatycznie
int fun(int, ...).
ANSI/ISO C++: jest to niedopuszczalne.
Deklaracja extern int fun():ANSI C: równoważna extern int
fun(...).
ANSI/ISO C++: extern int fun(void).
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
C++ nie jest nadzbiorem C
Deklaracja stałych. Zachowanie zgodności wymaga jawnego
dowiązania.ANSI C: const int Zm=23; ≡ extern const int Zm=23;
ANSI/ISO C++: const int Zm=23; ≡ static const int Zm=23;
Rozmiary stałych znakowych:ANSI C: sizeof (’a’) ≡ sizeof
(int)
ANSI/ISO C++: sizeof (’a’) ≡ sizeof (char)
Niezadeklarowane funkcje:ANSI C: przyjmowane jest automatycznie
int fun(int, ...).
ANSI/ISO C++: jest to niedopuszczalne.
Deklaracja extern int fun():ANSI C: równoważna extern int
fun(...).
ANSI/ISO C++: extern int fun(void).
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
Wyświetlenie prostego komunikatuJęzyk C Język C++
#include
int main( ){
printf(”Hejka!!!\n”);return 0;
}
#include
int main( ){
std::cout
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
Wyświetlenie prostego komunikatuJęzyk C Język C++
#include
int main( ){
printf(”Hejka!!!\n”);return 0;
}
#include
int main( ){
std::cout
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
Wyświetlenie prostego komunikatuJęzyk C Język C++
#include
int main( ){
printf(”Hejka!!!\n”);return 0;
}
#include using namespace std;
int main( ){
cout
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
Odpowiedniość plików nagłówkowych dla C i C++
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
Odpowiedniość plików nagłówkowych dla C i C++
−→
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
Odpowiedniość plików nagłówkowych dla C i C++
−→
−→
−→
−→
−→
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
Rozszerzenia plików C++
Nie ma jednej ustalonej konwencji.
Programowanie obiektowe ....
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
Rozszerzenia plików C++
Najczęściej spotykane są:
∗.H ←→ ∗.C
Programowanie obiektowe ...
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
Rozszerzenia plików C++
Najczęściej spotykane są:
∗.H ←→ ∗.C
∗.hh ←→ ∗.cc
Programowanie obiektowe ..
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
Rozszerzenia plików C++
Najczęściej spotykane są:
∗.H ←→ ∗.C
∗.hh ←→ ∗.cc
∗.hpp ←→ ∗.cpp
Programowanie obiektowe .
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
Rozszerzenia plików C++
Najczęściej spotykane są:
∗.H ←→ ∗.C
∗.hh ←→ ∗.cc
∗.hpp ←→ ∗.cpp
∗.hxx ←→ ∗.cxx
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Kilka przykładowych różnicRóżnice w zapisie podstawowych
elementów programuPliki nagłówkowe funkcji z języka CKonwencje nazw
plików źródłowych dla języka C++
Rozszerzenia plików C++
Można również stosować konwencje mieszane.
∗.H ←→ ∗.C
∗.hh ←→ ∗.cc
∗.hpp ←→ ∗.cpp
∗.hxx ←→ ∗.cxx
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol Dodaj( Symbol y, Symbol x ){
???}
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
Programowanie obiektowe ....
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol Dodaj( Symbol y, Symbol x ){
???}
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + b = ?
Programowanie obiektowe ...
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol Dodaj( Symbol y, Symbol x ){
???}
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + b = ?
Programowanie obiektowe ..
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol Dodaj( Symbol y, Symbol x ){
???}
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);}
Tabliczka działania
+ e a be e a ba a b eb b e a
a + b = ?
Programowanie obiektowe .
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol Dodaj( Symbol y, Symbol x ){
???}
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);}
Tabliczka działania
+ e a be e a ba a b eb b e a
a + b = e
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol Dodaj( Symbol y, Symbol x ){
???}
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);}
Tabliczka działania
+ e a be e a ba a b eb b e a
a + b = e
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol Dodaj( Symbol y, Symbol x ){
???}
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);}
Tabliczka działania
+ e a be e a ba a b eb b e a
a + b = e
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol Dodaj( Symbol y, Symbol x ){
???}
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);}
Tabliczka działania
+ e a be e a ba a b eb b e a
a + b = e
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol Dodaj( Symbol y, Symbol x ){
???}
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);}
Tabliczka działania
+ e a be e a ba a b eb b e a
a + b = e
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol Dodaj( Symbol y, Symbol x ){
???}
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);}
Tabliczka działania
+ e a be e a ba a b eb b e a
a + b = e
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol Dodaj( Symbol y, Symbol x ){
return TabliczkaDzialania[y][x];}
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);}
Tabliczka działania
+ e a be e a ba a b eb b e a
a + b = e
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol operator + ( Symbol y, Symbol x ){
return TabliczkaDzialania[y][x];}
int main( ){Symbol y = a, x = b, wynik;
wynik = ???(y, x);}
Tabliczka działania
+ e a be e a ba a b eb b e a
a + b = e
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol operator + ( Symbol y, Symbol x ){
return TabliczkaDzialania[y][x];}
int main( ){Symbol y = a, x = b, wynik;
wynik = operator + (y, x);}
Tabliczka działania
+ e a be e a ba a b eb b e a
a + b = e
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol operator + ( Symbol y, Symbol x ){
return TabliczkaDzialania[y][x];}
int main( ){Symbol y = a, x = b, wynik;
wynik = y + x;}
Tabliczka działania
+ e a be e a ba a b eb b e a
a + b = e
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol operator + ( Symbol y, Symbol x ){
return TabliczkaDzialania[y][x];}
int main( ){Symbol y = a, x = b, wynik;
wynik = y + x;}
Tabliczka działania
+ e a be e a ba a b eb b e a
a + b = e
Czy są jakieś ograniczenia na
definiowanie funkcji operatorowych?
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Arytmetyka symboli
enum Symbol { e, a, b };
Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, {
b, e, a } };
Symbol operator + ( Symbol y, Symbol x ){
return TabliczkaDzialania[y][x];}
int main( ){Symbol y = a, x = b, wynik;
wynik = y + x;}
Tabliczka działania
+ e a be e a ba a b eb b e a
a + b = e
Nie możemy definiować funkcji operatorowych. gdy ich wszystkie
parametry są typów
wbudowanych takich jak float, int, itd. np.
int operator + (int arg1, float arg2)
{. . .
}
Dla tych typów definicje tych operacji są już wbudowane w
kompilator.
Programowanie obiektowe
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
To samo na kilka sposobów
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + b = e
Programowanie obiektowe ....
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
To samo na kilka sposobów
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + b = e
Programowanie obiektowe ...
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
To samo na kilka sposobów
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);wynik = operator+ (y, x);
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + b = e
Programowanie obiektowe ..
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
To samo na kilka sposobów
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);wynik = operator+ (y, x);wynik = y + x;
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + b = e
Programowanie obiektowe .
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
To samo na kilka sposobów
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
wynik = Dodaj(y, x);wynik = operator+ (y, x);wynik = y + x;
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + b = e
Programowanie obiektowe .
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Łączność działania – porządek wykonywania operacji
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + b + a = ?
Programowanie obiektowe ....
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Łączność działania – porządek wykonywania operacji
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
wynik = y + x + y;
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + b + a = ?
Programowanie obiektowe ...
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Łączność działania – porządek wykonywania operacji
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
wynik = (y + x) + y;
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + b + a = ?
Programowanie obiektowe ..
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Łączność działania – porządek wykonywania operacji
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
wynik = (y + x) + y;wynik = operator+ (operator+ (y ,x), y
);
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + b + a = ?
Programowanie obiektowe .
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Łączność działania – porządek wykonywania operacji
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
wynik = (y + x) + y;wynik = operator+ (operator+ (y ,x), y
);wynik = Dodaj(Dodaj(x, y), y);
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + b + a = ?
Programowanie obiektowe .
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Jawna zmiana porządku wykonywanych operacji
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
wynik = y + (x + y);
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + (b + a) = ?
Programowanie obiektowe ....
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Jawna zmiana porządku wykonywanych operacji
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
wynik = y + (x + y);wynik = operator+ (y, operator+ (x ,y)
);
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + (b + a) = ?
Programowanie obiektowe ...
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Jawna zmiana porządku wykonywanych operacji
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
wynik = y + (x + y);wynik = operator+ (y, operator+ (x ,y)
);wynik = Dodaj(y , Dodaj(x, y) );
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + (b + a) = ?
Programowanie obiektowe ..
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Jawna zmiana porządku wykonywanych operacji
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
wynik = y + (x + y);wynik = operator+ (y, operator+ (x ,y)
);wynik = Dodaj(y , Dodaj(x, y) );
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + (b + a) = ?
Programowanie obiektowe .
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Operatory jako funkcjeŁączność operatorów i porządek wykonywania
operacji
Jawna zmiana porządku wykonywanych operacji
enum Symbol { e, a, b };. . .
Symbol Dodaj( Symbol x, Symbol y );
Symbol operator + ( Symbol x, Symbol y );. . .
int main( ){Symbol y = a, x = b, wynik;
wynik = y + (x + y);wynik = operator+ (y, operator+ (x ,y)
);wynik = Dodaj(y , Dodaj(x, y) );
}
Tabliczka działania
+ e a b
e e a ba a b eb b e a
a + (b + a) = ?
Programowanie obiektowe .
-
Organizacja kursuProgramowanie obiektowe
Język C i C++ – najistotniejsze różnicePrzeciążanie
operatorów
Koniec prezentacjiDziękuję za uwagę
Programowanie obiektowe Organizacja kursu, paradygmaty, ogólnie
o C i C++
Organizacja kursuProgramowanie obiektowePodejscie
obiektoweJezyki programowaniaGeneza jezyka C++
Jezyk C i C++ – najistotniejsze rózniceKilka przykładowych
róznicRóznice w zapisie podstawowych elementów programuPliki
nagłówkowe funkcji z jezyka CKonwencje nazw plików zródłowych dla
jezyka C++
Przeciazanie operatorówOperatory jako funkcjeŁacznosc operatorów
i porzadek wykonywania operacji