Отношения А-А - PullRequest
       30

Отношения А-А

1 голос
/ 15 сентября 2010

лифт общественного класса () { Button firstFloorbutton = ButtonFactory.getButtonInstance (this, 1); Button secondFloorbutton = ButtonFactory.getButtonInstance (this, 2); Button thirdFloorbutton = ButtonFactory.getButtonInstance (this, 3); Button 2ndFloorbutton = ButtonFactory.getButtonInstance (this, 4);

 Fan fan1 = FanFactory.getFanInstance(this);

 Light light1 = LightFactory.getInstance(this);

 private void goUp()
 {
    .....
 }

 private void goDown()
 {
   ......
 }

   .............   

 }

        ============================

 public class Button()
 {

   Elevator E;
   int floor;

   public button (Elevator E, int floor )
   {
    this.E = E;
    this.floor = floor;
   }

   public void buttonPressed()
   {

   //logic to determine which floor the elevator is currently at and determine whether to go up or down to reach "this.floor"

   E.goUp();  // if need to go up

   else

   E.goDown()   // if need to go down

   }
} 


    ==========================


    public class ButtonFactory()
    {

      public Button getButtonInstance(Elevator E, int floor)
      {
         Button b =new Button(E, floor);
         return b;
      }
    }

     ==================

    public class FanFactory(){ .................}

     =====================

    public class LightFactory() { ........... }


     ==========================

Какие существуют отношения между классом Elevator и Button?

Согласно Кэти и Берт (SCJP) стр. 92: отношения HAS-A основаны на использовании, а не наследовании. Другими словами, класс A HAS-A B, если код в классе A имеет ссылку на экземпляр класса B.

В моем примере код класса Elevator имеет ссылку на экземпляр класса Button, а Button - экземпляр класса Elevator.

Может кто-нибудь уточнить, пожалуйста.

Ответы [ 2 ]

3 голосов
/ 15 сентября 2010

Лифт имеет кнопку.На самом деле, у него четыре, но с каждой из этих кнопок есть отношение has-a.

Has-a - это несколько неформальный термин, используемый для обозначения двух более формальных типов отношений: ассоциация и агрегация.В обоих случаях одна сторона в отношениях имеет указатель на другую, но они отличаются семантикой: в отношениях ассоциации первая сторона знает о другой, но не полностью доминирует над ней (думаю, вы и коллега)или начальник, или подчиненный), тогда как в отношениях агрегации последняя сторона является частью первой и не имеет независимого существования (подумайте о себе и своей печени).В этом случае я бы сказал, что кнопка более конкретно находится на подчиненном конце отношений агрегации с лифтом, а не просто на отношении ассоциации.

Другими примерами ассоциации могут быть Клиент и Продавец, илиотдел и сотрудник.Агрегации, Order и и OrderLine, или Структуры и Компонента.Интересными угловыми случаями являются Категория и Продукт, а также Заказ и Счет-фактура.

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

0 голосов
/ 15 сентября 2010

Это отношение Has-A, которое представляет собой простой способ запомнить модель композиции.Класс кнопки состоит из класса лифта;т.е. класс кнопки имеет класс лифта.

...