Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
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