Назад к вопросам
Junior
108
questionbank
Расскажи о принципах объектно-ориентированного программирования (ООП).
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
ООП основано на четырех ключевых принципах:
-
Инкапсуляция: Связывание данных (свойств) и методов (функций), работающих с этими данными, в единое целое — объект. Это скрывает детали реализации и предоставляет контролируемый доступ к данным.
<?php class BankAccount { private float $balance = 0; // Данные скрыты public function deposit(float $amount): void { // Методы предоставляют доступ if ($amount > 0) { $this->balance += $amount; } } public function getBalance(): float { return $this->balance; } } ?> -
Абстракция: Выделение существенных характеристик объекта и скрытие несущественных деталей. Представляет собой упрощенную модель реального мира.
<?php abstract class Shape { // Абстрактный класс abstract public function area(): float; // Абстрактный метод // Может иметь и конкретные методы, например: public function getDescription(): string { return "This is a shape."; } } class Circle extends Shape { private float $radius; public function __construct(float $radius) { $this->radius = $radius; } public function area(): float { // Реализация абстрактного метода return M_PI * $this->radius * $this->radius; } } ?> -
Наследование: Создание нового класса (дочернего) на основе существующего (родительского), наследуя его свойства и методы. Это способствует повторному использованию кода.
<?php class Animal { protected string $name; public function __construct(string $name) { $this->name = $name; } public function eat(): void { echo "{$this->name} is eating.\n"; } } class Dog extends Animal { // Dog наследует от Animal public function bark(): void { echo "{$this->name} says Woof!\n"; } } $dog = new Dog("Buddy"); $dog->eat(); // Использование унаследованного метода $dog->bark(); ?> -
Полиморфизм: Возможность объектов разных классов реагировать на один и тот же вызов метода по-своему. "Множество форм".
<?php interface Speakable { // Интерфейс для примера полиморфизма public function speak(): void; } class Cat implements Speakable { public function speak(): void { echo "Meow!\n"; } } class Duck implements Speakable { public function speak(): void { echo "Quack!\n"; } } function makeSound(Speakable $animal): void { // Функция принимает разные типы объектов $animal->speak(); // Вызов одного и того же метода } $cat = new Cat(); $duck = new Duck(); makeSound($cat); // Вызов метода Cat::speak() makeSound($duck); // Вызов метода Duck::speak() ?>