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:
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.
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.
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.
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.

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.