Tema 1 · Fundamentos POO

¿Qué es la POO? Clase vs. Objeto y Comparativa con Código Procedimental

Aprende qué es la Programación Orientada a Objetos en PHP, las limitaciones del código procedimental espagueti, y cómo modelar clases e instancias con el operador new.

El Salto de la Programación Procedimental a la POO

Cuando empezamos a programar en PHP, solemos escribir código procedimental: una secuencia lineal de funciones y variables sueltas ($nombre = "Carlos";, $saldo = 100;, depositar($saldo, 50);).

En proyectos pequeños esto funciona, pero a medida que el sistema crece, surgen problemas graves:

  • Datos desprotegidos: Cualquier parte del código puede modificar $saldo = -999999; por error.
  • Código espagueti y duplicación: Funciones dispersas sin cohesión lógica.
  • Dificultad de escalabilidad: Manejar múltiples usuarios simultáneos requiere arrays multidimensionales complejos y frágiles.
La Solución: Programación Orientada a Objetos (POO). La POO agrupa los datos (propiedades) y las acciones (métodos) en una única unidad lógica llamada Objeto.

La Metáfora Fundamental: Clase vs. Objeto

Para comprender la POO solo necesitas distinguir dos conceptos:

Concepto Metáfora Definición en PHP
Clase (`class`) El plano arquitectónico o el molde para hacer galletas. Es la plantilla que define qué variables (propiedades) y qué funciones (métodos) tendrán los objetos. No ocupa espacio real para datos.
Objeto (`object`) La casa construida o la galleta real recién horneada. Es una instancia concreta en memoria RAM creada a partir de la clase mediante la palabra reservada new. Cada objeto tiene su propio estado independiente.

Diagrama de Instanciación en Memoria

Diagrama Clase vs Objeto en PHP

Figura 1.1: De la definición estática de la clase a múltiples instancias vivas en memoria RAM.

Operadores Clave en la POO de PHP

  • new: Operador de instanciación que reserva memoria y crea un nuevo objeto (ej: $usuario = new Usuario();).
  • -> (Operador Flecha): Permite acceder a las propiedades o ejecutar los métodos del objeto (ej: $usuario->depositar(100);).
  • $this: Pseudovariable disponible dentro de la clase que hace referencia al objeto actual que está ejecutando el método.

⚡ Mi Primera Clase y Creación de Múltiples Instancias en PHP

Código PHP completo ejecutable en el Sandbox. Haz clic en "Pruébalo tú mismo »" para interactuar:

Usuario.php
Solo lectura
<?php
declare(strict_types=1);

// 1. Definición de la Clase (El Molde)
class Usuario
{
    // Propiedades
    public string $nombre;
    public string $email;
    public float $saldo = 0.0;

    // Métodos (Comportamiento)
    public function depositar(float $monto): void
    {
        if ($monto <= 0) {
            echo "<p style='color:red;'>⚠️ El monto a depositar debe ser mayor a 0.</p>";
            return;
        }
        $this->saldo += $monto;
        echo "<p style='color:green;'> $this->nombre depositó $" . number_format($monto, 2) . "</p>";
    }

    public function mostrarResumen(): void
    {
        echo "<div style='font-family:system-ui; background:#f8fafc; border:1px solid #cbd5e1; border-radius:8px; padding:15px; margin-bottom:12px;'>";
        echo "<h3 style='margin:0 0 8px 0; color:#1e293b;'>👤 Usuario: " . htmlspecialchars($this->nombre) . "</h3>";
        echo "<p style='margin:4px 0;'><strong>Email:</strong> " . htmlspecialchars($this->email) . "</p>";
        echo "<p style='margin:4px 0;'><strong>Saldo Actual:</strong> $" . number_format($this->saldo, 2) . "</p>";
        echo "</div>";
    }
}

// 2. Instanciación de Objetos Independientes (new)
$usuario1 = new Usuario();
$usuario1->nombre = "Carlos Mendoza";
$usuario1->email = "[email protected]";
$usuario1->depositar(250.00);

$usuario2 = new Usuario();
$usuario2->nombre = "Valeria Torres";
$usuario2->email = "[email protected]";
$usuario2->depositar(500.00);
$usuario2->depositar(120.50);

// 3. Demostración de estados independientes en memoria
echo "<h2>Resumen de Cuentas:</h2>";
$usuario1->mostrarResumen();
$usuario2->mostrarResumen();
Pruébalo tú mismo » Se abre en una nueva pestaña con ejecución en vivo
🧠
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección
1 Pregunta
Pregunta 1
¿Cuál es la diferencia fundamental entre una "Clase" y un "Objeto" en la Programación Orientada a Objetos?
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar Manual de Programación Orientada a Objetos en PHP (POO) y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.