Programowanie komputerów/Programowanie obiektowe

Z Wikibooks, biblioteki wolnych podręczników.

Programowanie obiektowe - programowanie zorientowane obiektowo[edytuj]

Programowanie obiektowe jest metodyką wykorzystujące obiekty.

W języku C pojęcie obiekt odnosi się do zwykłych zmiennych. Nie jest to język obiektowy. Przykładami języków pozwalających programować obiektowo są: C++, Objective C, Java, C#.

W programowaniu proceduralnym istnieją dane oraz funkcje działające na tych danych. Jeżeli jest wiele typów danych i wiele funkcji, to pojawia się zagmatwanie. Projekt staje się trudny do zrozumienia. Czasem dwie osoby mogą np. chcieć dodać funkcję o takiej samej nazwie. Funkcji jest wiele, trudno się tym połapać. Kiedy projekt przekroczy ok. 50000 linii kodu, to trudno znaleźć unikalną nazwę dla nowej funkcji.

Obiekt jest czymś, co przechowuje w sobie dane oraz funkcje umożliwiające działanie na tychże danych (są one zwane metodami).

Podejście takie pozwala na uporządkowanie danych. Jest np. obiekt przechowujący informację o samolocie i metody działające na samolocie (sterowanie drążkiem, sterowanie orczykiem, sterowanie silnikami, sterowanie innymi systemami). Komunikacja z obiektem przebiega na ogół przez zbiór metod (stanowią one interfejs obiektu). Pozwala to na uchronienie się problemem w przypadku danych błędnych (obiekt może zareagować odpornością na złe dane w przypadku próby niewłaściwej manipulacji przyrządami). Obiekt jest wtedy hermetyczny. Może być wykorzystywany przez innego programistę bez konieczności znajomości jego budowy wewnętrznej. Dobrze zaprojektowane obiekty zachęcają do powtórnego używania w innych projektach. Jest to nazywane powtórnym użyciem kodu.

Ściślej ujmując, definicja obiektu jest nazywana klasą. Obiekt powstaje w chwili powołania klasy do życia (coś jak utworzenie zmiennej).

Hermetyzacja klas znacznie porządkuje projekt, ułatwia jego podział pomiędzy różnych programistów, pozwala na łatwiejszą kontrolę nad błędami.

W językach obiektowych występuje także kompozycja i dziedziczenie. Kompozycja polega na tym, że klasa może zawierać inne klasy. Pozwala to zbudować nową złożoną klasę używając jakby gotowych klocków. Pozwala to tworzyć skomplikowane projekty przy mniejszym nakładzie pracy. Dziedziczenie polega na powstaniu relacji polegającej na tworzeniu klasy potomnej w oparciu o klasę bazową. Klasa potomna często stanowi konkretyzację klasy bazowej. Przykładowo istnieje klasa Samochód. Dziedziczą po niej klasy Porsche, BMW, Mercedes. Porsche jest samochodem, BMW także jest samochodem. Mogą one przyjmować uniwersalne polecenia dla samochodu. Posiadają one taki sam interfejs, ale wywoływane metody w konkretnych klasach mogą być już inne. Np. każdy samochód ma gaz (to jest część interfejsu), ale przeniesienie mocy (szczegóły implementacji ukryte w klasie) może już działać inaczej.

Wadą obiektowości jest mniejsza wydajność. Przykładowo: mamy zbiór samochodów (wskaźniki do klasy Samochód). Bierzemy Mercedesa, ale program widzi go początkowo jako Samochód. Użycie obiektu (wywołanie jego metod) wymaga często najpierw określenia, jakiej dokładnie klasy on jest (Mercedes), a dopiero potem wywołania metody. Skutkiem jest mniejsza wydajność aplikacji.

Programowanie obiektowe jest stosowane w bardziej zaawansowanych projektach. Inżynieria oprogramowania zna wiele strategii wykorzystania obiektów w rozmaitych systemach. Są one nazywane wzorcami projektowymi, wzorcami architektonicznymi itp. Najpierw należy jednak poznać dobrze jakiś język obiektowy, np. C++. To już poważniejsze sprawy.