Referat, Programowanie


Programowanie obiektowe — rodzaj 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 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 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.

Najważniejsze cechy programowania obiektowego to:

Abstrakcja - uproszczenie rozpatrywanego problemu poprzez wyizolowanie jego kluczowych cech.

Hermetyzacja ( kapsułkowanie, ukrywanie informacji, czasami także enkapsulacja) - jedno z założeń programowania obiektowego. Polega ono na ukrywaniu pewnych danych składowych lub metod obiektów danej klasy tak, aby były one (i ich modyfikacja) dostępne tylko metodom wewnętrznym danej klasy lub funkcjom z nią zaprzyjaźnionym.

Hermetyzacja uodparnia tworzony model na błędy polegające np. na błędnym przypisywaniu wartości oraz umożliwia wykonanie czynności pomocniczych lub obsługę sytuacji wyjątkowej. Hermetyzacja ma też na celu sprawdzanie poprawności wpisywanych danych. Lepiej oddaje rzeczywistość. Umożliwia rozbicie modelu na mniejsze elementy.

Dzięki stosowaniu hermetyzacji można budować modele rzeczywistości jako struktury składające z mniejszych modułów, z których każdy ma pewne określone dane i określone metody wpływania na ich stan i sprawdzania go. Na przykład w tworzeniu modelu samochodu można użyć modułu silnika, który ma określony szereg danych wewnętrznych (np. opisujących jego stan w trakcie pracy) i metod wewnętrznych (np. pobranie paliwa, wywołanie reakcji, ruch wirnika). Wszystko to jednak jest nieistotne dla użytkownika (a nawet nie powinno być dostępne), który ma możliwość użycia tylko zapłonu i wyłączenia silnika.

Polimorfizm (wielopostaciowość) to mechanizmy pozwalające programiście używać wartości, zmiennych i podprogramów na kilka różnych sposobów. Podczas pisania programu wygodnie jest traktować nawet różne dane w jednolity sposób. Niezależnie czy należy wydrukować liczbę czy napis, czytelniej jest gdy operacja taka nazywa się po prostu drukuj, a nie drukuj_liczbe i drukuj_napis. Jednak napis musi być drukowany inaczej niż liczba, dlatego będą istniały dwie implementacje polecenia drukuj ale nazwanie ich wspólną nazwą tworzy wygodny abstrakcyjny interfejs niezależny od typu drukowanej wartości. Czasami nawet nie trzeba dostarczać różnych implementacji, przykładowo podczas implementacji stosu nie jest bardzo istotne jakiego typu wartości będą na nim przechowywane. Można napisać ogólne algorytmy obsługujące stos i ewentualne ukonkretnienie pozostawić systemowi. Mechanizmy umożliwiające takie udogodnienia nazywane są właśnie polimorfizmem.

Istotą polimorfizmu jest to aby to system decydował o szczegółach, nie programista. Niektóre decyzje mogą być podjęte już na etapie kompilacji, mamy wtedy do czynienia z polimorfizmem statycznym (czasu kompilacji). Czasami jednak decyzja musi zostać odwleczona do momentu wykonywania programu - polimorfizm dynamiczny (czasu wykonania).

Dziedziczenie to w programowaniu obiektowym operacja polegająca na stworzeniu nowej klasy na bazie klasy już istniejącej. W C++ klasie pochodnej możemy zdefiniować:

Dziedziczenie wielokrotne nazywane także dziedziczeniem wielobazowym to operacja polegająca na dziedziczeniu po więcej niż jednej klasie bazowej. Dziedziczenie wielokrotne stosowane jest na przykład w języku C++. W innych językach programowania (np. w Javie) dopuszczalne jest wyłącznie dziedziczenie jednokrotne, zaś do uzyskania efektu, który w C++ osiąga się poprzez dziedziczenie wielokrotne używa się interfejsów.

Klasa to w programowaniu obiektowym częściowa lub całkowita definicja dla obiektów, bądź też opis zbioru wszystkich obiektów mających wspólną strukturę i zachowanie.

Klasa abstrakcyjna jest pewnym uogólnieniem innych klas (na przykład dla występujących w rzeczywistości obiektów), lecz sama jako taka nie istnieje. Ustalmy, że przez "figurę" będziemy rozumieć "koło", "kwadrat" lub "trójkąt". Te obiekty matematyczne mogą być reprezentowane przez pewne klasy. Obiekty te posiadają już konkretne właściwości takie jak promień (dla konkretnego koła) czy długość boku (dla konkretnego kwadratu). Klasy tych obiektów wywodzą się z pewnej uogólnionej klasy określanej jako po prostu figura. Jednak nie jesteśmy w stanie określić jaką konstrukcję miałby obiekt klasy figura, ponieważ figura geometryczna jako taka nie istnieje. Istnieją natomiast wywodzące się od niej klasy koło czy kwadrat. Dodatkowo oczywistym jest, że figura nie posiada konkretnej wartości pola czy obwodu, jednak już na tym etapie wiemy, że każda figura tak zdefiniowana (koło, kwadrat czy trójkąt) posiada pole i obwód, które będzie różnie obliczane dla różnych figur. Dzięki temu figura definiuje pewien interfejs dla klas wywodzących się od niej. Nazwę klasy można rozumieć jako nazwę nowego typu danych. Utworzenie obiektu odbywa się jako utworzenie zmiennej o tym typie.

Właściwości klasy:

Konstruktor w programowaniu obiektowym to specjalna metoda danej klasy, wywoływana podczas tworzenia jej instancji. Zadaniem konstruktora jest zainicjowanie obiektu, a w niektórych językach programowania także utworzenie obiektu.

Wywołanie konstruktora powoduje wykonanie następujących zadań:

Destruktor - w obiektowych językach programowania specjalna metoda, wywoływana przez program przed usunięciem obiektu i niemal nigdy nie jest wywoływana wprost w kodzie używającym obiektu. Pod względem funkcjonalnym jest to przeciwieństwo konstruktora.

Destruktor ma za zadanie wykonać czynności składające się na jego "zniszczenie", inne niż zwolnienie pamięci zajmowanej przez sam obiekt, przygotowujące obiekt do fizycznego usunięcia. Po jego wykonaniu obiekt znajduje się w stanie osobliwym i zazwyczaj nie można już z tym obiektem zrobić nic poza fizycznym usunięciem. Destruktor zwykle wykonuje takie czynności, jak zamknięcie połączenia z plikiem/ gniazdem/ potokiem, wyrejestrowanie się z innych obiektów, czasem również zanotowanie faktu usunięcia, a także usunięcie obiektów podległych, które obiekt utworzył lub zostały mu przydzielone jako podległe (jeśli jest ich jedynym właścicielem) lub wyrejestrowanie się z jego użytkowania (jeśli jest to obiekt przezeń współdzielony).

W większości języków destruktor, tak jak każda metoda może być wirtualny. W wielu sytuacjach destruktor musi być wirtualny aby zapewnić prawidłowe wykorzystanie klasy, np. w C++ klasa musi mieć destruktor wirtualny kiedy zachodzi możliwość, że inna klasa będzie po niej dziedziczyła i będzie używany polimorfizm. Jest to możliwość dziedziczenia, nawet kiedy w danej chwili klasa nie ma żadnych potomków; w przeciwnym razie zachodzi konieczność zmiany deklaracji destruktora w momencie dodania klasy pochodnej, a to spowodowałoby zerwanie kompatybilności z już istniejącym kodem wykorzystującym tę klasę.

Obiekt to podstawowe pojęcie wchodzące w skład paradygmatu obiektowości w analizie i projektowaniu oprogramowania oraz w programowaniu.

Jest to struktura zawierająca:

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.

Każdy obiekt ma trzy cechy:

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. Podobnie jak dla typu liczb naturalnych czy typu zmiennych znakowych, dla których zdefiniowane są pewne operacje jak np. dodawanie, a nie są zdefiniowane inne, jak np. operacje logiczne, tak dla obiektów programista decyduje o wykonalności pewnych operacji oraz definiuje ich funkcyjną postać. Użycie obiektów polega na ich zainicjalizowaniu (np. na nadaniu zmiennej całkowitej pewnej wartości np. 7) oraz na wykonywaniu na nich operacji zgodnie z definicją typu - obiektu.



Wyszukiwarka

Podobne podstrony:
referat zasady budowania programu nauczania w ujeciu Nalaskowskiego 2
referat zasady budowania programu nauczania w ujeciu Nalaskowskiego
referat zasada kulturalna w budowie programu nauczania w ujęciu Sośnickiego, Podręczniki, Pedagogika
referat zasada zyciowosci w budowie programu nauczania w ujeciu Sosnickiego
Program[1], referaty i materiały, Niedostosowanie społeczne, resocjalizacja, pedagogika, pedagogika
referat ZASADA KULTURALNA W PROCESIE BUDOWY PROGRAMU NAUCZANIAref
Referat Poprawno¶ć programów[1] Bł±d,Ľródła błędów Anetka
Referat Inżynieria Produkcji Rolniczej
Nowy Prezentacja programu Microsoft PowerPoint 5
Charakterystyka programu
1 treści programoweid 8801 ppt
Programowanie rehabilitacji 2

więcej podobnych podstron