1.1. Conceptos Claves#

1.1.1. Definiciones#

1.1.1.1. Principios Fundamentales#

La programación orientada a objetos se rige por varios principios fundamentales:

  1. Abstracción: La abstracción consiste en identificar las características esenciales de un objeto del mundo real y representarlas de manera simplificada en el código. Permite centrarse en los aspectos relevantes de un objeto mientras se ignoran los detalles innecesarios.

  2. Encapsulamiento: El encapsulamiento implica ocultar los detalles de implementación de un objeto y exponer solo una interfaz pública. Esto permite que el objeto controle cómo se accede y modifica su estado interno, lo que mejora la seguridad y la modularidad del código.

  3. Herencia: La herencia es un mecanismo que permite crear nuevas clases basadas en clases existentes, reutilizando su funcionalidad y extendiéndola según sea necesario. Esto fomenta la reutilización de código y facilita la creación de jerarquías de clases.

  4. Polimorfismo: El polimorfismo permite que objetos de diferentes clases respondan de manera uniforme a los mismos mensajes. Esto significa que se puede tratar a objetos de diferentes clases de manera uniforme, lo que facilita el diseño de código genérico y flexible.

1.1.1.2. Componentes#

  • Clases: Una clase es una plantilla para crear objetos. Define los atributos (datos) y métodos (funciones) que tendrán los objetos de esa clase.

  • Objetos: Un objeto es una instancia concreta de una clase. Contiene datos y métodos que actúan sobre esos datos.

  • Atributos: Los atributos son variables que almacenan el estado de un objeto.

  • Métodos: Los métodos son funciones que operan en los datos de un objeto.

  • Mensajes: Los mensajes son las solicitudes que un objeto envía a otro objeto para que realice alguna acción.

1.1.1.3. Lenguajes de Programación#

Muchos lenguajes de programación modernos admiten la programación orientada a objetos, incluyendo:

  • Java

  • C++

  • C#

  • Python

  • Ruby

  • JavaScript (a través de su modelo de objetos basado en prototipos)

Estos lenguajes ofrecen diferentes implementaciones y enfoques de la programación orientada a objetos, pero comparten los mismos principios fundamentales de abstracción, encapsulamiento, herencia y polimorfismo.

1.1.2. Historia#

La historia de la programación orientada a objetos (POO) es fascinante y se remonta a varios hitos importantes en el desarrollo de la informática y la programación de computadoras.

../../_images/historia.png

Fig. 1.1 Genealogía de lenguajes de programación#

1.1.2.1. Programación estructurada y modular#

  • En las décadas de 1950 y 1960, la programación estaba dominada por lenguajes de programación procedimentales, como Fortran y COBOL.

  • A finales de la década de 1960 y principios de la década de 1970, surgieron enfoques estructurados y modulares para el desarrollo de software, promovidos por lenguajes como ALGOL y Pascal. Estos enfoques dividían los programas en módulos más pequeños y manejables.

1.1.2.2. Primeros conceptos#

  • En la década de 1960, el lenguaje de programación Simula, desarrollado por Ole-Johan Dahl y Kristen Nygaard en Noruega, sentó las bases para la programación orientada a objetos.

  • Simula introdujo conceptos como clases, objetos, herencia y polimorfismo, permitiendo a los programadores modelar entidades del mundo real en sus programas de una manera más natural.

1.1.2.3. Revolución de Smalltalk#

  • En la década de 1970, en Xerox PARC, Alan Kay, Dan Ingalls y otros desarrollaron el lenguaje de programación Smalltalk, que se convirtió en uno de los primeros lenguajes completamente orientados a objetos.

  • Smalltalk introdujo un entorno de programación interactivo basado en ventanas gráficas y objetos interactivos.

  • Smalltalk popularizó conceptos como la herencia de clases, el polimorfismo y el encapsulamiento.

1.1.2.4. Adopción generalizada de la POO#

  • A partir de la década de 1980, la programación orientada a objetos comenzó a ganar popularidad entre los desarrolladores de software.

  • Lenguajes como C++ y Eiffel llevaron los conceptos de la POO a una audiencia más amplia y ofrecieron nuevas características y mejoras sobre los primeros lenguajes orientados a objetos.

  • La introducción de bibliotecas y frameworks orientados a objetos permitió a los desarrolladores construir sistemas más grandes y complejos con mayor facilidad.

1.1.2.5. Consolidación y la evolución continua#

  • En las décadas siguientes, la programación orientada a objetos se consolidó como uno de los principales paradigmas de desarrollo de software.

  • Lenguajes como Java y C# se convirtieron en pilares de la programación orientada a objetos en la industria del software.

  • La evolución de la tecnología, como la computación distribuida y la programación concurrente, ha llevado a la evolución de la POO con características adicionales para abordar estos nuevos desafíos.