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.