2

我有一个演员——只是一个例子——网站,在 UML2 序列图中称为“访问者”。该参与者与边界对象交互,发送凭据并取回会话令牌。完成后,我想将此演员提升为“经过身份验证的用户”。

我想保留“访问者”和“经过身份验证的用户”,因为它们代表不同的角色并且与系统有不同的交互。(访问者的用例不是“经过身份验证的用户”的子集,因为访问者会收到广告等)

现在,我可以为“Authenticated User”创建一个单独的 LifeLine,并为它创建一个“Create”消息,并在适当的位置为“Visitor”创建一个“Destroy”消息,但这看起来真的很尴尬。

我也可以创建一个“<<提升>>”刻板印象,但普遍接受的方法是什么?

4

4 回答 4

2

想象一下,当“访问者”升级为“经过身份验证的用户”时,系统中的某个地方实际上会诞生一个化身。在系统中旅行的不是“访客”,而是他/她的化身。所以创建另一个具有自己生命线的演员对象对我来说似乎没问题。

(当然,您可以使用泛型类中的简单开关来实现两种不同的存在“状态”,但这不是您所要求的......)booleanUser

我可能会使用

或非常相似的东西

于 2014-12-10T18:23:34.610 回答
0

如果您将它们建模为不同的参与者(以及不同的分类器),那么您可以从一个转移到另一个。如果您是某种类型,则在您的一生中无法更改该类型。因此,在这种情况下,您别无选择,只能从新的“经过身份验证的用户”开始

刻板印象属于元世界。因此,除非您正在制作自己的 UML 概要文件来支持您的建模方法,否则您不应该触及刻板印象。

于 2014-12-09T14:57:58.057 回答
0

简短的快速回答

应用“刻板印象”和“注释”来扩展 UML 图

长无聊的扩展答案

你的问题是一个有效的问题。

在“序列图(s)”中没有直接的通用标准。

间接地,我见过很多“序列图(s)”,像这种情况,把它分成2个或多个图,其中有一个图是“访问者注册到网站”,另一个图是“访问者成为用户,通过登录到网站”,扩展了第一个图表。

请记住,许多“Sequence Diagram(s)”由一个小的“Use Case Diagram”表示,带有“Actor(s)”,并且“Actor(s)”和“Use Case Diagram(s)”都可以使用<<extend>>刻板印象。

一个“用户”Actor被另一个Actor[没有Use Case(s) ] 扩展的示例可能是这样的:

..................................
....(o)...................(o).....
.....|.....................|......
..---+---...............---+---...
.....|......<<extend>>.....|......
.....|<--------------------|......
.....^.....................^......
..../.\.................../.\.....
.../...\................./...\....
..................................
..Visitor.................User....
..................................

Use Casea被另一个扩展的例子Use Case,[没有Actor(s) ],可能是这样的:

....................................................................
......------------------.....................------------------.....
..../...................\................../...................\....
.../.....................\................/.....................\...
..|......Visitor..........|..<<extend>>..|......Visitor..........|..
..|......Arrives To.......|<-------------|......Registers........|..
..|......Website..........|..............|......Into Website.....|..
...\...................../................\...................../...
....\.................../..................\.................../....
.....-------------------....................-------------------.....
....................................................................

而且,这种情况非常普遍,并且经常被视为“事实上的”标准。

不错,也不是错误,您直接跳到“序列图(s)”。

然而,也许你应该:

[1] 添加一个“访客到达网站”Use Case图表,其中有一个名为“访客”的演员

..............................................
....................-------------------.......
.................../....................\.....
....(o).........../......................\....
.....|.........../........................\...
..---+---.......|........Visitor...........|..
.....|..........|........Arrives To........|..
.....|.=========|........Website...........|..
.....^..........|..........................|..
..../.\.........|..........................|..
.../...\.........\......................../...
..................\....................../....
..Visitor..........\..................../.....
....................--------------------......
..............................................

[2] 添加相关的“Visitor become User, by registering into Website”Use Case图表,演员名为“Visitor”

.........................................................
....................-------------------..................
.................../....................\................
....(o).........../......................\...............
.....|.........../........................\..............
..---+---.......|......Visitor.............|.............
.....|..........|......becomes.User........|.............
.....|.=========|......by.registering......|.............
.....^..........|......Into.Website........|.............
..../.\.........|..........................|.............
.../...\.........\......................../..............
..................\....................../...............
...Visitor.........\..................../................
....................--------------------.................
.........................................................

[3] 添加相关的“用户登录网站”Use Case图表,其中一个名为“用户”的参与者

.........................................................   
....................-------------------..................
.................../....................\................
....(o).........../......................\...............
.....|.........../........................\..............
..---+---.......|.......User Logs..........|.............
.....|..........|........Into.Website......|.............
.....|.=========|..........................|.............
.....^..........|..........................|.............
..../.\.........|..........................|.............
.../...\.........\......................../..............
..................\....................../...............
....User...........\..................../................
....................-------------------..................
.........................................................

[4] 将之前的图表合并成一个单一的,带有<<extends>>刻板印象

.....................................................................................
....................-------------------..............................................
.................../....................\............................................
....(o).........../......................\...........................................
.....|.........../........................\..........................................
..---+---.......|........Visitor...........|.........................................
.....|..........|........Arrives To........|.........................................
.....|.=========|........Website...........|.........................................
.....^..........|..........................|.........................................
..../.\.........|..........................|.........................................
.../...\.........\......................../..........................................
..................\....................../...........................................
..Visitor..........\..................../............................................
....................--------------------.............................................
.............................^.......................................................
.............................|.......................................................
.............................|..<<extends>>..........................................
.............................|.......................................................
....................-------------------..............................................
.................../....................\............................................
....(o).........../......................\...........................................
.....|.........../........................\..........................................
..---+---.......|......Visitor.............|.........................................
.....|..........|......becomes.User........|.........................................
.....|.=========|......by.registering......|.........................................
.....^..........|......Into.Website........|.........................................
..../.\.........|..........................|.........................................
.../...\.........\......................../..........................................
..................\......................O...........................................
...Visitor.........\..................../.\..........................................
.....^..............--------------------...\....+------------------------------+--+..
.....|...................^..................\...| "Visitor" becomes "User",     \ |..
.....|...................|...................\..| by registering,                \|..
.....|..<<extends>>......|..<<extends>>......+--O into website                    +..
.....|...................|................../...|                                 |..
.....|..............-------------------..../....+---------------------------------+..
.....|............./....................\./..........................................
....(o).........../......................O...........................................
.....|.........../........................\..........................................
..---+---.......|.....User Logs............|.........................................
.....|..........|......Into.Website........|.........................................
.....|.=========|..........................|.........................................
.....^..........|..........................|.........................................
..../.\.........|..........................|.........................................
.../...\.........\......................../..........................................
..................\....................../...........................................
....User...........\..................../............................................
....................-------------------..............................................
.....................................................................................

Use Case[5]用对应Sequence的图描述每个嵌套图

[6]给每个嵌套图添加注释Use Case,表示有Sequence

...................................................................
..................+------------------------------+--+..............
..Visitor.........|  "Visitor" arrives            \ |..............
..................|  to website                    \|..............
....(o)..O--------O                                 +..............
..---+---.........|                                 |..............
.....|............+---------------------------------+..............
.....|.............................................................
.....^..............+---------+..........+-----------+.............
..../.\.............| Website |..........|  Database |.............
.../...\............+----+----+..........+-----+-----+.............
.....|...................|.....................|...................
....+-+-+..............+-+-+.................+-+-+.................
....|   |..Arrives.....|   |..DoSomething()..|   |..DoSomething()..
....|   +=============>+   +---------------->+   +---+.............
....|   |..............|   |.................|   |...|.............
....|   +<-------------+   +<----------------+   +<--+............. 
....|   |..............|   |.................|   |.................
....+-+-+..............+-+-+.................+-+-+.................
...................................................................

[7] 为每个图表添加注释Sequence,表示,它描述了一个Use Case图表

.....................................................................................
....................-------------------..............................................
.................../....................\............................................
....(o).........../......................\...........................................
.....|.........../........................\..........................................
..---+---.......|........Visitor...........|....+------------------------------+--+..
.....|..........|........Arrives To........|....|                               \ |..
.....|.=========|........Website...........|....| Detailed by corresponding      \|..
.....^..........|..........................O----O Sequence Diagram                +..
..../.\.........|..........................|....|                                 |..
.../...\.........\......................../.....+---------------------------------+..
..................\....................../...........................................
..Visitor..........\..................../............................................
....................--------------------.............................................
.............................^.......................................................
.............................|.......................................................
.............................|..<<extends>>..........................................
.............................|.......................................................
....................-------------------..............................................
.................../....................\............................................
....(o).........../......................\...........................................
.....|.........../........................\..........................................
..---+---.......|......Visitor.............|....+------------------------------+--+..
.....|..........|......becomes.User........|....|                               \ |..
.....|.=========|......by.registering......|....| Detailed by corresponding      \|..
.....^..........|......into.Website........O----O Sequence Diagram                +..
..../.\.........|..........................|....|                                 |..
.../...\.........\......................../.....+---------------------------------+..
..................\......................O...........................................
...Visitor.........\..................../.\..........................................
.....^..............--------------------...\....+------------------------------+--+..
.....|...................^..................\...| "Visitor" becomes "User",     \ |..
.....|...................|...................\..| by registering,                \|..
.....|..<<extends>>......|..<<extends>>......+--O into website                    +..
.....|...................|................../...|                                 |..
.....|..............-------------------..../....+---------------------------------+..
.....|............./....................\./..........................................
....(o).........../......................O...........................................
.....|.........../........................\..........................................
..---+---.......|.....User Logs............|....+------------------------------+--+..
.....|..........|......into.Website........|....|                               \ |..
.....|.=========|..........................|....| Detailed by corresponding      \|..
.....^..........|..........................O----O Sequence Diagram                +..
..../.\.........|..........................|....|                                 |..
.../...\.........\......................../.....+---------------------------------+..
..................\....................../...........................................
....User...........\..................../............................................
....................-------------------..............................................
.....................................................................................

[编辑:添加了几个 ASCII UML 图]

完毕。

于 2014-12-10T19:41:20.283 回答
0

可执行 UML(nee Shlaer-Mellor)支持子类型迁移的概念。但是,大多数面向对象的语言都没有。虽然这是一个有用的概念,但您将需要多行代码来实现它。我会建议一个执行迁移的“复制”构造函数。请参阅 UML 子类型迁移中的文章。

ORM 建模技术在信息建模和关系数据库中有示例,作者 Terry Halpin,Tony Morgan 在 Google 图书中找到。

于 2014-12-09T17:14:53.003 回答