Пример ответа
1) Короткий ответ
ООП (Объектно-Ориентированное Программирование) — это парадигма программирования, в которой программа строится как совокупность объектов, взаимодействующих друг с другом.
3) Четыре основных принципа ООП
Инкапсуляция
Объединение данных и методов в одном объекте + контроль доступа.
Пример: Приватные свойства с публичными геттерами/сеттерами.Наследование
Создание нового класса на основе существующего с переносом функциональности.
Пример: КлассAdminUser
наследует отUser
.Полиморфизм
Возможность использовать объекты разных классов через общий интерфейс.
Пример: МетодcalculateArea()
по-разному работает дляCircle
иRectangle
.Абстракция
Сокрытие сложной реализации и представление только существенных характеристик.
Пример: ИнтерфейсPaymentGateway
скрывает детали оплаты.
5) Пример на PHP
php
Copy
Download
// Абстракция и Инкапсуляция
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;
}
}
// Наследование
class SavingsAccount extends BankAccount {
private float $interestRate;
public function applyInterest(): void {
$interest = $this->getBalance() * $this->interestRate;
$this->deposit($interest);
}
}
// Полиморфизм
interface Shape {
public function calculateArea(): float;
}
class Circle implements Shape {
public function __construct(private float $radius) {}
public function calculateArea(): float {
return pi() * $this->radius ** 2;
}
}
class Rectangle implements Shape {
public function __construct(private float $width, private float $height) {}
public function calculateArea(): float {
return $this->width * $this->height;
}
}
// Использование полиморфизма
function printArea(Shape $shape) {
echo "Area: " . $shape->calculateArea(); // Работает с любым Shape
}
$circle = new Circle(5);
$rectangle = new Rectangle(4, 6);
printArea($circle); // Area: ~78.54
printArea($rectangle); // Area: 24
6) Follow-up вопросы
В чем разница между абстрактным классом и интерфейсом? → Реализация vs Контракт.
Когда использовать композицию вместо наследования? → "Has-a" vs "Is-a".
7) Практический совет
Перепишите 1-2 процедурных скрипта в ООП-стиле, выделив сущности в классы с инкапсулированными данными.
Реализуйте иерархию классов с полиморфизмом (например, разные типы уведомлений:
EmailNotification
,SMSNotification
с общим интерфейсомNotification
).
New chat