La programación orientada a objetos es un parmadigma que pretende replicar en código la complejidad del mundo con objetos y clases. Las clases son las plantillas que fijan las reglas que luego toman los objetos que se generan.
El Objetivo de la programación orientada a objetos es darle fuerza y sentido a las cosas que usamos para programar de manera que sea sencillo reutilizar estas abstracciones que hacemos.
El presente tutorial pretende explicar el concepto de la programación orientada a objetos desde una perspectiva fresca, para más información sobre este paradigma de programación te recomiendo el siguiente enlace de IBM, donde se habla con mucho más detalle del tema:
https://www.ibm.com/docs/es/spss-modeler/saas?topic=language-object-oriented-programming
Si requieres aplicaciones PHP, en Python o JavaScript te recomiendo te suscribas a mi contenido en Youtube y estés al pendiente de cualquier cambio, que vaya haciendo.
Video Explicativo
Caso de uso sobre la programación orientada a objetos
La programación orientada a objetos es tan asombrosa que puede usarse en cualquier contexto. Por ejemplo podemos tomar unas ganas urgentes de ir al baño.
Lo bueno de este ejemplo es que servirá de paso para explicar unos conceptos específicos que se necesitan para aplicar la programación orientada a objetos especificamente.
El Objeto Principal
Empezemos desde el Yo, quien es ese Yo, el sujeto que tiene la necesidad de ir al baño, ese sujeto el Yo, tiene unos atributos personales, como nombre, edad y las ganas de ir al baño.
El método
Ir al baño implica una acción, que en la lógica de la programación orientada a objetos es un método, entonces este Yo del ejemplo, necesita un método para llevar a feliz termino su proceso, que es por fin ir al baño.
Encapculación
Ahora bien, ya en el baño, cuando por fin el pobre Yo, hace sus necesidades, estás son privadas, el hombre no sale del baño contando a detalle lo que hizo, es privado, otros Objetos, otros Yo, no van a saber nada de lo que el hombre haya hecho.
Herencia
Las ganas de ir al baño pudieron ser el resultado de una “Herencia” derivado de unos malos hábitos alimenticios del objeto que se pueden entender como otros métodos del objeto principal, el Yo.
Polimorfismo
En el momento en que estás en el baño, ese solemne momento privado, lo que vayas a hacer, puede variar, solo fuiste al baño, pero por ejemplo si fuiste con afán, solo hiciste del cuerpo y ya, pero si tenías una llamada urgente, contestaste la llamada he hiciste del cuerpo, o podías tener estreñimiento y debiste ver un video de gatos para concentrarte. Estas diferentes posibilidades se les llama polimorfismo.
Reflexión sobre la Programación Orientada a Objetos
Esta situación de ir al baño, puede ser tan grande o tan pequeña como quieras, se puede reflejar en una abstracción de programación orientada a objetos y llevarla al máximo nivel de detalle, por ejemplo puede meter en la lógica que tipo de enfermedades heredó el Yo, no solo de sus málos de sus malos hábitos, también de una posible deshidratación, o de una tendencia a desarrollar enfermedades del estomago de sus padres.
A continuación relaciono el código del escenario inverosímil imaginado como unas ganas urgentes de ir al baño:
<?php
// Definición de la clase base "Persona"
class Persona {
// Atributos
public $nombre;
public $edad;
private $nivelUrgencia;
// Constructor
public function __construct($nombre, $edad, $nivelUrgencia) {
$this->nombre = $nombre;
$this->edad = $edad;
$this->nivelUrgencia = $nivelUrgencia;
}
// Método "Ir al Baño"
public function irAlBano() {
echo $this->nombre . " está yendo al baño...\n";
// Aquí ejecutarías las acciones específicas de ir al baño
$this->realizarAccionesDeBano();
}
// Método privado para acciones internas del baño (encapsulación)
private function realizarAccionesDeBano() {
echo $this->nombre . " está usando el inodoro y lavándose las manos.\n";
}
}
// Clase derivada "Estudiante"
class Estudiante extends Persona {
// Método específico para estudiar
public function estudiar() {
echo $this->nombre . " está estudiando.\n";
}
}
// Clase derivada "Empleado"
class Empleado extends Persona {
// Método específico para trabajar
public function trabajar() {
echo $this->nombre . " está trabajando.\n";
}
}
// Crear objetos
$estudiante = new Estudiante("Juan", 20, 8);
$empleado = new Empleado("María", 30, 5);
// Ejecutar métodos
$estudiante->irAlBano();
$estudiante->estudiar();
$empleado->irAlBano();
$empleado->trabajar();
?>