Sobes.tech
Junior

Fale sobre os princípios da programação orientada a objetos (POO).

sobes.tech IA

Resposta da IA

A POO baseia-se em quatro princípios-chave:

  1. Encapsulamento: A união de dados (propriedades) e métodos (funções) que trabalham com esses dados num único objeto. Isto oculta detalhes de implementação e fornece acesso controlado aos dados.

    <?php
    class BankAccount {
        private float $balance = 0; // Dados ocultos
    
        public function deposit(float $amount): void { // Métodos que fornecem acesso
            if ($amount > 0) {
                $this->balance += $amount;
            }
        }
    
        public function getBalance(): float {
            return $this->balance;
        }
    }
    ?>
    
  2. Abstração: Destacar as características essenciais de um objeto e ocultar detalhes não essenciais. Representa um modelo simplificado do mundo real.

    <?php
    abstract class Shape { // Classe abstrata
        abstract public function area(): float; // Método abstrato
    
        // Pode ter métodos concretos, por exemplo:
        public function getDescription(): string {
            return "This is a shape.";
        }
    }
    
    class Circle extends Shape {
        private float $radius;
    
        public function __construct(float $radius) {
            $this->radius = $radius;
        }
    
        public function area(): float { // Implementação do método abstrato
            return M_PI * $this->radius * $this->radius;
        }
    }
    ?>
    
  3. Herança: Criação de uma nova classe (filha) baseada numa existente (pai), herdando as suas propriedades e métodos. Isto promove a reutilização de código.

    <?php
    class Animal {
        protected string $name;
    
        public function __construct(string $name) {
            $this->name = $name;
        }
    
        public function eat(): void {
            echo "{$this->name} is eating.\n";
        }
    }
    
    class Dog extends Animal { // Dog herda de Animal
        public function bark(): void {
            echo "{$this->name} says Woof!\n";
        }
    }
    
    $dog = new Dog("Buddy");
    $dog->eat();  // Uso do método herdado
    $dog->bark();
    ?>
    
  4. Polimorfismo: A capacidade de objetos de diferentes classes responderem a uma mesma chamada de método de forma diferente. "Múltiplas formas".

    <?php
    interface Speakable { // Interface para exemplo de polimorfismo
        public function speak(): void;
    }
    
    class Cat implements Speakable {
        public function speak(): void {
            echo "Meow!\n";
        }
    }
    
    class Duck implements Speakable {
        public function speak(): void {
            echo "Quack!\n";
        }
    }
    
    function makeSound(Speakable $animal): void { // Função que aceita diferentes tipos de objetos
        $animal->speak(); // Chamada do mesmo método
    }
    
    $cat = new Cat();
    $duck = new Duck();
    
    makeSound($cat); // Chamada do método Cat::speak()
    makeSound($duck); // Chamada do método Duck::speak()
    ?>