PGO Interfejsy Michail Mokkas
Spis treści Interfejs Klasa abstrakcyjna a Interfejs Interfejs w Javie Interfejs jako typ Interfejsy i aktualizacja oprogramowania Metody domyślne Zapis obiektu do pliku Odczyt obiektu z pliku Zadania
Interfejs Interfejsy stanowią wspólny środek komunikacji dla niepowiązanych obiektów. Można o tym pomyśleć jako swojego rodzaju kontrakt, który umożliwia dwóm stronom niezależną rozbudowę lub zmiany. Kontrakt ten zobowiązuje także klasy dziedziczące/implementujące dany interfejs o dostarczenie ciała (implementacji) wszystkich metod zdefiniowanych w interfejsie. Interfejsy wyznaczają obowiązkowe metody, a klasy (implementujące je) dostarczają ich implementację.
Klasa abstrakcyjna a Interfejs zmienne dozwolone jedynie stałe (static final) metody abstrakcyjne, statyczne lub domyślne konstruktor dozwolony brak tworzenie obiektu niemożliwe modyfikatory dostępu wszystkie tylko public Implementowane za pomocą słowa kluczowego extends implements rozszerza wyłącznie i tylko jedną klasę wiele interfejsów implementuje pisana w osobnym pliku .java tak
Interfejs w Javie Definiowanie:
Interfejs w Javie kont. 1 Dziedziczenie:
Interfejs jako typ Poprzez definiowanie nowego interfejsu, definiujemy także nowy typ danych. Umożliwia to tworzenie zmiennych o typie interfejsu. Obiekty przypisane do typu danego interfejsu muszą być instancją klasy, która implementuje ten interfejs.
Interfejs jako typ (przykład)
Interfejsy i aktualizacja oprogramowania Interfejsy stosowane są często jako część API (Application Programming Interface). Każda zmiana (np. dodanie nowej metody) interfejsu, który jest używany przez inne klasy spowoduje, że nie będą już działać poprawnie. Rozwiązanie tego problemu stanowi utworzenie nowego interfejsu, który będzie rozszerzał stary. Nowe oprogramowanie/klasy mogą wybrać, który interfejs będą implementować. Alternatywą jest użycie metod domyślnych.
Metody domyślne (default) Przykład: Interfejs Controlable definiuje, jakie metody powinien posiadać pilot do telewizora. Klasa OldRemote reprezentuje pilot telewizora z wbudowanym odtwarzaczem kaset VHS. Klasa NewRemote reprezentuje zaś pilot telewizora z wbudowanymi odtwarzaczami zarówno kaset VHS, jak i płyt DVD. Ponieważ nowe telewizory umożliwiają odtwarzanie płyt DVD, uaktualniamy nasz interfejs o tę funkcjonalność. Aby klasa OldRemote dalej działała bez potrzeby jej zmiany (dodanie implementacji metody playDVD), ustawiamy nowo stworzoną metodę jako domyślną wraz z jej implementacją z poziomu samego interfejsu.
Metody domyślne (default) kont. 1
Zapis obiektu do pliku Aby obiekt klasy był możliwy do zapisu w pliku, musi implementować interfejs Serializable. Pozwala on na zachowanie aktualnego stanu obiektu. Dla klasy Person, ze zmiennymi name i surname oraz konstruktorem Person(String, String) zapis jej obiektów wygląda w następujący sposób:
Odczyt obiektu z pliku
Zadanie E1 Stwórz klasę reprezentującą łódź podwodną (Submarine) implementującą interfejs nawigacji (Navigation). Klasa łodzi podwodnej powinna posiadać następujące zmienne: serial_number (int, long lub String) //numer seryjny fuel_type (String) //napęd armature (String[]) //uzbrojenie Interfejs nawigacji powinien posiadać metody: void submerge(int degree) //zanurzenie void rise(int degree) //wynurzenie void turnLeft(int degree) //obrót w lewo void turnRight(int degree) //obrót w prawo
Zadanie E2 Do klasy poprzedniego zadania (łódź podwodna), dodaj implementowanie interfejsu Sonar z metodami: void turnOn() void turnOff() int sendSignal(int number_of_repeats) void displayScan () Jako implementacja metod wystarczy System.out.println(“Sonar włączony.”); itp.
Zadanie E3 Do poprzedniego interfejsu (nawigacja) dodaj metody void autopilot(), void callForHelp() oraz boolean isDamaged() nie przerabiając w żaden sposób klasy Submarine. Klasa Submarine powinna dalej współgrać z interfejsem nawigacji bez potrzeby implementowania nowych metod.
Zadanie E4 Korzystając z interfejsu Serializable, dodaj możliwość zapisu i odczytu obiektu łodzi podwodnej do/z pliku.