2015-01-12 2 views
1

У нас есть два класса с именем Point и Line. И класс Line имеет два конструктора. Это код класса Point.Состав и агрегация Java в одном классе?

// The Point class definition 
public class Point { 
    // Private member variables 
    private int x, y; // (x, y) co-ordinates 

    // Constructors 
    public Point(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 
    public Point() { // default (no-arg) constructor 
     x = 0; 
     y = 0; 
    } 
}  

И это код класса Line.

public class Line { 
    // Private member variables 
    Point begin, end; // Declare begin and end as instances of Point 

    // Constructors 
    public Line(int x1, int y1, int x2, int y2) { 
     begin = new Point(x1, y1); 
     end = new Point(x2, y2); 
    }` 
    public Line(Point begin, Point end) { 
     this.begin = begin; 
     this.end = end; 
    } 
} 

Как вы видите, класс Line имеет два конструктора. И Первый конструктор - пример Compositon, а агрегация второго конструктора. Теперь, что мы можем сказать об этом случае? Может ли класс иметь как агрегацию, так и состав? Спасибо за ваши ответы.

+0

Возможный дубликат [Разница между Агрегацией и композицией в Java] (http://stackoverflow.com/questions/11881552/implementation-difference-between-aggregation-and-composition-in-java) – xmojmr

ответ

1

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

  • Агрегация: объект A содержит ссылки на другие объекты, но эти другие объекты совместно используются другими классами. Когда A расположен, другие объекты продолжают жить и использоваться в приложении
  • Состав: Объект B выполнен «из других» предметов. Когда А расположен, так же как и другие объекты.

Стоит quoting Fowler on this:

Мало что в UML вызывают более испуга, чем агрегации и композиции

...

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

...

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

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

0

С определяющей характеристикой состава (по сравнению с агрегацией) оказывает эксклюзивные/без разделяемых частей (см https://stackoverflow.com/a/27889087/2795909), ваш пример Point - часть-целое отношений Line явно агрегация (независимо от того, если вы проходите точку объекты или создавать их в конструкторе), так как две точки, определяющие линию, могут совместно использоваться другими строками.