Style programowania, geneza języka C++

Podobne dokumenty
Style programowania - krótki przeglad

Geneza powstania języka C++

Geneza powstania języka C++

Style programowania - krótki przeglad

Geneza C++, hermetyzacja struktur danych

Geneza C++, manipulatory

Szablony funkcji i szablony klas

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji

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

Podstawy Programowania Obiektowego

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

Wyliczanie wyrażenia obiekty tymczasowe

Wprowadzenie do szablonów klas

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

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Szablony funkcji i klas (templates)

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

Wartości domyślne, przeciażenia funkcji

Schemat konstrukcja pliku Makefile

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Wartości domyślne, przeciażenia funkcji

Programowanie obiektowe - 1.

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Qt sygnały i designer

Referencje do zmiennych i obiektów

Wykład 5: Klasy cz. 3

TEMAT : KLASY DZIEDZICZENIE

Pola i metody statyczne

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

Wykład 8: klasy cz. 4

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

PARADYGMATY PROGRAMOWANIA Wykład 4

Hermetyzacja oraz pola i metody statyczne

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

Praca z aplikacją designer

Język programowania. Andrzej Bobyk

Szablony klas, zastosowanie szablonów w programach

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Wyjątki (exceptions)

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

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

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

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

Konstruktor kopiujacy

Technologie obiektowe

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

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Wartości domyślne, szablony funkcji i klas

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

Klasa, metody, rozwijanie w linii

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Historia modeli programowania

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013

Przesłanianie nazw, przestrzenie nazw

Dziedziczenie jednobazowe, poliformizm

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

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Klasa, metody, rozwijanie w linii

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Materiały do zajęć VII

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Zaawansowane programowanie w języku C++ Klasy w C++

Wstęp do Programowania 2

Programowanie 2. Język C++. Wykład 3.

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

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

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

Modelowanie i Programowanie Obiektowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Wykład 9: Polimorfizm i klasy wirtualne

Komputer nie myśli. On tylko wykonuje nasze polecenia. Nauczmy się więc wydawać mu rozkazy

Wprowadzenie do UML, przykład użycia kolizja

Wykład 4: Klasy i Metody

Wstęp do programowania obiektowego. Wykład 2

PARADYGMATY PROGRAMOWANIA Wykład 2

Zasoby, pliki graficzne

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Język C++ Programowanie obiektowe

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

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

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

Szablony. Szablony funkcji

Zad. 5: Układ równań liniowych liczb zespolonych

C++ Przeładowanie operatorów i wzorce w klasach

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

Każdy z nich posiada swoje parametry. W przypadku silnika może to być moc lub pojemność, w przypadku skrzyni biegów można mówić o skrzyni

Do czego służą klasy?

Laboratorium 1 - Programowanie proceduralne i obiektowe

Transkrypt:

Style programowania, geneza języka C++ Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Programowanie obiektowe Copyright c 2007 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat wizualizacji danych sensorycznych. Jest on udostępiony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową. Programowanie obiektowe Style programowania, geneza języka C++

Niniejsza prezentacja została wykonana przy użyciu systemu składu L A TEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer: http://latex-beamer.sourceforge.net Programowanie obiektowe Style programowania, geneza języka C++

1 Style programowania 2 Historia narodzin Motywacja Chronologia Związki z C 3 Wartości domyślne Konwencja nazw plików nagłówkowych

Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione

Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione

Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione

Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione

Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione

Ważniejsze style Style programowania Programowanie proceduralne Nacisk kładzie się na przetwarzanie, tzn. zbudowania algorytmu potrzebnego do wykonania wymaganych obliczeń. Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione

Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Uwypukla powiązanie danych z procedurami oraz ukrywa dane, które wykorzystywane są tylko w pewnych blokach obliczeniowych reprezentowanych przez moduły. Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione

Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Zakłada możliwość definiowania typów, które mają te same własności jak typy wbudowane. Programowanie obiektowe Programowanie uogólnione

Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Tworzenie struktur pochodnych poprzez dziedziczenie z możliwością modyfikacji dzięki polimorfizmowi. Hermetyzacja wybranych struktur. Programowanie uogólnione

Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione Umożliwia tworzenie parametryzowanych struktur i funkcji/procedur, dla których parametrami jest typ danych.

Programowanie z wykorzystaniem podprogramów

Programowanie z wykorzystaniem podprogramów Styl charakterystyczny dla przypadku wykorzystywania asemblera oraz wczesnej wersji Basic a.

Programowanie z wykorzystaniem podprogramów

Programowanie z wykorzystaniem podprogramów Wielość wzajemnych powiązań prowadzi do tworzenia się nieczytelnych konstrukcji programów.

Programowanie proceduralne

Programowanie proceduralne Zmienne lokalne poprawiają wykorzystanie pamięci oraz czytelność programu.

Programowanie proceduralne Paradygmat programowania proceduralnego:

Programowanie proceduralne Paradygmat programowania proceduralnego: Zdecyduj jakie chcesz mieć procedury; stosuj najlepsze algorytmy jakie możesz znaleźć.

Programowanie proceduralne Paradygmat programowania proceduralnego: Zdecyduj jakie chcesz mieć procedury; stosuj najlepsze algorytmy jakie możesz znaleźć. Przykład języków programowania wspierających ten paradygmat: Pascal, C, Java, C++, Python, Perl itp.

Programowanie proceduralne Podstawowe wady czystego programowania proceduralnego. Brak możliwości wyróżnienia powiązań między strukturami danych, a procedurami operującymi na nich. Konieczność stosowania różnych nazw procedur nawet w przypadku, gdy wykonują te same operacje, a jedyną różnicą jest typ danych, na których wykonywana jest ta operacja. Umieszczanie wszystkich elementów w jednakowym obszarze zasięgu ważności definicji uniemożliwia hermetyzację wybranych partii programy. Nie pozwala to na łatwe rozdzielenia całego zadania na poszczególne podzadania.

Programowanie proceduralne Podstawowe wady czystego programowania proceduralnego. Brak możliwości wyróżnienia powiązań między strukturami danych, a procedurami operującymi na nich. Konieczność stosowania różnych nazw procedur nawet w przypadku, gdy wykonują te same operacje, a jedyną różnicą jest typ danych, na których wykonywana jest ta operacja. Umieszczanie wszystkich elementów w jednakowym obszarze zasięgu ważności definicji uniemożliwia hermetyzację wybranych partii programy. Nie pozwala to na łatwe rozdzielenia całego zadania na poszczególne podzadania.

Programowanie proceduralne Podstawowe wady czystego programowania proceduralnego. Brak możliwości wyróżnienia powiązań między strukturami danych, a procedurami operującymi na nich. Konieczność stosowania różnych nazw procedur nawet w przypadku, gdy wykonują te same operacje, a jedyną różnicą jest typ danych, na których wykonywana jest ta operacja. Umieszczanie wszystkich elementów w jednakowym obszarze zasięgu ważności definicji uniemożliwia hermetyzację wybranych partii programy. Nie pozwala to na łatwe rozdzielenia całego zadania na poszczególne podzadania.

Programowanie proceduralne Podstawowe wady czystego programowania proceduralnego. Brak możliwości wyróżnienia powiązań między strukturami danych, a procedurami operującymi na nich. Konieczność stosowania różnych nazw procedur nawet w przypadku, gdy wykonują te same operacje, a jedyną różnicą jest typ danych, na których wykonywana jest ta operacja. Umieszczanie wszystkich elementów w jednakowym obszarze zasięgu ważności definicji uniemożliwia hermetyzację wybranych partii programy. Nie pozwala to na łatwe rozdzielenia całego zadania na poszczególne podzadania.

Programowanie modularne

Programowanie modularne Modułem nazywamy zbiór powiązanych ze sobą procedur, struktur danych oraz zmiennych i wyodrębnionych w postaci osobnej konstrukcji językowej lub translacyjnej.

Programowanie modularne Modułem nazywamy zbiór powiązanych ze sobą procedur, struktur danych oraz zmiennych i wyodrębnionych w postaci osobnej konstrukcji językowej lub translacyjnej. To powiązanie pozwala skupić w jednym miejscu struktury danych oraz procedury i funkcje obsługujące te struktury.

Programowanie modularne

Programowanie modularne Ten typ programowania pozwala ukryć pomocnicze funkcje i struktury danych.

Programowanie modularne Ten typ programowania pozwala ukryć pomocnicze funkcje i struktury danych. Możliwe jest dość precyzyjne określenie co jest udostępniane na zewnątrz i z czego dany moduł korzysta. Pozwala to ukryć ewentualne późniejsze modyfikacje struktur wewnętrznych.

Programowanie modularne Paradygmat programowania modularnego:

Programowanie modularne Paradygmat programowania modularnego: Zdecyduj jakie chcesz mieć moduły; podziel program w taki sposób, aby ukryć dane w modułach.

Programowanie modularne Paradygmat programowania modularnego: Zdecyduj jakie chcesz mieć moduły; podziel program w taki sposób, aby ukryć dane w modułach. Przykład języków programowania wspierających ten paradygmat: Modula 2, Ada, C, Java, C++ itp.

Programowanie modularne najważniejsze cechy Ukrywanie funkcji, struktur danych oraz zmiennych mających znacznie lokalne w danym module. Możliwość całkowitego ukrycia udostępnianych struktur danych. Na zewnątrz modułu widoczne są jedynie ich cechy i własności. Odwoływanie się do konkretnego egzemplarza tworzonej struktury danych realizowane jest poprzez deskryptory. Wadą tej techniki jest brak możliwości kontroli zgodności typów na etapie kompilacji.

Programowanie modularne najważniejsze cechy Ukrywanie funkcji, struktur danych oraz zmiennych mających znacznie lokalne w danym module. Możliwość całkowitego ukrycia udostępnianych struktur danych. Na zewnątrz modułu widoczne są jedynie ich cechy i własności. Odwoływanie się do konkretnego egzemplarza tworzonej struktury danych realizowane jest poprzez deskryptory. Wadą tej techniki jest brak możliwości kontroli zgodności typów na etapie kompilacji.

Programowanie modularne najważniejsze cechy Ukrywanie funkcji, struktur danych oraz zmiennych mających znacznie lokalne w danym module. Możliwość całkowitego ukrycia udostępnianych struktur danych. Na zewnątrz modułu widoczne są jedynie ich cechy i własności. Odwoływanie się do konkretnego egzemplarza tworzonej struktury danych realizowane jest poprzez deskryptory. Wadą tej techniki jest brak możliwości kontroli zgodności typów na etapie kompilacji.

Programowanie modularne najważniejsze cechy Ukrywanie funkcji, struktur danych oraz zmiennych mających znacznie lokalne w danym module. Możliwość całkowitego ukrycia udostępnianych struktur danych. Na zewnątrz modułu widoczne są jedynie ich cechy i własności. Odwoływanie się do konkretnego egzemplarza tworzonej struktury danych realizowane jest poprzez deskryptory. Wadą tej techniki jest brak możliwości kontroli zgodności typów na etapie kompilacji.

Programowanie modularne najważniejsze cechy Ukrywanie funkcji, struktur danych oraz zmiennych mających znacznie lokalne w danym module. Możliwość całkowitego ukrycia udostępnianych struktur danych. Na zewnątrz modułu widoczne są jedynie ich cechy i własności. Odwoływanie się do konkretnego egzemplarza tworzonej struktury danych realizowane jest poprzez deskryptory. Wadą tej techniki jest brak możliwości kontroli zgodności typów na etapie kompilacji.

Programowanie modularne najważniejsze cechy Ukrywanie funkcji, struktur danych oraz zmiennych mających znacznie lokalne w danym module. Możliwość całkowitego ukrycia udostępnianych struktur danych. Na zewnątrz modułu widoczne są jedynie ich cechy i własności. Odwoływanie się do konkretnego egzemplarza tworzonej struktury danych realizowane jest poprzez deskryptory. Wadą tej techniki jest brak możliwości kontroli zgodności typów na etapie kompilacji.

Programowanie modularne najważniejsze cechy Możliwość odizolowania się od nazw funkcji i zmiennych modułu używanych w innych modułach. Możliwość precyzyjnego określenia co z danego modułu jest widoczne i udostępniane na zewnątrz, a co nie. Mechanizm ten pozwala również określić co dany moduł importuje z innych modułów. Łatwiejsza organizacja pracy zespołowej.

Programowanie modularne najważniejsze cechy Możliwość odizolowania się od nazw funkcji i zmiennych modułu używanych w innych modułach. Możliwość precyzyjnego określenia co z danego modułu jest widoczne i udostępniane na zewnątrz, a co nie. Mechanizm ten pozwala również określić co dany moduł importuje z innych modułów. Łatwiejsza organizacja pracy zespołowej.

Programowanie modularne najważniejsze cechy Możliwość odizolowania się od nazw funkcji i zmiennych modułu używanych w innych modułach. Możliwość precyzyjnego określenia co z danego modułu jest widoczne i udostępniane na zewnątrz, a co nie. Mechanizm ten pozwala również określić co dany moduł importuje z innych modułów. Łatwiejsza organizacja pracy zespołowej.

Programowanie modularne podsumowanie Programowanie modularne umożliwia centralizację wszystkich danych jednego typu pod kontrolą jednego modułu będącego zarządcą danego typu. Daje to jednak wciąż znacząco gorsze wsparcie niż dla typów wbudowanych.

Programowanie modularne podsumowanie Programowanie modularne umożliwia centralizację wszystkich danych jednego typu pod kontrolą jednego modułu będącego zarządcą danego typu. Daje to jednak wciąż znacząco gorsze wsparcie niż dla typów wbudowanych. Wady czystego programowania modularnego: brak możliwości stosowania operatorów, w przypadku stosowania deskryptorów brak możliwości ścisłej kontroli typów na poziomie kompilacji, brak możliwości określenia dopuszczalności domyślnych konwersji oraz ich zdefiniowania.

Programowanie modularne podsumowanie Programowanie modularne umożliwia centralizację wszystkich danych jednego typu pod kontrolą jednego modułu będącego zarządcą danego typu. Daje to jednak wciąż znacząco gorsze wsparcie niż dla typów wbudowanych. Wady czystego programowania modularnego: brak możliwości stosowania operatorów, w przypadku stosowania deskryptorów brak możliwości ścisłej kontroli typów na poziomie kompilacji, brak możliwości określenia dopuszczalności domyślnych konwersji oraz ich zdefiniowania.

Programowanie modularne podsumowanie Programowanie modularne umożliwia centralizację wszystkich danych jednego typu pod kontrolą jednego modułu będącego zarządcą danego typu. Daje to jednak wciąż znacząco gorsze wsparcie niż dla typów wbudowanych. Wady czystego programowania modularnego: brak możliwości stosowania operatorów, w przypadku stosowania deskryptorów brak możliwości ścisłej kontroli typów na poziomie kompilacji, brak możliwości określenia dopuszczalności domyślnych konwersji oraz ich zdefiniowania.

Programowanie modularne podsumowanie Programowanie modularne umożliwia centralizację wszystkich danych jednego typu pod kontrolą jednego modułu będącego zarządcą danego typu. Daje to jednak wciąż znacząco gorsze wsparcie niż dla typów wbudowanych. Wady czystego programowania modularnego: brak możliwości stosowania operatorów, w przypadku stosowania deskryptorów brak możliwości ścisłej kontroli typów na poziomie kompilacji, brak możliwości określenia dopuszczalności domyślnych konwersji oraz ich zdefiniowania.

Abstrakcja typów danych

Abstrakcja typów danych Podejście oparte na abstrakcji danych pozwala traktować na równi typy wbudowane i typy definiowane przez programistę. Pozwala również na bezpośrednie odwoływanie się do struktur danych i dokonywanych na nich operacji (w odróżnieniu od programowania modułowego).

Abstrakcja typów danych Podejście oparte na abstrakcji danych pozwala traktować na równi typy wbudowane i typy definiowane przez programistę. Pozwala również na bezpośrednie odwoływanie się do struktur danych i dokonywanych na nich operacji (w odróżnieniu od programowania modułowego).

Abstrakcja typów danych Paradygmat programowania z zastosowaniem abstrakcji danych:

Abstrakcja typów danych Paradygmat programowania z zastosowaniem abstrakcji danych: Zdecyduj jakie chcesz mieć typy; dla każdego typu dostarcz pełny zbiór operacji.

Abstrakcja typów danych Paradygmat programowania z zastosowaniem abstrakcji danych: Zdecyduj jakie chcesz mieć typy; dla każdego typu dostarcz pełny zbiór operacji. Przykład języków programowania wspierających ten paradygmat: Ada, Clu, C++ itp.

Abstrakcja typów danych zalety i wady Programowanie z wykorzystaniem abstrakcji danych pozwala na tworzenie struktur, które mogą być dobrze izolowane od reszty programu. Zawierają one zarówno odpowiednie pola danych, jak też zdefiniowane metody i operacje dokonywane na nich.

Abstrakcja typów danych zalety i wady Programowanie z wykorzystaniem abstrakcji danych pozwala na tworzenie struktur, które mogą być dobrze izolowane od reszty programu. Zawierają one zarówno odpowiednie pola danych, jak też zdefiniowane metody i operacje dokonywane na nich.

Abstrakcja typów danych zalety i wady Programowanie z wykorzystaniem abstrakcji danych pozwala na tworzenie struktur, które mogą być dobrze izolowane od reszty programu. Zawierają one zarówno odpowiednie pola danych, jak też zdefiniowane metody i operacje dokonywane na nich. Podstawową wadą jest brak elastyczności.

Abstrakcja typów danych zalety i wady Programowanie z wykorzystaniem abstrakcji danych pozwala na tworzenie struktur, które mogą być dobrze izolowane od reszty programu. Zawierają one zarówno odpowiednie pola danych, jak też zdefiniowane metody i operacje dokonywane na nich. Podstawową wadą jest brak elastyczności. Przykład: Konstruując typy MacierzWJ (transformacje wektorów wyrażonych we współrzędnych jednorodnych) oraz Macierz4x4 należy zdefiniować oddzielne struktury danych wraz z metodami i operacjami, choć MacierzWJ jest jedynie uszczegółowieniem typu Macierz4x4.

Abstrakcja typów danych zalety i wady Programowanie z wykorzystaniem abstrakcji danych pozwala na tworzenie struktur, które mogą być dobrze izolowane od reszty programu. Zawierają one zarówno odpowiednie pola danych, jak też zdefiniowane metody i operacje dokonywane na nich. Podstawową wadą jest brak elastyczności. Przykład: Konstruując typy MacierzWJ (transformacje wektorów wyrażonych we współrzędnych jednorodnych) oraz Macierz4x4 należy zdefiniować oddzielne struktury danych wraz z metodami i operacjami, choć MacierzWJ jest jedynie uszczegółowieniem typu Macierz4x4.

Programowanie obiektowe

Programowanie obiektowe Podejście oparte na podejściu obiektowym umożliwia budowanie nowych typów danych na bazie wcześniej zdefiniowanych struktur (dziedziczenie).

Programowanie obiektowe Paradygmat programowania programowania obiektowego:

Programowanie obiektowe Paradygmat programowania programowania obiektowego: Zdecyduj jakie chcesz mieć klasy; dla każdej klasy dostarcz pełny zbiór operacji; korzystając z mechanizmu dziedziczenia, jawnie wskaż to, co jest wspólne.

Programowanie obiektowe Paradygmat programowania programowania obiektowego: Zdecyduj jakie chcesz mieć klasy; dla każdej klasy dostarcz pełny zbiór operacji; korzystając z mechanizmu dziedziczenia, jawnie wskaż to, co jest wspólne. Przykład języków programowania wspierających ten paradygmat: C++, Java, Python itp.

Programowanie obiektowe podstawowe cechy dziedziczenie możliwość tworzenia nowych struktur danych z wykorzystaniem struktur wcześniej zdefiniowanych wraz ze wszystkimi ich atrybutami i metodami. hermetyzacja możliwość ograniczanie dostępu do wybranych struktur danych. Pozwala to definiować ściśle określony interfejs dostępu do tych struktur. polimorfizm możliwość modyfikacji metod (określanych mianem metod wirtualnych) w strukturach bazowych poprzez ich redefiniowanie w strukturach pochodnych.

Programowanie obiektowe podstawowe cechy dziedziczenie możliwość tworzenia nowych struktur danych z wykorzystaniem struktur wcześniej zdefiniowanych wraz ze wszystkimi ich atrybutami i metodami. hermetyzacja możliwość ograniczanie dostępu do wybranych struktur danych. Pozwala to definiować ściśle określony interfejs dostępu do tych struktur. polimorfizm możliwość modyfikacji metod (określanych mianem metod wirtualnych) w strukturach bazowych poprzez ich redefiniowanie w strukturach pochodnych.

Programowanie obiektowe podstawowe cechy dziedziczenie możliwość tworzenia nowych struktur danych z wykorzystaniem struktur wcześniej zdefiniowanych wraz ze wszystkimi ich atrybutami i metodami. hermetyzacja możliwość ograniczanie dostępu do wybranych struktur danych. Pozwala to definiować ściśle określony interfejs dostępu do tych struktur. polimorfizm możliwość modyfikacji metod (określanych mianem metod wirtualnych) w strukturach bazowych poprzez ich redefiniowanie w strukturach pochodnych.

Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady?

Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciąż mało elastyczne!!!! :-0

Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciąż mało elastyczne!!!! :-0

Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciąż mało elastyczne!!!! :-0 We wcześniejszym przykładzie typy Macierz4x4 i MacierzWJ zostały zdefiniowane dla typu float. Aby zdefiniować je dla typu double należy wszystko na nowo przepisać. :-(

Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciąż mało elastyczne!!!! :-0 We wcześniejszym przykładzie typy Macierz4x4 i MacierzWJ zostały zdefiniowane dla typu float. Aby zdefiniować je dla typu double należy wszystko na nowo przepisać. :-(

Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciąż mało elastyczne!!!! :-0 We wcześniejszym przykładzie typy Macierz4x4 i MacierzWJ zostały zdefiniowane dla typu float. Aby zdefiniować je dla typu double należy wszystko na nowo przepisać. :-( Czy nie można było by stworzyć ogólnych mechanizmów nie tylko definiowania struktur, ale również pisania funkcji? Czy mechanizmy te mogłyby być na tyle ogólne, aby np. napisać funkcję umożliwiającą sortowanie dowolnych struktur danych?

Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciąż mało elastyczne!!!! :-0 We wcześniejszym przykładzie typy Macierz4x4 i MacierzWJ zostały zdefiniowane dla typu float. Aby zdefiniować je dla typu double należy wszystko na nowo przepisać. :-( Czy nie można było by stworzyć ogólnych mechanizmów nie tylko definiowania struktur, ale również pisania funkcji? Czy mechanizmy te mogłyby być na tyle ogólne, aby np. napisać funkcję umożliwiającą sortowanie dowolnych struktur danych?

Programowanie uogólnione Przykład z biblioteki C realizacji uogólnionych algorytmów dla tworzenia, manipulowania i przeszukiwania struktury drzewa binarnego. #include <search.h> void *tsearch(const void *key, void **rootp, int(*compar)(const void *, const void *)); void *tfind(const void *key, const void **rootp, int(*compar)(const void *, const void *)); void *tdelete(const void *key, void **rootp, int(*compar)(const void *, const void *)); void twalk(const void *root, void(*action)(const void *nodep, const VISIT which, const int depth));

Programowanie uogólnione Przykład z biblioteki C realizacji uogólnionych algorytmów dla tworzenia, manipulowania i przeszukiwania struktury drzewa binarnego. #include <search.h> void *tsearch(const void *key, void **rootp, int(*compar)(const void *, const void *)); void *tfind(const void *key, const void **rootp, int(*compar)(const void *, const void *)); void *tdelete(const void *key, void **rootp, int(*compar)(const void *, const void *)); void twalk(const void *root, void(*action)(const void *nodep, const VISIT which, const int depth));

Programowanie uogólnione Na poziomie języka C ideę programowania uogólnionego realizuje się poprzez rzutowanie z typów void*, void** itp.

Programowanie uogólnione Na poziomie języka C ideę programowania uogólnionego realizuje się poprzez rzutowanie z typów void*, void** itp. Najistotniejszą wadą tego rozwiązania jest brak kontroli typów na etapie kompilacji.

Programowanie uogólnione

Programowanie uogólnione Programowanie uogólnione pozwala tworzyć uniwersalne struktury, w których nie ma (lub są one zminimalizowane) ograniczeń na typ pól. Daje możliwość skoncentrowania się na ogólnych mechanizmach manipulowania strukturami danych. Można stworzyć np. wzorzec listy.

Programowanie uogólnione Programowanie uogólnione pozwala tworzyć uniwersalne struktury, w których nie ma (lub są one zminimalizowane) ograniczeń na typ pól. Daje możliwość skoncentrowania się na ogólnych mechanizmach manipulowania strukturami danych. Można stworzyć np. wzorzec listy.

Programowanie uogólnione

Programowanie uogólnione Konkretyzacja typu następuje w momencie odwołania się do wzorca wraz ze wszystkimi parametrami. Są one nazwami typów składowych. Odwołanie następuje wraz z deklaracją obiektu danej klasy.

Programowanie uogólnione Konkretyzacja typu następuje w momencie odwołania się do wzorca wraz ze wszystkimi parametrami. Są one nazwami typów składowych. Odwołanie następuje wraz z deklaracją obiektu danej klasy.

Programowanie uogólnione Konkretyzacja typu następuje w momencie odwołania się do wzorca wraz ze wszystkimi parametrami. Są one nazwami typów składowych. Odwołanie następuje wraz z deklaracją obiektu danej klasy.

Programowanie uogólnione Paradygmat programowania programowania uogólnionego:

Programowanie uogólnione Paradygmat programowania programowania uogólnionego: Zdecyduj jakie chcesz mieć algorytmy; parametryzuj je w taki sposób, by działały dla różnych typów i struktur.

Programowanie uogólnione Paradygmat programowania programowania uogólnionego: Zdecyduj jakie chcesz mieć algorytmy; parametryzuj je w taki sposób, by działały dla różnych typów i struktur. Przykład języków programowania wspierających ten paradygmat: C++ Programowanie uogólnione jest podstawową techniką programowania użytą przy tworzeniu standardowej biblioteki szablonów (STL), która jest jednym z podstawowych składników ANSI/ISO C++.

Programowanie uogólnione Paradygmat programowania programowania uogólnionego: Zdecyduj jakie chcesz mieć algorytmy; parametryzuj je w taki sposób, by działały dla różnych typów i struktur. Przykład języków programowania wspierających ten paradygmat: C++ Programowanie uogólnione jest podstawową techniką programowania użytą przy tworzeniu standardowej biblioteki szablonów (STL), która jest jednym z podstawowych składników ANSI/ISO C++.

Tło akcji Style programowania Historia narodzin Motywacja Chronologia Związki z C Bezpośrednim przyczynkiem do powstania koncepcji języka C++ były prace Stroustrupa w Cambridge nad doktoratem. W trakcie swoich prac miał zbadać różne organizacje systemowego oprogramowania w systemach rozproszonych.

Zdarzenia Style programowania Historia narodzin Motywacja Chronologia Związki z C Udana (w sensie konstrukcji aplikacji) realizacja symulatora systemu rozproszenego z wykorzystaniem Simuli. Pojęcie klasy w Simuli było bardzo pomocne na etapie projektu i implmentacji. Poważne problemy związne z wydajnością programów napisanego w Simuli zmusza do poszukiwania bardziej wydajnego narzędzia. Traumatycznie bolesne doświadczenia związane z koniecznością implementacji symulatora w oparciu o język BCPL. Osiągnięta została bardzo dobra wydajność kosztem wielu problemów przy realizacji implementacji.

Zdarzenia Style programowania Historia narodzin Motywacja Chronologia Związki z C Udana (w sensie konstrukcji aplikacji) realizacja symulatora systemu rozproszenego z wykorzystaniem Simuli. Pojęcie klasy w Simuli było bardzo pomocne na etapie projektu i implmentacji. Poważne problemy związne z wydajnością programów napisanego w Simuli zmusza do poszukiwania bardziej wydajnego narzędzia. Traumatycznie bolesne doświadczenia związane z koniecznością implementacji symulatora w oparciu o język BCPL. Osiągnięta została bardzo dobra wydajność kosztem wielu problemów przy realizacji implementacji.

Zdarzenia Style programowania Historia narodzin Motywacja Chronologia Związki z C Udana (w sensie konstrukcji aplikacji) realizacja symulatora systemu rozproszenego z wykorzystaniem Simuli. Pojęcie klasy w Simuli było bardzo pomocne na etapie projektu i implmentacji. Poważne problemy związne z wydajnością programów napisanego w Simuli zmusza do poszukiwania bardziej wydajnego narzędzia. Traumatycznie bolesne doświadczenia związane z koniecznością implementacji symulatora w oparciu o język BCPL. Osiągnięta została bardzo dobra wydajność kosztem wielu problemów przy realizacji implementacji.

Zdarzenia Style programowania Historia narodzin Motywacja Chronologia Związki z C Udana (w sensie konstrukcji aplikacji) realizacja symulatora systemu rozproszenego z wykorzystaniem Simuli. Pojęcie klasy w Simuli było bardzo pomocne na etapie projektu i implmentacji. Poważne problemy związne z wydajnością programów napisanego w Simuli zmusza do poszukiwania bardziej wydajnego narzędzia. Traumatycznie bolesne doświadczenia związane z koniecznością implementacji symulatora w oparciu o język BCPL. Osiągnięta została bardzo dobra wydajność kosztem wielu problemów przy realizacji implementacji.

Epilog Style programowania Historia narodzin Motywacja Chronologia Związki z C Po zakończeniu prac nad doktoratem Stroustrup postanawia stworzyć język programowania, który łączyłby koncepcje klas z Simuli oraz elastyczność tego języka z efektywnością kodu języka BCPL.

Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te przeważnie były albo wynikiem głupich pomyłek w trakcie programowania albo też potknięć koncepcyjnych. Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie dla procesu projektowania i pisania programownia (autor kursu pozwolił sobie tę uwagę wzmocnić). Żaden inny prosty system sprawdzania ścisłej zgodności typów nie dostarczył tego rodzaju wsparcia. Przykładem może być system Pascala. Sprawiał on więcej kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji projektu, aby dostosować go do warunków narzuconych przez implementację (co nie zmienia faktu, że jest to bardzo dobry język dla początkowego kursu nauki informatyki uwaga autora kursu).

Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te przeważnie były albo wynikiem głupich pomyłek w trakcie programowania albo też potknięć koncepcyjnych. Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie dla procesu projektowania i pisania programownia (autor kursu pozwolił sobie tę uwagę wzmocnić). Żaden inny prosty system sprawdzania ścisłej zgodności typów nie dostarczył tego rodzaju wsparcia. Przykładem może być system Pascala. Sprawiał on więcej kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji projektu, aby dostosować go do warunków narzuconych przez implementację (co nie zmienia faktu, że jest to bardzo dobry język dla początkowego kursu nauki informatyki uwaga autora kursu).

Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te przeważnie były albo wynikiem głupich pomyłek w trakcie programowania albo też potknięć koncepcyjnych. Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie dla procesu projektowania i pisania programownia (autor kursu pozwolił sobie tę uwagę wzmocnić). Żaden inny prosty system sprawdzania ścisłej zgodności typów nie dostarczył tego rodzaju wsparcia. Przykładem może być system Pascala. Sprawiał on więcej kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji projektu, aby dostosować go do warunków narzuconych przez implementację (co nie zmienia faktu, że jest to bardzo dobry język dla początkowego kursu nauki informatyki uwaga autora kursu).

Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te przeważnie były albo wynikiem głupich pomyłek w trakcie programowania albo też potknięć koncepcyjnych. Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie dla procesu projektowania i pisania programownia (autor kursu pozwolił sobie tę uwagę wzmocnić). Żaden inny prosty system sprawdzania ścisłej zgodności typów nie dostarczył tego rodzaju wsparcia. Przykładem może być system Pascala. Sprawiał on więcej kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji projektu, aby dostosować go do warunków narzuconych przez implementację (co nie zmienia faktu, że jest to bardzo dobry język dla początkowego kursu nauki informatyki uwaga autora kursu).

Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te przeważnie były albo wynikiem głupich pomyłek w trakcie programowania albo też potknięć koncepcyjnych. Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie dla procesu projektowania i pisania programownia (autor kursu pozwolił sobie tę uwagę wzmocnić). Żaden inny prosty system sprawdzania ścisłej zgodności typów nie dostarczył tego rodzaju wsparcia. Przykładem może być system Pascala. Sprawiał on więcej kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji projektu, aby dostosować go do warunków narzuconych przez implementację (co nie zmienia faktu, że jest to bardzo dobry język dla początkowego kursu nauki informatyki uwaga autora kursu).

Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Pojęcie klasy było zasadniczym elementem różniącym sztywny Pascal od elastycznej Simuli. Wyczerpujące sprawdzanie zgodności typów w Simuli sprawiało, że liczba problemów i błędów nie wzrastała szybciej niż liniowo wraz ze wzrostem programu.

Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Pojęcie klasy było zasadniczym elementem różniącym sztywny Pascal od elastycznej Simuli. Wyczerpujące sprawdzanie zgodności typów w Simuli sprawiało, że liczba problemów i błędów nie wzrastała szybciej niż liniowo wraz ze wzrostem programu.

Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1979 (Maj) Początek prac na C z Klasami. (Październik) Oddanie 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++ (wersja E) do użytku zewnętrznego. (Październik) Ukazanie się pierwszego wydania książki Język C++. 1987 (Grudzień) Ukazanie się kompilatora GNU C++.

Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1979 (Maj) Początek prac na C z Klasami. (Październik) Oddanie 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++ (wersja E) do użytku zewnętrznego. (Październik) Ukazanie się pierwszego wydania książki Język C++. 1987 (Grudzień) Ukazanie się kompilatora GNU C++.

Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1979 (Maj) Początek prac na C z Klasami. (Październik) Oddanie 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++ (wersja E) do użytku zewnętrznego. (Październik) Ukazanie się pierwszego wydania książki Język C++. 1987 (Grudzień) Ukazanie się kompilatora GNU C++.

Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1979 (Maj) Początek prac na C z Klasami. (Październik) Oddanie 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++ (wersja E) do użytku zewnętrznego. (Październik) Ukazanie się pierwszego wydania książki Język C++. 1987 (Grudzień) Ukazanie się kompilatora GNU C++.

Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1979 (Maj) Początek prac na C z Klasami. (Październik) Oddanie 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++ (wersja E) do użytku zewnętrznego. (Październik) Ukazanie się pierwszego wydania książki Język C++. 1987 (Grudzień) Ukazanie się kompilatora GNU C++.

Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1989 (Grudzień) Powstanie zespołu ANSI X3J16 do spraw normalizacji języka C++. 1990 (Maj) Powstawnie w firmie Borland pierwszej implementacji języka C++. (Lipiec) Przyjęcie koncepcji wzorców. (Listopad) Przyjęcie koncepcji wyjątków. 1992 (Luty) Powstanie pierwszej implementacji języka C++ (zawierającej wzorce i wyjątki) w firmie DEC. (Marzec) Powstanie pierwszej implementacji języka C++ w firmie Microsoft. (Maj) Powstanie pierwszej implementacji języka C++ w firmie IBM.

Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1989 (Grudzień) Powstanie zespołu ANSI X3J16 do spraw normalizacji języka C++. 1990 (Maj) Powstawnie w firmie Borland pierwszej implementacji języka C++. (Lipiec) Przyjęcie koncepcji wzorców. (Listopad) Przyjęcie koncepcji wyjątków. 1992 (Luty) Powstanie pierwszej implementacji języka C++ (zawierającej wzorce i wyjątki) w firmie DEC. (Marzec) Powstanie pierwszej implementacji języka C++ w firmie Microsoft. (Maj) Powstanie pierwszej implementacji języka C++ w firmie IBM.

Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1989 (Grudzień) Powstanie zespołu ANSI X3J16 do spraw normalizacji języka C++. 1990 (Maj) Powstawnie w firmie Borland pierwszej implementacji języka C++. (Lipiec) Przyjęcie koncepcji wzorców. (Listopad) Przyjęcie koncepcji wyjątków. 1992 (Luty) Powstanie pierwszej implementacji języka C++ (zawierającej wzorce i wyjątki) w firmie DEC. (Marzec) Powstanie pierwszej implementacji języka C++ w firmie Microsoft. (Maj) Powstanie pierwszej implementacji języka C++ w firmie IBM.

Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1993 (Marzec) Przyjęcie koncepcji identyfikowania typu podczas wykonywania programu. (Lipiec) Przyjęcie koncepcji przestrzeni nazw. 1994 (Wrzesień) Przyjęcie standardu ANSI/ISO języka C++.

Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1993 (Marzec) Przyjęcie koncepcji identyfikowania typu podczas wykonywania programu. (Lipiec) Przyjęcie koncepcji przestrzeni nazw. 1994 (Wrzesień) Przyjęcie standardu ANSI/ISO języka C++.

Genealogia Style programowania Historia narodzin Motywacja Chronologia Związki z C

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania. Kilka faktów: Słowo kluczowe class pochodzi z Simuli (podobnie jak notacja wskaźnika this). Zapis funkcja(void) w ANSI C pochodzi z języka C z Klasami.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania. Kilka faktów: Słowo kluczowe class pochodzi z Simuli (podobnie jak notacja wskaźnika this). Zapis funkcja(void) w ANSI C pochodzi z języka C z Klasami.

Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania. Kilka faktów: Słowo kluczowe class pochodzi z Simuli (podobnie jak notacja wskaźnika this). Zapis funkcja(void) w ANSI C pochodzi z języka C z Klasami.

Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym C jest językiem szeroko dostępnym C jest językiem przenośnym

Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym C jest językiem szeroko dostępnym C jest językiem przenośnym

Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym C jest językiem szeroko dostępnym C jest językiem przenośnym

Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym C jest językiem szeroko dostępnym C jest językiem przenośnym

Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym C jest językiem szeroko dostępnym C jest językiem przenośnym

Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym nie ma wewnętrznych ograniczeń wykluczających możliwość napisania jakiegoś rodzaju programu, tzn. można korzystać w nim z większości technik programowania. C jest językiem wydajnym C jest językiem szeroko dostępnym C jest językiem przenośnym

Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym semantyka języka znajduje się na niskim poziomie, tzn. podstawowe pojęcia języka odzwierciedlają podstawowe pojęcia tradycyjnego komputera. C jest językiem szeroko dostępnym C jest językiem przenośnym

Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym C jest językiem szeroko dostępnym implementacje tego języka istnieją zarówno dla mikrokomputerów jak też dla dużych superkomputerów. C jest językiem przenośnym

Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C 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 C zazwyczaj nie można automatycznie przenosić z jednego systemu operacyjnego do drugiego. Jednak przenośność z uwzględnieniem odpowiednich uwarunkowań jest możliwa.

Cel Style programowania Wartości domyślne Konwencja nazw plików nagłówkowych Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol:

Cel Style programowania Wartości domyślne Konwencja nazw plików nagłówkowych Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol:

Cel Style programowania Wartości domyślne Konwencja nazw plików nagłówkowych Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol:

Cel Style programowania Wartości domyślne Konwencja nazw plików nagłówkowych Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol: Ogólna postać równania: y = ax 2 + b

Implementacja Style programowania Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a, float b) { return a x x+b; }

Implementacja Style programowania Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a, float b) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,1,0); }

Definiowanie wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a, float b = 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,1,0); }

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a, float b = 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,1); }

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a, float b= 0) { return a x x+b; } int main() { float y, x=5; } y = Parabola(x,1); // Parabola(x,1,0)

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,1); }

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x); }

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; } y = Parabola(x); // Parabola(x,1,0)

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x); } Co zrobić jeśli chcemy aby a = 2?

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,2); }

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; } y = Parabola(x,2); // Parabola(x,2,0)

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,2); } A jeśli ma być b = 5?

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,2,5); }

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,2,5); } A jeśli chcemy aby a = 1 i b = 5?

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,5); } A jeśli chcemy aby a = 1 i b = 5? Czy można tak?

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,,5); } A jeśli chcemy aby a = 1 i b = 5? A może tak?

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,1,5); } Jeśli chcemy zmodyfikować wartość jednego z parametrów domyślnych, to musimy podać wartości wszystkich parametrów, aż do miejsca, na którym występuje zmodyfikowana wartość.

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych void WyswietlOdleglosc( float xn, float yn, float xo=0, float yo=0, const char Jedn= cm )

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych void WyswietlOdleglosc( float xn, float yn, float xo=0, float yo=0, const char Jedn= cm )

Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych void WyswietlOdleglosc( float xn, float yn, float xo=0, float yo=0, const char Jedn= cm ) { cout << sqrt(pow(xn-xo,2)+pow(yn-yo,2)) << Jedn << endl; }