Czytałam troche na forum, czytałam troche w książce i ani z książki ani z forum nie zrozumiałam zabardzo.
Po co jest implementować do klasy interface skoro i tak faktyczne ciało metody dopiero w klasie jest, nie umiem tego pojąć choć juz ktos na jednym forumie na autach to demonstrował i ja dalej niczewo, moze dlatego ze mnie auta nie kręcą ;-) no tak czy siak nie łapie. I zastanawiam się czy moze po to jest interface bo może z wywołanych jednozesnie klas mozna pozbierac metody i np bez dziedziczenia po klasie z innej klasy wziąć metode, prosze oświećcie blondi [diabel]
Interfejsy jest w celu narzucenia definiowania funkcji. Implementując interfejs musisz w klasie go implementującej utworzyć funkcje takie jakie interfejs definiuje. Przykład: interfejs bazy danych zawiera abstrakcyjne funkcje: Query, NumRows. W klasie w której zaimplementujesz ten interfejs tez musisz utworzyć takie funkcje które będęą realizowały już konkretne zadania. Interfejs jest jakby szablonem na podstawie kórego tworzysz klasy.
Przykład wizualny:
Jakaś strona może korzystać z różnych baz danych np. MySQL i postgreSQL. Są napisane 2 klasy do obsługi tych baz. Skrypt niezależnie od dołączonej klasy wywołuje następujące funkcje: Query, NumRows, Connect, Disconnect.
Klasa MySQL ma zdefiniowane wszystkie funkcje.
Klasa PostgreSQL nie ma zdefiniowanej funkcji Connect.
Z punktu widzenia projektowania klas wszystko jest poprawnie, ale po wybraniu klasy do obsługi PgSQL skrypt się krzaczy, bo nie widzi funkcji Connect tej klasy.
Po to jest interfejs - piszesz go i w jego założeniach dajesz wszystkie 4 funkcje:
interface db {
public function Connect();
public function Disconnect();
public function Query();
public function NumRows();
}
Teraz projektując klasy do obsługi baz danych implementujesz ten interfejs i jak nie napiszesz funkcji zdefiniowanej w tym interfejsie nastąpi błąd skryptu że klasa nie implementuje jakiejś funkcji. Masz dzięki temu pewność że budowane klasy w oparciu o ten interfejs będą miały wszystkie założone przez Ciebie funckje które skrypt wykorzystuje (wymagane minimum) - bo klasy mogą zawierać jeszcze dodatkowe funkcje, ale bez tych klasa nie jest poprawna.
Klasa:
class mysql implements db {
public function Connect(){
}
public function Disconnect(){
}
public function Query(){
}
public function NumRows(){
}
public function DODATKOWA(){
}
}
spełni wymogi, ale gdyby nie miała np. funkcji Query() automatycznie nie spełnia wymogów "szablonu" jakim jest interfejs i nie można z niej korzystać - skrypt nie będzie nawet próbował z niej korzystać co daje na dzień dobry weryfikację czy klasa ma wszystkie potrzebne do komunikacji funkcje.
Interfejs może definiować tylko abstrakcyjne funkcje, nie może definiować pól klasy (zmiennych klasy).
oooo teraz już rozumiem :) dzięki wielkie :)</image>