Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Polimorfizm - wytłumaczenie
Proxxx
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 9.10.2011

Ostrzeżenie: (0%)
-----


Witam,

Otóż czytam poradniki, przeglądam książki i nie mogę znaleźć dobrego wytłumaczenia idei i działania polimorfizmu. Czy może ktoś podrzucić jak najprostszy przykład i go opisać? Czym polimorfizm różni się od dziedziczenia czy implementowania interfejsu po prostu?

I czy ten kod: http://wklejto.pl/106402 , wykorzystuje polimorfizm?

Pozdrawiam,
Łukasz
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Gdyby jakoś prosto zilustrować polimorfizm to jego sedno można streścić tak: byt reaguje na zdarzenia zależnie od warunków. Dość prostym i zrozumiałym przykładem polimorfizmu jest przeciążanie funkcji. Wywołana metoda produkuje różne wyniki w zależności od tego jakiego typu dane otrzymała lub ile ich otrzymała. Inaczej może choćby reagować gdy otrzyma liczbę, a inaczej gdy jest to tablica lub obiekt określonej klasy. Jest więc do pewnego stopnia pewnym bytem abstrakcyjnym. Wywołujesz go zawsze jednakowo, ale efekty jego działania w zależności od sytuacji, kontekstu, mogą dawać różne wyniki.
Klasyczny już niemal przykład to choćby funkcja licząca pole (IMG:style_emoticons/default/smile.gif) Wiadomo, że dla różnych figur powinna ona użyć innego wzoru, a więc dynamicznie reaguje na to jakiej klasy obiekt jako parametr otrzyma. Raz będzie to kwadrat, raz trójkąt a innym razem koło. Jeszcze inną sytuacją może być choćby funkcja drukuj, która może różnie zareagować na otrzymane dane. Może je bowiem przekształcić do różnych postaci, zależnie od tego na jakie urządzenie są one kierowane. Tutaj zawsze te same dane wejściowe mogą przyjąć zupełnie inną formę wyjściową.
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(thek @ 14.10.2011, 00:23:14 ) *
Dość prostym i zrozumiałym przykładem polimorfizmu jest przeciążanie funkcji. Wywołana metoda produkuje różne wyniki w zależności od tego jakiego typu dane otrzymała lub ile ich otrzymała. Inaczej może choćby reagować gdy otrzyma liczbę, a inaczej gdy jest to tablica lub obiekt określonej klasy. Jest więc do pewnego stopnia pewnym bytem abstrakcyjnym. Wywołujesz go zawsze jednakowo, ale efekty jego działania w zależności od sytuacji, kontekstu, mogą dawać różne wyniki.
A oto przykład tego czym polimorfizm nie jest.
Jest ogromna różnica pomiędzy przeciążaniem metod (ang. overloading) a ich nadpisywaniem (and. overriding). To co opisał ~thek to overloading, podczas którego mechanizm polimorfizmu najzwyklej w świecie nie działa!

Polimorfizm jest to mechanizm podczas, którego obiekt może występować jako obiekt różnych typów. Oznacza to, że obiekt zmienia swoją formę w zależności od referencji.
Przykład z polami figur jest OK. Przykład z przeciążaniem metod jest fatalny!

---update---
Można by się zagłębiać w czeluście teoretyzowania i powiedzieć, że przecież przykład z przeciążeniem metod to mechanizm ad-hoc polimorfizm ale to nie jest clue sprawy. To nadal nie jest polimorfizm na poziomie obiektów, o którym mowa w tym przypadku i w 99% procentach rozmów o polimorfizmie.
Zresztą ad-hoc polimorfizm to tylko polimorfizm z nazwy.

Ten post edytował mike 14.10.2011, 08:35:23
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 19:32