środa, 18 marca 2015

Filary programowania obiektowego - Polimorfizm

Początek

Zawsze musi być jakiś początek. Gdy chcemy zacząć przygodę z programowaniem obiektowym warto poznać pewne podstawowe pojęcia, nazwijmy je tutaj filarami. W kolejnych postach postaram się opisać każdy z nich.


Filary programowania obiektowego

  1. Polimorfizm
  2. Hermetyzacja
  3. Dziedziczenie

W liceum nauczyłem się programować w języku Turbo Pascal. W mojej  głowie nie istniały wówczas pojęcia "paradygmatu", "obiektowości", "programowania strukturalnego", a programowanie rozumiałem jako lista instrukcji wydana magicznemu interpreterowi, który zamieniał je w funkcjonujący byt.

Próbując poznać sekrety programowania obiektowego jednym z pierwszych pojęć był polimorfizm. Ten pochodzący z greki wyraz skrywał w sobie wówczas wiele tajemnic. Samo pojęcie polimorfizmu używane jest przez wiele nauk.


Polimorfizm w kontekście

Polimorfizm to mechanizm, który pozwala obiektom danego typu zachowywać się różnie, adekwatnie do implementacji.

A może konkretniej? 

Ludzkie zachowanie może być rozumiane jako polimorficzne. Przykładem jest np. jedzenie.Załóżmy, że typem jest Człowiek. Konkretną implementacją abstrakcji jaką jest Człowiek niech będzie konkretna osoba, np. Jan Kowalski (konkretna osoba). Drugą implementacją człowieka niech będzie mieszkający w Chinach Ju Li Wang.

Człowiek człowiek1 = new Polak("Jan Kowalski")

Człowiek człowiek2 = new Chińczyk("Ju Li Wang")
 

Polimorficzne wywołanie

Polimorficznym wywołaniem nazywamy wywołanie metody danego obiektu na konkretnej jego implementacji. Obiekt zachowa się wówczas adekwatnie do swojej implementacji.

Załóżmy, że Człowiek definiuje metodę 'jedz()'.

człowiek1.jedz()
człowiek2.jedz()

Zauważmy, że każdy z obiektów zdefiniowany jest jako typ 'Człowiek' i jest osiągalny przez referencję tego typu. Tutaj dochodzimy do warunku wywołania polimorficznego. 

Warunek polimorfizmu

Polimorficzne zachowanie obiektu będzie możliwe tylko wtedy gdy odwołujemy się do niego za pomocą wskaźnika/referencji.

Polimorfizm pozwoli tutaj każdemu z obiektów zachować się zgodnie ze swoją implementacją.
Polak zje danie nożem i widelcem, a Chińczyk używając pałeczek, tak jak został nauczony i tak jak potrafi (bardziej abstrakcyjnie - obiekt zachowa się tak jak został zaprogramowany)

Polimorfizm sam w sobie jest cechą. Cechą, którą mają wszystkie obiekty (w programowaniu obiektowym) i wcale nie jest taki straszny na jaki brzmi i jak go malują. Pozwala pisanym programom być w łatwy sposób rozszerzalnymi, poprzez dopisywanie nowych implementacji w nowych klasach a w połączeniu z dziedziczeniem daje wprost mieszankę wyjątkową ale o tym w następnym poście.


Brak komentarzy:

Prześlij komentarz