Spisie treści
Polimorfizm to zdolność klasy abstrakcyjnej lub określonego obiektu do reagowania na tę samą metodę własnym zachowaniem. Polimorfizm określa, że przekazany lub oczekiwany parametr lub obiekty mogą przybierać różne formy i mieć różne zachowanie przy użyciu tych samych metod.Kiedy wykonujemy programowanie obiektowe z polimorfizmami, musimy pamiętać, że instancja klasy lub obiektu może zostać wywołana i będzie działać i zachowywać się tak samo niezależnie od klasy, do której należy obiekt. Jeśli mamy wiele klas i obiektów, musimy dobrze ustrukturyzować hierarchie klas i klasy abstrakcyjne. Kolejną zaletą jest możliwość deklarowania lub programowania metod o tej samej nazwie, nawet jeśli ich funkcjonalność jest zupełnie inna, ponieważ odwołujemy się do instancji klasy.
Jako przykład przyjmijmy klasę abstrakcyjną, która reprezentuje liczbę pojazdów, które mają wspólne dane dotyczące poziomu paliwa, marki i modelu pojazdu.
Właściwościami klasy Pojazdy będą wówczas paliwo zawierające liczbę litrów załadowanych do pojazdu i marka i model pojazd.
Poniżej definiujemy wspólne metody dla wszystkich pojazdów, które będą ładowały paliwo i pokażą, ile pozostało do zużycia, dodatkowo musimy być w stanie przypisać każdemu pojazdowi markę i model, a także być w stanie zapoznać się z jego marką i modelem . Następnie definiujemy metody dla klasy Vehicles.
paliwo = $ paliwo; } funkcja public show fuel () {return $ this-> fuel; } public function assignvehicle ($ marka, $ model) {$ this-> brandymodel = $ brand.' '. $ model; } funkcja public showbrandmodel () {return $ this-> markandmodel; }}?> zm13 ->Wtedy zaczniemy tworzyć klasy, które dziedziczą po pojazdach i będą one miały swoje konkretne metody, np. stworzymy klasę Samochody, będzie ona miała właściwość wyprzedzania samochodu i za każdym razem, gdy się posuwa, zużyje litr paliwa (aby ćwiczenie było łatwe do zrozumienia)
klasa Auta rozszerza Pojazd {funkcja publiczna zaliczki(){// co 10 kilometrów zużywa litr $ to->paliwo -=1; }} // Zakończ klasęTeraz wprowadzimy ogólną klasę dla kierowcy pojazdu, tutaj bierzemy pod uwagę, że jeden kierowca lub kilku może jeździć różnymi pojazdami.
W tej klasie zdefiniujemy konstruktor typu generycznego lub abstrakcyjnego
function __construct ($ object_parameter) {$ this-> myobject = $ object_parameter}Czyli możemy wtedy manipulować dowolnym obiektem, który jest przekazywany jako parametr konstruktora, aby nasza klasa miała możliwość odbierania obiektu jako parametru, to jest polimorfizm, czyli może używać kompletnych obiektów, np. możemy wysyłać klasa autos jako parametr i używa wszystkich ich metod.
Przykłady zaimplementujemy w php 5 dlatego należy pamiętać o zakresie metody i zmiennych, w większości języków jest to bardzo podobne. Aby przypisać lub zmienić zakres zmiennej lub właściwości, musimy użyć odpowiedniego słowa zastrzeżonego, gdy deklarujemy zmienną lub metodę zgodnie z dostępem lub zakresem, który chcemy mieć:
- prywatny: wskazuje, że do zmiennej lub metody można uzyskać dostęp tylko za pomocą metod klasy, do której należy obiekt, a nie z żadnej innej.
- chroniony: wskazuje, że zmienna lub metoda jest dostępna za pomocą metod klasy oraz z dowolnej z jej podklas należących do tej klasy.
- publiczny: wskazuje, że zmienne lub metody są dostępne z dowolnej innej metody lub niezależnie od tego, gdzie należy lub do kogo należy. Uważaj na atrybuty publiczne, ponieważ mogą one modyfikować wartość, która jest również używana przez inną klasę lub inną metodę.
Następnie tworzymy klasę Driver, która będzie miała następujące metody: ładowanie paliwa, przypisywanie pojazdu, przeglądanie marki i modelu, wyprzedzanie pojazdu i sprawdzanie pozostałego paliwa w miarę postępu.
pojazd = $ obiekt; } funkcja publiczna obciążenie paliwem ($paliwo) {$to->pojazd->obciążenie paliwem ($paliwo); } public function assignvehicle ($ make, $ model) {$ this-> vehicle-> assignvehicle ($ make, $ model); } funkcja publiczna brandymodel () {return $ this-> vehicle-> showbrandmodel (); } funkcja publiczna zaliczki () {$ to-> pojazd-> zaliczka (); } funkcja publiczna pozostałe paliwo () {zwróć $ to-> pojazd-> pokaż paliwo (); }}?> zm13 ->Możemy zobaczyć, jak w każdej funkcji klasy Cars tworzymy instancje wspólnych metod klasy Super Vehicles, aby przypisać właściwości lub metody, które są specyficzne i nie są wspólne dla wszystkich pojazdów.
Zobaczmy dalej, jak używać tych klas i samego polimorfizmu.
przypisz pojazd ('Ferrari', '550 MARANELLO').'Zobaczmy teraz prawdziwe zalety polimorfizmu i dziedziczenia klas, dodajmy klasę do
'; // Pokazujemy przypisane echo pojazdu $ferrari-> brandymodel().'
'; // Ładujemy paliwo do pojazdu podając ilość w litrach echo 'Obciążenie paliwem' $ Ferrari-> ładunek paliwa (50).'
'; // Pokazujemy aktualną ilość paliwa echo 'Bieżące paliwo' $ Ferrari-> pozostałe paliwo ().' litry
'; echo 'Pojazd zaawansowany
'; $ ferrari-> postępPojazd (); echo $ ferrari-> brandymodel ().' masz '.$ ferrari-> pozostałe paliwo ().' litrów paliwa
'; // Tworzymy kolejną instancję z innym pojazdem, np. możemy utworzyć zmienną czyli markę i patent $ hondaHB0071 = new Driver (nowe Autos); echo $ hondaHB0071-> assignvehicle ('Honda', 'ACCORD').'
'; echo $ hondaHB0071-> makeandmodel ().'
'; echo 'Obciążenie paliwem' $ hondaHB0071-> obciążenie paliwem (50).'
'; echo 'Bieżące paliwo' $ hondaHB0071-> pozostałe paliwo ().' litry
'; echo „Pojazd Advance Honda”
'; $ hondaHB0071-> zaliczkaPojazd (); echo $ hondaHB0071-> makeandmodel ().' masz ". $ hondaHB0071-> pozostałe paliwo ()." litrów paliwa
'; ?> zm13 ->
// Motocykle klasa Motocykle rozszerza Pojazd {public function Advance() {// co 10 kilometrów zużywa litr $ this-> fuel - = 1; }} $ moto = nowy kierowca (nowe motocykle); echo $ moto-> przypisz pojazd ('Yamaha', 'YBR 125').'
'; echo $ moto-> makeymodel ().'
'; echo 'Obciążenie paliwem' $ motocykl-> ładunek paliwa (10).'
'; echo 'Bieżące paliwo' $ moto-> pozostałe paliwo ().' litry
'; echo 'Zaawansowany pojazd motocyklowy
'; $ moto-> postępPojazd (); echo $ moto-> makeymodel ().' zostawiłeś '.$moto->fuelremaining().' litrów paliwa
'; ?> zm13 ->
Moglibyśmy uwzględnić niezbędne obliczenia, aby zużycie paliwa było bardziej rzeczywiste w zależności od pojazdu.
Zaletą korzystania z polimorfizmu jest to, że możemy tworzyć podobne metody, ale na przykład o różnych parametrach.
Implementacja interfejsów z pHp
Interfejsy to deklaracje, które definiują, jakie metody mogą być zaimplementowane przez klasę, ukrywając, w jaki sposób te metody są używane lub zarządzane. Metody, które są zadeklarowane w interfejsie, muszą być publiczne, aby mogły być dostępne dla klas, które implementujemy. Pozwalają na hermetyzację klas i polimorfizmów.
Aby zaimplementować interfejs z php, używane jest słowo kluczowe implements. Jeśli mamy kilka metod zadeklarowanych w interfejsie, muszą one być zaimplementowane w klasie. Klasy mogą implementować więcej niż jeden interfejs, aby móc uzyskać dostęp do różnych metod, dzięki czemu możemy mieć różne funkcjonalności w różnych klasach.
Widzimy przykład interfejsów
Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt