Sobes.tech
Junior

Разкажи за принципите на обектно-ориентираното програмиране (ООП).

sobes.tech AI

Отговор от AI

Обектно-ориентираното програмиране (ООП) се основава на четири ключови принципа:

  1. Инкапсулация: Свързване на данни (свойства) и методи (функции), които работят с тези данни, в едно цяло — обект. Това скрива детайлите на реализацията и предоставя контролиран достъп до данните.

    <?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;
        }
    }
    ?>
    
  2. Абстракция: Изделяне на съществените характеристики на обекта и скриване на незначителните детайли. Представлява опростен модел на реалния свят.

    <?php
    abstract class Shape { // Абстрактен клас
        abstract public function area(): float; // Абстрактен метод
    
        // Може да има и конкретни методи, например:
        public function getDescription(): string {
            return "Това е форма.";
        }
    }
    
    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;
        }
    }
    ?>
    
  3. Наследяване: Създаване на нов клас (дете) на базата на съществуващ (родител), наследявайки неговите свойства и методи. Това подпомага повторното използване на кода.

    <?php
    class Animal {
        protected string $name;
    
        public function __construct(string $name) {
            $this->name = $name;
        }
    
        public function eat(): void {
            echo "{$this->name} яде.\n";
        }
    }
    
    class Dog extends Animal { // Dog наследява от Animal
        public function bark(): void {
            echo "{$this->name} казва: Woof!\n";
        }
    }
    
    $dog = new Dog("Buddy");
    $dog->eat();  // Използване на наследения метод
    $dog->bark();
    ?>
    
  4. Полиморфизъм: Възможност обектите от различни класове да реагират на една и съща извикване на метод по свой начин. "Множество форми".

    <?php
    interface Speakable { // Интерфейс за пример за полиморфизъм
        public function speak(): void;
    }
    
    class Cat implements Speakable {
        public function speak(): void {
            echo "Мяу!\n";
        }
    }
    
    class Duck implements Speakable {
        public function speak(): void {
            echo "Кря!\n";
        }
    }
    
    function makeSound(Speakable $animal): void { // Функция, която приема различни типове обекти
        $animal->speak(); // Вика същия метод
    }
    
    $cat = new Cat();
    $duck = new Duck();
    
    makeSound($cat); // Вика метода Cat::speak()
    makeSound($duck); // Вика метода Duck::speak()
    ?>