fbpx

Jak zrozumieć programowanie obiektowe?

programowanie obiektowe - laleczki

Jak zrozumieć programowanie obiektowe?

Osoby, które zaczynają swoją drogę z programowaniem od razu startują od pisania funkcji Hello World. Jest to procedura – instrukcja dla komputera co i jak ma zrobić, w tym przypadku po prostu się przywitać. Kiedy już napiszą sporo funkcji i wiedzą jak się z tym komputerem dogadać, przychodzi czas na coś bardziej zaawansowanego. Programowanie obiektowe. W końcu kto w tych czasach nie programuje obiektowo. A jednak są języki, które obiektowości nie znają i nie chcą znać. Jednak znaczna większość popularnych aktualnie języków to języki obiektowe. Dlatego każdy kto chce zostać programistą staje przed pytaniem jak zrozumieć programowanie obiektowe?

Co to jest programowanie obiektowe?

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ń.

W Wikipedii znajdziecie definicję jak wyżej. Uważam, że zawiera w sobie wszystko co najważniejsze i oddaje sens programowania obiektowego.

Dzięki temu podejściu znacznie skracamy kod naszego oprogramowania. W podejściu proceduralnym praktycznie za każdym razem pisaliśmy coś od nowa.  Oczywiście tworząc mniejsze metody mogliśmy je wykorzystywać wzajemnie, ale powiedzmy sobie szczerze, że nie zawsze dało się to zrobić do końca dobrze. Dodatkowo dostęp do funkcji był ograniczony, ponieważ nieustanne includowanie plików zaciemniało obraz całości, ciężej się było zorientować w kodzie, że o czytelności nie wspomnę.

Programowanie obiektowe dało nam możliwość lepszego odzwierciedlenia rzeczywistości w kodzie w taki sposób, że przy dobrze zaprojektowanych klasach i obiektach możemy szybko odnaleźć się w całości procesów.

Szczerze, to już nie pamiętam, jak to było pisać oprogramowanie w całości proceduralnie.

Jak zrozumieć programowanie obiektowe?

Obiekty w najprostszy sposób można zobrazować sobie jako klocki lub dla osób bardziej związanych z tekstem pisanym jako rzeczowniki w zdaniu. Są to podmioty/elementy układanki, które wchodzą ze sobą w relacje, wykonują pewne czynności, posiadają różne cechy, a nawet łączą się w grupy. Na bardziej zaawansowanym poziomie możemy też analizować jakie one są i jak się zachowują w zależności od kontekstu. Dlatego coraz częściej słyszy się, że programista powinien mieć coś w sobie z filozofa, ponieważ wchodzi na abstrakcyjny poziom rozmowy o egzystencji.

Kiedy uczyłam się programowania na studiach szybko łapałam o co w tym całym programowaniu chodzi właśnie dzięki wizualizacji i znajdowaniu skojarzeń. Nie wiem czego to była kwestia, może tego, że jestem wzrokowcem. Dlatego kiedy komuś coś tłumaczę, bardzo często sprowadzam to do porównań i analogii. Pamiętam, jak dając korepetycje z podstaw programowania rysowałam koszyki jako zmienne albo wycinałam strzałki z żółtych karteczek, żeby rozklejać je na ścianie próbując przekazać czym są wskaźniki.

Podobnie polecam wyobrazić sobie programowanie obiektowe np. jako drewniane klocki w grze albo ludzie w jakiejś określonej społeczności np. dzieci w klasie. Wszystkie są tego samego typu (człowiek/dziecko) ale jednak każde jest inne. Rozmawiają ze sobą, bawią się, biją, ale też wykonują zadania indywidualnie np. czytają, piszą, chodzą do toalety. Obiekty również mogą być tego samego typu, ale jako jednostki różnić się od siebie. Potrafią wykonywać różne czynności, zarówno same, jak i w grupie.

Ok, są obiekty i co teraz?

Jeśli właśnie przeszedłeś przez etap funkcji, to w głowie masz sposób myślenia instrukcjami. Pewnie wszędzie widzisz i skupiasz się w moim wcześniejszym wywodzie na tym, że trzeba napisać instrukcję czytaj, pisz, idź do toalety.  Bardzo dobrze. Przyda Ci się to. Jednak teraz oprócz tego, że będziesz pisał te instrukcję stworzysz coś co nazywane jest obiektem, czyli klasę – człowiek/dziecko.

Powstaje nam nowa warstwa, którą możesz sobie wyobrazić np. w ten sposób:

programowanie obiektowe - piramida

Teraz widzisz, że obiekty są czymś pomiędzy procesami a funkcjami. Procesy składają się z funkcji, ale żeby mogły pojawić się jakieś funkcje musi je wykonać jakiś obiekt. 

Przykład

Poniżej możesz zobaczyć klasę Message. Jest ona odzwierciedleniem jak będzie wyglądał obiekt Wiadomości. 

class Message
{
   /**
    * @var integer
    */
   private $id;

   /**
    * @var string
    */
   private $title;

   /**
    * @var string
    */
   private $content;

   /**
    * @return int
    */
   public function getId()
   {
       return $this->id;
   }

   /**
    * @return string
    */
   public function getTitle()
   {
       return $this->title;
   }

   /**
    * @param string $title
    */
   public function setTitle($title)
   {
       $this->title = $title;
   }

   /**
    * @return string
    */
   public function getContent()
   {
       return $this->content;
   }

   /**
    * @param string $content
    */
   public function setContent($content)
   {
       $this->content = $content;
   }
}

Mając klasę Message, wystarczy, że w procesie lub innym potrzebnym miejscu wywołasz:

 

$message = new Message();

 

W tym momencie zmienna $message jest obiektem Message. Takich obiektów Message możesz tworzyć tyle, na ile starczy Ci pamięci, nie ma ograniczeń, jednak pytanie po co.

Jak możesz zauważyć klasa Message posiada funkcje publiczne np. getTitle(), dzięki temu wystarczy, że w procesie wywołasz $message->getTitle(), a otrzymasz tytuł wiadomości, o ile jakiś jest. Analogicznie działaja reszta funkcji, jeśli są publiczne. Mogą być również prywatne(private) i chronione(protected). Do prywatnych dostaniesz się tylko wewnątrz klasy Message, a do chronionych wewnątrz klasy oraz klas dziedziczących z tej klasy, ale to innym razem, kiedy będziemy mówić o dziedziczeniu.

Starałam Ci się wytłumaczyć na bardzo podstawowym poziomie jak zrozumieć programowanie obiektowe. Mam nadzieje, że stało się to dla Ciebie choć odrobinę prostsze. Jeśli masz jakieś pytania to pisz śmiało w komentarzu. Chętnie rozwinę ten temat.

Zgarnij darmowy ebook i cotygodniową dawkę wiedzy

.
Magdalena Limanówka-Kuciel
magdalena@panizkomputerem.pl

Jestem programistką, która lubi mieć ręce pełne roboty. Do życia potrzebuje komputera z internetem i kubka gorącej kawy. Więcej na stronie o mnie.