我正在尝试为此问题创建UML类图:因此,系统会提示用户输入密码。这是一个9位数字。系统通过查看存储在其中的密码正确的数据库来接收密码并检查其是否正确。如果密码正确,系统需要显示消息“正确”。否则,显示消息“错误”。如果用户连续输入错误密码超过5次,则系统将停止显示消息。
我这里有4节课,对吗?用户,系统,数据库,计数器
┌─────────────────────────┬
│ User │
├─────────────────────────┬
│- pass: int |
├─────────────────────────┼
|+ EnterPass() |
├─────────────────────────┼
| *
|
|
|
|
| 1
┌─────────────────────────┬
│ System │
├─────────────────────────┬
│ |
├─────────────────────────┼
|+ CheckPass() |
|+ ShowSuccess() |
|+ ShowError() |
|+ ShowNothing() |
|+ ChangeCategory() |
├─────────────────────────┼
| 1
|
|
|
|
| 1
┌─────────────────────────┬
│ Database │
├─────────────────────────┬
│- CorrectPass: int |
├─────────────────────────┼
|+ ValidatePass(): bool |
|+ Increment1() |
├─────────────────────────┼
| 1
|
|
|
|
| 1
┌─────────────────────────┬
│ Counter │
├─────────────────────────┬
│- CounterState: int |
├─────────────────────────┼
|+ increment() |
|+ GetState(): int |
├─────────────────────────┼
有人可以告诉我这是否正确?我不太确定我是否应该以某种方式连接计数器和系统?我有什么要补充的吗?
答案 0 :(得分:1)
您通常不希望对这些细节进行建模,因为您最终会使用陈旧的惰性模型。用户和计数器更像是OOP的关注点,类似于对构成砖块的沙子和粘土进行建模。谁在乎这个细节?相反,您最好不要对问题域进行建模,这在这里完全没有。
您可以对系统架构进行建模,以识别组件,职责和交互。您可以将系统和数据库发展为架构。
你的模型是否正确UML?当然,但它不是特别有用。
顺便说一下,当你看到一对一的多重性时,几乎总是一个红旗。答案 1 :(得分:0)
这不是一个好的设计。数据库和计数器不应该是类。第一个是它的复杂性,第二个是因为它的简单性。不要使用System进行密码检查,而是进行一次身份验证。你所谓的系统将是除身份验证之外的许多其他类的集合体。计数器只是身份验证中的私有属性。
现在到您的数据库。这可能代表系统允许的用户。因此,请调用此类User并为其分配用户拥有的任何属性(名称,加密密码,上次登录等)。将其映射到真实数据库是后期设计阶段的主题,您可以通过实现一些持久性接口来使这些类持久化。