2014-10-07 3 views
1

В настоящее время я читаю книгу «Шаблоны дизайна» банды четырех человек. В один момент сравниваются структуры времени выполнения и времени компиляции. В этом разделе написано:Знакомство с объектом

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

Моя интерпретация, что это что-то вроде следующего в Java:

public class SomeClass{ 
    private OtherClass; //This is the aggregate object 
    //... 
} 

Я предполагаю, что это то, что они означают, и я считаю, что легко понять. Но тогда они определяют знакомство:

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

Этот окончательный бит меня смущает. Может ли это быть достигнуто только с помощью указателей? Они говорят о C++ конкретно, означает ли это, что это невозможно сделать на Java? В моем понимании отношение будет знакомство молодежи быть что-то вроде этого в Java:

public class SomeClass{ 
    ///... 

    public void doSomething(SomeOtherClass some_other_class){ 
     some_other_class.doSomethingElse(); //Is this (an) aquaintance? 
    } 

    ///... 
} 

Я не совсем уверен, что я получил эту концепцию() вниз знакомства молодежи. Кто-нибудь захочет просветить меня, если это правильный способ просмотра вещей на Java? Или можно ли познавать отношения на Java, потому что у нас нет указателей?

Наконец, они говорят:

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

Что это должно означать? Это просто абстрактные понятия, а не фактические реализации или что-то еще?

Difference aggregation, acquaintance and composition (as used by Gang Of Four). Это был единственный вопрос, который я смог найти, который приблизился к моему, но мне это не очень помогает. Заранее спасибо.

+1

«Это просто абстрактные понятия». В точку. Большинство языков не могут выразить свое различие. – molbdnilo

ответ

3

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

public class SomeClass{ 
///... 

    public void doSomething(SomeOtherClass some_other_class){ 
     some_other_class.doSomethingElse(); //yes SomeOtherClass is the Acquaintance 
    } 

///... 
} 

Книга GoF была написана до Java был выпущен поэтому он использует C++ термины и понятия, что может или не может 100% совпадению с Java.

Термин знакомство, вероятно, подразумевает более близкие отношения, чем концепцией С ++ в виде Friend, который может видеть и получать доступ к личным данным другого объекта

+0

(+1) «Ссылки на Java ... указатели» – umlcat

+0

Я знал, что это будет укусить меня в заднице;) – Bono

1

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

Я не согласен с этим предложением, для остальных я попытаюсь объяснить различия и привести примеры.


знакомство, агрегация и композиция моделируют понятия: Я имею в виду, они не являются технологией программирования, ни что-то связанное с кодом, а способ сделать схему из мира вы смотрите.

Пример знакомства: у вас есть персональный компьютер и экран, экран не является частью ПК или ПК на экране, но оба они работают вместе.

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

Состав: Также называйте «твердую» агрегацию: футбольная команда состоит из игроков, а игрок является частью футбольной команды. Если вы удалите всех игроков команды ... ну это еще не команда.

Все они: Знакомства/Ассортимент, Состав и агрегация - это понятия, они зависят от того, как вы смотрите на мир, а разделение иногда не очень ясное. В большинстве случаев речь идет о том, что важно для вас/вашего программного обеспечения.

Есть «общие» способы реализовать их все на Java и C++ (и вы можете легко их найти), но опять же: концепция важна здесь, а не код.

Смежные вопросы