Jump to content
View in the app

A better way to browse. Learn more.

T.M.I IThub

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Введение: зачем вообще это ваше ООП?

Если ты только начинаешь путь программиста, то, скорее всего, уже слышал загадочные слова: ООП, классы, объекты, инкапсуляция, наследование… В этот момент многие новички испытывают лёгкую панику и желание вернуться к echo "Hello, world";.

Спокойно. Ты не один. ООП — это не магия и не заговор сеньоров. Это всего лишь способ думать о программе, чтобы:

  • код был понятнее;

  • код было легче расширять;

  • код было не стыдно показать другим (и себе через полгода).

Сегодня мы разберём ООП от и до, простым человеческим языком, с примерами на PHP, с шутками и жизненными аналогиями.


Что такое ООП простыми словами

ООП (объектно-ориентированное программирование) — это подход, при котором программа состоит из объектов, которые:

  • имеют данные (состояние);

  • умеют что‑то делать (поведение);

  • общаются друг с другом.

Аналогия из жизни (без неё никак)

Представь, что ты играешь в RPG.

  • Персонаж — это объект

  • Класс персонажа (воин, маг) — это класс

  • Здоровье, мана, сила — это свойства

  • Ударить мечом, кастануть огненный шар — это методы

Примерно так же всё работает и в коде.


Класс — это чертёж

Класс — это описание того, каким должен быть объект.

Класс — как чертёж дома. По одному чертежу можно построить много одинаковых домов.

Пример класса в PHP

class Car {
    public string $brand;
    public string $color;

    public function drive() {
        echo "Машина едет";
    }
}

Здесь мы описали:

  • что у машины есть бренд и цвет;

  • что машина умеет ехать.


Объект — это конкретная вещь

Объект — это экземпляр класса. То есть реальная штука, созданная по чертежу.

$car1 = new Car();
$car1->brand = 'BMW';
$car1->color = 'black';

$car1->drive();

Теперь:

  • $car1 — это конкретная машина;

  • у неё есть бренд BMW;

  • она умеет ехать (и едет).

Можно создать хоть тысячу машин:

$car2 = new Car();
$car2->brand = 'Toyota';
$car2->color = 'white';

Свойства и методы

Свойства

Свойства — это данные объекта.

public string $brand;

Проще говоря: что объект знает о себе.

Методы

Методы — это действия объекта.

public function drive() {
    echo "Машина едет";
}

Проще говоря: что объект умеет делать.


Конструктор: момент рождения объекта

Когда объект создаётся, мы часто хотим сразу задать ему начальные данные.

Для этого есть конструктор.

class Car {
    public string $brand;
    public string $color;

    public function __construct(string $brand, string $color) {
        $this->brand = $brand;
        $this->color = $color;
    }
}

Использование:

$car = new Car('Audi', 'red');

$this — это ссылка на текущий объект. Типа «я сам».


Инкапсуляция: не трогай, сломается

Инкапсуляция — это принцип, который говорит:

Внутренности объекта должны быть скрыты от внешнего мира.

Зачем это нужно?

Чтобы:

  • объект нельзя было сломать случайно;

  • данные изменялись только правильным способом.

Модификаторы доступа

В PHP есть три основных:

  • public — доступно всем

  • protected — доступно классу и наследникам

  • private — доступно только внутри класса

class BankAccount {
    private int $balance = 0;

    public function deposit(int $amount) {
        $this->balance += $amount;
    }

    public function getBalance(): int {
        return $this->balance;
    }
}

Теперь нельзя сделать так:

$account->balance = 1000000; // 

нельзя

И это хорошо. Банк доволен. Ты доволен. Мир стабилен.


Наследование: не изобретай велосипед

Наследование позволяет создавать новые классы на основе существующих.

class Animal {
    public function speak() {
        echo "Животное издаёт звук";
    }
}

class Dog extends Animal {
    public function speak() {
        echo "Гав!";
    }
}
$dog = new Dog();
$dog->speak(); // Гав!

Собака — это животное, но с уточнениями.


Полиморфизм: один интерфейс — разное поведение

Полиморфизм — это когда разные объекты могут отвечать на один и тот же вызов по‑разному.

class Cat extends Animal {
    public function speak() {
        echo "Мяу";
    }
}
$animals = [new Dog(), new Cat()];

foreach ($animals as $animal) {
    $animal->speak();
}

Результат:

Гав!
Мяу

Один метод — разное поведение. Магия? Нет, полиморфизм.


Абстракция: только главное

Абстракция — это когда мы описываем что объект должен делать, но не как именно.

abstract class Shape {
    abstract public function getArea(): float;
}

class Square extends Shape {
    public function __construct(private float $side) {}

    public function getArea(): float {
        return $this->side ** 2;
    }
}

Абстрактный класс — это как ТЗ от заказчика: «сделай», а как — твоя проблема.


Итог: вся суть ООП в одном месте

ООП держится на четырёх китах:

  1. Инкапсуляция — скрываем лишнее

  2. Наследование — переиспользуем код

  3. Полиморфизм — один интерфейс, разное поведение

  4. Абстракция — работаем с сутью, а не деталями

Если ты понял это — поздравляю, ты понял ООП.


Напоследок

ООП — это не цель, а инструмент. Он не делает код автоматически хорошим, но помогает писать его осознанно.

Если после этой статьи ты:

  • не боишься слова «класс»;

  • понимаешь, зачем нужны объекты;

  • можешь объяснить ООП другу на кухне;

значит, всё получилось.

А если нет — перечитай ещё раз. Программисты так делают постоянно.

Удачи в коде и поменьше фатальных ошибок.

User Feedback

Recommended Comments

There are no comments to display.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.