Junior
Háblame de los principios de la programación orientada a objetos (POO).
sobes.tech AI
Respuesta de la IA
La POO se basa en cuatro principios clave:
-
Encapsulación: La unión de datos (propiedades) y métodos (funciones) que trabajan con estos datos en un solo objeto. Esto oculta los detalles de implementación y proporciona acceso controlado a los datos.
<?php class BankAccount { private float $balance = 0; // Datos ocultos public function deposit(float $amount): void { // Métodos que proporcionan acceso if ($amount > 0) { $this->balance += $amount; } } public function getBalance(): float { return $this->balance; } } ?> -
Abstracción: Destacar las características esenciales de un objeto y ocultar los detalles no esenciales. Representa un modelo simplificado del mundo real.
<?php abstract class Shape { // Clase abstracta abstract public function area(): float; // Método abstracto // Puede tener métodos concretos, por ejemplo: 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 { // Implementación del método abstracto return M_PI * $this->radius * $this->radius; } } ?> -
Herencia: Creación de una nueva clase (hija) basada en una existente (padre), heredando sus propiedades y métodos. Esto fomenta la reutilización del 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 hereda de Animal public function bark(): void { echo "{$this->name} says Woof!\n"; } } $dog = new Dog("Buddy"); $dog->eat(); // Uso del método heredado $dog->bark(); ?> -
Polimorfismo: La capacidad de objetos de diferentes clases para responder a la misma llamada de método de manera diferente. "Muchas formas".
<?php interface Speakable { // Interfaz para ejemplo 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 { // Función que acepta diferentes tipos de objetos $animal->speak(); // Llamada al mismo método } $cat = new Cat(); $duck = new Duck(); makeSound($cat); // Llamada al método Cat::speak() makeSound($duck); // Llamada al método Duck::speak() ?>