Kiedyś mój profesor na uniwersytecie przedstawił wspaniałą anegdotę opisującą polimorfizm i enkapsulację. Tak to wyglądało.
Czy ktoś tutaj wie, jak działa automat sody? (Cue myli spojrzenia, dlaczego o tym rozmawialiśmy.) Nie? Pozwol sobie powiedziec.
Upuszczasz swoją zmianę, a wewnątrz maszyny znajduje się mała małpka, która liczy wszystkie zmiany, aby upewnić się, że masz wystarczająco dużo pieniędzy.Kiedy naciśniesz przycisk sody, pojawi się małe światełko informujące małpę, który przycisk nacisnąłeś, a jeśli wprowadziłeś odpowiednią ilość zmian, chwyta twój wybór i rzuca go do małej dziury, abyś mógł wziąć swoją sodę.
Jest to koncepcja enkapsulacji. Ukrywamy implementację maszyny sodowej. O ile nie ma jednego z tych fantazyjnych, przejrzystych okien, które pozwalają zobaczyć wnętrze, szczerze nie masz pojęcia, jak to działa. Wszystko, co wiesz, to to, że wkładasz trochę gotówki, naciskasz przycisk, a jeśli włożysz wystarczająco dużo, dostaniesz swój napój.
Aby dodać, że wiesz, jak wykorzystać maszynę Soda interfejs, więc dlatego tak długo jak interfejsu urządzenia następuje zwykle interfejs maszynowy soda, można go używać. Nazywa się to umową interfejsu. Maszyna może przynosić napoje z Antarktydy na przenośniku taśmowym, jeśli o to dbasz, tak długo jak wypijesz, jest zimno i dostajesz zwrot.
Polimorfizm polega na tym, że podczas korzystania z interfejsu maszyny sodowej może to robić różne rzeczy. Dlatego enkapsulacja i polimorfizm są ze sobą ściśle powiązane. W przypadku polimorfizmu, wiesz tylko, że używasz implementacji SodaMachine
, którą można zmienić, i w rezultacie różne rzeczy można wykonać za kulisami. Prowadzi to do napędzającej koncepcji polimorfizmu, która jest zdolnością jednego obiektu, SodaMachine
, do rzeczywistego działania zarówno jako MonkeySodaMachine
i ConveyorSodaMachine
w zależności od maszyny faktycznie za interfejsem.
Prawdopodobnie nie słowo w słowo, ale wystarczająco blisko. Zasadniczo sprowadza się to do dwóch pojęć: polymorphism i encapsulation. Daj mi znać, jeśli chcesz wyjaśnienia.
[Polimorfizm] (http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming) – Brian
znajdziesz Interfejs przydatna, gdy zaczyna do projektowania bibliotekę i jego API kolego :) –
@Brian, polimorfizm nie jest pełna odpowiedź, ponieważ to zachowanie może już zostać wygenerowane przez podklasę. – displayname