Wyklad_Inf 18.03.2009.pdf

(287 KB) Pobierz
Informatyka
• Dr inż. Lucjan Miękina
• Katedra Robotyki i Mechatroniki
• D-1, p.412, tel. 012 617 3510
• E-mail: miekina@agh.edu.pl
• Strona www: http://galaxy.uci.agh.edu.pl/~miekina
996993379.002.png
Obiektowe programowanie w języku C++
Język C został uzupełniony o tzw. rozszerzenie obiektowe, umożliwiające i wspierające
programowanie zorientowane obiektowo (OOP). Realizowane to jest przez wprowadzenie
szeregu nowych słów kluczowych i mechanizmów języka.
Rozwój technik programowania:
liniowe - brak procedur i funkcji, wykorzystanie instrukcji skoku warunkowego i
bezwarunkowego jako substytutów strukturalizacji. Realizowane przez język maszynowy,
assembler i wczesne wersje Basic-a.
proceduralne - opiera się na przepływie danych przez odpowiednio dobrane procedury i
funkcje, realizujące cząstkowe zadania przetwarzania tych danych. Obowiązuje schemat:
Wybierz procedurę realizującą operację na danych, do kodowania procedury użyj
najlepiej dostosowanego algorytmu . Języki : Fortran, Algol, Pascal, C, Ada, itd.
modułowe - wymienione wyżej języki proceduralne zawierają wsparcie do modularnego
programowania, które opiera się na wyodrębnieniu części reprezentacji problemu w postaci
modułu, będącego zbiorem metod (funkcji) i danych, na których te metody operują (stałe,
zmienne). Najbardziej istotną nową cechą podejścia modułowego jest możliwość ukrycia
danych modułu przed nieautoryzowanym dostępem.
obiektowe - gdzie położono nacisk na :
tworzenie reprezentacji problemu w postaci zbliżonej do niego samego
łatwą konserwację i rozbudowę oprogramowania
możliwość wielokrotnego użycia modułów programowych (ang. reusability )
lepsze wsparcie dla budowy dużych systemów i pracy grupowej
komponentowe , będące dalszą ewolucją obiektów w kierunku zgodności na poziomie
binarnym, a nie źródłowym. Oznacza to, że tworzy się komponenty poddane kompilacji i
konsolidacji (a więc gotowe do użycia), które zapewniają jednolity interfejs do usług,
których dostarczają.
996993379.003.png
Cechy obiektowego podejścia do programowania.
Niezależnie od języka implementacji, istnieją ogólne zasady obiektowego podejścia do tworzenia
oprogramowania, nazywane modelem obiektowym . Składa się on z poniższych pojęć:
obiekt – każdy byt (pojęcie lub rzecz), mający znaczenie w dziedzinie zastosowania
klasa – uogólnienie zbioru obiektów, mających takie same atrybuty, operacje i znaczenie. Jeśli pewne
klasy mają wspólną część, to powinna ona być ich wspólną klasą bazową ( lub inaczej nadklasą) .
komunikat (ang. message ) – specyfikacja wymiany informacji między obiektami, zawierająca zlecenie
wykonania określonej operacji lub wymiany danych.
abstrakcja proceduralna i abstrakcja danych - polega na ukrywaniu nieistotnych cech obiektu w
trakcie operacji z nim związanych, dzięki temu że obiekt może być wyposażony w wiedzę o swych
operacjach. Dzięki temu ułatwia się operacje i unika błędów, a także skraca się notację - można lepiej
panować nad złożonymi systemami lub algorytmami.
hermetyzacja (ang. encapsulation ) - polega na selektywnym dostępie do szczegółów obiektu
(atrybutów i operacji) i dzięki temu zapewnieniu niezależności (braku niepotrzebnych sprzężeń).
Prywatne atrybuty i operacje są niedostępne dla otoczenia, stanowiąc elementy wewnętrznego
mechanizmu działania obiektu. Publiczne atrybuty i operacje są dostępne dla otoczenia, umożliwiając
odwoływanie się do obiektu za pomocą komunikatów. Chronione atrybuty i operacje są dostępne w
ciągu podklas danej klasy.
dziedziczenie (ang. inheritance ) - polega na przejmowaniu cech pewnych obiektów przez inne, z
równoczesnym dodawaniem nowych cech - tworzenie tzw. specjalizacji . Oznacza to
przyporządkowanie atrybutów i operacji do klas zgodnie z hierarchiczną zależnością, jakiej podlegają
klasy. Dzięki temu można budować systemy złożone, lecz elastyczne w zastosowaniu.
polimorfizm (ang. polymorphism ) – polega na nadaniu takiej samej nazwy różnym atrybutom i
operacjom w klasach należących do jednej hierarchii (od nadklasy przez wszystkie podklasy). Pozwala
m.in. na wywołanie tzw. wirtualnej metody (procedury lub funkcji), która może mieć różne znaczenie
w zależności od kontekstu wywołania.
996993379.004.png
Języki realizujące wsparcie dla techniki programowania obiektowego .
Zestawienie według popularności w zastosowaniach:
C++, Java, Pascal, Ada 95, SmallTalk, Modula,
W oparciu o wymienione zasady modelu obiektowego, powstaje język bardziej zbliżony do
opisywanego problemu (w odróżnieniu od zbliżonego do maszyny).
Dzięki tym założeniom program obiektowo zorganizowany może się składać prawie wyłącznie z
deklaracji zmiennych obiektowych ( instancji ); w trakcie tych deklaracji wykonywane są
wszystkie operacje inicjalizacji obiektów (definiowania ich stanu początkowego), tak by
mogły one zacząć funkcjonować w otoczeniu innych obiektów. Dalsze funkcjonowanie
każdego obiektu polega na odbiorze komunikatów wysyłanych przez inne obiekty i
odpowiednim ich przetwarzaniu, w ramach którego możliwe jest również wysyłanie
własnych komunikatów, czyli oddziaływanie na otoczenie. Taki model daje większe
możliwości, co jest związane głównie z decentralizacją funkcjonalności (każda klasa
odpowiada za swoją część operacji złożonego systemu) i nie jest potrzebny żaden
nadrzędny mechanizm, który musiałby być odpowiednio bardziej złożony.
996993379.005.png
Typ obiektowy (klasa).
Klasa może być traktowana jako specjalny rodzaj typu strukturowego , składający się z:
pól (jak w strukturze). Pola klasy służą do opisu stanu obiektu, a więc opisują jego
własności . Każdy typ obiektowy jest zwykle opisany unikalnym zbiorem własności.
metod (będących w istocie funkcjami znanymi z języka C) zadeklarowanych wewnątrz
deklaracji klasy. Metody służą do wykonywania operacji zdefiniowanych dla typu
obiektowego, a więc definiują zachowanie się obiektu. Metody operują w założeniu na
polach dostępnych w klasie i mogą wywoływać inne metody klasy, a także funkcje
zewnętrzne.
Klasa jest blisko związana ze strukturą - po zamianie słowa kluczowego struct na słowo class z
deklaracji struktury uzyskuje się deklarację klasy. Ponieważ klasa jest uogólnieniem struktury,
więc większość właściwości struktur przechodzi na klasy (m.in. sposób deklarowania,
identyfikowania i dostępu do pól). W związku z tym dalej omawia się tylko te właściwości klas,
które nie wynikają z opisu struktur.
UWAGA: W języku C++ struktura może mieć funkcje.
Składnia deklaracji klasy.
Deklaracja klasy pierwotnej (czyli nie wywodzącej się z innej, już wcześniej zdefiniowanej) ma
postać:
class <Name> {
[ public :]
[lista deklaracji pól/metod publicznych]
[ protected :]
[lista deklaracji pól/metod chronionych]
[ private :]
[lista deklaracji pól/metod prywatnych]
};
996993379.001.png
Zgłoś jeśli naruszono regulamin