[ Pobierz całość w formacie PDF ]
interface Przekaznik {
void wykonajZestawInstrukcji(String instrukcje);
}
2.4.2. Implementacje
Jak wcześniej wspominałem, sam interfejs z punktu widzenia metod jest tylko dekla-
racją ich wystąpienia. Samo ciało metody musi zostać zaimplementowane w innym
miejscu. Wspominałem również, że sam interfejs nie może być miejscem tej imple-
mentacji. Podobnie jak wirus musi się on dokleić do klasy, aby był w pełni funk-
cjonalny. Takie doklejanie odbywa się z użyciem słowa kluczowego implements. Po
dodaniu tego fragmentu mogę wreszcie na listingu 2.56 zaprezentować pełny format
nagłówka definicji klasy.
Listing 2.56. Pełny format nagłówka klasy
class Nazwa [extends NazwaNadklasy]
[implements Interfejs1 [, Interfejs2 [...]]]
{
public typ metoda_z_interfejsu([parametry]) {
Rozdział 2. f& Klasy i obiekty w Javie 75
ciaco_implementowanej_metody
}
// część główna klasy
// według wcześniejszego schematu
}
Już wskazuje pobieżna analiza nagłówka, klasa może implementować większą liczbę
interfejsów. W części głównej klasy musi znalezć się deklaracja i implementacja me-
tody, której istnienie jest zadeklarowane w interfejsie (z wyjątkiem przypadku, kiedy
klasę deklarujemy jako abstrakcyjną). Należy pamiętać, że do ciała klasy należy dodać
metody zadeklarowane w implementowanych interfejsach. Metody te muszą być de-
klarowane z modyfikatorem public. Przykładowa implementacja interfejsu przekaznik
zadeklarowanego wcześniej z użyciem klasy UrzadzenieZdalnieSterowane będzie miała
postać pokazaną na listingu 2.57.
Listing 2.57. Przykładowa implementacja interfejsu
class UrzadzenieZdalnieSterowane
extends Urzadzenie implements Przekaznik {
private int dekodujRozkaz(String instrukcje, int polozenie) {
// tu dekodowanie instrukcji
// o numerze polozenie na Rozkaz typu int
}
private int dekodujParametr(String instrukcje, int polozenie) {
// tu dekodowanie parametru o numerze polozenie
// z ciągu tekstowego na typ int
}
private void wykonajRozkaz(int rozkaz, int parametr) {
// tu wykonanie instrukcji rozkaz
// z parametrem parametr
}
public void WykonajpestawInstrukcji(String instrukcjep b
int n = 0;
int r, p;
r = dekodujRozkaz(instrukcje, np;
p = dekodujParametr(instrukcje, np;
while (r>0p b
wykonajRozkaz(r, pp;
n++;
r = dekodujRozkaz(instrukcje, np;
p = dekodujParametr(instrukcje, np;
}
}
}
Na listingu 2.57 wytłuszczona została metoda wykonajZestawInstrukcji pochodząca
z interfejsu Przekaznik. Można też zauważyć, że poza dekodujRozkaz, dekodujParametr
i wykonajRozkaz klasa nie zawiera żadnych innych metod charakterystycznych dla
samej klasy UrzadzenieZdalnieSterowane.
76 Java. Programowanie obiektowe
Stosując interfejsy, należy pamiętać o mogącym pojawić się problemie wynikającym
z konfliktu nazw metod. Jakkolwiek Java umożliwia przeciążanie metod, może się
zdarzyć, że interfejsy implementowane w danej klasie dostarczają metody o tej samej
nazwie, tym samym zestawie parametrów i różnym wyniku. Kompilator nie jest w stanie
obsłużyć takiego przeciążenia metod, więc generuje błąd semantyki języka. Problem
ten szerzej opisałem w paragrafie 2.4.6. Dziedziczenie interfejsów .
2.4.3. Zastosowanie interfejsów
Wyobrazmy sobie, że tworzymy oprogramowanie do zarządzania inteligentnym bu-
dynkiem. Inwestor zakupił do tego budynku bardzo wymyślne urządzenie klimatyza-
cyjne, do którego dołączony był sterownik obsługi napisany w Javie. Oczywiście
zgodnie z konwencją języka jest to w pełni funkcjonalna klasa, która udostępnia pro-
gramiście metody ustawTemperature, ustawWilgotnosc i ustawSileNadmuchu. Klasa ta
jest w pełni funkcjonalna, to znaczy możemy użytkownikowi naszego programu udo-
stępnić korzystanie z każdej funkcji klimatyzatora, ale tylko w sposób manualny, to
znaczy może on zmieniać tylko jeden parametr w danym momencie i nie może zażą-
dać, aby na przykład temperatura zmieniła się, ale dopiero za godzinę. Nie ma się co
dziwić, w końcu jest to tylko sterownik do fizycznego urządzenia. Pełną funkcjonal-
ność można uzyskać dopiero po wprowadzeniu własnego, bardziej zaawansowanego
programu. Moglibyśmy oczywiście utworzyć nową klasę dziedziczącą własności po
klasie sterownika klimatyzacji i w jej rozszerzeniu zamieścić nowe metody, które
umożliwiłyby stworzenie programatora zmian. Nie jesteśmy jednak początkującymi
programistami. Poprzednio wykonywaliśmy bardzo podobną pracę dla małej lokalnej
[ Pobierz całość w formacie PDF ]
pobieranie ^ do ÂściÂągnięcia ^ pdf ^ download ^ ebook
Menu
- Home
- C_Biblioteka_standardowa_Podrecznik_programisty_cpbspp
- Delphi_7_Kompendium_programisty_del7ko
- Grayslake 3 Roaring up the wrong tree Celia Kyle
- Awakening Pr
- 79. Saer, Juan JosÄĹ Glosa
- Lynn Hagen Brac Pack 27 Seth's Chance
- 16.PSYCHOSFERA
- Jack L. Chalker WOS 4 The Return of Nathan Brazil
- Kwiaty nie sa konieczne Cari Quinn
- Bunch, Chris & Cole, Allan Sten 1 Sten
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- monissiaaaa.pev.pl
Cytat
Fallite fallentes - okłamujcie kłamiących. Owidiusz
Diligentia comparat divitias - pilność zestawia bogactwa. Cyceron
Daj mi właściwe słowo i odpowiedni akcent, a poruszę świat. Joseph Conrad
I brak precedensu jest precedensem. Stanisław Jerzy Lec (pierw. de Tusch - Letz, 1909-1966)
Ex ante - z przed; zanim; oparte na wcześniejszych założeniach.