UML类方法从序列图

3
消息的方向如何决定类(序列图中的参与者)的方法?我认为发送消息的参与者拥有该方法。我正确吗?

enter image description here

而这些类是

enter image description here

我是正确的还是反过来?


我不确定你使用的是什么类型的登录系统,但通常你会在登录凭据中输入密码。这只是一个步骤,而不是两个步骤。 - OneCricketeer
@cricket_007 已了解。没错,我那么做只是为了引起多条消息。不过告诉我一件事,既然EnterLogin()和EnterPassword()是由计算机实现的,那么LOGIN和PASSWORD属性对于个人来说是否合适? - Kurt Miller
一个人员实体不应该存储自己的密码,只需要登录标识符,例如电子邮件或用户名。另外,“Enter”前缀很冗长,如果您只是通过参数实现方法,如“login(id,password)”,那么这个前缀就完全不必要了。类图并不总是与序列图匹配。用户看到登录屏幕并输入密码时,计算机不会向用户发送“AskPassword”函数。当验证不正确时,您还需要错误消息响应。 - OneCricketeer
我认为有一件事情可能会对你有所帮助,那就是使用更符合UML规范的工具。例如,MagicDraw可以从消息中创建操作,或者反过来。这将有助于您理解UML中的关系。考虑下载一份副本并请求评估许可证。 - Jim L.
1个回答

7
“发送消息”在大多数情况下与“调用方法”相同,这意味着如果一个演员向计算机发送消息,那么计算机需要理解它/实现一个方法。
有一些区别(请参见此处1),但基本上您会向对象“发送消息”,对象会决定如何处理它,在大多数情况下它会实现一个适当的方法。
因此,回答您的问题,应该是消息接收者实现该方法,而不是发送者。
也许伪代码也可以说明这一点:
class A {
    function hello() {
        b.someMessage();
        c.otherMessage();
    }
}

class B {
    function someMessage() {
        this.selfMessage();
    }
}

enter image description here


我忘了一件事。在我的图表中,假设有一个名为LOGIN的属性。根据你所说的,LOGIN将是PERSON的属性,而EnterLogin()将是COMPUTER的方法,对吗? - Kurt Miller
不,登录是系统类名“Authentication”的一种方法。如果它是用户的方法,为什么还需要进行登录呢? - qwerty_so

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接