Агрегация и состав представления в определении класса? - PullRequest
3 голосов
/ 12 июля 2011

Агрегация - это целое / частичное отношение.Если целое больше не существует, но часть все еще существует

Но в композиции Если целое больше не существует, но часть больше не существует

Например, университет имеет различные отделы(например, химия), и в каждом отделе есть несколько профессоров.Если университет закроется, кафедры больше не будут существовать, но профессора на этих кафедрах продолжат существовать.Следовательно, университет можно рассматривать как состав кафедр, тогда как кафедры имеют совокупность профессоров.

Мой вопрос здесь, как мы на самом деле определим определение класса университета, факультета и профессоров в Java, которое также отображает поведение агрегации и композиции выше?

Ответы [ 2 ]

5 голосов
/ 12 июля 2011

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

В целом, в языках программированияКак и Java, C # или Delphi, оба случая представлены ссылками на объекты.Каждый объект имеет «жизненный цикл» («создан», «делать вещи», «уничтожен»).

package Universities;

class ProfessorClass {
  string FirstName;
  string LastName;

  // constructor
  public ProfessorClass(string AFirstName, string ALastName) {
    FirstName = AFirstName;
    LastName = ALastName;
  } 
} // class ProfessorClass

class DepartmentClass {
  string Name;
  string Description;

  // constructor
  public DepartmentClass(string AName, string ADescription) {
    Name = AName;
    Description = ADescription;
  } 
} // class DepartmentClass

class UniversityClass {
  // here doesn't look different:

  // aggregation
  ProfessorClass[] Professors;
  // composition
  DepartmentsClass[] Departments;

  // constructor
  public UniversityClass() {
    // "UniversityClass" is in charge of creating parts

    // here doesn't look different:

    DepartmentsClass = new DepartmentsClass[]();

    ProfessorClass = new ProfessorClass[]();
  } 

  public addDepartment(string AName, string ADescription)
  {
  // composition, whole class is in charge of adding parts:
    DepartmentClass Dept = new DepartmentClass(AName, ADescription);
    DepartmentsClass.add(Dept);
  }

  public deleteDepartment(string AName)
  {
  // composition, whole class is in charge of deleting parts:
    DepartmentsClass.delete(AName);
  }

  public addProfessor(ProfessorClass AProfessor)
  {
    // aggregation, whole class only reference other objects,
    // but, may look like they where parts
    ProfessorClass.add(AProfessor);
  }

  public static void main(String[] args) {
    UniversityClass MyUniversity = new UniversityClass();

    // composition, internal, maintained by main class
    MyUniversity.addDepartment("History", "Very Boring");
    MyUniversity.addDepartment("Music", "Only if you like it");
    MyUniversity.addDepartment("Astronomy", "night living people");

    // aggregation, external, referenced by main class,
    // maintained independently
    ProfessorClass Professor1 = new ProfessorClass("Jane", "Doe");
    ProfessorClass Professor2 = new ProfessorClass("Mike", "Smith");
    ProfessorClass Professor3 = new ProfessorClass("Louise", "Kent");

    MyUniversity.addProfessor(Professor1);
    MyUniversity.addProfessor(Professor2);
    MyUniversity.addProfessor(Professor3);  
  } // static void main(...)

} // class UniversityClass

В композиции «целые» объекты, составленные другими объектами («частями»), отвечают за создание, использование и уничтожение его частей.«Целый» объект отвечает за «жизненный цикл» каждой из его «частей».

При агрегации «целые» объекты, ссылающиеся на другие объекты («агрегация»), могут выглядеть как «Части "(композиция), как правило, не создаются или уничтожаются основным объектом, просто назначаются или отменяются.Главный объект не управляет напрямую другими объектами, просто добавляет или удаляет ссылки.

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

0 голосов
/ 22 января 2014

Давайте установим условия. Агрегация является мета-термином в стандарте UML и означает ОБА композицию и общую агрегацию, просто названную shared . Слишком часто это называется неправильно «агрегация». Это ПЛОХО, потому что композиция - это тоже совокупность. Как я понимаю, вы имеете в виду "поделился".

Далее от стандарта UML:

составной - Указывает, что свойство агрегировано, составной объект несет ответственность за существование и хранение составленных предметов (частей).

Итак, связь университета с кафедрами - это композиция, потому что кафедры не существует вне университета (ИМХО)

Точная семантика совместной агрегации зависит от области применения и модельер.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...