Interfejsy w Javie

1

Po co są te glupie interfejsy w javie? Po co umieszczac w jakims interfejsie metody abstrakcyjne a potem go implementowac w docelowej klasie , zamiast zaimplementowac od razu te metody w klasie docelowej? Wyjasni mi ktoś ?

2

Jeśli coś jest głupie, ale działa, to nie jest głupie... I tak samo fakt, że czegoś nie rozumiesz, nie oznacza, że jest to głupie.

Interfejsy, w dużym uproszczeniu, wprowadzają wymóg implementacji wymaganych metod. Zapobiegają sytuacji, w której ktoś niezaznajomiony z konstrukcją projektu nie zaimplementuje pewnych zachowań.
Nie wiem czy w Javie to wygląda w ten sposób 1:1, ale w większości interfejsy określają publiczne metody klasy. Czyli oddzielają niejako zachowania, które udostępnia obiekt od ich implementacji szczegółowej, na niższym poziomie.

Dodatkowo(znowu, nie wiem jak sprawa jest rozwiązana w Javie) umożliwiają rozluźnienie zależności. Tzn. Tworzysz obiekty implementujące dany interfejs i używasz określonych w nim zachowań obiektu.
Dzięki temu możesz w razie potrzeby podmienić obiekt na inny(w sensie innej klasy), która na zewnątrz zachowuje się tak samo(wspólny interfejs), ale dane wewnątrz siebie mieli już inaczej(konkretna implementacja).

Czyli w najogólniejszym uproszczeniu, pozwalają rozluźnić powiązania i ułatwić rozwój/wprowadzanie zmian w kodzie, bez rozgrzebywania całości I zmian w dziesięciu miliardach miejsc.

Wydają się teraz fajniejsze i mniej bezsensowne?

1

Po pierwsze, interfejs czyni ADT (abstract data type) bardziej czytelnym dla klienta: wystarczy do niego zajrzeć i mamy wszystko do używania i zrozumienia obiektu, a szczegółowa implementacja jest gdzie indziej. I jeszcze jeden plus, w interfejsie klient nie może nic zepsuć, gdyż nie mozna tam deklarować zmienych.
Po drugie, taki design ułatwia koegzystowanie różnych implementacji tego samego typu danych w jednym programie: ten sam interfejs , powiedzmy, Stack, a implementacje jako, tablica, augumented array, linked list - wygodnie - a w jednej klasie jest ciężej. Chyba głównie tyle.

1

Zapoznaj się Autorze z wątkiem "Sens używania interfejsów". Polecam zacząć od pierwszej strony. Cały wątek mógłby być traktowany jako kompendium wiedzy o interfejsach w Javie.

0
  • Wykorzystuje się je też wtedy jak chcemy uniknąć dziedziczenia
  • Można też zebrać w tablicy o typie interfejsu obiekty różnych klas, które mają zaimplementowany ten interfejs. Można potem taką tablę przeiterować oraz wywołać metodę o wspólnej nazwie (która jest odpowiednio zaimplementowana w tych obiektach) ale wykonującą inne działania na każdym z tych obiektów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1