如何使用 Eclipse Papyrus 在 activity 图中指定 OCL 约束?

How to specify OCL constraint in activity diagram using Eclipse Papyrus?

详情

我有一个用 Eclipse Papyrus 设计的登录部分的 activity 图。现在我必须为以下条件编写 OCL 约束:

  1. 用户名必须是字符串且小于 8 个字符
  2. 密码必须是数字+特殊字符且大于 10 个字符
  3. 用户最多可以尝试 5 次,否则系统将锁定登录

我的努力

我已经在像 this but don't know how to apply constraints in activity diagram. I have read a lot of articles, watched videos and research papers and checked questions like this, this, this and this 这样的 class 图表中完成了此操作,但其中 none 提供了正确的答案。

Sample of my activity diagram image

这似乎与 Activity 图关系不大。您的新措辞很清楚,一种形式尝试 5 次或五种形式中的每一种尝试一次都是不好的,因此 User_Account::failedAttempts(而不是 login::attempts)是一个明智的模型特征。

约束最简单地定义为 User_Account::failedAttempts 上的上限 5。请注意,约束定义了什么是有效的,而不是如何对无效做出反应。您可以针对 maximumAttempts() 计算值更多地使用上限不变。您可能会不明智地在操作上使用前置/后置条件,或者只是编织您的控制操作。

你可以明智地有一个 User_Account::isLocked() 操作,其主体是 failedAttempts >= maximumAttempts()。

Activity 为模型提供控件。大概它有一条与登录的 creation/destruction 关联的生命线。据推测,它利用 DataBase::checkPassword(userName, password) 操作 return User_Account 并增加 User_Account::failedAttempts 作为副作用。因此,最大值的执行在 User_Account::checkPassword 中。 (请注意,您不应该为 User_Account 查找和密码验证进行两阶段访问,以确保黑客无法区分(可能仅通过响应时间)失败是由于用户名错误还是密码错误造成的。)

您需要清楚地识别模型中的内容;在系统运行期间持续存在的内容,可能会在系统重启后从备份中恢复。因此 User_Account 必须有用户名和密码以及 failedAttempts 属性来定义持久状态。

相反,当启动另一个用户交互时,View/Control 的一部分可能会丢失并重新创建。因此,登录表单也有用户名和密码属性来表示在表单上输入的内容,并且可能通过 DataBase::getUserAccount 和 UserAccount::checkPassword.

与模型数据库相关联

我不会用临时登录内容污染持久数据库模型。如果您需要在服务器出现故障时重新进行正在进行的登录尝试,我将有一个单独的瞬态查看状态的 ViewDataBase。如果不出意外,您将通过在重新激活临时活动之前重新激活持久数据库来恢复服务器故障。