Я осознаю концептуальные различия между агрегацией и композицией. Может ли кто-нибудь сказать мне разницу в реализации Java между ними с примерами?
Разница между агрегацией и композицией в Java
Ответ 1
Состав
final class Car {
  private final Engine engine;
  Car(EngineSpecs specs) {
    engine = new Engine(specs);
  }
  void move() {
    engine.work();
  }
}
Агрегация
final class Car {
  private Engine engine;
  void setEngine(Engine engine) {
    this.engine = engine;
  }
  void move() {
    if (engine != null)
      engine.work();
  }
}
В случае композиции двигатель полностью инкапсулирован автомобилем. Для внешнего мира нет никакого способа получить ссылку на Двигатель. Двигатель живет и умирает с автомобилем. С агрегацией автомобиль также выполняет свои функции через двигатель, но Двигатель не всегда является внутренней частью автомобиля. Двигатели могут быть заменены или даже полностью удалены. Не только это, но и внешний мир все еще может иметь ссылку на Двигатель и возиться с ним, независимо от того, находится ли он в Автомобиле.
Ответ 2
Я бы использовал хороший пример UML.
В университете есть от 1 до 20 различных отделов, и каждый отдел имеет от 1 до 5 профессоров. Существует связь между университетом и его отделами. Существует связь агрегирования между отделом и его "профессорами".
Композиция - это просто СИЛЬНАЯ Агрегация, если университет разрушен, отделы также должны быть уничтожены. Но мы не должны убивать профессоров, даже если их уважающие отделы исчезают.
В java:
public class University {
     private List<Department> departments;
     public void destroy(){
         //it composition, when i destroy a university I also destroy the departments. they cant live outside my university instance
         if(departments!=null)
             for(Department d : departments) d.destroy();
         departments.clean();
         departments = null;
     }
}
public class Department {
     private List<Professor> professors;
     private University university;
     Department(University univ){
         this.university = univ;
         //check here univ not null throw whatever depending on your needs
     }
     public void destroy(){
         //It aggregation here, we just tell the professor they are fired but they can still keep living
         for(Professor p:professors)
             p.fire(this);
         professors.clean();
         professors = null;
     }
}
public class Professor {
     private String name;
     private List<Department> attachedDepartments;
     public void destroy(){
     }
     public void fire(Department d){
         attachedDepartments.remove(d);
     }
}
Что-то в этом роде.
Ответ 3
Простыми словами:
Оба состава и агрегирования являются ассоциациями. Композиция → Сильная связь Has-A Агрегация → Слабая связь Has-A.
Ответ 4
В приведенном ниже URL-адресе есть большое объяснение.
http://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit
Пожалуйста, проверьте!!!
Ответ 5
Простая программа компоновки
public class Person {
    private double salary;
    private String name;
    private Birthday bday;
    public Person(int y,int m,int d,String name){
        bday=new Birthday(y, m, d);
        this.name=name;
    }
    public double getSalary() {
        return salary;
    }
    public String getName() {
        return name;
    }
    public Birthday getBday() {
        return bday;
    }
    ///////////////////////////////inner class///////////////////////
    private class Birthday{
        int year,month,day;
        public Birthday(int y,int m,int d){
            year=y;
            month=m;
            day=d;
        }
        public String toString(){
           return String.format("%s-%s-%s", year,month,day);
        }
    }
    //////////////////////////////////////////////////////////////////
}
public class CompositionTst {
    public static void main(String[] args) {
        // TODO code application logic here
        Person person=new Person(2001, 11, 29, "Thilina");
        System.out.println("Name : "+person.getName());
        System.out.println("Birthday : "+person.getBday());
        //The below object cannot be created. A bithday cannot exixts without a Person 
        //Birthday bday=new Birthday(1988,11,10);
    }
}
Ответ 6
Разница в том, что любая композиция является агрегацией, а не наоборот.
Пусть заданы члены. Агрегация - это metaterm в стандарте UML, и означает BOTH-состав и общую агрегацию, просто называемую shared. Слишком часто он назван неправильно "агрегацией". Это ПЛОХО, а состав также является агрегацией. Насколько я понимаю, вы имеете в виду "общий".
Кроме стандарта UML:
composite - указывает, что свойство агрегируется по-разному, т.е. составной объект несет ответственность за существование и хранение составных объектов (частей).
Таким образом, ассоциация Университета и кафедрального собора - это композиция, потому что кафедра не существует из университета (ИМХО)
Точная семантика общей агрегации зависит от области приложения и модельер.
I.e., все другие ассоциации могут быть нарисованы как общие агрегаты, если вы только следуете каким-то принципам или кому-то другому. Также посмотрите здесь.
Ответ 7
Сначала мы должны поговорить о том, что на самом деле разница между Aggregation и Composition должна быть на одной странице.
Агрегация - это ассоциация, в которой ассоциированный объект может существовать независимо от ассоциации. Например, Лицо может быть связано с Организацией, но он/она может иметь независимое существование в системе.
тогда
Композиция относится к ситуации, когда одно из связанных объектов сильно связано с другим и не может существовать без другого существования. Фактически личность этой сущности всегда связана с идентификацией другого объекта. Например, колеса в автомобиле.
Теперь агрегирование может быть просто достигнуто путем сохранения свойства одного объекта в другом, как показано ниже:
class Person {
    Organisation worksFor;
}
class Organisation {
    String name;
}
class Main {
    public static void main(String args[]) {
        //Create Person object independently
        Person p = new Person();
        //Create the Organisation independently
        Organisation o = new Organisation();
        o.name = "XYZ Corporation";
        /*
          At this point both person and organisation 
          exist without any association  
        */
        p.worksFor = o;
    }
}
Для композиции необходимо, чтобы зависимый объект всегда создавался с идентификатором связанного с ним объекта. Вы можете использовать внутренний класс для того же самого.
class Car {
    class Wheel {
        Car associatedWith;
    }
}
class Main {
    public static void main() {
        //Create Car object independently
        Car car = new Car();
        //Cannot create Wheel instance independently
        //need a reference of a Car for the same.
        Car.Wheel wheel = car.new Wheel();
    }
}
Обратите внимание, что один и тот же вариант использования может подпадать под агрегацию/состав в зависимости от сценария приложения. Например, случай Person-Organization может стать составным, если вы разрабатываете приложение для людей, работающих в какой-либо организации, и ссылка на организацию обязательна для регистрации. Аналогичным образом, если вы поддерживаете инвентарь для частей автомобиля, отношение Car-Wheel может быть агрегацией.
Ответ 8
Оба типа, конечно, являются ассоциациями, и на самом деле они не привязаны строго к таким элементам языка. Разница заключается в цели, контексте и моделировании системы.
В качестве практического примера сравните два разных типа систем с похожими объектами:
-  Система регистрации автомобилей, которая в первую очередь отслеживает автомобили, их владельцев и т.д. Здесь нас не интересует двигатель как отдельный объект, но у нас могут быть атрибуты, связанные с двигателем, такие как мощность и тип топлива. Здесь Двигатель может быть составной частью автомобиля. 
-  Система управления автосервисом, которая управляет автозапчастями, обслуживает автомобили и заменяет детали, а может быть и полные двигатели. Здесь у нас могут быть даже запасы двигателей, и им необходимо отслеживать их и другие части отдельно и независимо от автомобилей. Здесь Двигатель может быть агрегированной частью автомобиля. 
Как вы реализуете это на своем языке, это второстепенное беспокойство, поскольку на этом уровне гораздо важнее такие вещи, как читаемость.

