Pytanie odnośnie interfejsów.

1

Witam, dostałem od prowadzącego takie pytanie i mam na nie odpowiedzieć ;/ Poradźcie coś

Dlaczego należy korzystać z interfejsów zamiast klas rzeczywistych

1

Aby kod był bardziej uniwersalny. Załóżmy, że jedna osoba zrobiła metodę, która operuje na klasie Mebel, a druga osoba zrobiła 10 metod (metodą copy & paste) operujące na klasach odpowiednio Krzesło, Szafa, Stolik, itp Które rozwiązanie jest bardziej logiczne?
Druga sprawa to to, że klasa może dziedziczyć po wielu interfejsach, więc wtedy sama klasa staje się bardziej uniwersalna, bo może zostać użyta w większej ilości kontekstów.
Trzecia sprawa to to, że jeżeli zrzutuję sobie obiekt na interfejs, to podmiana implementacji wymaga zmiany w jednym miejscu w kodzie, a nie w potencjalnie setkach czy milionach miejsc.

1

Programowanie do interfejsow to tzw. programowanie kontraktore: nie interesuje Cie jaki dokladnie typ ma dany obiekt, intersuje Cie natomoast ze spelnia dany kontrakt. Metody ktore korzystaja z interfejsow mowia: musisz mi podac obiekt ktory spelnia ten konktrakt, a ja go wykorzystam. W ten sposob ulatwiasz programowanie modularne i umozliwiasz rozbudowe / zmiane aplikacji.
Wyobraz sobie ze masz kod ktory potrzebuje listy, i wszedzie uzywasz ArrayList poniewaz to jest jedyne co znasz. Po miesiacu sie okazuje ze w sumie poznales LinkedList, i tak napwrawde ona jest o wiele lepsza dla Twoich obecnych wymagan (nie potrzebujesz random access jak w ArrayList, iterujesz zawsze od poczatku, ale np. czesto usuwasz obiekty ze srodka). Gdy uzywasz ArrayList w calej aplikacji, masz 100 miejsc do zmiany. Gdy uzywasz List, zmieniasz tylko jedno, moze dwa miejsca, gdzie lista jest tworzona - reszta metod korzysta tylko z kontraktu (intefrejsu) List.
Inny przyklad: pluginy. Jeden interfejs, wiele implementacji, ktore mozna korzystac zamiennie w zaleznosci od upodoban (np. uzytkownik wybiera ze chce wizualizacje muzy tak a nie inaczej - ustawiasz inny plugin a kod ktory z niego korzysta jest ten sam, bo uzywa tylko interfejsu).

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