świerszczyński,programowanie obiektowe,Pojęcia klasy i obiektu; dziedziczenie


Programowanie obiektowe
Wstęp
Programowanie obiektowe (ang. object-oriented programming)  metodyka
tworzenia programów komputerowych, która definiuje programy za pomocą obiektów 
elementów łączących stan (czyli dane) i zachowanie (czyli procedury, tu: metody).
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.
Programowanie obiektowe a rzeczywistość
Formie w programowaniu obiektowym odpowiada Klasa, materii - instancja -
obiekt. Jest to najbardziej naturalny sposób rozumienia rzeczywistości - podstawową
cechą mózgu ludzkiego jest klasyfikacja - łączenie występujących w rzeczywistości
obiektów w grupy - klasy.
Podstawowe założenia paradygmatu obiektowego
Cechy języków programowania, które czynią je obiektowymi:
Abstrakcja - 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.
Enkapsulacja - Czyli ukrywanie implementacji, hermetyzacja. 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.
Polimorfizm - Referencje i kolekcje obiektów mogą dotyczyć obiektów różnego typu, a
wywołanie metody dla referencji spowoduje zachowanie odpowiednie dla pełnego typu
obiektu wywoływanego. Jeśli dzieje się to w czasie działania programu, to nazywa się to
póznym wiązaniem lub wiązaniem dynamicznym. Niektóre języki udostępniają bardziej
statyczne (w trakcie kompilacji) rozwiązania polimorfizmu - na przykład szablony i
przeciążanie operatorów w C++.
Dziedziczenie - Porządkuje i wspomaga polimorfizm i enkapsulację dzięki umożliwieniu
definiowania i tworzenia specjalizowanych obiektów na podstawie bardziej ogólnych.
Historia programowania obiektowego
W punktach  kto wymyślił, pierwsze języki i terazniejsze.
 pierwotna koncepcja programowania obiektowego: Simuli 67, (Ole-Johana Dahla i
Kristena Nygaarda z Norsk Regnesentral w Oslo
 kolejna koncepcja została dopracowana w języku Smalltalk, stworzonym w Simuli w
Xerox PARC,
 Programowanie obiektowe zyskało status techniki dominującej w połowie lat 80.,
głównie ze względu na wpływ C++, w tym okresie cechy obiektowe dodano do wielu
języków programowania, w tym Ady, BASIC-a, Lisp-a, Pascala i innych.
 Eiffel Bertranda Meyera był wczesnym przykładem w miarę udanego języka
spełniającego te założenia; obecnie został on w zasadzie całkowicie zastąpiony przez
Javę, głównie za sprawą pojawienia się Internetu,
1. Pojęcia klasy i obiektu. Przykład klasy i kilku obiektów tej klasy.
Obiekt to podstawowe pojęcie wchodzące w skład paradygmatu obiektowości w analizie i
projektowaniu oprogramowania oraz w programowaniu.
Klasa to zbiór obiektów wyróżniających się wspólnymi cechami takimi jak struktura i
zachowanie; częściowa lub całkowita definicja dla obiektów.
Obiekt jest to struktura zawierająca:
" dane
" metody, czyli funkcje służące do wykonywania na tych danych określonych zadań.
Z reguły obiekty (a właściwie klasy, do których te obiekty należą) są konstruowane tak,
aby dane przez nie przenoszone były dostępne wyłącznie przez odpowiednie metody, co
zabezpiecza je przed niechcianymi modyfikacjami. Takie zamknięcie danych nazywa się
enkapsulacją czyli jakby zamknięcie ich w kapsule.
W istocie obiekty są rozwinięciem koncepcji programowania z kontrolą typów zmiennych.
W programowaniu obiektowym obiekty tworzone są dynamicznie jako podstawowy
element konstrukcji programu.
Każdy obiekt ma trzy cechy:
" tożsamość, czyli cechę umożliwiającą jego identyfikację i odróżnienie od innych
obiektów;
" stan, czyli aktualny stan danych składowych;
" zachowanie (ang. behaviour), czyli zestaw metod wykonujących operacje na tych
danych.
2 . Dzi edzi cz e ni e . Przykł ad hi er ar chii kl a s .
Dziedziczenie (ang. inheritance) to w programowaniu obiektowym operacja polegająca
na stworzeniu nowej klasy na bazie klasy już istniejącej.
Na przykład, jeśli mamy klasę (w C++):
class Punkt {
public:
float x,y;
Punkt(float _x, float _y);
virtual void wypisz();
virtual void przesuń(float przesuniecie_x, float
przesuniecie_y);
};
Użycie dodatkowej klasy, która różni się od tej jedynie w kilku szczegółach-> wykorzystane
dziedziczenie:
Dziedziczona klasa może zostać zdefiniowana w następujący sposób:
class NazwanyPunkt: public Punkt { //lista pochodzenia
public:
string nazwa;
NazwanyPunkt(float _x=0,float _y=0,string _nazwa=NULL);
virtual void wypisz();
};
Nowa klasa o nazwie NazwanyPunkt wywodzi się od klasy Punkt (klasa podstawowa,
nadklasa, rodzic).
W C++ klasie pochodnej możemy zdefiniować:
" dodatkowe dane składowe (w naszym przykładzie: string nazwa;)
" dodatkowe funkcje składowe (w naszym przykładzie zmieniliśmy funkcję wypisz())
" nową treść funkcji wirtualnej
W innych językach szczegóły dziedziczenia mogą wyglądać odmiennie, np. w CLOS klasa
pochodna może wpływać na metody odziedziczone po klasie podstawowej, ogólna zasada
dziedziczenia pozostaje jednak taka sama.
Dziedziczenie wielokrotne (ang. multiple inheritance) nazywane także dziedziczeniem
wielobazowym to operacja polegająca na dziedziczeniu po więcej niż jednej klasie
bazowej. Dziedziczenie wielokrotne stosowane jest np. w języku C++:
class Samochod {
public:
int iloscKol;
void jedz() { /* ciało metody */ }
};
class Lodz {
public:
float wypornosc;
void plyn() { /* ciało metody */ }
};
class Amfibia : public Samochod , public Lodz {
public:
string nrRejestracyjny;
};
W efekcie wielokrotnego dziedziczenia Klasa Amfibia posiada wszystkie pola i metody
swoich klas bazowych.
...
void napompujKolo( Samochod& samochod ) { /* ciało metody */ }
void naprawKadlub( Lodz& lodz ) { /* ciało metody */ }
int main() {
Amfibia amfibia;
napompujKolo( amfibia );
naprawKadlub( amfibia );
return 0;
}
Widzimy, że obiekt amfibia jest jednocześnie typu Samochod i Lodz.
Wielokrotne dziedziczenie a interfejsy
Zarówno dziedziczenie wielokrotne, jak i interfejsy pozwalają na uzyskanie
równoważnego efektu - możliwości traktowania obiektu polimorficznie ze względu na
wiele, niespokrewnionych ze sobą typów.
W przypadku użycia interfejsów, czynności dziedziczenia (współdzielenia
implementacji) i dzielenia interfejsu (czyli zewnętrznego kontraktu) są celowo rozdzielone.


Wyszukiwarka

Podobne podstrony:
świerszczyński,programowanie obiektowe,Konstruktory i destruktory
Programowanie obiektowe pojęcia
15 Enkapsulacja, dziedzicznie i polimorfizm w programowaniu obiektowym
Programowanie Obiektowe Ćwiczenia 5
[C ]Rataj Podstawy programowania obiektowego
Programowanie Obiektowe W Visual Basic Net Dla Ka dego
JavaScript Programowanie obiektowe
Podstawy Programowania 04 Programowanie Obiektowe
Jezyk C?ektywne programowanie obiektowe cpefpo
Programowanie Obiektowe W Pythonie
Programowanie obiektowe i C

więcej podobnych podstron