Как я go о реализации странной записи "класса" - PullRequest
2 голосов
/ 13 февраля 2020

Я пишу сверхинженерный матричный калькулятор на C ++ и не знаю, что это значит:

enter image description here

Я никогда не видел ничего подобного поле с Valuation = std :: map в диаграмме классов и раньше, и не знаю, что искать. Я пишу это как конструктор или как? И почему нет никакой связи между IntElement и Valuation, хотя IntElement Clearly использует его?

У меня есть это в заголовке прямо сейчас, это то, что ищет диаграмма?

class Valuation{

    Valuation(std::map<char,int>);

};

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Посмотрим, что говорит UML 2.5 spe c.

9.2.4.1 Классификаторы (стр. 99)

Обозначением по умолчанию для классификатора является контурный прямоугольник solid, содержащий имя классификатора и с отделениями, разделенными горизонтальными линиями под именем. Название классификатора должно быть выделено жирным шрифтом. Для тех языков, которые различают guish между заглавными и строчными буквами, имена классификаторов должны начинаться с заглавных букв.

Я не могу найти ни одной точки в UML spe c, которая ограничивает имена для любого данного набора символов (Unicode). Возможно, по той причине, что вам понадобится еще одна книга для этого. Таким образом, все, что мы можем извлечь из вышесказанного, это то, что

Valuation = std::map<char,int>

является идентификатором так же, как, например,

wiec8736b(/&& 3l?!blurb

быть (странным) идентификатором. Но это ни в коем случае не будет оператором, в котором вы можете интерпретировать символ = как присваивание или равенство.

tl; dr Это руби sh. Go и спросите автора, что он имел в виду. Скажите ему, чтобы он использовал либо комментарий и понятное текстовое описание, либо придерживался действительной нотации UML.


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

9.6.4 Обозначения (стр. 115)

Если показано на диаграмме, операция отображается в виде текстовой строки вида:

[<visibility>] <name> ‘(‘ [<parameter-list>] ‘)’ 
   [‘:’ [<return-type>] [‘[‘ <multiplicity-range> ‘]’] 
   [‘{‘ <oper-property> [‘,’ <oper-property>]* ‘}’]]

где:

  • <visibility> - видимость Операции (см. 7.4).

    <visibility> ::= ‘+’ | ‘-‘ | ‘#’ | ‘~’

/ не определена видимость. Скорее всего, автор взял за свободу использовать // в качестве обычного комментария. Это, вероятно, приемлемо, но не отображает действительный UML.

И как примечание 2-й стороны: n*n в правом верхнем углу также выглядит suspi cios. Это, вероятно, множественность и в этом формате также недействительным. Но это только предположение.

0 голосов
/ 13 февраля 2020

Трудно сказать, где эта строка будет go без дополнительного контекста, но поле Valuation выглядит так, как будто оно запрашивает строку вроде:

using Valuation = std::map<char,int>;

То есть определите Valuation как псевдоним для определенной карты. Основываясь на «разумном» дизайне, я ожидал бы, что эта строка будет go в общем родительском классе VariableElement и IntElement, возможно, как защищенный typedef. Тем не менее, я не вижу ничего на диаграмме, чтобы предложить это.

Я не вижу достаточного контекста, чтобы догадаться, почему нет строки «использования» от IntElement до Valuation. IntElement и VariableElement, кажется, находятся в равных условиях в этом отношении, учитывая член evaluate. С другой стороны, я бы задал вопрос, почему существующая строка соединяется с VariableElement, а не с предполагаемым общим родителем, который должен определять псевдоним. Это может быть что-то, чтобы поднять с автором диаграммы. (Иногда люди делают ошибки, даже профессора.)

Приложение: У меня была мысль о разнице между IntElement::evaluate и VariableElement::evaluate. Может случиться так, что первый игнорирует свой параметр, следовательно, он на самом деле не использует Valuation больше, чем имя типа. С другой стороны, последний может искать запись на карте, поэтому для реализации необходим Valuation, чтобы он был полным типом. Это возможная мотивация, хотя я нахожу сомнительным, чтобы такая деталь реализации влияла на диаграмму классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...