Interfejsy, kl abstrakcyjne - po co właściwie je stosować?

Interfejsy, kl abstrakcyjne - po co właściwie je stosować?
L1
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Polska
  • Postów: 4
0

@Wibowit
Tak trochę offtopic ale

Ciekawe czy ktoś się nad tym zastanawiał co napisałem:
Innym zastosowaniem interfejsów jest: http://en.wikipedia.org/wiki/Interface_segregation_principle Dobieranie się do szczegółów implementacyjnych powoduje silne sprzężenie, które hamuje rozwój systemu, bo tych szczegółów implementacyjnych już nie można zmienić.

To jest oczywiste dla mnie. Często zawężam interfejsy do jednej metody, a więcej uzywam tylko wtedy, kiedy jest to koniecznie niezbędne.
Kiedyś miałem interfejs MouseListener z metodami "onMouseMove, onMouseClick" ale przecież nie mogę założyć, że ktoś, kto chce zaimplementować nasłuchiwanie myszy będzie się chciał nasłuchiwać onMouseMove i onMouseClick razem. Wtedy ten interfejs rozbiłem na mouseClickListener i mouseMoveListener
Właśnie dlatego uważam, że Javie przydałyby się funkcje jako obiekty, wtedy klasa, która korzysta z obiektu implementującego mogłaby sprawdzić czy implementuje daną metodę. Możnaby pewnie użyć do tego reflections ale to jest mało wydajne rozwiązanie.

azalut
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1129
0

@lukasz1985

To zależy jeśli chodzi o punkt 3 - jeśli masz wydzielać interfejs do klasy po to tylko, żeby w niej zaimplementować jego metody to nie ma sensu - wtedy zrób to według punktu 2, jeśli jednak masz jakieś dane, na których ta nowa klasa będzie pracować samodzielnie - wtedy tak - punkt 3 jest dobrym rozwiązaniem, jednak pozostaje problem komunikacji z klasą główną.

No tak tylko w wypadku uzycia pkt 2. klasa GUI jest od stworzenia UI + zawiera implementacje interfejsow KeyListener i ActionListener i w dodatku logike która musze wykonać po naciśnieciu przycisku również. Troche wizualnie mi sie to nie podoba :D.
A gdybym użyl pkt. 3 - i wtedy chciał zrobić coś takiego, że w obu tych klasach(klasie X implementujacej ActionListener i klasie Y implementujacej KeyListener) potrzebuje metode która robi dokladnie to samo. Wiem, że pisanie czegos 2 razy w programowaniu to juz błąd, dlatego spytam jak to rozegrać? dać jakas klase nadrzedna Z i rozszerzyc te klasy X i Y, i w tej Z tę metodę? czy wtedy zaczne miesząć i robic z igły widły? :P

Tak jak piszesz - będziesz musiał przechowywać referencje do klasy GUI i wywoływać jej metody. To jest dobre rozwiązanie ponieważ wydzielasz 1 system główny (klasa GUI) i 2 podsystemy (dla tych dwóch nowych klas). Podsystemy mogą się komunikować między sobą przez system główny - który staje się mediatorem w tej komunikacji.

Stąd też nazwa wzorca projektowego "mediator"

Czy mje sie zdaje, czy nieświadomie myślałem o użyciu jednego z wzorców projektowych?(choćby bylem blisko) jeśli tak to: wow! :D
Wiem ze istnieje cos takiego jak wzorce, wiem po co to wymyslono wgl, ale jak czytam o dowolnym z nich: singletonie, null object czy mediator ktory wymieniles - ni cholere nie moge pojąc o co tam sie rozchodzi ^^ coś piszą, coś wyjaśniaja ale nie rozumiem, może dlatego, że nie zaczalem jeszcze javyEE?

dzieki za tyle odp

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.