Czym i po co są interfejsy ?

Wielokrotnie czytając wpisy na rozmaitych blogach, zauważyłem w komentarzach niezrozumienie idei interfejsu. Jest to dość ważny koncept i poniekąd klucz do implementacji większości wzorców projektowych.

Czy to ptak ? Czy samolot ? Nie ! To interfejs !

Interfejs to przede wszystkim dokumentacja. Interfejs opisuje role jaką ma odegrać pewien twór.

Najprościej jest to sobie wyobrazić na prostym przykładzie gniazdka elektrycznego. Specyfikując problem transferu prądu pomiędzy dwoma elementami sieci elektrycznej definiujemy interfejs „podłączalny”. Zawiera on opis żeńskiego gniazdka elektrycznego w rodzaju: „Gniazdko składa się z dwóch otworów oddalonych od siebie o X centymetrów zakończonych metalowymi końcówkami, napięcie wynosi 230V a częstotliwość prądu 50 Hz”.

Dzięki temu, że zdefiniowaliśmy interfejs „podłączalny” i jest on powszechnym standardem w Europie to gdziekolwiek byśmy nie pojechali na wakacje w UE, będziemy mogli korzystać z naszych urządzeń elektrycznych. Co więcej, dzięki temu, że mamy jasno określony interfejs, to w przypadku, gdy np posiadamy urządzenie, które nie spełnia tego interfejsu, a chcemy je podpiąć do prądu, możemy zbudować adapter, który umożliwi dostosowanie się obu interfejsów ( urządzenia i gniazdka ) do siebie.

Wspomniałem wcześniej, że interfejs definiuje role obiektów, przyjrzyjmy się temu bliżej. Załóżmy, że konstruujemy telewizor. Jako producentowi telewizora, zależy nam na tym, żeby można było go podłączyć do prądu oraz obsługiwać z pilota.

Nasz telewizor będzie implementował więc dwa interfejsy „podłączalny” i „pilotowalny”, dzięki którym będzie spełniał oczekiwania nasze i klientów ;).

Z powyższego opisu widać, że generalnie interfejs określa protokół komunikacyjny między dwoma obiektami. Tak też należy go stosować. Dzięki interfejsom, nie musimy martwić się o implementacje. W końcu co to byłby za świat, gdyby tylko jedna firma produkowała gniazdka elektryczne.

Mam nadzieje, że powyższy artykuł w sposób przystępny przybliżył zagadnienie interfejsów. Jeżeli mielibyście jakieś pytania zapraszam do wpisywania ich w komentarzach 😉

  1. Alan Gabriel Bem pisze:

    Dobrą praktyką jest definiowanie interfejsów dla wszystkich (lub większości) części systemu. Nawet jeżeli w praktyce używa się klas abstrakcyjnych.

    Nazywa się to „Design by contract” i wiele razy uratowało mi tyłek :)

  2. Wojciech Soczyński pisze:

    Tak to święta prawda, dzięki takiemu podejściu myślimy bardziej o interakcji między elementami systemu a mniej o implementacji, która czasami potrafi wypaczyć dobry design.

  3. g0tan pisze:

    Dodam, że podczas dekompozycji dokumentacji projektowej powinniśmy już wytyczyć potrzebne interfejsy 😉 Później tylko siadać i właściwie klepać gotowe oprogramowanie… – z tego to sam się uśmiałem, ale tak powinno być 😉

  1. There are no trackbacks for this post yet.

Leave a Reply

Informuj mnie o odpowiedziach poprzez e-mail. Możesz również subskrybować wpis bez zostawiania komentarza.