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:
-
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; } } ?> -
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; } } ?> -
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(); ?> -
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() ?>