Geneza powstania języka C++

Podobne dokumenty
Geneza powstania języka C++

Geneza C++, manipulatory

Style programowania, geneza języka C++

Geneza C++, hermetyzacja struktur danych

Wyliczanie wyrażenia obiekty tymczasowe

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji

Referencje do zmiennych i obiektów

Lista dwukierunkowa - przykład implementacji destruktorów

Konstruktor kopiujacy

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji

Pola i metody statyczne

Podejście obiektowe - podstawowe pojęcia

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii

Szablon klasy std::list

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

Szablon klasy std::vector

Style programowania - krótki przeglad

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

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

Szablony funkcji i szablony klas

Schemat konstrukcja pliku Makefile

Wykład 5: Klasy cz. 3

Qt sygnały i designer

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

Przesłanianie nazw, przestrzenie nazw

Rzutowanie i konwersje

Wykład 9: Polimorfizm i klasy wirtualne

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

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

Klasa std::string. Bogdan Kreczmer. ZPCiR IIAiR PWr pokój 307 budynek C3.

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

Dziedziczenie jednobazowe, poliformizm

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

Style programowania - krótki przeglad

Praca z aplikacją designer

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

Przykłady oprogramowania wykorzystujacego Qt

Powłoki systemu operacyjnego i intepretery

Dalmierze optyczne. Bogdan Kreczmer.

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Czujniki PSD i dalmierze triangulacyjne

Wykład 8: klasy cz. 4

Zaawansowane programowanie w C++ (PCP)

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

KARTA KURSU. Programowanie obiektowe

Programowanie obiektowe W1 Wprowadzenie. Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki

10. Programowanie obiektowe w PHP5

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

Elektrotechnika I stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny) Kierunkowy (podstawowy / kierunkowy / inny HES)

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

Wprowadzenie do UML, przykład użycia kolizja

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w języku C++

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

Wprowadzenie do szablonów klas

Język programowania. Andrzej Bobyk

Modelowanie diagramów klas w języku UML. Łukasz Gorzel @stud.umk.pl 7 marca 2014

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

TEMAT : KLASY DZIEDZICZENIE

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

Podstawy Programowania Obiektowego

Wprowadzenie do programowanie obiektowego w języku C++

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

Obiekty i metody stałe

Rok akademicki: 2012/2013 Kod: EAR s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

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

Narzędzia CASE dla.net. Łukasz Popiel

Tworzenie oprogramowania

Podstawy programowania obiektowego

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

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

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

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

Przykład zastosowania przeciażeń operatorów i metod stałych - szukanie punktu przecięcia z wielobokiem

Zaliczenie przedmiotu:

PRZEWODNIK PO PRZEDMIOCIE

Informatyka 1. Złożoność obliczeniowa

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Programowanie I C6

Wykład 9: Metody wirtualne i polimorfizm

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

Podstawy Programowania

Kierunek: Informatyka Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne. Wykład Ćwiczenia

Zasoby, pliki graficzne

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

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

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

Spis treści. 1 Java T M

WYKAZ PRZEDMIOTÓW I PLAN REALIZACJI

Język C++ Programowanie obiektowe

INŻYNIERIA OPROGRAMOWANIA

Programowanie obiektowe 2 - opis przedmiotu

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!

2017 r. STOPA BEZROBOCIA r. STOPA BEZROBOCIA

HARMONOGRAM ZAJĘĆ J. ANGIELSKI I SEMESTR rok akademicki 2015/2016 zimowy

Programowanie obiektowe

Transkrypt:

Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłacznie do własnych prywatnych potrzeb i może on być kopiowany wyłacznie w całości, razem z niniejsza strona tytułowa.

Historia narodzin Tło akcji: 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. 1

Historia narodzin Tło akcji: 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: Udana (w sensie konstrukcji aplikacji) realizacja symulatora systemu rozproszonego z wykorzystaniem Simuli. Pojęcie klasy w Simuli było bardzo pomocne na etapie projektu i implementacji. 1 Poważne problemy zwiazane z wydajnościa programów napisanego w Simuli zmusza do poszukiwania bardziej wydajnego narzędzia. Traumatycznie bolesne doświadczenia zwiazane z koniecznościa implementacji symulatora w oparciu o język BCPL. Osiagnięta została bardzo dobra wydajność kosztem wielu problemów przy realizacji implementacji.

Historia narodzin Tło akcji: 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: Udana (w sensie konstrukcji aplikacji) realizacja symulatora systemu rozproszonego z wykorzystaniem Simuli. Pojęcie klasy w Simuli było bardzo pomocne na etapie projektu i implementacji. 1 Poważne problemy zwiazane z wydajnościa programów napisanego w Simuli zmusza do poszukiwania bardziej wydajnego narzędzia. Traumatycznie bolesne doświadczenia zwiazane z koniecznościa implementacji symulatora w oparciu o język BCPL. Osiagnięta została bardzo dobra wydajność kosztem wielu problemów przy realizacji implementacji. Epilog: Po zakończeniu prac nad doktoratem Stroustrup postanawia stworzyć język programowania, który łaczyłby koncepcje klas z Simuli oraz elastyczność tego języka z efektywnościa kodu języka BCPL.

Niektóre spostrzeżenia 2 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 oprogramowania (autor kursu pozwolił sobie tę uwagę wzmocnić).

Niektóre spostrzeżenia 2 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 oprogramowania (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 uniknać. 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 poczatko- wego kursu nauki informatyki - uwaga autora kursu).

Niektóre spostrzeżenia 2 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 oprogramowania (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 uniknać. 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 poczatko- wego kursu nauki informatyki - uwaga autora kursu). Pojęcie klasy było zasadniczym elementem różniacym sztywny Pascal od elastycznej Simuli.

Niektóre spostrzeżenia 2 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 oprogramowania (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 uniknać. 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 poczatko- wego kursu nauki informatyki - uwaga autora kursu). Pojęcie klasy było zasadniczym elementem różniacym sztywny Pascal od elastycznej Simuli. Wyczerpujace 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 3 1979 (Maj) Poczatek 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 ksiażki Język C++. 1987 (Grudzień) Ukazanie się kompilatora GNU C++. 1989 (Grudzień) Powstanie zespołu ANSI X3J16 do spraw normalizacji języka C++. 1990 (Maj) Powstanie w firmie Borland pierwszej implementacji języka C++. (Lipiec) Przyjęcie koncepcji wzorców. (Listopad) Przyjęcie koncepcji wyjatków. 1992 (Luty) Powstanie pierwszej implementacji języka C++ (zawierajacej wzorce i wyjatki) w firmie DEC. (Marzec) Powstanie pierwszej implementacji języka C++ w firmie Microsoft. (Maj) Powstanie pierwszej implementacji języka C++ w firmie IBM. 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 4

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

Język C z Klasami Nowe elementy w stosunku do języka C: 5 klasy, klasy pochodne (bez funkcji wirtualnych), sterowanie dostępem do obiektów publicznych i prywatnych, konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji. Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciażenia operatora przypisania.

Język C z Klasami Nowe elementy w stosunku do języka C: 5 klasy, klasy pochodne (bez funkcji wirtualnych), sterowanie dostępem do obiektów publicznych i prywatnych, konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji. Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciaż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 6 C jest językiem elastycznym nie ma wewnętrznych ograniczeń wykluczajacych możliwość napisania jakiegoś rodzaju programu, tzn. można korzystać w nim z większości technik programowania.

Dlaczego C 6 C jest językiem elastycznym nie ma wewnętrznych ograniczeń wykluczajacych możliwość napisania jakiegoś rodzaju programu, tzn. można korzystać w nim z większości technik programowania. C jest językiem wydajnym semantyka języka znajduje się na niskim poziomie, tzn. podstawowe pojęcia języka odzwierciedlaja podstawowe pojęcia tradycyjnego komputera.

Dlaczego C 6 C jest językiem elastycznym nie ma wewnętrznych ograniczeń wykluczajacych możliwość napisania jakiegoś rodzaju programu, tzn. można korzystać w nim z większości technik programowania. C jest językiem wydajnym semantyka języka znajduje się na niskim poziomie, tzn. podstawowe pojęcia języka odzwierciedlaja podstawowe pojęcia tradycyjnego komputera. C jest językiem szeroko dostępnym implementacje tego języka istnieja zarówno dla mikrokomputerów jak też dla dużych superkomputerów.

Dlaczego C 6 C jest językiem elastycznym nie ma wewnętrznych ograniczeń wykluczajacych możliwość napisania jakiegoś rodzaju programu, tzn. można korzystać w nim z większości technik programowania. C jest językiem wydajnym semantyka języka znajduje się na niskim poziomie, tzn. podstawowe pojęcia języka odzwierciedlaja podstawowe pojęcia tradycyjnego komputera. C jest językiem szeroko dostępnym implementacje tego języka istnieja zarówno dla mikrokomputerów jak też dla dużych superkomputerów. 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.