– Cześć, Amigo! To znowu ja. Chcę pokazać Ci interfejsy od innej strony. Widzisz, klasa stanowi najczęściej model pewnego obiektu. Z kolei interfejsy są bardziej jak umiejętności lub role tego obiektu niż sam obiekt.
Na przykład, rzeczy takie jak samochody, rowery, motocykle czy koła reprezentowane są jako klasy i obiekty. Ale ich umiejętności, takie jak «Potrafię się przemieszczać», «Potrafię przewozić ludzi» czy «Potrafię parkować» lepiej jest reprezentować jako interfejsy. Przeanalizuj ten przykład:
Kod Java | Opis |
---|---|
|
Odnosi się do zdolności poruszania się. |
|
— Odnosi się do zdolności poruszania się. |
|
— Odnosi się do zdolności przewożenia rzeczy. |
|
— Klasa «wheel». Posiada umiejętność przemieszczania się. |
|
— Klasa «car». Posiada umiejętność przemieszczania się, przewożenia towaru, może też być przez kogoś prowadzona. |
|
— Klasa «skateboard». Posiada umiejętność przemieszczania się i bycia kontrolowaną. |
Interfejsy niezwykle upraszczają życie programisty. W programach bardzo często znajdują się tysiące obiektów, setki klas i tylko kilkadziesiąt interfejsów (funkcji). Funkcji nie ma wiele, ale mogą być łączone na wiele różnych sposobów (klas).
Chodzi o to, że nie musisz pisać kodu definiującego interakcje z każdą inną klasą. Musisz jedynie wchodzić w interakcje z funkcjami (interfejsami).
Wyobraź sobie, że budujesz roboty. Masz dziesiątki podległych Ci robotów i każdy z nich ma różnorodne umiejętności. Załóżmy, że musisz szybko ukończyć budowanie ściany. Po prostu wzywasz wszystkie roboty, które posiadają umiejętność "build" i każesz im budować ścianę. Nie obchodzi Cię już, które roboty to zrobią. Może to być nawet robotyczna konewka. Jeśli wiedzą, jak się buduje, to niech budują.W kodzie wyglądałoby to tak:
Kod Java | Opis |
---|---|
|
— Umiejętność «budowania ściany». Rozumie komendę «build a wall» (posiada odpowiednią metodę). |
|
— Roboty, które mają taką możliwość/umiejętność.
— Konewka nie potrafi budować ściany (nie implementuje interfejsu WallBuilder). |
|
– Jak wydajemy komendę budowania ściany? |
– W niezwykle interesujący sposób. Nigdy nie sądziłem, że interfejsy mogą być takie fascynujące.
– A jednak! W parze z polimorfizmem są naprawdę niesamowite.
GO TO FULL VERSION