Диаграмма классов для вероятности

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

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

Диаграмма классов для вероятности

У меня есть два экземпляра случайных переменных, X и Y. У них есть вероятность, которую я разделил на подклассы P(X) и P(Y) из вероятности.

Должен ли я иметь «вероятность» ассоциации, идущей от экземпляров переменных к значениям вероятности? Или это избыточность в моем дизайне?

Думая с точки зрения фактического кода, я думаю, что у меня была бы связь только между значениями P (X) и моими экземплярами X ... означает ли это, что ассоциация с вероятностью суперкласса является избыточной?

Если это так, у меня будет неопределенное количество ассоциаций для неопределенного количества экземпляров Random Variable... хотя на самом деле мой код может выглядеть именно так. Не будет ли достаточно наличия этих ассоциаций на диаграмме и только ассоциации с суперклассом «Вероятность» для описания моей системы?

Мои причины для выражения этого в UML (отвечая на комментарий ниже): я полагаю, что мог бы выразить свои вероятности как просто функцию для некоторых объектов и сохранить это на какой-то карте... затем иметь некоторую функцию, которая гарантирует неизменность суммы все вероятности суммируются до 1 и т. д., тогда я мог бы добавить больше данных, и мне пришлось бы пересматривать и перерабатывать всю мою карту... что повлияет на совместное распределение... и т. д. и т. д., добавляя сложности и делая какие-либо процедурные подход довольно грязный. Не то чтобы процедурный подход не сработал, но мне действительно нужна четкая объектно-ориентированная картина программного обеспечения, которое я собираюсь создать. Диаграммы классов кажутся довольно хорошим инструментом для этого. Я хочу думать о каждом дистрибутиве как об объектах, а не о чем-то процедурно сгенерированном.


person Learning...    schedule 22.03.2016    source источник
comment
Вы должны уточнить причины выражения else математической проблемы с помощью UML. Вероятность как таковая не является классом. Это функция объекта.   -  person qwerty_so    schedule 22.03.2016


Ответы (2)


Обзор

Вам не нужны ассоциации «Вероятность» от «Y» до «P (Y)» или от «X» до «P (X)». Они избыточны.

Ваш класс или объект «Вероятность» представляет ассоциацию. Оставьте ассоциации, формирующие этот класс, объекту.

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

Длинный скучный развернутый ответ

Моделирование объектов, классов и ассоциаций может быть немного громоздким.

У вас есть переменная, которая в какой-то момент будет иметь какое-то значение.

Схема объекта 1 (неполная)

...............
..+---------+..
..|    5    |..
..+---------+..
...............

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

Схема объекта 2 (неполная)

...............
..+---------+..
..|  Float  |..
..+---------+..
..|    5    |..
..+---------+..
...............

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

Для того же понятия или переменной могут быть и другие значения, например:

Схема объекта 3 (неполная)

............................
..+---------+..+---------+..
..|  Float  |..|  Float  |..
..+---------+..+---------+..
..|    5    |..| 3.1416  |..
..+---------+..+---------+..
............................
..+---------+..+---------+..
..|  Float  |..|  Float  |..
..+---------+..+---------+..
..|  -55.12 |..|    0    |..
..+---------+..+---------+..
............................

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

Следовательно, существует связь между каждым исходным значением и значениями вероятности.

Давайте смоделируем несколько примеров объектов.

Схема объекта 4 (неполная)

....................................
..+---------+..........+---------+..
..|  Float  |..........|  Float  |..
..+---------+..........+---------+..
..|    5    +-------+--+  -444   |..
..+---------+.......|..+---------+..
....................|...............
....................|..+---------+..
....................|..+  Float  |..
....................|..+---------+..
....................+--+    0    |..
....................|..+---------+..
....................|...............
....................|..+---------+..
....................|..|  Float  |..
....................|..+---------+..
....................+--+   +1    |..
.......................+---------+..
....................................

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

Давайте изменим этот пример диаграммы объектов на более концептуальную диаграмму классов.

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

И, давайте назовем это «X».

Диаграмма классов 5 (неполная)

..................
..+------------+..
..|  X: Float  |..
..+------------+..
..................

Помните, что «X» представляет или имеет одно значение за раз, но оно может измениться.

Теперь может быть несколько значений вероятности для «X». Давайте представим их всех одним блоком классов, а не многими.

И назовите их «PX» без круглых скобок, потому что они не могут использоваться в качестве имен переменных или классов в UML.

Диаграмма классов 5 (неполная)

........................................
..+------------+........+------------+..
..|  X: Float  |........| PX: Float  |..
..+------------+........+------------+..
........................................

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

Диаграмма классов 5 (неполная)

........................................
..+------------+........+------------+..
..|  X: Float  +--------+ PX: Float  |..
..+------------+........+------------+..
........................................

Но для каждого значения «X» может быть несколько значений «PX», давайте добавим ромб, чтобы обозначить это.

Бывают случаи, когда есть связь один-к-одному, но это случай связи один-ко-многим.

Диаграмма классов 6

........................................
..+------------+...../\.+------------+..
..|  X: Float  +----<  >+ PX: Float  |..
..+------------+.....\/.+------------+..
........................................

Ромб нарисован рядом с полем, представляющим «многие» значения.

Давайте добавим необязательную метку, чтобы объяснить цель ассоциации.

И стрелка, указывающая, как применить эту стрелку.

Диаграмма классов 7

........................................
..........<<..Probability Of............
..+------------+...../\.+------------+..
..|  X: Float  +----<  >+ PX: Float  |..
..+------------+.....\/.+------------+..
........................................

Сводка

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

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

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

Многие разработчики UML пропускают диаграммы объектов и используют диаграммы классов непосредственно для представления некоторого сценария. Хотя диаграммы объектов все еще полезны.

«Диаграммы объектов» представлены скругленными прямоугольниками, диаграммы классов используют острые углы. Я не мог хорошо представить их с примерами ASCII.

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

person umlcat    schedule 22.03.2016
comment
Я думаю, что диаграммы объектов были бы полезны для меня, чтобы представить конкретный пример, прежде чем переходить к диаграмме классов (обобщение примера). Собираюсь переделать это. Спасибо. - person Learning...; 23.03.2016

Из «У меня есть 2 экземпляра случайных переменных» я понимаю, что X и Y — это объекты, а random variables — это классы.

Если вы хотите представлять объекты, вы должны использовать диаграммы объектов UML< /а>. Но если вам нужна диаграмма классов, вам следует избавиться от экземпляров объектов и рассматривать только их классы. , то есть random variable, probability и probability distribution of variable (также известные как P(x), P(y), которые могут быть представлены функциями).

Из вашего объяснения неясно, означает ли probability значение вероятности или набор, или вы имеете в виду некоторые базовые законы вероятности. В первом случае вы использовали бы ассоциацию probability distribution of variable с probability. Во втором вы можете рассмотреть отношения обобщения.

person Christophe    schedule 22.03.2016