Programowanie obiektowe - Google

Programowanie obiektowe

Z Wikipedii

Skocz do: nawigacji, szukaj

Programowanie obiektowe (ang. object-oriented programming) — 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 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.

Spis treści

[edytuj] Programowanie obiektowe, a rzeczywistość

Największym atutem programowania, projektowania oraz analizy obiektowej jest zgodność takiego podejścia z rzeczywistością - mózg ludzki jest w naturalny sposób najlepiej przystosowany do takiego podejścia przy przetwarzaniu informacji. Już Platon postulował dwoistość: "byt" - "idea (wzorzec) bytu", np. książka jako idea ogólna - w terminologii platońskiej: doskonała (choć niedookreślona), i książka konkretna np. zbiór baśni leżący na piątej półce. Podobnie, choć później Arystoteles analizując rzeczywistość wprowadził pojęcia formy i materii.

[edytuj] Podstawowe założenia paradygmatu obiektowego

Istnieje pewna różnica zdań co do tego, jakie cechy języków programowania czynią je obiektowymi. Powszechnie uważa się, że najważniejsze są następujące cechy:

[edytuj] 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. Procesy, funkcje lub metody mogą być również abstrahowane, a kiedy tak się dzieje, konieczne są rozmaite techniki rozszerzania abstrakcji.

[edytuj] 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. Każdy typ obiektu prezentuje innym obiektom swój "interfejs", który określa dopuszczalne metody współpracy. Pewne języki osłabiają to założenie, dopuszczając pewien poziom bezpośredniego (kontrolowanego) dostępu do "wnętrzności" obiektu. Ograniczają w ten sposób poziom abstrakcji.

[edytuj] 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óźnym 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++.

[edytuj] Dziedziczenie

Porządkuje i wspomaga polimorfizm i enkapsulację dzięki umożliwieniu definiowania i tworzenia specjalizowanych obiektów na podstawie bardziej ogólnych. Dla obiektów specjalizowanych nie trzeba redefiniować całej funkcjonalności, lecz tylko tę, której nie ma obiekt ogólniejszy. W typowym przypadku powstają grupy obiektów zwane klasami, oraz grupy klas zwane drzewami. Odzwierciedlają one wspólne cechy obiektów.

[edytuj] Historia programowania obiektowego

Koncepcja programowania obiektowego pierwotnie pojawiła się w Simuli 67, języku zaprojektowanym do zastosowań symulacyjnych, stworzonym przez Ole-Johana Dahla i Kristena Nygaarda z Norsk Regnesentral w Oslo. (Mówi się, że pracowali oni nad symulacjami zachowania się statków i mieli kłopoty z opanowaniem wszystkich zależności, jakie wywierały na siebie nawzajem wszystkie parametry statków w symulacji. Wtedy wpadli na pomysł, by pogrupować typy statków w różne klasy obiektów, a każda z klas sama odpowiadałaby za określanie własnych danych i zachowań.) Później koncepcja została dopracowana w języku Smalltalk, stworzonym w Simuli w Xerox PARC, ale zaprojektowanym jako w pełni dynamiczny system, w którym obiekty mogą być tworzone i modyfikowane "w locie", a nie system oparty na statycznych programach.

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, Lisp-a, Pascala i innych. 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. Z kolei "czysto" obiektowym językom brakowało cech, z których programiści przyzwyczajeni byli korzystać. By zapełnić tę lukę podejmowano liczne próby stworzenia języków obiektowych dostarczających jednocześnie "bezpiecznych" elementów proceduralności. 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, dla którego Java dostarcza szeregu użytecznych funkcji.

Podobnie, jak programowanie funkcyjne doprowadziło do udoskonalenia technik takich, jak programowanie strukturalne, do współczesnych metod projektowania oprogramowania obiektowego zaliczają się takie usprawnienia, jak wzorce projektowe (ang. design patterns), design by contract i języki modelowania (np. UML).

Obiektowość rozprzestrzeniła się dość znacznie, jednak zwykle w systemach hybrydowych, w połączeniu z programowaniem niskopoziomowym (assembler), funkcyjnym (Ocaml, niektóre dialekty Lispa), sieciowym (Java), skryptowym (Perl, Python, Ruby) itd. Systemy czysto obiektowe typu Smalltalka nie znalazły zbyt szerokiego zastosowania.

[edytuj] Podział

Można wyróżnić dwa zasadnicze podtypy programowania obiektowego

[edytuj] Programowanie oparte na klasach

Definiowane są klasy, czyli typy zmiennych, a następnie tworzone są obiekty, czyli zmienne (w uproszczeniu) tych typów.

[edytuj] Programowanie oparte na prototypach

W tym podejściu nie istnieje pojęcie 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. Spotykany raczej w językach interpretowanych np. JavaScript.


[edytuj] Elementarna charakterystyka popularnych języków obiektowych

Powyższa charakterystyka dopuszcza bardzo dużą różnorodność - i w rzeczywistości, o ile systemy programowania strukturalnego czy funkcyjnego były do siebie stosunkowo podobne, o tyle systemy obiektowe różnią się tak bardzo, że nie wiadomo co tak naprawdę znaczy nazwa obiektowe.

[edytuj] Zobacz też

[edytuj] Linki zewnętrzne


Polska liderem w pokazywaniu europejskich produkcji
Europejskie stacje telewizyjne przeznaczają ponad 65 proc. czasu antenowego na produkcje europejskie, w tym ponad 36 proc. na produkcje niezależnych producentów z UE - wynika z piątkowego raportu Komisji Europejskiej. Polska jest liderem rankingu krajów UE.
TVP procesuje siÄ™ z "Dziennikiem"
Przeprosin i wpłaty 200 tys. na cel społeczny żąda TVP od "Dziennika" za artykuł pt. "Korupcja w TVP" - o domniemanej propozycji wiceszefowej Agencji Informacji TVP Patrycji Koteckiej wyższych wycen za materiały kompromitujące PO.
Maks Kolonko procesuje siÄ™ z "Faktem"
Przeprosin i 100 tysięcy zł zadośćuczynienia żąda od wydawcy "Faktu" znany prezenter TV Mariusz Maks Kolonko za nazwanie go "łajdakiem" i sugestię, że swój związek z Weroniką Rosati traktował instrumentalnie.
Powstaje audiobook o ÅšlÄ…sku
Sześć płyt i książka z esejami złożą się na audiobook poświęcony Śląskowi. Ma to być dźwiękowy pejzaż regionu.
Dodatek o Powstaniu Warszawskim w "Rzeczpospolitej"
Dzisiaj dziennik "Rzeczpospolita" (Presspublica) ukaże siÄ™ z dodatkiem poÅ›wiÄ™conym Powstaniu Warszawskiemu – "Warszawa '44".
Linki: Strona g³ówna