Powracamy znowu do języka Java. Po raz pierwszy pragnę się wypowiedzieć na temat interfejsów i przykładów ich zastosowania. Aby nikt nie poczuł się zagubiony, artykuł ten będzie podzielony na dwie części: pierwsza będzie służyła wstępnemu tłumaczeniu czym są interfejsy w Javie, a druga będzie obrazować przykład ich sensownego wykorzystywania.

INTERFEJSY W JAVIE. TŁUMACZENIE NA SZYBKO

Interfejs to specjalny zestaw metod abstrakcyjnych posiadających jedynie "prototypy" funkcji (będąc zgodnym z terminologią języka C). Bardziej po ludzku, zawiera jedynie nagłówki funkcji, aby można było bez przeszkód "podstawiać" dowolne instrukcje do tych metod w każdym innym obiekcie implementującym ten sam interfejs. Są bardzo przydatne w sytuacjach gdy dwie różne klasy są sobie obce, nie mają ze sobą powiązań ani części wspólnych, ale współdzielą te same zachowania lub zdarzenia.

To jest taka szybka definicja zachowująca najważniejsze elementy. Oto podstawowy kod źródłowy przedstawiający jak się tworzy interfejsy w Javie:

interface Damageable
{
	public abstract void damage(int x);
}

W pierwszej kolejności idzie słowo kluczowe "interface", następnie dowolna nazwa i para klamerek. W środku bloku deklarujemy same nagłówki funkcji (to jest bardzo ważne!). Dodajemy modyfikator "public abstract" oraz nie zwracamy nigdy żadnej wartości, zatem piszemy "void". Potem dowolna nazwa metody oraz ewentualne parametry formalne. Gdy chcemy mieć więcej metod w interfejsie, po średniku piszemy taki sam wzór, tylko zmieniamy nazwę i dorzucamy inne czy żadne parametry. Interfejsy w Javie wymagają zdefiniowania WSZYSTKICH metod wchodzących w skład zaimplementowanego interfejsu przez dowolną klasę.

Korzystając z kolejnego słowa kluczowego "implements" jesteśmy w stanie zaimplementować nasz interfejs do dowolnej klasy. Jeżeli klasa ta dziedziczy od innej klasy wyższego rzędu, najpierw ma być klauzula "extends", a potem "implements". Poniższy kod pokazuje jak działają interfejsy w Javie.

class Wall implements Damageable
{
	private int endurance = 50;
	
	public void damage(int x)
	{
		endurance -= x;
		
		if(endurance <= 0)
		{
			System.out.println("Ściana została zniszczona...");
		}
		else
		{
			System.out.println("Ściana otrzymała " + x + " obrażeń.");
		}
	}
}

INTERFEJSY W JAVIE. PRZYKŁADY SENSOWNYCH ZASTOSOWAŃ

Tutaj sobie darujemy kody źródłowe, podam jedynie "tekstowe" przykłady sensownych zastosowań interfejsów. Pierwszy z nich jest nader oczywisty, to jest "podpinanie" zdarzeń do przycisków, pól tekstowych, klawiatury i tym podobnych rzeczy. Na przykład dla wykrywania wciśniętych klawiszy dodajecie "addKeyListener" i podajecie wszystkie metody z notacją "@Override". Tak, to też jest interfejs.

Drugi przykład to wyszukiwanie wspólnych zachowań dla obiektów, które nie łączy żadna relacja ani podobieństwo, tak jak napisałem poprzednio. Przykład, który zawsze podaję to jest klasa ściany i człowieka. Obu można "uszkodzić" na swój własny sposób. Ścianę można uszkodzić doprowadzając ją do ruiny. Człowieka też można "uszkodzić" w pewnym znaczeniu tego słowa, na przykład rozbijając mu nos. Zachowanie jest wspólne, ale skutki różne. U ściany to będą zgliszcza, u człowieka poniesienie śmierci. Może mało elegancki przykład jednak potrafi dobrze zobrazować jak bardzo użyteczne są interfejsy w Javie.


To tyle na dzisiaj. Interfejsy to bardzo ciekawa rzecz i każdy programista Java musi rozumieć sens ich istnienia.

PODOBNE ARTYKUŁY