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++)