Агрегирование java что такое

Агрегирование java что такое

  • Introduction to Java
  • The complete History of Java Programming Language
  • C++ vs Java vs Python
  • How to Download and Install Java for 64 bit machine?
  • Setting up the environment in Java
  • How to Download and Install Eclipse on Windows?
  • JDK in Java
  • How JVM Works – JVM Architecture?
  • Differences between JDK, JRE and JVM
  • Just In Time Compiler
  • Difference between JIT and JVM in Java
  • Difference between Byte Code and Machine Code
  • How is Java platform independent?
  • Decision Making in Java (if, if-else, switch, break, continue, jump)
  • Java if statement with Examples
  • Java if-else
  • Java if-else-if ladder with Examples
  • Loops in Java
  • For Loop in Java
  • Java while loop with Examples
  • Java do-while loop with Examples
  • For-each loop in Java
  • Continue Statement in Java
  • Break statement in Java
  • Usage of Break keyword in Java
  • return keyword in Java
  • Object Oriented Programming (OOPs) Concept in Java
  • Why Java is not a purely Object-Oriented Language?
  • Classes and Objects in Java
  • Naming Conventions in Java
  • Java Methods
  • Access Modifiers in Java
  • Java Constructors
  • Four Main Object Oriented Programming Concepts of Java
  • Inheritance in Java
  • Abstraction in Java
  • Encapsulation in Java
  • Polymorphism in Java
  • Interfaces in Java
  • ‘this’ reference in Java
Читайте также:  Border bottom space css

Источник

Композиция, агрегация и ассоциация в Java

Объекты имеют отношения между собой, как в реальной жизни, так и в программировании. Иногда трудно понять или реализовать эти отношения.

В этом уроке мы сосредоточимся на подходе Java к трем типам отношений, которые иногда легко перепутать: композиция, агрегация и ассоциация.

2. Состав​

Композиция — это тип отношений «принадлежит». Это означает, что один из объектов является логически большей структурой, содержащей другой объект. Другими словами, это часть или член другого объекта.

В качестве альтернативы мы часто называем это отношением «имеет-а» (в отличие от отношения «есть-а», которое является наследованием ).

Например, комната принадлежит зданию, или, другими словами, в здании есть комната. Таким образом, в основном, называем ли мы это «принадлежит» или «имеет», это только вопрос точки зрения.

Композиция — это сильный вид отношения «имеет», потому что содержащий объект владеет ею. Следовательно, жизненные циклы объектов связаны. Это означает, что если мы уничтожим объект-владелец, его члены также будут уничтожены вместе с ним. Например, комната уничтожена вместе со зданием в нашем предыдущем примере.

Обратите внимание, это не означает, что содержащий объект не может существовать без каких-либо его частей. Например, мы можем снести все стены внутри здания, а значит, разрушить комнаты. Но здание все равно будет существовать.

С точки зрения кардинальности, содержащий объект может иметь столько частей, сколько мы хотим. Однако все части должны иметь ровно один контейнер .

2.1. UML​

В UML мы обозначаем композицию следующим символом:

Обратите внимание, что ромб находится на содержащем объекте и является основанием линии, а не стрелкой. Для ясности мы часто рисуем и наконечник стрелки:

Итак, мы можем использовать эту конструкцию UML для нашего примера Building-Room:

2.2. Исходный код​

В Java мы можем смоделировать это с помощью нестатического внутреннего класса:

 class Building    class Room >   > 

В качестве альтернативы мы также можем объявить этот класс в теле метода. Неважно, именованный это класс, анонимный класс или лямбда:

 class Building    Room createAnonymousRoom()    return new Room()    @Override   void doInRoom() >   >;   >    Room createInlineRoom()    class InlineRoom implements Room    @Override   void doInRoom() >   >   return new InlineRoom();   >    Room createLambdaRoom()    return () -> >;   >    interface Room    void doInRoom();   >   > 

Обратите внимание, что наш внутренний класс должен быть нестатическим, поскольку он привязывает все свои экземпляры к содержащему классу.

Обычно содержащий объект хочет получить доступ к своим членам. Поэтому мы должны хранить их ссылки:

 class Building    ListRoom> rooms;   class Room >   > 

Обратите внимание, что все объекты внутреннего класса хранят неявную ссылку на содержащий их объект. В результате нам не нужно хранить его вручную, чтобы получить к нему доступ:

 class Building    String address;    class Room    String getBuildingAddress()    return Building.this.address;   >   >   > 

3. Агрегация​

Агрегация также является отношением «имеет-а». Что отличает его от композиции, так это то, что он не предполагает владения. В результате жизненные циклы объектов не связаны: каждый из них может существовать независимо друг от друга.

Например, автомобиль и его колеса. Мы можем снять колеса, и они все еще будут существовать. Мы можем установить другие (существовавшие ранее) колеса или установить их на другой автомобиль, и все будет работать нормально.

Конечно, автомобиль без колес или с оторванным колесом не будет так полезен, как автомобиль с колесами. Но именно поэтому изначально существовали эти отношения: чтобы собрать части в более крупную конструкцию, которая способна на большее, чем ее части .

Поскольку агрегация не предполагает владения, члену не нужно привязываться только к одному контейнеру . Например, треугольник состоит из сегментов. Но треугольники могут иметь общие сегменты в качестве сторон.

3.1. UML​

Агрегация очень похожа на композицию. Единственное логическое отличие состоит в том, что агрегация является более слабой связью.

Поэтому представления UML также очень похожи. Единственная разница в том, что ромб пуст:

Тогда для автомобилей и колес мы бы сделали:

3.2. Исходный код​

В Java мы можем смоделировать агрегацию с помощью старой простой ссылки:

 class Wheel >    class Car    ListWheel> wheels;   > 

Член может быть классом любого типа, кроме нестатического внутреннего класса.

В приведенном выше фрагменте кода оба класса имеют отдельный исходный файл. Однако мы также можем использовать статический внутренний класс:

 class Car    ListWheel> wheels;   static class Wheel >   > 

Обратите внимание, что Java создаст неявную ссылку только в нестатических внутренних классах. Из-за этого мы должны поддерживать отношения вручную там, где нам это нужно:

 class Wheel    Car car;   >    class Car    ListWheel> wheels;   > 

4. Ассоциация​

Ассоциация — самая слабая связь между тремя. Это не отношение «имеет» , ни один из объектов не является частью или членом другого.

Ассоциация означает только то, что объекты «знают» друг друга. Например, мать и ее ребенок.

4.1. UML​

В UML мы можем пометить ассоциацию стрелкой:

Если ассоциация двунаправленная, мы можем использовать две стрелки, стрелку со стрелкой на обоих концах или линию без стрелок:

Мы можем представить мать и ее ребенка в UML, тогда:

4.2. Исходный код​

В Java мы можем моделировать ассоциацию так же, как агрегацию:

 class Child >    class Mother    ListChild> children;   > 

Но подождите, как мы можем определить, означает ли ссылка агрегацию или ассоциацию?

Ну, мы не можем. Разница только логическая: является ли один из объектов частью другого или нет.

Кроме того, мы должны поддерживать ссылки вручную на обоих концах, как мы это делали с агрегацией:

 class Child    Mother mother;   >    class Mother    ListChild> children;   > 

5. Дополнительная информация об UML​

Ради ясности иногда мы хотим определить кардинальность отношения на диаграмме UML. Мы можем сделать это, написав его на концах стрелки:

Обратите внимание, что нет смысла записывать ноль как мощность, потому что это означает отсутствие связи. Единственным исключением является случай, когда мы хотим использовать диапазон для указания необязательного отношения:

Также обратите внимание, что поскольку в составе ровно один владелец, то на схемах его не указываем.

6. Сложный пример​

Давайте посмотрим (немного) более сложный пример!

Мы смоделируем университет, в котором есть свои факультеты. На каждой кафедре работают профессора, у которых также есть друзья между собой.

Будут ли кафедры существовать после того, как мы закроем университет? Конечно нет, поэтому это композиция.

Но профессора останутся (надеюсь). Мы должны решить, что логичнее: считать профессоров частью кафедр или нет. Альтернативно: являются они членами отделов или нет? Да. Следовательно, это совокупность. Кроме того, профессор может работать в нескольких отделах.

Отношения между профессорами являются ассоциативными, потому что нет никакого смысла говорить, что профессор является частью другого.

В результате мы можем смоделировать этот пример с помощью следующей диаграммы UML:

 class University    ListDepartment> department;   >    class Department    ListProfessor> professors;   >    class Professor    ListDepartment> department;   ListProfessor> friends;   > 

Обратите внимание, что если мы полагаемся на термины «имеет», «принадлежит», «член», «часть» и т. д., мы можем легче определить отношения между нашими объектами.

7. Заключение​

В этой статье мы увидели свойства и представление композиции, агрегации и ассоциации. Мы также увидели, как моделировать эти отношения в UML и Java.

Как обычно, примеры доступны на GitHub .

Источник

Что такое ассоциация и агрегация в Java?

Когда вы пишете программу на Java, если вы хотите связать один класс с другим, используя его ссылку, вы можете использовать Aggregation в Java. Итак, давайте узнаем, как работает агрегация в Java.

Что такое агрегация?

Прежде чем понять, что такое агрегация, давайте узнаем об ассоциации в Java. Ассоциация называется отношением между двумя отдельными классами, которое устанавливается через их Объекты.

Это может быть один к одному, один ко многим, многие к одному, многие ко многим. Давайте разберемся в ассоциациях на примерах.

package Edureka; class School < private static String name; // bank name School(String name) < this.name = name; >public static String getSchoolName() < return name; >> // employee class class Student < private String name; // employee name Student(String name) < this.name = name; >public String getStudentName() < return this.name; >> // Association between both the // classes in main method public class Association < public static void main (String[] args) < School newSchool = new School("Java Class"); Student stu = new Student("Vian"); System.out.println(stu.getStudentName() + " is a student of " + School.getSchoolName()); >>

Вывод: Виан учится в классе Java.

Vian is a student of Java Class.

Теперь давайте посмотрим, что такое агрегация в Java.

Агрегация на самом деле является особой формой ассоциации. Это означает, что это упоминается как отношения между двумя классами, такими как Ассоциация. Тем не менее, это направленная ассоциация, что означает, что она строго следует односторонней ассоциации. Это представляет отношения HAS-A.

Это рассматривается как более специализированная версия отношений Ассоциации. Класс Aggregate содержит ссылку на другой класс и считается владельцем этого класса. Каждый класс, на который есть ссылка, считается частью класса Aggregate.

Теперь, скажем, например, если класс A содержит ссылку на класс B, а класс B содержит ссылку на класс A, то не может быть определено четкое владение, и это просто отношение ассоциации.

Давайте посмотрим на этот пример:

package Edureka; class Address < int streetNum; String city; String state; String country; Address(int street, String c, String st, String coun) < this.streetNum=street; this.city =c; this.state = st; this.country = coun; >> class Employee < int EmployeeID; String EmployeeName; //Creating HAS-A relationship with Address class Address EmployeeAddr; Employee(int ID, String name, Address addr)< this.EmployeeID=ID; this.EmployeeName=name; this.EmployeeAddr = addr; >> public class Aggregation < public static void main(String args[])< Address ad = new Address(2, "Bangalore", "Karnataka", "India"); Employee obj = new Employee(1, "Suraj", ad); System.out.println(obj.EmployeeID); System.out.println(obj.EmployeeName); System.out.println(obj.EmployeeAddr.streetNum); System.out.println(obj.EmployeeAddr.city); System.out.println(obj.EmployeeAddr.state); System.out.println(obj.EmployeeAddr.country); >>

Теперь у вас может возникнуть вопрос: почему должны использовать эту агрегацию в Java?

Зачем нужна?

Основная причина, по которой вам нужна агрегация, заключается в поддержании возможности повторного использования кода. Например, если вы создаете класс, такой же, как в примере выше, вам необходимо сохранить сведения о сотруднике. И вам не нужно снова и снова использовать один и тот же код, а вместо этого использовать ссылку на класс, пока вы его определяете.

Источник

Агрегирование java что такое

Learn Latest Tutorials

Splunk tutorial

SPSS tutorial

Swagger tutorial

T-SQL tutorial

Tumblr tutorial

React tutorial

Regex tutorial

Reinforcement learning tutorial

R Programming tutorial

RxJS tutorial

React Native tutorial

Python Design Patterns

Python Pillow tutorial

Python Turtle tutorial

Keras tutorial

Preparation

Aptitude

Logical Reasoning

Verbal Ability

Company Interview Questions

Artificial Intelligence

AWS Tutorial

Selenium tutorial

Cloud Computing

Hadoop tutorial

ReactJS Tutorial

Data Science Tutorial

Angular 7 Tutorial

Blockchain Tutorial

Git Tutorial

Machine Learning Tutorial

DevOps Tutorial

B.Tech / MCA

DBMS tutorial

Data Structures tutorial

DAA tutorial

Operating System

Computer Network tutorial

Compiler Design tutorial

Computer Organization and Architecture

Discrete Mathematics Tutorial

Ethical Hacking

Computer Graphics Tutorial

Software Engineering

html tutorial

Cyber Security tutorial

Automata Tutorial

C Language tutorial

C++ tutorial

Java tutorial

.Net Framework tutorial

Python tutorial

List of Programs

Control Systems tutorial

Data Mining Tutorial

Data Warehouse Tutorial

Javatpoint Services

JavaTpoint offers too many high quality services. Mail us on h[email protected], to get more information about given services.

  • Website Designing
  • Website Development
  • Java Development
  • PHP Development
  • WordPress
  • Graphic Designing
  • Logo
  • Digital Marketing
  • On Page and Off Page SEO
  • PPC
  • Content Development
  • Corporate Training
  • Classroom and Online Training
  • Data Entry

Training For College Campus

JavaTpoint offers college campus training on Core Java, Advance Java, .Net, Android, Hadoop, PHP, Web Technology and Python. Please mail your requirement at [email protected].
Duration: 1 week to 2 week

Like/Subscribe us for latest updates or newsletter RSS Feed Subscribe to Get Email Alerts Facebook Page Twitter Page YouTube Blog Page

Источник

Оцените статью