Programowanie obiektowe W1 Wprowadzenie
Transkrypt
Programowanie obiektowe W1 Wprowadzenie
Programowanie obiektowe W1 Wprowadzenie Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki Ogólna charakterystyka języka C++ • C++ jest obiektowym językiem programowania, łączy właściwości języków niskiego i wysokiego poziomu • Został „nadbudowany” nad językiem C, opracowanym przez B. Kernighana i D. Ritchiego • C++ zaprojektowany przez Bjærne Stroustrupa jako rozszerzenie języka ANSI C o obiektowe mechanizmy abstrakcji danych i silną statyczną kontrolę typów. • Zachowanie zgodności z językiem C na poziomie kodu źródłowego pozostaje jednym z podstawowych założeń projektowych kolejnych standardów języka, ale nie zawsze jest ono spełnione. Najpopularniejsze kompilatory (płatne) • Microsoft Visual Studio – to zintegrowane środowisko programistyczne firmy Microsoft. Jest używane do tworzenia oprogramowania konsolowego oraz z graficznym interfejsem użytkownika, • Borland C++ Builder – narzędzie programistyczne typu RAD firmy Borland do tworzenia aplikacji w języku C++. • W Pracowni ZMAiO dostępne jest środowisko RAD Studio 2010 Embarcadero® - jest potężnym pakietem programistycznych umożliwiającym wizualne tworzenie aplikacji z interfejsem GUI oraz aplikacji bazodanowych dla platformy Windows oraz .NET. • RAD Studio zawiera środowiska Delphi, C++Builder. Nowe cechy języka C++ względem języka ANSI C • Możliwość programowania obiektowego: – Klasy, jako rozszerzenie struktury o funkcje składowe, enkapsulację, dziedziczenie i polimorfizm – Obiekty, będące instancjami klas – Metody wirtualne dostarczające polimorfizm – Konstruktory i destruktory, – Operatory new i delete – Słowo kluczowe this (dostęp do obiektu, na rzecz którego wołana jest metoda) – Wskaźniki do składowych klas (pól i metod) Nowe cechy języka C++ względem języka ANSI C - c.d. • Obsługa wyjątków: – Deklaracja wychwytywania wyjątków: try ... catch – Deklaracja wywoływania wyjątku: throw • Zmiany natury ogólnej: – – – – – Przestrzenie nazw i operator zasięgu :: Referencje Przeciążanie funkcji Przeciążanie operatorów Szablony (wzorce) klas i funkcji Literatura: 1. Jerzy Grebosz, Symfonia C++, Oficyna Kallimach, Kraków 1996, t.1-3. 2. Jerzy Grebosz, Pasja C++, Oficyna Kallimach, Kraków 1996, t.1-2. 3. Stephen Prata, Język C++. Szkoła programowania. Wydanie V, Helion 2011 4. Bjarne Stroustrup, Programowanie. Teoria i praktyka z wykorzystaniem C++, Helion 2010 5. Andrzej Stasiewicz, C++. Ćwiczenia praktyczne. Wydanie III, Helion 2011 6. http://www.cplusplus.com/doc/tutorial/ Założenia paradygmatu obiektowego • Programowanie obiektowe (ang. object-oriented programming) to: paradygmat programowania, w którym programy definiuje się za pomocą obiektów — elementów łączących stan (czyli dane, nazywane najczęściej polami) i zachowanie (czyli metody które są procedurami/funkcjami operującymi na tych danych). • Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań. • Podejście to różni się od tradycyjnego programowania proceduralnego, gdzie dane i procedury nie są ze sobą bezpośrednio związane. • Programowanie obiektowe ma ułatwić pisanie, konserwację i wielokrotne użycie programów lub ich fragmentów. Założenia paradygmatu obiektowego • Obiekt (zmienna obiektowa) jest tzw. INSTANCJĄ klasy. Jest częścią programu i wykonuje ścisłe określone zadania. Programowanie oparte na klasach • Klasa to typ obiektowy składający się z pól i metod. Definiowane są klasy, czyli typy zmiennych, a następnie tworzone są obiekty, czyli zmienne (w uproszczeniu) tych typów. • Pole to zmienna która należy do klasy. Wartości pól należy modyfikować przez metody danej klasy. • Metoda to procedura lub funkcja która należy do klasy i wykonuje operacje na wartościach pól. Założenia paradygmatu obiektowego – c.d. Powszechnie uważa się, że język programowania jest obiektowy jeżeli posiada następujące cechy: 1. Hermetyzacja/Enkapsulacja To cecha polegająca na ukrywaniu szczegółów implementacji. Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Tylko wewnętrzne metody obiektu są uprawnione do zmiany jego stanu. Definiując klasę stosuje się różne poziomy dostępu: public private protected Założenia paradygmatu obiektowego – c.d. 2. Polimorfizm /Wielopostaciowość Mechanizm zezwalający na nadawanie w hierarchii klas tych samych nazw metodom o podobnym zastosowaniu. Wywołanie metody spowoduje zachowanie odpowiednie dla typu obiektu wywoływanego. Jeśli dzieje się to w czasie działania programu, to nazywa się to późnym wiązaniem lub wiązaniem dynamicznym. Założenia paradygmatu obiektowego – c.d. 3. Dziedziczenie Dziedziczenie to mechanizm budowania klas na podstawie klas już zdefiniowanych. Klasa pochodna dziedziczy składowe od przodka – klasy bazowej. Dziedziczenie porządkuje i wspomaga polimorfizm i enkapsulację dzięki możliwości definiowania i tworzenia specjalizowanych obiektów na podstawie klas bardziej ogólnych. Założenia paradygmatu obiektowego – c.d. 4. Abstrakcja Abstrakcją w programowaniu nazywamy pewnego rodzaju uproszczenie rozpatrywanego problemu, polegające na ograniczeniu zakresu cech obiektów wyłącznie do cech kluczowych dla algorytmu. Każdy obiekt w systemie służy jako model abstrakcyjnego „wykonawcy”, który może wykonywać pracę, opisywać i zmieniać swój stan oraz komunikować się z innymi obiektami w systemie, bez ujawniania, w jaki sposób zaimplementowano dane cechy. Podział Można wyróżnić dwa zasadnicze podtypy programowania obiektowego: 1. Programowanie oparte na klasach Definiowane są klasy, czyli typy zmiennych, a następnie tworzone są obiekty, czyli zmienne tych typów. 2. Programowanie oparte na prototypach W tym podejściu nie stosuje się pojęcia klasy. Nowe obiekty tworzy się w oparciu o istniejący już obiekt - prototyp, po którym dziedziczone są pola i metody i można go rozszerzać o nowe. Występuje raczej w językach interpretowanych. Historia programowania obiektowego • Obiektowy język programowania to taki, który umożliwia lub zachęca do stosowania obiektowych metod programowania. • Pierwszy język obiektowy – Simula 67 – powstał już w latach sześćdziesiątych ubiegłego stulecia. Jego twórcami byli: Ole-Johan Dahl i Kristen Nygaard z Norsk Regnesentral w Oslo (prace nad symulacją statków). • Simula była pierwszym językiem programowania, w którym wprowadzono pojęcie klasy i jej egzemplarza. • Koncepcja została dopracowana w języku Smalltalk. • Smalltalk jest czysto obiektowym językiem programowania z dynamicznym typowaniem. Umożliwia to w praktyce zupełnie inny sposób programowania od tego, do jakiego są przyzwyczajeni programiści używający języków obiektowych rozwiniętych z języków proceduralnych, takich jak C, czy Pascal. Historia programowania obiektowego – c.d. • Programowanie obiektowe zyskało status techniki dominującej w połowie lat 80., głównie ze względu na wpływ C++, stanowiącego rozszerzenie języka C. • Dominacja C++ została utrwalona przez wzrost popularności graficznych interfejsów użytkownika, do tworzenia których programowanie obiektowe nadaje się szczególnie dobrze. • W tym okresie cechy obiektowe dodano do wielu języków programowania, w tym Ady, BASIC-a, Lispu, Pascala i innych. Historia programowania obiektowego – c.d. • Dodanie obiektowości do języków, które pierwotnie nie były do niej przystosowane zrodziło szereg problemów z kompatybilnością i konserwacją kodu. Podejmowano liczne próby stworzenia nowych języków obiektowych. • Eiffel stworzony przez Bertranda Meyera był wczesnym przykładem w miarę udanego języka spełniającego te założenia; • Obiektowość rozprzestrzeniła się dość znacznie, jednak zwykle w systemach hybrydowych, w połączeniu z • programowaniem funkcyjnym (Ocaml, niektóre dialekty Lispa), • sieciowym (Java), • skryptowym (Perl, Python, Ruby) itd. • Języki czysto obiektowe typu Smalltalk nie znalazły zbyt szerokiego zastosowania. Typy danych C/C++ • Typy danych w języku C/C++ można podzielić na : – typy proste – typy strukturalne • Typy proste są niepodzielne i wykorzystuje się je do tworzenia typów strukturalnych. • Do typów prostych języka C++ zaliczamy – arytmetyczne: całkowite i rzeczywiste; wyróżniamy wśród nich: • typy fundamentalne • typy pochodne (kombinacje typów fundamentalnych z zastosowaniem specyfikatorów) – wskaźnikowe, – referencyjne ( C++). Typy danych C/C++ • Do typów strukturalnych (złożonych) w C/ C++ zaliczamy – tablice, – struktury , – unie, – klasy ( C++)