logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[JAVA] - Zastosowanie interfejsów w Javie dla początkujących

S0L1D3R 15 Sie 2014 17:01 1536 5
REKLAMA
  • #1 13879680
    S0L1D3R
    Poziom 8  
    Posty: 21
    Ocena: 2
    Siemano! :D
    Jako iż zacząłem się uczyć Javy i już w niej jako tako piszę, chciałbym się dowiedzieć co to jest "Interfejs".

    O ile moglibyście mi powiedzieć co to jest to moglibyście dorzucić się od siebie jakie ma zastosowanie owy interfejs?


    PS: Najbardziej interesuje mnie jakie zastosowanie ma Interfejs, ponieważ wiem, że to taki jakby szkielet klasy.

    Pozdrawiam i dziękuję,
    S0L1D3R
  • REKLAMA
  • #2 13879809
    wiesniak
    Poziom 31  
    Posty: 1006
    Pomógł: 231
    Ocena: 52
    Interfejs to nie szkielet klasy. Użycie interfejsu narzuca na klasę obowiązek implementacji tego, co zostało w interfejsie określone.

    Przykład z życia, z którym miałem do czynienia jakiś czas temu. W ASP.NET jest kontrolka GridView, która tworzy tabelkę. Tabelka może mieć różne kolumny począwszy od prostych tekstowych poprzez checkboxy, na linkach kończąc. Kolumny te mają jednak duży brak - nie mają wewnętrznej nazwy, więc trzeba je identyfikować po indeksie w tabeli. To słabe rozwiązanie, bo zmienisz kolejność kolumn i cała logika oparta na indeksach klęka. Dlatego postanowiłem dodać do tych kolumn właściwość UniqueName. Nie mogłem tego zrobić w jakiejś klasie bazowej, bo kolumny są dostarczane razem z gridem. Stworzyłem więc zbiór klas, które dziedziczą po oryginalnych kolumnach. Stworzyłem też interfejs IColumn, który miał właściwość UniqueName. Zaimplementowałem ten interfejs w moich klasach.
    Od tego momentu mogłem traktować zbiór kolumn jako zbiór interfejsów IColumn i operować na nazwach nie zawracając sobie w ogóle głowy, jaki to jest rodzaj kolumny ani jaki ma indeks.

    Inny przykład to wzorzec IoC - Inversion of Control, który silnie opiera się na interfejsach.

    Rzuć też okiem na opis np tu http://www.tutorialspoint.com/java/java_interfaces.htm.
  • REKLAMA
  • #3 13880361
    krru
    Poziom 33  
    Posty: 1819
    Pomógł: 230
    Ocena: 214
    Java nie ma dziedziczenia wielobazowego i brak ten częsciowo pokrywają interfejsy - klasa w javie może mieć jedną klasę bazową oraz implementować dowolnie dużo interfejsów, co w sumie też jest dziedziczeniem.
  • REKLAMA
  • #4 13880376
    wiesniak
    Poziom 31  
    Posty: 1006
    Pomógł: 231
    Ocena: 52
    krru napisał:
    co w sumie też jest dziedziczeniem.

    Nie zgodzę się w tej kwestii. Interfejsu się nie dziedziczy (bo nie ma z niego co dziedziczyć), tylko się go implementuje. Interfejs nie daje nam dodatkowych metod czy właściwości. On tylko wymusza by klasa sama z siebie te metody i właściwości posiadała.
  • REKLAMA
  • #5 13880891
    krru
    Poziom 33  
    Posty: 1819
    Pomógł: 230
    Ocena: 214
    Ale klasa też może mieć metody abstrakcyjne i można taką klasę dziedziczyć. To że metody interfejsu są abstrakcyjne to nie zmienia dziedziczenia, to jest tylko pewne wymaganie by coś było interfejsem. Interfejs to taki szczególny przypadek klasy.
  • #6 13880905
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    A ja podejdę do tego inaczej.

    Jak zwykle najlepiej wyobrazić sobie cos takiego w rzeczywistości,
    ponieważ nie zapominajmy że po to jest programowanie obiektowe,
    które ma głównie imitować naturalne zachowania.

    Interfejs - to np taki panel do sprzętu muzycznego, może być pilot.
    On nic sam nie robi ale posiada regulacje:
    Głosniej/ciszej, basy, soprany, R/L.

    Klasa - w tym przypadku to projekt samego sprzętu muzycznego,
    który chce takiego pilota w pełni obsługiwać.

    Wiec musi mieć zaimplementowaną regulacje głosności, basów, sopranów , kanałów lewy/prawy.

    Po co debatować?
    Dalej już sobie autor postu sam wyobrazi :)
    a google dopowie więcej, np:
    http://sebastian-malaca.blogspot.com/2012/04/jak-programowac-obiektowo-cz-8.html

    pozdr.
REKLAMA