¿Qué es la Programación Orientada a Objetos?
La programación orientada a objetos (POO) es un paradigma de programación que se basa en el concepto de «objetos», los cuales contienen datos (atributos o propiedades) y código en forma de métodos (funciones o procedimientos). Estos objetos interactúan entre sí para diseñar aplicaciones y programas informáticos.
La POO se fundamenta en varias técnicas clave:
- Herencia
- Cohesión
- Abstracción
- Polimorfismo
- Acoplamiento
- Encapsulamiento
Su popularidad creció a principios de la década de 1990 y, actualmente, una amplia gama de lenguajes de programación la soportan.
Conceptos Fundamentales de la POO
- Clase: Es una plantilla o molde que define las propiedades (atributos) y el comportamiento (métodos) de un tipo de objeto. La instanciación es el proceso de crear un objeto específico a partir de una clase.
- Herencia: Mecanismo que permite a una clase (clase hija o subclase) heredar las propiedades y métodos de otra clase (clase padre o superclase). La clase hija puede usar los métodos y variables públicas declaradas en la clase padre como si fueran propios.
- Objeto: Es una instancia concreta de una clase. Posee un conjunto de propiedades (atributos) y métodos que definen su comportamiento. Los objetos pueden representar entidades del mundo real o entidades internas del sistema.
- Método: Es un algoritmo o función asociada a un objeto (o a una clase). Su ejecución se desencadena al recibir un «mensaje». Define lo que el objeto puede hacer y puede modificar sus propiedades o generar eventos.
- Evento: Es un suceso dentro del sistema, como una interacción del usuario o un mensaje enviado por otro objeto. El sistema maneja el evento enviando el mensaje apropiado al objeto correspondiente. También puede ser la reacción que desencadena un objeto.
- Atributos: Son las características o propiedades que definen a una clase.
- Mensaje: Es una comunicación dirigida a un objeto, que le indica que ejecute uno de sus métodos con ciertos parámetros.
- Propiedad o Atributo: Es un contenedor de datos asociado a un objeto (o clase). Define las características del objeto y su valor puede ser modificado por la ejecución de un método.
- Estado Interno: Es una variable privada, accesible y modificable solo por los métodos del objeto. Indica diferentes situaciones posibles para el objeto y no es visible para el programador que usa la instancia de la clase.
- Componentes de un Objeto: Atributos, identidad, relaciones y métodos.
- Identificación de un Objeto: Un objeto se representa mediante una tabla o entidad que contiene sus atributos y las funciones (métodos) correspondientes.
Características Clave de la POO
- Abstracción: Se enfoca en las características esenciales de un objeto, capturando sus comportamientos relevantes. Cada objeto actúa como un «agente» abstracto que puede realizar tareas, informar y cambiar su estado, y comunicarse con otros objetos sin revelar *cómo* se implementan estas características.
- Encapsulamiento: Consiste en agrupar todos los elementos (atributos y métodos) que pertenecen a una misma entidad, al mismo nivel de abstracción. Esto mejora la cohesión de los componentes del sistema.
- Modularidad: Es la propiedad de dividir una aplicación en partes más pequeñas (módulos), cada una lo más independiente posible de las demás y de la aplicación principal. Estos módulos pueden compilarse por separado, pero se conectan con otros módulos.
- Principio de Ocultación: Cada objeto está aislado del exterior, formando un módulo natural. Cada tipo de objeto expone una *interfaz* a otros objetos, especificando cómo interactuar con él. El aislamiento protege las propiedades del objeto de modificaciones no autorizadas; solo los métodos internos del objeto pueden acceder a su estado.
- Polimorfismo: Permite que objetos de diferentes clases respondan al mismo mensaje (nombre de método) de manera diferente. Al llamar al método por su nombre, se ejecutará el comportamiento específico del objeto en cuestión.
- Herencia: Las clases se relacionan entre sí en una jerarquía. Los objetos heredan propiedades y comportamientos de todas las clases a las que pertenecen. La herencia facilita el polimorfismo y el encapsulamiento, permitiendo definir objetos como especializaciones de otros preexistentes.
- Recolección de Basura (Garbage Collection): Es una técnica mediante la cual el entorno de ejecución de objetos se encarga de destruir automáticamente los objetos que ya no tienen referencias, liberando la memoria asociada. El programador no necesita preocuparse por la liberación manual de memoria.