Принцип открытости/закрытости гласит, что программный модуль или класс должны быть открыты для расширения, но закрыты для модификации.
Другими словами, поведение модуля или класса должно иметь возможность расширяться без изменения исходного кода модуля или класса.
Примером этого в PHP может быть класс для фигуры, такой как прямоугольник. Класс должен иметь методы для вычисления площади и периметра прямоугольника, но не должен иметь конкретных реализаций для вычисления площади и периметра определенной формы (например, квадрата). .
Вместо этого класс должен быть открыт для расширения, чтобы можно было создавать подклассы для предоставления конкретных реализаций для различных форм.
Вот пример базового класса формы в PHP:
class Shape { protected $width; protected $height; public function __construct($width, $height) { $this->width = $width; $this->height = $height; } public function area() { return 0; } public function perimeter() { return 0; } }
В этом классе есть методы для вычисления площади и периметра, но они возвращают 0, потому что конкретная реализация для фигуры не предусмотрена.
Вот пример класса прямоугольника, который расширяет класс фигуры и обеспечивает конкретную реализацию методов области и периметра:
class Rectangle extends Shape { public function area() { return $this->width * $this->height; } public function perimeter() { return 2 * ($this->width + $this->height); } }
Теперь, если вы хотите добавить новую форму, вы можете сделать это, просто создав новый класс, который расширяет класс формы и обеспечивает реализацию методов площади и периметра.
class Square extends Shape { public function area() { return $this->width * $this->width; } public function perimeter() { return 4 * $this->width; } }
Таким образом, мы можем добавлять новые фигуры, не изменяя существующий класс форм.
Другой способ реализации принципа открытости/закрытости в PHP — использование интерфейсов. Интерфейс определяет набор методов, которые должен реализовать класс, но не предоставляет какой-либо реализации для этих методов.
Вот пример интерфейса формы в PHP:
interface Shape { public function area(); public function perimeter(); }
Теперь любой класс, реализующий этот интерфейс, должен предоставить реализацию методов area()
и perimeter()
.
Вот пример класса прямоугольника, который реализует интерфейс Shape:
class Rectangle implements Shape { protected $width; protected $height; public function __construct($width, $height) { $this->width = $width; $this->height = $height; } public function area() { return $this->width * $this->height; } public function perimeter() { return 2 * ($this->width + $this->height); } }
А вот пример квадратного класса, который также реализует интерфейс Shape:
class Square implements Shape { protected $width; public function __construct($width) { $this->width = $width; } public function area() { return $this->width * $this->width; } public function perimeter() { return 4 * $this->width; } }
Таким образом, мы можем добавить новую фигуру, просто создав новый класс, реализующий интерфейс фигуры, не изменяя существующие классы.
Подводя итог, можно сказать, что принцип открытости/закрытости — это принцип проектирования, который гласит, что модуль или класс должны быть открыты для расширения, но закрыты для модификации. Этого можно достичь с помощью наследования и полиморфизма или с помощью интерфейсов и внедрения зависимостей.
Надеюсь, вам понравилась моя статья, не стесняйтесь комментировать и оставлять предложения или идеи…
Удачного программирования!
Если этот пост был полезен, подпишитесь на меня или нажмите кнопку аплодисментов 👏 ниже.