Как измерения свойств здоровья могут быть смоделированы в диаграмме классов? - PullRequest
2 голосов
/ 18 апреля 2020

У меня есть класс User, который может «измерять» некоторые параметры, связанные с датой, и вводить их в приложение. Итак, 1 пользователь -> множество параметров многих типов, связанных со многими датами (много измерений). Типы параметров являются фиксированными и могут быть как числовыми c, так и строками, например: вес, рост, потребление калорий, некоторые строки ... которые представлены в виде перечисления.

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

diagram

Как класс «Параметр» может быть представлен правильно, учитывая, что:

  • может быть как числовым, так и строковым
  • также существует класс суперпользователя, который может добавлять параметры для определенного c пользователя
  • параметров суперпользователя могут вводить некоторые из тех, которые может ввести обычный пользователь, плюс некоторые другие параметры, исключительные для суперпользователя (например, масса тела), поэтому нет соответствия 1-1
  • числовые параметры имеют другие дополнительные атрибуты, которые могут быть измененным суперпользователем (например: предельный вес)
  • предположительно, суперпользователь должен иметь возможность добавлять "примечания" для некоторых параметров

Моя путаница связана с тем, что у меня есть нет опыта в OOP программировании, и я не могу найти подобные примеры в Интернете. Мне просто нужно ввести в правильном направлении go. Правильно ли изображен рисунок? И почему это, скорее всего, нет? На данный момент проблема заключается в том, как реализовать тот факт, что суперпользователь может также добавлять примечания к некоторым параметрам.

Do I:

  1. создать один класс параметров с типом перечисления в качестве атрибута, который автоматически подразумевает тип данных ввода, например, weight = number?
  2. создает два подкласса для каждого пользователя, например, UserParameters и SuperUserParameters, хотя некоторые параметры перекрываются?
  3. оставить как есть с некоторыми корректировками?
  4. другой лучший подход?

Ответы [ 2 ]

2 голосов
/ 19 апреля 2020

Я хотел бы предложить использовать улучшенную терминологию. Поскольку ваше приложение посвящено измерениям свойств (здоровья), я заменю имя вашего класса «Параметр» на Measurement.

Следующая модель должна удовлетворять всем вашим требованиям (кроме той, которая обсуждается ниже):

enter image description here

Обратите внимание, что два подкласса UserProperty и SpecialProperty просто определяют разбиение Property. Их можно устранить, добавив атрибут перечисления propertyCategory к классу Property, имеющий в качестве литералов перечисления USER_PPROPERTY и SPECIAL_PPROPERTY.

Единственное требование, которое еще не охвачено, это

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

. Это требует дальнейшей обработки. Если эти «другие дополнительные атрибуты» образуют фиксированный набор, их можно смоделировать как дополнительные атрибуты класса Property.

1 голос
/ 19 апреля 2020

Я не думаю, что вам вообще следует делать это на уровне UML. Вы собираетесь в управление памятью / оверлеи. И это детали реализации, о которых вы не должны заботиться. Скорее вы имеете дело с HeartRate и Weight как с отдельными объектами. У них не будет общего «значения», которое является просто некоторым выделением памяти. Они такие, какие есть, и нужна ли вам строка или число, это какое-то свойство отдельных бизнес-объектов.

...