Want to make creations as awesome as this one?

Transcript

Composición La composición es una relación fuerte "parte-de". En esta relación, la existencia de los objetos de las partes está vinculada a la existencia del objeto contenedor. Si el objeto contenedor se destruye, también se destruyen todos los objetos contenidos. Características: Representa una relación "parte-de". Los objetos de las partes no pueden existir sin el objeto contenedor. La composición es una asociación unidireccional, donde el objeto contenedor controla el ciclo de vida de los objetos contenidos.
Agregación La agregación es una relación débil "tiene-un". En esta relación, la clase contenedora (el todo) contiene referencias a objetos de otras clases (las partes), pero la existencia de las partes no depende de la existencia del todo. Esto significa que si el objeto contenedor se destruye, los objetos contenidos pueden seguir existiendo independientemente. Características: Representa una relación "tiene-un". La existencia de los objetos de las partes no depende del objeto contenedor. Es una asociación bidireccional, lo que significa que ambos objetos, el contenedor y el contenido, pueden operar independientemente.
Los conceptos de agregación y composición son formas de establecer relaciones entre objetos, específicamente relaciones de tipo "tiene-un" o "parte-de". Aunque similares, tienen diferencias clave en cómo se maneja la dependencia y el ciclo de vida de los objetos involucrados.

3.5 Relaciones entre clases y objetos

Las clases, al igual que los objetos, no existen de modo aislado. La Orientación a Objetos (POO) intenta modelar aplicaciones del mundo real tan fielmente como sea posible y por lo tanto debe reflejar estas relaciones entre clases y objetos. Según Grady Booch un diseñador de software, existen tres clases básicas de relaciones entre los objetos:

Unidad 3. Fundamentos de la Programación Orientada a Objetos (POO)

Reproduce el siguiente material audiovisual, fortalecerás tu comprensión sobre la Agregación y Composición en la Programación Orientada a Objetos: doneber (2020, 8 de noviemre) Agregación y Composición en POO [video] YouTube https://www.youtube.com/watch?v=U9-iM-gA7-E

Para ver la información, da clic en las imágenes.

3.5 Relaciones entre clases y objetos

Unidad 3. Fundamentos de la Programación Orientada a Objetos (POO)

Características:
  • Relación "Usa-Un" o "Colabora-Con": La asociación define una relación en la que una instancia de una clase (objeto) utiliza los métodos o atributos de otra clase.
  • Independencia de Objetos: A diferencia de la composición y la agregación, en una asociación, los objetos asociados pueden existir independientemente el uno del otro.
  • Cardinalidad: La asociación puede tener diferentes cardinalidades, como uno-a-uno, uno-a-muchos, muchos-a-uno o muchos-a-muchos.
  • Direccionalidad: La asociación puede ser unidireccional, donde una clase conoce a otra y no al revés, o bidireccional, donde ambas clases se conocen mutuamente.
La asociación es una relación entre dos o más clases que muestra cómo estos objetos interactúan entre sí. Es uno de los fundamentos para la creación de sistemas complejos y realistas, permitiendo que los objetos cooperen para realizar tareas o representar relaciones del mundo real.

Para ver la información, da clic en la imagen.

3.5 Relaciones entre clases y objetos

Unidad 3. Fundamentos de la Programación Orientada a Objetos (POO)

Especialización Es el proceso de crear nuevas clases a partir de una clase base, añadiendo o modificando características para satisfacer necesidades específicas. Las clases derivadas o subclases heredan los atributos y comportamientos de la clase base, pero también pueden introducir sus propios métodos y propiedades o modificar los existentes. Características: Clases Derivadas: Se crean a partir de la clase base, extendiendo o personalizando su comportamiento. Herencia de Atributos y Métodos: Las subclases heredan automáticamente las características de la clase base. Polimorfismo: Las subclases pueden redefinir (sobrescribir) los métodos de la clase base, lo que permite el uso de polimorfismo.
Generalización Es el proceso de identificar características comunes entre entidades y abstraerlas en una clase más general. En términos de POO, esto se traduce en la creación de una clase base o superclase que encapsula los atributos y comportamientos comunes que pueden ser compartidos por varias subclases. Características:
  • Clase Base Común: Se crea una clase base que contiene propiedades y métodos comunes.
  • Reducción de Redundancias: Al extraer características comunes a una clase base, se evita la repetición de código.
  • Facilita el Mantenimiento: Los cambios en el comportamiento o los atributos comunes solo necesitan realizarse en la clase base.
La generalización y especialización son base para entender la relación entre clases en una jerarquía de herencia. Estos conceptos se centran en cómo las clases pueden ser organizadas y relacionadas para compartir comportamientos y atributos, manteniendo al mismo tiempo sus características únicas.

3.5 Relaciones entre clases y objetos

Unidad 3. Fundamentos de la Programación Orientada a Objetos (POO)

Accede a la lectura siguiente y explora el contenido del tema 2.2 “CLASES QUE CONTIENEN OBJETOS COMO ATRIBUTOS: ALGUNOS EJEMPLOS CONOCIDOS” para fortalecer tu comprensión sobre las relaciones entre clases y objetos: EIPR_Tema02 [PDF]. (n.d.). Recuperado de https://www.unirioja.es/cu/jearansa/0910/archivos/EIPR_Tema02.pdf

Para ver la información, da clic en la imagen.

3.5 Relaciones entre clases y objetos

Unidad 3. Fundamentos de la Programación Orientada a Objetos (POO)

class Estudiante { private List<Curso> cursosInscritos; public void inscribirseEnCurso(Curso curso) { cursosInscritos.add(curso); } // Otros métodos y atributos... } class Curso { private List<Estudiante> estudiantesInscritos; public void agregarEstudiante(Estudiante estudiante) { estudiantesInscritos.add(estudiante); } // Otros métodos y atributos... }
Ejemplo en Java Asociación: La relación entre Estudiante y Curso es una asociación. Cada clase tiene una lista que referencia a la otra, permitiendo que los estudiantes se inscriban en cursos y que los cursos mantengan un registro de sus estudiantes. Esta es una asociación bidireccional de muchos-a-muchos, ya que varios estudiantes pueden inscribirse en varios cursos. Clase Estudiante y Curso: Un estudiante puede inscribirse en varios cursos, y un curso puede tener varios estudiantes inscritos.

class Corazon { // ... } class Personaje { Corazon corazon; public Personaje() { corazon = new Corazon(); } // ... }

En el contexto de un juego, puedes tener una clase Personaje que contiene una instancia de la clase Corazón. El Corazón (la parte) solo existe mientras el Personaje (el todo) exista.

class Profesor { String nombre; // ... } class Departamento { List<Profesor> profesores; // ... }

Imagina un sistema para una universidad. Una clase Departamento puede contener objetos de la clase Profesor. Los profesores (las partes) están asociados con el departamento (el todo), pero pueden existir sin él.

En este ejemplo, león y tigre son especializaciones de animal. Heredan comportamientos generales como comer y dormir, pero también introducen acciones específicas como rugir y cazar.

class Leon extends Animal { public void rugir() { // Comportamiento específico del león } } class Tigre extends Animal { public void cazar() { // Comportamiento específico del tigre } }

class Animal { public void comer() { // Implementación general de comer } public void dormir() { // Implementación general de dormir } }

Posteriormente se crean subclases como León, Tigre y Elefante que heredan de Animal pero también tienen características únicas.

Imagina estar desarrollando un sistema para un zoológico. Podemos identificar características comunes en todos los animales, como la necesidad de comer, dormir o moverse. Estas características se pueden generalizar en una clase Animal.