If a StructuralFeature is marked with isReadOnly true, then it may not be updated once it has been assigned an initial value. Conversely, when isReadOnly is false (the default), the value may be modified.
A Property may be marked, via the property isID, as being (part of) the identifier (if any) for Classifiers of which it is a member. The interpretation of this is left open but this could be mapped to implementations such as primary keys for relational database tables or ID attributes in XML.
总之
因为您寻找的是UML符号,而不是Python方面:
更多解释
不可改变
UML的只读属性用
{readOnly}
注释。规范定义了语义:然而,UML并没有说明初始值是如何提供的。如果它是私有属性,您可能会向构造函数提供初始名称。显示它(用前面的
«create»
)将澄清歧义独特的
同样,也可以为属性指示
{unique}
。但是,这仅适用于多值属性,因为这意味着同一对象的多值属性值之间不存在重复值。您可能会有一些带有单个Name
的Player
对象:然后添加{unique}
与不添加{unique}
没有区别如果你在某处有一个
Game
与两个Players
关联,你可以在关联端放一个{unique}
来表示它是两个不同的玩家,但没有什么能阻止他们拥有相同的名字。幸运的是,有两种预GMATIC解决方案:向关联添加自然语言约束,例如
{ player names must be unique }
。这样做的好处是,对于人类读者来说,这是一个明确无误的概念。您可以将其转换为更正式的OCL表达式,但这就像双重编码:OCL中的once和Python中的once在名称后添加
{id}
,以说明名称是类的标识符。标识符原则上在类中是唯一的。然而,尽管大多数读者会理解这一点,但它是不明确的,因为UML没有定义标识符的语义:此外,这将防止不同游戏中的两名玩家同名
在图表上,我展示了两种选择,但是如果没有明显的好处,我不应该使用
id
根据Python,您只能通过在名称前面添加下划线来指示私有属性。就语言而言,这不是一种语言结构,而是一种惯例。UML并不在意,因为它与语言无关。将其建模为private(通过在名称前面显示
-
)。如果您正在从该UML模型生成代码,代码生成器可能会自动创建下划线在任何情况下,如果您使用UML创建了一个模型,并指出某些东西是私有的,那么该语言的编码人员必须小心。对于一个封闭的实现,您只需要培训您的编码人员。对于一个开放的(库)实现,Python将允许您在雨中使用它
相关问题 更多 >
编程相关推荐