Historia y Conceptos de la Programación Orientada a Objetos 

La Programación Orientada a Objetos (POO) es un paradigma de programación; es decir, un modelo o estilo de programación que nos da guías sobre cómo estructurar el código. En lugar de enfocar el desarrollo en funciones y lógica secuencial (como la programación estructurada), la POO organiza el software alrededor de datos u "objetos", replicando la forma en que interactuamos con el mundo real.

1. Evolución Histórica de la POO

La transición hacia la POO no ocurrió de la noche a la mañana, sino que nació de la necesidad de resolver la crisis del software de los años 60 y 70, donde los programas se volvían tan grandes y complejos que eran imposibles de mantener.

·        El Origen - Simula 67 (1967): El concepto nació en Noruega, desarrollado por Ole-Johan Dahl y Kristen Nygaard en el Centro de Cómputo Noruego. Estaban trabajando en programas de simulación (como barcos navegando y colisionando) y se dieron cuenta de que era más fácil programar si agrupaban las propiedades de cada barco dentro de 'moldes'. Así introdujeron por primera vez los conceptos de clases, objetos y herencia.

·        La Consolidación - Smalltalk (Años 70): Alan Kay, Dan Ingalls y Adele Goldberg en el centro de investigación Xerox PARC crearon Smalltalk. Alan Kay acuñó formalmente el término 'Programación Orientada a Objetos'. Smalltalk fue el primer lenguaje puramente orientado a objetos: en él, absolutamente todo (desde un número hasta una ventana de la interfaz) es un objeto.

·        La Era Comercial - C++ (1983): Bjarne Stroustrup diseñó C++ agregando capacidades de orientación a objetos al ya ultra popular lenguaje C. Esto permitió que las empresas adoptaran la POO sin tener que abandonar la velocidad y eficiencia de la infraestructura que ya tenían en C.

·        La Masificación - Java y C# (Años 90 y 2000): En 1995, Sun Microsystems lanzó Java bajo el lema 'Escríbelo una vez, ejecútalo en cualquier lugar'. Java eliminó las partes más peligrosas y complejas de C++ (como la gestión manual de memoria) y se convirtió en el estándar de la industria y la educación. Más tarde, Microsoft lanzó C# con un enfoque muy similar para su ecosistema .NET.

2. Los Componentes Base: Clases y Objetos

💡 La Analogía de la Arquitectura:
Imagina los planos de una casa. El plano no es una casa real: no puedes dormir en él ni te protege de la lluvia, pero describe exactamente cómo debe ser la casa. El plano es la Clase, y la casa física construida en la calle es el Objeto.

 

Componente

¿Qué es?

Ejemplo Cotidiano (Automóvil)

Clase

Es una plantilla, molde o plano digital que define los atributos y métodos comunes que tendrán todos los elementos de ese tipo.

La definición de un 'Auto': tiene marca, color, velocidad actual, y puede acelerar o frenar.

Objeto

Es la instancia real y física creada a partir de una clase. Tiene datos específicos asignados.

El auto de Juan: Marca: Toyota, Color: Rojo, Velocidad: 60 km/h.

 

• Atributos: Son las características o variables que describen al objeto (ej. nombre, color, edad).
• Métodos: Son las funciones o acciones que el objeto puede realizar (ej. correr(), encender(), guardarDatos()).

3. Los 4 Pilares de la POO

Para que un lenguaje sea considerado verdaderamente orientado a objetos, debe cumplir con estos cuatro principios fundamentales:

A. Abstracción

Consiste en aislar los elementos esenciales de un objeto ocultando los detalles secundarios o complejos que no aportan valor al contexto. Nos permite modelar problemas del mundo real en el código de forma simplificada.

Ejemplo real: Cuando manejas un auto, solo interactúas con el volante, los pedales y la palanca. No necesitas saber la presión exacta del sistema de inyección de gasolina ni cómo la computadora del motor calcula la chispa. Abstrayes la complejidad del motor a una simple interfaz de conducción.

B. Encapsulamiento

Es la acción de reunir datos y métodos en una sola unidad (la clase) y, al mismo tiempo, restringir el acceso directo a los componentes internos del objeto. Se logra usando modificadores de acceso como private, protected y public.

¿Para qué sirve? Para proteger la integridad de los datos. Evita que programadores o funciones externas modifiquen un atributo con valores inválidos (por ejemplo, ponerle una edad de -5 años a una persona). El acceso se controla mediante métodos validadores llamados Getters y Setters.

C. Herencia

Es el mecanismo por el cual una clase nueva (clase hija o subclase) adquiere los atributos y métodos de una clase existente (clase padre o superclase). Permite la reutilización de código y la creación de jerarquías.

Ejemplo real: Si tienes la clase padre Vehiculo (con atributos como motor y capacidad), puedes crear una clase hija Moto y otra clase hija Camion. Ambas heredan automáticamente las propiedades de Vehiculo sin tener que volver a escribirlas, pero cada una añade sus particularidades (la moto añade tieneSidecar y el camión añade capacidadCarga).

D. Polimorfismo

La palabra significa 'muchas formas'. Es la propiedad que permite que un mismo método o comando se comporte de manera diferente dependiendo del objeto que lo esté ejecutando.

Ejemplo real: Imagina una clase padre llamada Animal con un método llamado hacerSonido(). Si creas las clases hijas Perro, Gato y Vaca, todas tienen el método hacerSonido(), pero cuando lo ejecutas, el perro responderá 'Guau', el gato 'Miau' y la vaca 'Muuu'. El mismo mensaje genera una respuesta distinta según el objeto.

4. Ventajas de utilizar POO en el Software Moderno

·        Reutilización del código: Gracias a la herencia, no tienes que reinventar la rueda ni duplicar líneas de código.

·        Mantenibilidad: Al estar el código modularizado en objetos independientes, si algo falla en una sección (por ejemplo, el módulo de cobros), es fácil ubicarlo y repararlo sin romper el resto del sistema.

·        Escalabilidad: Diseñar pensando en clases permite extender las aplicaciones de forma limpia a medida que los proyectos crecen.

Comentarios

Publicar un comentario