Conceptos Fundamentales de la Programación Orientada a Objetos (POO)
Clases y Objetos
La Programación Orientada a Objetos (POO) se asemeja al mundo real, permitiendo representar modelos complejos. Es muy apropiada para aplicaciones de negocios.
- Clase: Es el plano, modelo, patrón o plantilla para crear objetos. Una clase es una descripción de un grupo de objetos con:
- Propiedades en común (atributos)
- Comportamiento similar (operaciones)
- La misma forma de relacionarse con otros objetos (relaciones)
- Una semántica en común (significan lo mismo)
- Objeto: Es un concepto, abstracción o cosa con un significado y límites claros en el problema en cuestión. Un objeto es una instancia de una clase, creada en tiempo de ejecución y formada por tantos campos como atributos tenga la clase.
Características de un Objeto
- Estado: Lo que el objeto sabe.
- El estado de un objeto es una de las posibles condiciones en que el objeto puede existir.
- El estado normalmente cambia en el transcurso del tiempo.
- El estado de un objeto es implementado por un conjunto de propiedades (atributos), además de las conexiones que puede tener con otros objetos.
- Comportamiento: Lo que el objeto puede hacer.
- El comportamiento de un objeto determina cómo este actúa y reacciona frente a las peticiones de otros objetos.
- Es modelado por un conjunto de mensajes a los que el objeto puede responder (operaciones que puede realizar).
- Se implementa mediante métodos.
- Identidad: Cada objeto tiene una identidad única, incluso si su estado es idéntico al de otro objeto. Cada objeto ocupa su propia zona de memoria.
Atributos y Métodos
- Atributo: Los atributos son las características propias del objeto. Son las variables de una clase.
- Método: Los métodos son las acciones que pueden llevar a cabo o modifican a un objeto. Es una función asociada exclusivamente a una clase o a un objeto.
Objetos, Clases e Instancias
Una clase es una definición abstracta de un objeto. Define la estructura y el comportamiento compartidos por los objetos. Sirve como modelo para la creación de objetos. Los objetos pueden ser agrupados en clases.
Instancia: Diremos que una instancia es la creación de uno de los miembros específicos de una clase. Para crear una instancia se deben asignar valores específicos a los atributos de una clase. Igual que con las clases, las instancias se pueden diagramar utilizando UML.
Pilares de la Programación Orientada a Objetos
Abstracción
La abstracción nos ayuda a trabajar con cosas complejas. Se enfoca en lo importante e ignora lo que no es importante (simplifica). Una clase debe capturar una y solo una abstracción clave.
Relaciones
Todo sistema abarca muchas clases y objetos. Los objetos contribuyen en el comportamiento de un sistema colaborando entre sí. La colaboración se logra a través de las relaciones. Las relaciones entre las clases son conexiones entre dichas clases.
Tipos de Relaciones
- Asociación: Una relación entre instancias de dos clases. Hay una asociación entre dos clases si una instancia de una clase debe conocer de la otra para poder ejecutar su trabajo. Pueden existir relaciones de asociación entre la misma clase.
- Agregación: Una asociación en la cual una clase pertenece a una colección, un objeto es “parte de” un todo. (tiene – un). Distingue una parte de un todo. La multiplicidad en el todo es diferente de 1. Una agregación tiene una punta de diamante sin rellenar hacia la parte que contiene el todo.
- Composición: Es una asociación fuerte (pertenencia fuerte) en la cual la parte pertenece a un todo, ella no puede existir sin el todo. El tiempo de vida del todo es por lo general igual que el de la parte. Pertenece al objeto con que se relaciona, nace y muere con él (dependencia existencial).
- Dependencia: Es una relación entre dos clases en la cual un cambio en una puede forzar cambios en la otra. Relación entre dos cosas en la cual el cambio de una de las cosas (la parte independiente) afecta la semántica de la otra cosa (parte dependiente). Por lo general, ocurre cuando la clase independiente es utilizada (como parámetro) o creada dentro de un método de la clase dependiente.
- Generalización: Indica que una clase es una superclase de otra (es – un). Implica el factorizar las propiedades comunes de un conjunto de clases en una clase más general.