Kiedy wdrożyć i rozszerzyć?

  • Kiedy należy stosować implement LUB extend?
  • jakie są prawdziwe przykłady?

Czy to prawda?

Implementacja wydaje się być sposobem na wymuszenie istnienia pewnych metod w klasie i poprawnego sformatowania tych metod. Implementacja czy nie jest sposobem przekazywania zmiennych lub "ustawień" do klasy?

oczekiwany scenariusz realny: mam platformę e-commerce z wiele klas płatności, wszystkie według tego samego wzoru. Kiedy należy dodać nową klasę płatności, bardzo łatwo jest postępować zgodnie ze zdefiniowanym wzorem interface, aby upewnić się, że wszystkie bity i kawałki są tam od początku.

Rozszerzanie klas sprawia, że rozszerzone (dziecko?) klasa dziedziczy wszystko od swojej macierzystej klasy z wyjątkiem metod i zmiennych zadeklarowanych jako private?

przewidywany scenariusz realny: mam jedną klasę o nazwie sessions z dwoma klasami dla dzieci nazwane sessioncookies i databasesessions. sessioncookies i databasesessions, razem dziedziczą wiele wzajemnych opcji konfiguracji z sesji macierzystych, co ułatwia zmianę opcji konfiguracji, aby wpłynąć na wszelkiego rodzaju przechowywanie danych odwiedzających.

Author: Geoffrey Hale, 2011-02-10

1 answers

Dziedziczenie jest przydatne, aby zmniejszyć ilość kodu, który przepisujesz. Jeśli masz kilka klas z kilkoma typowymi metodami lub polami, zamiast definiować te metody i pola w kółko, możesz włączyć je do klasy bazowej i kazać każdej z klas potomnych rozszerzyć tę klasę bazową.

Interfejsy (i implements) są przydatne, gdy chcesz zdefiniować wspólny protokół dla zachowania grupy obiektów. Na przykład, możesz zlecić, aby obiekty, które są porównywalne można porównać dla równości i hashed, itp.

Użycie dziedziczenia jest ostatecznie wyborem projektu. Zwróć uwagę na przypadki, w których definiujesz te same metody w kilku klasach; są to doskonałe przypadki, w których możesz włączyć te metody do klasy bazowej. To samo dotyczy klas, które obserwują niektóre z tych samych cech: możesz zagwarantować spójność, umieszczając te cechy w interfejsie, który ma być zaimplementowany przez te powiązane klasy.

Dziedziczenie jest dużym pojęciem w OOP, które wykracza daleko poza tylko PHP. Polecam przeczytać artykuł na Wikipedii o dziedziczeniu i być może wzorcach projektowych przez Gang czterech.

Wierzę, że Twoje zrozumienie dziedziczenia jest głównie poprawne. Następnym krokiem byłoby wykorzystanie go w produkcji.

 54
Author: Rafe Kettler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-10 19:57:07