Language agnostic 如何代表;“收藏的东西”;在UML中';s类和序列图?

Language agnostic 如何代表;“收藏的东西”;在UML中';s类和序列图?,language-agnostic,uml,Language Agnostic,Uml,假设您正在尝试使用驾驶员服务模拟租金。您有一个Driver类来表示有关驱动程序的信息。每个驾驶员可以有一辆或多辆(1..*)可用汽车,以汽车类别(我猜)表示。每个驾驶员还可以插入一个或多个(1..*)班次,在这些班次可用期间(班次的特点是区域,天a开始时间和结束时间),因此我设想需要一个班次。用户类可以搜索()在给定时间在给定区域内的可用车辆 您必须绘制此系统的类图,以及search()用例的序列图 在这种情况下,如何表示Shift类 我的意思是,所有这些类显然并不代表单个实体,而是一组这种类型

假设您正在尝试使用驾驶员服务模拟租金。您有一个
Driver
类来表示有关驱动程序的信息。每个驾驶员可以有一辆或多辆(
1..*
)可用汽车,以
汽车
类别(我猜)表示。每个驾驶员还可以
插入
一个或多个(
1..*
)班次,在这些班次可用期间(班次的特点是
区域
a
开始时间
结束时间
),因此我设想需要一个
班次
用户
类可以
搜索()
在给定时间在给定区域内的可用车辆

您必须绘制此系统的类图,以及
search()
用例的序列图

在这种情况下,如何表示
Shift

我的意思是,所有这些类显然并不代表单个实体,而是一组这种类型的数据。现在,对于用户或驱动程序,您可以通过获取单个用户或单个驱动程序对象轻松地表示它们,它们将非常好地总结所有用户或驱动程序的行为。但是如何使用
Shift
类来实现这一点呢?
search()
操作必须在整个数据集上执行,而不是在单个对象上执行,并且单个对象显然不包含所有移位的所有信息。另外,shift对象肯定没有
getAvailableCars()
方法,因为它同样保存关于单个shift的信息

不言而喻,类似这样的东西(这就是我到目前为止关于序列图的想法)

看起来太简单了,不正确

我应该引入一个
ShiftsList
类和一个
CarsList
类吗?我是否应该以其他方式将其视为一组对象


我可以想象我将如何用E/R图对这样的问题进行建模,因为在这种情况下,
Shift
实体将是一个数据库的表,这是一组设计上的数据,但我很难将其放入UML中。

您的设计听起来很合理,除非我将用户替换为驱动程序

不要在UML中为列表建模。列表是实现0..*多重性关联的一种方式


可用的cars只是一个多重性为0..*的返回Car类

在类图中,您可以得到一个*基数关系,您可以将其称为组合。它允许持有“搜索”功能的类(前端)引用所有移位实例

您应该首先考虑前端的签名,它承载您系统的数据,即一组驾驶员、一组汽车

它执行高级操作: 即
void addAvailability(driverName:String,carLicense:String,area:String,…)

搜索函数的参数是什么?(未给出)

您可能需要一个类“Availability”来存储驱动程序提供的数据。 它携带对驱动程序(1基数)和区域/日期对的引用。 或者是对应的移位实例列表

然后根据搜索的参数,您希望可用性有一个“匹配(搜索条件):bool”

要在序列图中建模迭代,您确实有“循环”片段,但它真的有用吗

当“matches”函数返回true时,按照顺序图进行操作,就可以了。
为调用前端类(搜索)上的操作的用户(参与者)放置一条生命线。前端在轮班时调用matches(),如果查询找到关联的驾驶员是真的,则查找他的汽车。在返回弧上画出返回值({“Joe's mercedes”})给演员。

简单回答一下。我想你只触及了冰山一角。如果你想计划班次,整个事情会比一个班次更复杂

  • 您不希望将用户建模为域的一部分(他不是)。在用例模型中将用户建模为参与者。他与系统交互,而不是与现实生活中的对象(事物)交互
  • 想想司机们换班,这种模式很少奏效。通常,您需要一个经理来同步和计划事情(Shift plan类,其中包含[0..*]个班次),这样您就不会有极端情况(一天没有任何司机,或者一天所有司机都在值班,但没有足够的客户等)
  • 驾驶员和汽车之间的关系是这样的:“驾驶员驾驶汽车”。这是最重要的信息。在现实生活中,驾驶员和所有可用汽车之间没有真正的关系,除非他驾驶一辆。我们对现实生活中的关系进行建模,以实现现实生活中的价值
  • 您可能希望将区域建模为枚举,以保持一致性
  • 希望这能帮助你朝着正确的方向开始。让我们随时了解您的进展;)


    关于Trueanalysis,当我在谷歌上搜索一次时,我发现“不要在UML中建模列表”得到了很好的解释(但再也找不到它)。所以我可以证实这一点。使用链表或数组是实现细节。您的业务只关注这样一个事实,即存在许多这样的类型。为什么您要将
    用户
    替换为
    驱动程序
    ?搜索可用汽车的是系统的用户,司机更像是一名员工。是的,我在UML中读到了关于列表的内容,但是Fowler的第一个示例使用了
    列表顺序
    类,所以有点混乱。不管怎样,我编辑了这个图表,添加了你说的“返回的汽车类”部分,结果是:这就是你的意思吗?谢谢你的回复,你应该为问题领域建模,这样你的模型才是持久的。用户是相对于特定solu的