Sobes.tech
Junior

Povedz mi o princípoch objektovo orientovaného programovania (OOP).

sobes.tech AI

Odpoveď od AI

Objektovo-orientované programovanie (OOP) je založené na štyroch kľúčových princípoch:

  1. Zapuzdrenie: Spojenie dát (vlastností) a metód (funkcií), ktoré s týmito dátami pracujú, do jedného celku — objektu. To skrýva detaily implementácie a poskytuje riadený prístup k dátam.

    <?php
    class BankAccount {
        private float $balance = 0; // Skryté údaje
    
        public function deposit(float $amount): void { // Metódy poskytujú prístup
            if ($amount > 0) {
                $this->balance += $amount;
            }
        }
    
        public function getBalance(): float {
            return $this->balance;
        }
    }
    ?>
    
  2. Abstrakcia: Vyzdvihnutie podstatných vlastností objektu a skrytie nepodstatných detailov. Predstavuje zjednodušený model reálneho sveta.

    <?php
    abstract class Shape { // Abstraktná trieda
        abstract public function area(): float; // Abstraktná metóda
    
        // Môže mať aj konkrétne metódy, napríklad:
        public function getDescription(): string {
            return "Toto je tvar.";
        }
    }
    
    class Circle extends Shape {
        private float $radius;
    
        public function __construct(float $radius) {
            $this->radius = $radius;
        }
    
        public function area(): float { // Implementácia abstraktnej metódy
            return M_PI * $this->radius * $this->radius;
        }
    }
    ?>
    
  3. Dedičstvo: Vytvorenie nového triedy (deti) na základe existujúcej (rodič), dedí jej vlastnosti a metódy. To podporuje opakované použitie kódu.

    <?php
    class Animal {
        protected string $name;
    
        public function __construct(string $name) {
            $this->name = $name;
        }
    
        public function eat(): void {
            echo "{$this->name} je.\n";
        }
    }
    
    class Dog extends Animal { // Pes dedí od Animal
        public function bark(): void {
            echo "{$this->name} hovorí: Woof!\n";
        }
    }
    
    $dog = new Dog("Buddy");
    $dog->eat();  // Použitie zdedené metódy
    $dog->bark();
    ?>
    
  4. Polymorfizmus: Schopnosť objektov rôznych tried reagovať na rovnaké volanie metódy rôznym spôsobom. "Mnoho podôb".

    <?php
    interface Speakable { // Rozhranie pre príklad polymorfizmu
        public function speak(): void;
    }
    
    class Cat implements Speakable {
        public function speak(): void {
            echo "Mňau!\n";
        }
    }
    
    class Duck implements Speakable {
        public function speak(): void {
            echo "Kach!\n";
        }
    }
    
    function makeSound(Speakable $animal): void { // Funkcia prijíma rôzne typy objektov
        $animal->speak(); // Volanie tej istej metódy
    }
    
    $cat = new Cat();
    $duck = new Duck();
    
    makeSound($cat); // Volanie metódy Cat::speak()
    makeSound($duck); // Volanie metódy Duck::speak()
    ?>