用户名必须是唯一的,并且不能在Mastermind中更改

2024-09-30 03:22:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个智囊团游戏设计一个UML类图,我很难弄清楚如何使属性“Name”唯一且不可更改。我假设通过将“Name”属性命名为private并在类图中显示它来实现这一点。任何形式的帮助都将不胜感激。谢谢


Tags: name游戏属性private命名形式uml类图
2条回答

总之

因为您寻找的是UML符号,而不是Python方面:

CLass diagram with game and players and an association with a constraint

更多解释

不可改变

UML的只读属性用{readOnly}注释。规范定义了语义:

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.

然而,UML并没有说明初始值是如何提供的。如果它是私有属性,您可能会向构造函数提供初始名称。显示它(用前面的«create»)将澄清歧义

独特的

同样,也可以为属性指示{unique}。但是,这仅适用于多值属性,因为这意味着同一对象的多值属性值之间不存在重复值。您可能会有一些带有单个NamePlayer对象:然后添加{unique}与不添加{unique}没有区别

如果你在某处有一个Game与两个Players关联,你可以在关联端放一个{unique}来表示它是两个不同的玩家,但没有什么能阻止他们拥有相同的名字。幸运的是,有两种预GMATIC解决方案:

  • 向关联添加自然语言约束,例如{ player names must be unique }。这样做的好处是,对于人类读者来说,这是一个明确无误的概念。您可以将其转换为更正式的OCL表达式,但这就像双重编码:OCL中的once和Python中的once

  • 在名称后添加{id},以说明名称是类的标识符。标识符原则上在类中是唯一的。然而,尽管大多数读者会理解这一点,但它是不明确的,因为UML没有定义标识符的语义:

    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.

    此外,这将防止不同游戏中的两名玩家同名

在图表上,我展示了两种选择,但是如果没有明显的好处,我不应该使用id

根据Python,您只能通过在名称前面添加下划线来指示私有属性。就语言而言,这不是一种语言结构,而是一种惯例。UML并不在意,因为它与语言无关。将其建模为private(通过在名称前面显示-)。如果您正在从该UML模型生成代码,代码生成器可能会自动创建下划线

在任何情况下,如果您使用UML创建了一个模型,并指出某些东西是私有的,那么该语言的编码人员必须小心。对于一个封闭的实现,您只需要培训您的编码人员。对于一个开放的(库)实现,Python将允许您在雨中使用它

相关问题 更多 >

    热门问题