Web Design Blog / Programowanie:

Zalety i wady programowania obiektowego

Programowanie orientowane obiektowo (object oriented programming) (bo właśnie tak powinna brzmieć prawidłowa nazwa) to paradygmat programowania, czyli taki zbiór teorii, zasad według których powinno się programować. Śmiało można jednak powiedzieć, że programowanie orientowane obiektowo to jak na razie najpopularniejsza i najczęściej używana technika produkcji oprogramowania.

O co w tym wszystkim chodzi?

Pisząc program definiujemy abstrakcyjne obiekty, które posiadają pola (czyli dane) i metody (czyli funkcje/procedury). Obiektowy program to taki, który polega na stworzeniu takich obiektów a potem mechanizmów umożliwiających komunikację pomiędzy tymi obiektami. W dużym uogólnieniu programowanie takie ma naśladować działanie ludzkiego mózgu.

W programowaniu obiektowym nie chodzi o to by za pomocą klas i obiektów zorganizować kod. Używanie klas i obiektów do powiązania ze sobą niezwiązanych pól i metod nie jest podejściem obiektowym.

Podstawowe założenia OOP

Abstrakcja – obiekty to abstrakcyjne byty, które mają swój stan i własne metody. Może to być obiekt klasy „Użytkownik”, który ma pola „imię”, „data urodzenia”  i ma metody typu dodajDoZnajomych(); To założenie powoduje, że kod jest naturalnie zrozumiały i tworzy analogię programu do świata rzeczywistego.

Hermetyzacja (lub Enkapsulacja) – to ukrywanie implementacji polegające na tym, że nie można bezpośrednio przypisywać wartości do pól innych obiektów w nieoczekiwany sposób. Każdy obiekt udostępnia interfejs, który określa jak można te dane zmienić. To założenie wprowadza porządek i bezpieczeństwo w kodzie.

Polimorfizm – metody klas mogą być wykorzystywane na wiele sposobów w zależności od sytuacji. To założenie powoduje, że nie powtarzamy kodu.

Dziedziczenie – umożliwia definiować specjalizowane obiekty na podstawie bardziej ogólnych. Dzięki temu mechanizmowi też nie powtarzamy kodu.

Zalety programowania obiektowego

czytelny kod – poprawne użycie mechanizmu polimorfizmu i dziedziczenia powoduje, że nie robimy kopiuj-wklej w kodzie. Raz napisany kod jest używany wiele razy nawet wtedy kiedy jest wykorzystywany dla różnych danych i w różnych sytuacjach.

modularna budowa – partie kodu można łatwiej przenieść do innego programu. Można podzielić program na kawałki a to ma same zalety.

spójna ideologia zarządzania kodem – jest to obecnie praktycznie jedyny paradygmat, którego opanowanie umożliwi efektywną pracę w zespołach.

możliwość kontrolowania dużego projektu – podobnie jak wyżej. Im większy projekt tym zalety OOP przeważają nad jego wadami. Dzięki uniwersalnym zasadom OOP programistom, którzy wchodzą do projektu łatwiej jest się wdrożyć i szybciej rozpocząć użyteczną dla tego projektu pracę.

stabilność i możliwość rozwoju – dzięki mechanizmom OOP można rozbudowywać i rozszerzać oprogramowanie

Wady OOP

mniejsza wydajność – procesor ma gdzieś, czy kod jest czytelny czy nie oraz to czy nowym programistom łatwo jest się do niego wdrażać. Tam gdzie OOP służy programistom i zarządzaniu projektem staje się problemem dla procesora i ogólnej wydajności i prędkości wykonywania. Oczywiście, to odbija się także na użytkownikowi. Tam gdzie wydajność to priorytet tam OOP ma wstęp wzbroniony. Zobacz jak jest pisany kod odpowiedzialny za animacje czy renderowanie grafiki.

większy koszt utrzymania aplikacji – skoro mniejsza wydajność aplikacji to jej utrzymanie aplikacji np. webowej będzie droższe, ponieważ będzie wymagała szybkiego procesora i pamięci RAM.

utrudnione testowanie i debugowanie – śledząc działanie kodu proceduralnego możemy łatwo analizować krok po kroku rezultaty poszczególnych instrukcji. W kodzie który obiekty „coś robią” z danymi tego typu podejście jest utrudnione.

mniejsza elastyczność – hermetyzacja i dziedziczenie powoduje, że kod w różnych miejscach jest powiązany ze sobą skomplikowanymi zależnościami i pewnego rodzaju hierarchią. Wtedy trudno zmienić rdzenne funkcje programu a każda taka zmiana może się wiązać z koniecznością przebudowy kodu w wielu miejscach lub będzie zwyczajnie niemożliwa.

nie rozwiązuje wszystkich problemów programowania – są pewne klasy problemów, których nie można przepisać na szkielet zasad OOP i potrzeba proceduralnego podejścia.

nieodpowiedni do małych projektów – małe projekty nie są w stanie wykorzystać w pełni zalet płynących z programowania OOP. Kod będzie mniej elastyczny, pisania też będzie więcej i koszt też będzie większy.

Dobrego OOP trzeba się długo uczyć

A to podwyższa próg wejścia w moment oferowania własnych usług programistycznych opartych o kod OOP. Dlatego nie jest możliwe samodzielne wytworzenie oprogramowania po jakimś kursie czy paru latach praktyki w taki sposób aby faktyczne korzyści jakie ma przynosić OOP były możliwe do zauważenia.

Siedzenie przy książkach lub studiowanie cudzego kodu uważam za bardzo nienaturalny tok nauki programowania. Co innego, kiedy pracujemy z bardziej doświadczonymi programistami nad projektem, który stworzyli jeszcze bardziej doświadczeni programiści. Wtedy inwestycja w naukę OOP jest bardzo opłacalna.

O co chodzi z tą wydajnością?

Programy napisane obiektowo mają jakby kolejną warstwę abstrakcji. To powoduje że – OK kod wygląda ładnie i w programie zaszyte są eleganckie mechanizmy typu MVC ale co z tego jeżeli klient ani użytkownicy tego kodu nigdy nie zobaczą na oczy? To prawda, ludzki mózg pracuje na obiektach… ale nie procesor 😉

W retoryce broniącej zasadności stosowania OOP podnosi się korzyść z operowania na obiektach tak jak w świecie naturalnym. To fajnie wygląda i powoduje, że byle kto bez doświadczenia może stworzyć diagram klas i czuć się jak architekt oprogramowania.

Prawda jest jednak taka, że guzik się wtedy przejmujemy wydajnością – a to jest bardzo złe. Procesor nie myśli w ten sposób.

Podsumowanie

Niezależnie jaki projekt piszemy i jakiego używamy języka, programowanie sprowadza się do trzech zasadniczych działań:

  • przypisania
  • instrukcji if
  • pętli while

Używajmy podejścia OOP tam, gdzie jest to uzasadnione a korzyści przewyższają wady takiego rozwiązania.

Źródła



Zalety i wady programowania obiektowego
4.8 (95%) głosów: 4

Autor: (29 lat)

Służę pomocą w razie wykonania / odnowienia strony lub sklepu internetowego dla twojej firmy niezależnie od twojej lokalizacji czy skali przedsięwziecia.

Tego typu wpisy piszę w wolnych chwilach lub pomiędzy projektami. Tylko pomyśl co mogę dla Ciebie zrobić w ramach usługi :-)

Zadaj pytanie lub skomentuj

Wyrażam zgodę na przetwarzanie moich danych osobowych przez firmę Paweł Mansfeld z siedzibą w Jastrzębiu-Zdroju, ul. Plebiscytowa 10, w celu udzielenia odpowiedzi, w tym przedłożenia oferty jeśli o nią pytam. Moje dane osobowe będą przetwarzane do czasu cofnięcia zgody lub przez okres niezbędny do ustalenia, dochodzenia lub obrony roszczeń. Mam prawo dostępu do danych, sprostowania, usunięcia lub ograniczenia przetwarzania, prawo sprzeciwu, prawo wniesienia skargi do organu nadzorczego i prawo do przeniesienia danych.

Komentarze publiczne

Brak komentarzy.
Otrzymuj powiadomienie o nowych artykułach

Wyrażam zgodę na przetwarzanie moich danych osobowych przez firmę Paweł Mansfeld z siedzibą w Jastrzębiu-Zdroju, ul. Plebiscytowa 10, w celu udzielenia odpowiedzi, w tym przedłożenia oferty jeśli o nią pytam. Moje dane osobowe będą przetwarzane do czasu cofnięcia zgody lub przez okres niezbędny do ustalenia, dochodzenia lub obrony roszczeń. Mam prawo dostępu do danych, sprostowania, usunięcia lub ograniczenia przetwarzania, prawo sprzeciwu, prawo wniesienia skargi do organu nadzorczego i prawo do przeniesienia danych.

*Bez obaw, nie udostępniam nikomu twojego adresu e-mail