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

Wprowadzenie do szablonów szablony funkcji

Konstruktor kopiujacy

Wprowadzenie do szablonów szablony funkcji

Pola i metody statyczne

Podejście obiektowe - podstawowe pojęcia

Style programowania - krótki przeglad

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii

Szablon klasy std::list

Szablon klasy std::vector

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

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

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

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

Schemat konstrukcja pliku Makefile

Szablony funkcji i szablony klas

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

Style programowania - krótki przeglad

Qt sygnały i designer

Powłoki systemu operacyjnego i intepretery

Przesłanianie nazw, przestrzenie nazw

Wykład 5: Klasy cz. 3

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

Rzutowanie i konwersje

Tworzenie oprogramowania

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

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

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

Wykład 9: Polimorfizm i klasy wirtualne

Wprowadzenie do UML, przykład użycia kolizja

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

Praca z aplikacją designer

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

Przykłady oprogramowania wykorzystujacego Qt

Dziedziczenie jednobazowe, poliformizm

Dalmierze optyczne. Bogdan Kreczmer.

Czujniki PSD i dalmierze triangulacyjne

Podstawy Programowania. Języki programowania

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

Obiekty i metody stałe

Podstawy programowania wykład

Wykład 8: klasy cz. 4

Wprowadzenie do szablonów klas

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Zaawansowane programowanie w C++ (PCP)

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

Algorytm. Definicja i algorytmu METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE

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

Diagramy UML, przykład problemu kolizji

KARTA KURSU. Programowanie obiektowe

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

10. Programowanie obiektowe w PHP5

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

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

Zaawansowane programowanie w języku C++

Algorytmy i Struktury Danych

Zaawansowane programowanie w C++ (PCP)

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

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

Język programowania. Andrzej Bobyk

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

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

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

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

WYKAZ PRZEDMIOTÓW I PLAN REALIZACJI

Narzędzia CASE dla.net. Łukasz Popiel

TEMAT : KLASY DZIEDZICZENIE

Podstawy Programowania Obiektowego

Zasoby, pliki graficzne

Wprowadzenie do programowanie obiektowego w języku C++

Programowanie obiektowe 2 - opis przedmiotu

Języki i metodyka programowania

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

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

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

Modelowanie i Programowanie Obiektowe

Podstawy Programowania

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

Informatyka 1. Złożoność obliczeniowa

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

Podstawy programowania obiektowego

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

Informatyka. Prowadzący: Dr inż. Sławomir Samolej D102 C, tel: , WWW: ssamolej.prz-rzeszow.

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

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

C++ DLA POCZĄTKUJĄCYCH

KONSTRUKCJA KOMPILATORÓW

Języki i paradygmaty programowania

Wykład 9: Metody wirtualne i polimorfizm

2017 r. STOPA BEZROBOCIA r. STOPA BEZROBOCIA

Metodyki i techniki programowania

Transkrypt:

Geneza powstania języka C++ 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. 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. 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. Copyright c 2005 2008 Bogdan Kreczmer Geneza powstania języka C++ 1

Niektóre spostrzeżenia 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. Copyright c 2005 2008 Bogdan Kreczmer Geneza powstania języka C++ 2

Ważniejsze daty 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++. Copyright c 2005 2008 Bogdan Kreczmer Geneza powstania języka C++ 3

LM Genealogia 1960 Fortran Algol60 Lisp CPL 1970 LP/1 Pascal BCPL C Simula67 1980 Modula 2 Algol68 CzKlasami Clu Smalltalk 80 Ada ANSIC C++ Objective C CLOS 1990 C++arm Ada9X Modula 3 2000 C++std Copyright c 2005 2008 Bogdan Kreczmer Geneza powstania języka C++ 4

Język C z Klasami Nowe elementy w stosunku do języka C: 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). Zapisfunkcja(void) w ANSI C pochodzi z języka C z Klasami. Copyright c 2005 2008 Bogdan Kreczmer Geneza powstania języka C++ 5

Dlaczego C 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. Copyright c 2005 2008 Bogdan Kreczmer Geneza powstania języka C++ 6