![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
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 ![]() |
Owszem mike, masz rację. To z przeciążaniem metod jest pewnym wariantem polimorfizmu, a nie jego sendem, ale chciałem tak na "chłopski rozum" wytłumaczyć czym on między innymi jest, bez wskakiwania w coś mocno abstrakcyjnego. Przedstawiony przeze mnie prosty przykład jest w oparciu o wiedzę z C/C++, gdzie przeciążanie jest mechanizmem polimorficznym. Widać to zwłaszcza w przypadku przeciążania operatorów. Ogólnie można powiedzieć, że najłatwiej polimorfizm wychwytuje się w językach statycznie typowanych, gdzie nawet rzutowanie jest przecież mechanizmem polimorficznym. Wiem... Można to uznać za teoretyzowanie, ale chyba przykład z rzutowaniem będzie budził mniej Twoich kontrowersji (IMG:style_emoticons/default/smile.gif) W końcu masz to o co Ci chodziło: obiekt jest jednocześnie różnego typu, zależnie od kontekstu użycia.
Gdyby tak się przyjrzeć to polimorfizm zależnie od swego "typu" można implementować w zasadzie jako klasy abstrakcyjne z ich pochodnymi lub interfejsy po których dziedziczymy i tym samym wymuszamy posiadanie tych samych funkcji, właściwości, do których zależnie od kontokstu można się odwoływać i wtedy jest to faktycznie polimorfizm na poziomie obiektu. Zwróć jednak uwagę, że nie jest to w przypadku php wygodne z prostego powodu: dynamiczne rzutowanie i konieczność jawnego odwoływania do przodków jeśli metoda jest nadpisana w potomku. W statycznie typowanych "sam sobie" po przodkach szuka pasujących do wywołania o ile nie może dokonać pewnych konwersji (choćby pomiędzy double, float i int). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 22:51 |