Sobes.tech
Junior

Rääkige objektorienteeritud programmeerimise (OOP) põhimõtetest.

sobes.tech AI

Vastus AI-lt

Objektorienteeritud programmeerimine (OOP) põhineb neljal põhiprintsiibil:

  1. Kapseldus: Andmete (omaduste) ja meetodite (funktsioonide), mis nende andmetega töötavad, ühendamine üheks tervikuks — objektiks. See varjab teostuse üksikasju ja võimaldab kontrollitud juurdepääsu andmetele.

    <?php
    class BankAccount {
        private float $balance = 0; // Varjatud andmed
    
        public function deposit(float $amount): void { // Meetodid võimaldavad juurdepääsu
            if ($amount > 0) {
                $this->balance += $amount;
            }
        }
    
        public function getBalance(): float {
            return $this->balance;
        }
    }
    ?>
    
  2. Abstraktsioon: Oluliste omaduste välja toomine ja ebaoluliste detailide varjamine. Esindab lihtsustatud mudelit reaalmaailmast.

    <?php
    abstract class Shape { // Abstraktne klass
        abstract public function area(): float; // Abstraktne meetod
    
        // Võib olla ka konkreetseid meetodeid, näiteks:
        public function getDescription(): string {
            return "See on kuju.";
        }
    }
    
    class Circle extends Shape {
        private float $radius;
    
        public function __construct(float $radius) {
            $this->radius = $radius;
        }
    
        public function area(): float { // Abstraktse meetodi realiseerimine
            return M_PI * $this->radius * $this->radius;
        }
    }
    ?>
    
  3. Pärimine: Uue klassi (lapse) loomine olemasoleva (ema) põhjal, pärides selle omadused ja meetodid. See soodustab koodi korduvkasutust.

    <?php
    class Animal {
        protected string $name;
    
        public function __construct(string $name) {
            $this->name = $name;
        }
    
        public function eat(): void {
            echo "{$this->name} sööb.\n";
        }
    }
    
    class Dog extends Animal { // Dog pärib from Animal
        public function bark(): void {
            echo "{$this->name} ütleb: Woof!\n";
        }
    }
    
    $dog = new Dog("Buddy");
    $dog->eat();  // Pärandatud meetodi kasutamine
    $dog->bark();
    ?>
    
  4. Polümorfism: Võimekus erinevate klasside objektidel reageerida sama meetodi kutsumisele erinevalt. "Mitme vormi".

    <?php
    interface Speakable { // Interfeis näiteks polümorfismist
        public function speak(): void;
    }
    
    class Cat implements Speakable {
        public function speak(): void {
            echo "Miau!\n";
        }
    }
    
    class Duck implements Speakable {
        public function speak(): void {
            echo "Kvaak!\n";
        }
    }
    
    function makeSound(Speakable $animal): void { // Funktsioon võtab vastu erinevat tüüpi objekte
        $animal->speak(); // Kutsutakse sama meetod
    }
    
    $cat = new Cat();
    $duck = new Duck();
    
    makeSound($cat); // Kutsub Cat::speak()
    makeSound($duck); // Kutsub Duck::speak()
    ?>