Какова кратность

1

Я не уверен, что такое множественность между A & C, а также между B & C для следующих классов Java...

FYI: класс A и класс B могут ссылаться либо на некоторые, либо на все методы этого родового класса C.

Мое предположение:

  1. Класс A (1) -----Class C (*)
  2. Класс B (1) -----Class C (*)

Пожалуйста, поправьте меня, если я ошибаюсь здесь.

Еще одна вещь, когда это отношение "много-ко-многим" для обоих (1) & (2)?

class A{
    //methods in Class A only involve Ball objects
    methodA(){
        C<Ball> newObj=new C<Ball>();
        newObj.method1();
    }
}

class B{
    //methods in Class B only involve Tennis objects
    methodB(){
        C<Tennis> newObj=new C<Tennis>();
        newObj.method1();
    }
}

class C<T>{
    method1(){
        //implementation here
    }
    method2(){
        //implementation here
    }
    method3(){
        //implementation here
    }
}
  • 0
    См. UML Надстройка, раздел Классы. Есть детали, которые вам нужно знать.
Теги:
uml

2 ответа

2
Лучший ответ

В общем, вы спрашиваете, сколько разных экземпляров X может существовать для одного экземпляра Y, и наоборот? В вашем примере совершенно не имеет смысла говорить о множественности в контексте диаграммы классов по двум причинам:

  1. Ваш C не поддерживает ссылку на любые ассоциированные A или B. Поэтому, в лучшем случае, это однонаправленные отношения. Это нормально, если говорить о множественности, хотя и не в вашем конкретном примере (для чего множественность не имеет смысла, см. Пункт 2). Что касается множественности, то, игнорируя точку 2, A имеет ровно 1 C, B имеет ровно 1 C, а C имеет 0 A и 0 B.

  2. Ваши отношения находятся в форме локальной переменной. Поэтому на самом деле это не отношения класса. Это соотношение исчезает, как только возвращается метод A (или B). Так что действительно не имеет смысла устанавливать диаграмму ассоциаций для этих классов. Граф звонящего/вызываемого, возможно, но общая ассоциация, нет.

Ваш пример, где A использует C локально в некоторых его методах, является примером зависимости, а не ассоциации. UML обычно использует пунктирную линию для этого (хотя некоторые варианты могут отличаться), и множественность не вступает в игру для этого (извините за низкое качество):

Изображение 174551

В вашем примере есть несколько небольших изменений, которые сделают множественность релевантной. Например, оставляя C как есть, но меняя A на:

class A {
   C<Ball> c = new C<Ball>();
   ...
   methodA(){
       c.method1();
   }
}

В этом случае A имеет ровно один C, а C имеет нуль A (однонаправленный). UML будет выглядеть (опять же, извините за качество):

Изображение 174551

То есть, если вы сделаете изменение выше, оно станет отношением "один к одному". Он однонаправлен, потому что C не знает о A.

Еще одна вещь, когда это отношение "много-ко-многим" для обоих (1) & (2)?

Это отношение "многие ко многим", когда A хранит ссылки на несколько C, а C хранит ссылки на несколько A. Например, студенты к курсам в университете. Каждый курс содержит несколько учеников, и каждый студент принимает несколько курсов. Например:

class Student {
    Collection<Course> courses;
}

class Course {
    Collection<Student> students;
}
  • 0
    Для однонаправленных я видел некоторые сайты, использующие пунктирную стрелку с той же стрелкой, что и у вас. Означает ли это то же самое, что и ваша диаграмма выше?
  • 0
    @ user614454 Нет, обычно нет. Пунктирная линия обычно указывает на зависимость (которая может быть однонаправленной и обычно есть, но не является ассоциацией), а не на уровне класса. Пунктирная линия была бы более точной для вашего исходного примера, поскольку A зависит от C, даже если он не поддерживает связь с C. Я обновлю свой ответ, чтобы включить это, так как это важно.
Показать ещё 5 комментариев
2

Множественность дает вам информацию о том, сколько экземпляров определенного типа, значений атрибутов или связанных экземпляров для ссылки можно создать. Это не имеет никакого отношения к вызову операции. Если, например, множественность на конце ассоциации равна [0.. *], это означает, что к одному экземпляру, связанному с противоположной стороной ассоциации, вы можете подключить нуль или более экземпляров.

AC [0.. *] = один экземпляр A имеет от нуля до неограниченных экземпляров связности C.

  • 0
    Итак, если у каждого метода в классе A или классе B есть экземпляр класса C, то это C [1 .. *]?
  • 0
    И если, допустим, только некоторые методы класса A / B имеют экземпляры класса C, то это C [0 .. *]?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню