La agregación y la composición describen el tipo de relaciones entre los objetos cuando se comunican entre sí, esto podría usarse en el diseño de bajo nivel para representar asociaciones entre objetos. En este artículo, vamos a discutir las diferencias entre Agregación y Composición en el lenguaje de programación Java.
Agregación
Es una forma especial de Asociación donde:
- Representa la relación de Has-A.
- Es una asociación unidireccional, es decir, una relación unidireccional. Por ejemplo, un departamento puede tener estudiantes, pero al revés no es posible y, por lo tanto, es de naturaleza unidireccional.
- En Agregación, ambas entradas pueden sobrevivir individualmente, lo que significa que terminar una entidad no afectará a la otra entidad.
Ejemplo:
Java
// Java program to illustrate the // Concept of Aggregation // Importing required classes import java.io.*; import java.util.*; // Class 1 // Student class class Student { // Attributes of student String name; int id; String dept; // Constructor of student class Student(String name, int id, String dept) { // This keyword refers to current instance itself this.name = name; this.id = id; this.dept = dept; } } // Class 2 // Department class contains list of student objects // It is associated with student class through its Objects class Department { // Attributes of Department class String name; private List<Student> students; Department(String name, List<Student> students) { // this keyword refers to current instance itself this.name = name; this.students = students; } // Method of Department class public List<Student> getStudents() { // Returning list of user defined type // Student type return students; } } // Class 3 // Institute class contains list of Department // Objects. It is associated with Department // class through its Objects class Institute { // Attributes of Institute String instituteName; private List<Department> departments; // Constructor of institute class Institute(String instituteName,List<Department> departments) { // This keyword refers to current instance itself this.instituteName = instituteName; this.departments = departments; } // Method of Institute class // Counting total students of all departments // in a given institute public int getTotalStudentsInInstitute() { int noOfStudents = 0; List<Student> students; for (Department dept : departments) { students = dept.getStudents(); for (Student s : students) { noOfStudents++; } } return noOfStudents; } } // Class 4 // main class class GFG { // main driver method public static void main(String[] args) { // Creating object of Student class inside main() Student s1 = new Student("Mia", 1, "CSE"); Student s2 = new Student("Priya", 2, "CSE"); Student s3 = new Student("John", 1, "EE"); Student s4 = new Student("Rahul", 2, "EE"); // Creating a List of CSE Students List<Student> cse_students = new ArrayList<Student>(); // Adding CSE students cse_students.add(s1); cse_students.add(s2); // Creating a List of EE Students List<Student> ee_students = new ArrayList<Student>(); // Adding EE students ee_students.add(s3); ee_students.add(s4); // Creating objects of EE and CSE class inside // main() Department CSE = new Department("CSE", cse_students); Department EE = new Department("EE", ee_students); List<Department> departments = new ArrayList<Department>(); departments.add(CSE); departments.add(EE); // Lastly creating an instance of Institute Institute institute = new Institute("BITS", departments); // Display message for better readability System.out.print("Total students in institute: "); // Calling method to get total number of students // in institute and printing on console System.out.print(institute.getTotalStudentsInInstitute()); } }
Producción:
Total students in institute: 4
Salida Explicación: En este ejemplo, hay un Instituto que tiene varios departamentos como CSE y EE. Cada departamento tiene no. de estudiantes. Entonces, creamos una clase de Instituto que tiene una referencia a Objeto o no. de Objetos (es decir, Lista de Objetos) de la clase Departamento. Eso significa que la clase Instituto está asociada con la clase Departamento a través de su(s) Objeto(s). Y la clase Departamento también tiene una referencia a Objetos u Objetos (es decir, Lista de Objetos) de la clase Estudiante, lo que significa que está asociada con la clase Estudiante a través de su(s) Objeto(s). Representa una relación Tiene-A. En el ejemplo anterior: Student Has-A name. El estudiante tiene una identificación. Student Has-A Dept. Department Has-A Students como se muestra en los siguientes medios.
¿Cuándo usamos Agregación?
La reutilización de código se logra mejor mediante la agregación.
Composición
La composición es una forma restringida de agregación en la que dos entidades son altamente dependientes entre sí.
- Representa parte de la relación.
- En composición, ambas entidades son dependientes entre sí.
- Cuando hay una composición entre dos entidades, el objeto compuesto no puede existir sin la otra entidad.
Ejemplo:
Java
// Java program to illustrate // the concept of Composition // Importing required classes import java.io.*; import java.util.*; // Class 1 // Book class Book { // Attributes of book public String title; public String author; // Constructor of Book class Book(String title, String author) { // This keyword refers to current instance itself this.title = title; this.author = author; } } // Class 2 class Library { // Reference to refer to list of books private final List<Book> books; // Library class contains list of books Library(List<Book> books) { // Referring to same book as // this keyword refers to same instance itself this.books = books; } // Method // To get total number of books in library public List<Book> getTotalBooksInLibrary() { return books; } } // Class 3 // Main class class GFG { // Main driver method public static void main(String[] args) { // Creating objects of Book class inside main() // method Custom inputs Book b1 = new Book("EffectiveJ Java", "Joshua Bloch"); Book b2 = new Book("Thinking in Java", "Bruce Eckel"); Book b3 = new Book("Java: The Complete Reference", "Herbert Schildt"); // Creating the list which contains number of books List<Book> books = new ArrayList<Book>(); // Adding books // using add() method books.add(b1); books.add(b2); books.add(b3); Library library = new Library(books); // Calling method to get total books in library // and storing it in list of user0defined type - // Books List<Book> bks = library.getTotalBooksInLibrary(); // Iterating over books using for each loop for (Book bk : bks) { // Printing the title and author name of book on // console System.out.println("Title : " + bk.title + " and " + " Author : " + bk.author); } } }
Producción:
Title : EffectiveJ Java and Author : Joshua Bloch Title : Thinking in Java and Author : Bruce Eckel Title : Java: The Complete Reference and Author : Herbert Schildt
Salida Explicación: En el ejemplo anterior, una biblioteca puede tener una cantidad de libros sobre los mismos o diferentes temas. Entonces, si la biblioteca se destruye, todos los libros dentro de esa biblioteca en particular serán destruidos. es decir, los libros no pueden existir sin las bibliotecas. Por eso es composición. El libro es parte de la biblioteca.
Diferencia entre agregación y composición en Java
Agregación |
Composición |
---|---|
La agregación se puede describir como una relación «Tiene-a», que denota la asociación entre objetos. | Composición significa que un objeto está contenido en otro objeto. Es un tipo especial de agregación (es decir, tiene una relación), lo que implica que un objeto es el propietario de otro objeto, lo que puede denominarse asociación de propiedad. |
Existe una dependencia mutua entre los objetos. | Hay una relación unidireccional, esto también se llama relación «parte de». |
Es un tipo de asociación débil, ambos objetos tienen su propio ciclo de vida independiente. | Es un tipo fuerte de asociación (agregación), el objeto hijo no tiene su propio ciclo de vida. |
El objeto asociado puede existir de forma independiente y tener su propio ciclo de vida. | La vida del niño depende de la vida de los padres. Solo el objeto principal tiene un ciclo de vida independiente. |
La representación UML de White Diamond denota agregación. | La representación UML de Black Diamond denota composición. |
Por ejemplo, la relación entre un estudiante y un departamento. El estudiante puede existir sin un departamento. | Por ejemplo, un archivo que contiene una carpeta, si la carpeta elimina todos los archivos dentro serán eliminados. El archivo no puede existir sin una carpeta. |
Publicación traducida automáticamente
Artículo escrito por thejavamentor y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA