Sobes.tech
Junior

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

sobes.tech АИ

Одговор од АИ

Објектно-оријентисано програмирање (ООП) засновано је на четири кључна принципа:

  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()
    ?>