Programowanie obiektowe
Podstrony: 1 [2] [3] [4]
Perl – interpretowany język programowania autorstwa Larry’ego Walla początkowo przeznaczony głównie do pracy z danymi tekstowymi, obecnie używany do wielu innych zastosowań. Wzorowany na takich językach jak C, skryptowe: sed, awk i sh oraz na wielu innych.Przeciążanie operatorów (ang. operator overloading, przeładowanie operatorów) to rodzaj polimorfizmu występującego w niektórych językach programowania, polegający na tym, że operator może mieć różne implementacje w zależności od typów użytych argumentów (operandów).
Programowanie obiektowe (ang. object-oriented programming, OOP) – 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.
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.
Cechy[ | edytuj kod]
Programowanie obiektowe wykorzystuje obiekty, ale nie wszystkie powiązane techniki i struktury są obsługiwane bezpośrednio w językach, które twierdzą, że obsługują OOP. Cechy wymienione poniżej są jednak powszechne wśród języków uważanych za silnie zorientowane na klasę i obiekt (lub wielo-paradygmatowe z obsługą OOP).
Obiekty i klasy[ | edytuj kod]
Języki, które wspierają programowanie obiektowe zwykle używają dziedziczenia dla ponownego użycia kodu oraz rozciągliwości w formie klas lub prototypów. Te, które używają klas opierają się na dwóch głównych konceptach:
Obiekty czasem odpowiadają rzeczom występującym w realnym świecie. Dla przykładu, program graficzny może zawierać obiekty takie jak koło, kwadrat, menu. System sklepu internetowego może zawierać obiekty typu koszyk, klient czy produkt. Czasem obiekty reprezentują bardziej abstrakcyjne jednostki, takie jak obiekt reprezentujący otwarty plik lub obiektem który zapewnia serwerowi konwertującemu jednostki miar z amerykańskich na metryczne.
Jak pisze Junade Ali w Mastering PHP Design Patterns:
„Programowanie obiektowe to więcej niż klasy i obiekty; to cały paradygmat programowania bazujący na obiektach (strukturach danych), które zawierają obszary danych (pola) oraz metody. Zrozumienie tego jest bardzo ważne; używanie klas do zorganizowania zbioru niezwiązanych ze sobą metod nie jest podejściem obiektowym.”
SOLID - mnemonik zaproponowany przez Roberta C. Martina, opisujący pięć podstawowych założeń programowania obiektowego: zasady jednej odpowiedzialności (Single responsibility), zasady otwarte-zamknięte (Open-close), zasady podstawienia Liskov (Liskov substitution principle), zasady separacji interfejsów (Interface segregation principle) oraz zasady odwrócenia zależności (Dependency inversion principle)Programowanie proceduralne to paradygmat programowania zalecający dzielenie kodu na procedury, czyli fragmenty wykonujące ściśle określone operacje.
Każdy obiekt jest instancją konkretnej klasy; na przykład obiekt, którego obszar nazwy to „Mary”, może być instancją klasy „Pracownicy”. Procedury w programowaniu obiektowym nazywane są metodami, a zmienne obszarami, członkami, atrybutami albo właściwościami. Sprowadza się to do następujących określeń:
Dostęp do obiektów wygląda podobnie jak do zmiennych z kompleksową wewnętrzną strukturą, w wielu językach wskaźniki działają dobrze, będąc naturalną referencją do pojedynczej instancji podanego obiektu w pamięci za pomocą kopca albo stosu. Zapewniają warstwę abstrakcji, która może być użyta do odseparowania wewnętrznego kodu od zewnętrznego. Zewnętrzny kod może użyć obiektu poprzez wywołanie specyficznej metody instancji z konkretnym zestawem wprowadzanych parametrów, czytanych jako zmienna instancji, lub pisanie do zmiennej instancji. Obiekty są wywoływane przez specjalne typy metod w klasie znanych jako konstruktory. Program może stworzyć wiele instancji tej samej klasy w czasie działania, które działają niezależnie od siebie. W ten łatwy sposób procedury mogą być użyte na różnych zestawach danych.
Programowanie obiektowe używające klas jest czasem nazywane programowaniem klasowym podczas, gdy prototypowe programowanie zwykle nie używa klas. W wyniku tego, znacząco różna, aczkolwiek analogiczna terminologia jest używana do definicji obiektu oraz instancji.
W niektórych językach klasy i obiekty mogą być zaspokojone używając innych konceptów jak Cechy i Domieszki (programowanie obiektowe).
Programowanie klasowe kontra prototypowe[ | edytuj kod]
W językach bazujących na klasach są one definiowane na początku, a obiekty tworzone są w oparciu o klasy. Jeżeli dwa obiekty „jabłko” oraz „pomarańcza” są utworzone w klasie „Owoce”, są w wyniku dziedziczenia owocami i możemy być pewni, że można się nimi posługiwać w ten sam sposób, dla przykładu programista może oczekiwać istnienie tych samych atrybutów takich jak „kolor”, „zawartość cukru” lub „czy jest dojrzały”. W językach prototypowych obiekty są pierwotnymi bytami. Żadne klasy nawet nie istnieją. Prototyp obiektu jest po prostu kolejnym obiektem, do którego podłączony jest inny. Każdy obiekt ma jeden „link prototypowy” (i tylko jeden). Nowe obiekty mogą być stworzone bazując na tych, które już istnieją i są wybrane jako ich prototyp. Możesz nazwać „jabłko” i „pomarańczę” dwoma różnymi obiektami, jeżeli istnieje obiekt „owoc”, a zarówno „jabłko”, jak i „pomarańcza” mają „owoc” za prototyp. Idea klasy „owoc” nie istnieje wyraźnie, ale klasa równoważna obiektu dzieli ten sam prototyp. Atrybuty i metody prototypów są delegowane do wszystkich obiektów równoważnych klas zdefiniowanych przez ich prototyp. Atrybuty i metody posiadane indywidualnie przez obiekt nie mogą być współdzielone z innymi obiektami o tej samej klasie równoważnej, dla przykładu atrybut „zawartość cukru” może być niespodziewanie nieobecny w „jabłku”. Tylko pojedyncze dziedziczenie może być zaimplementowane poprzez prototyp.
Podstawowe założenia paradygmatu obiektowego[ | edytuj kod]
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 kod]
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 kod]
Czyli ukrywanie implementacji, enkapsulacja. Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Tylko własne 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. Przykładowo w niektórych kompilatorach języka C++ istnieje możliwość tymczasowego wyłączenia mechanizmu enkapsulacji; otwiera to dostęp do wszystkich pól i metod prywatnych, ułatwiając programistom pracę nad pośrednimi etapami tworzenia kodu i znajdowaniem błędów.
| edytuj kod]
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 kod]
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.
Podstrony: 1 [2] [3] [4]