birthdate/deathdate class 应该是对个体 class 的合成还是聚合?
Does a birthdate/deathdate class should be a composition or an aggregation to an individual class?
实体是一个人。
所以该实体有一个生日,也许已经有一个死亡日期。
但是这个日期可以通知也可以不通知(取决于信息的实体和可用性);所以该实体可能有 none 个。
但我觉得把基数和关系类型弄乱了。
我应该如何表示?
我创建了一个摘要 class Individual。它导致 2 最后 class : Person (被识别的人) 或 Pseudonym (匿名的人).
它链接到 class 生日和 class 死亡日期(两者都被概括为 class 日期)。
[生日]----<>[个人]关系为:
一个 (可选) 对多 (0..1 - 1..*)
0..1 : 因为生日可以省略,一个人只能有一个生日。
1..* : 因为生日必须至少关注一个,但可以关注几个人。
[死亡日期]----<>[个人]关系是:
一个 (可选) 对多 (0..1 - 1..*)
0..1 : 因为个体还没有死,只能死一次。
1..* : 因为死亡日期必须至少与一个人有关,但可以与几个人有关。
但是,从理论上讲,每个人都有一个生日(并且会有一个死亡日期),所以我被一篇作文所吸引。但有些人可能更愿意将这些日期保密,我想知道组合是否允许这样做。
此外,一个日期可以对应几个人,在这里我也猜想组合是不可能的,否则是我混淆了个人 class 和它的实例(个人)然后组合是可能的但不是上述基数。
目前我选择的是:
Aggregation :
___________ _______________
|Birthdate|0..1-----1..*< >| |
___________ | <<Individual>>|
|Deathdate|0..1-----1..*< >|_______________|
但是我对这个犹豫不决
Composition :
___________ _______________
|Birthdate|0..1-----1<#>| |
___________ | <<Individual>>|
|Deathdate|0..1-----1<#>|_______________|
正确答案是什么?感谢关注
该方法存在一些问题。
首先 - 对日期使用 class 简直是矫枉过正。 birthdate 和 deathdate 都是特定人的属性,可以很容易地建模为 Individual class 的内联属性。除非有一些重要的理由需要使用比旧的日期数据类型更多的东西,否则请使用标准方法。
对于可见性问题,正如面向对象的原则所说,您无论如何都不应该直接公开属性。而不是你应该有一个操作负责检索出生日期和死亡日期,这将控制日期是否可以读取。您可以添加支持它的布尔属性,但如果查看日期的能力取决于个人的某些状态或其他事物(例如 "who" 询问),则没有必要。在前一种情况下,您可能还希望将那些布尔属性显式显示为派生属性。
如果您坚持使用 class 作为日期(例如,因为您想要 Wikipedia-style "Born on date"/"Deceased on date" 集合),您应该只创建一个 class 日期和建立与此 class 的关联与您在第二种方法中所做的方式非常相似。在这种情况下,多重性不起作用 "database style" 而是关联本身的 属性。特别是协会,您有一个 birthdate/deathdate 和一个个人。默认情况下,您将有两个 1-0..1 关联,但根据具体方法,您可能还会有更复杂的方法。
为了更清楚,我稍后会添加图表。
最后一点。
不要使用 << >>
作为 class 名称。保留这些以表示刻板印象。
如果你想表明 Individual 是抽象的,要么用斜体显示它,要么(如果你的工具不允许这样做)使用 <<abstract>>
刻板印象。
实体是一个人。
所以该实体有一个生日,也许已经有一个死亡日期。
但是这个日期可以通知也可以不通知(取决于信息的实体和可用性);所以该实体可能有 none 个。
但我觉得把基数和关系类型弄乱了。
我应该如何表示?
我创建了一个摘要 class Individual。它导致 2 最后 class : Person (被识别的人) 或 Pseudonym (匿名的人).
它链接到 class 生日和 class 死亡日期(两者都被概括为 class 日期)。
[生日]----<>[个人]关系为:
一个 (可选) 对多 (0..1 - 1..*)
0..1 : 因为生日可以省略,一个人只能有一个生日。
1..* : 因为生日必须至少关注一个,但可以关注几个人。
[死亡日期]----<>[个人]关系是:
一个 (可选) 对多 (0..1 - 1..*)
0..1 : 因为个体还没有死,只能死一次。
1..* : 因为死亡日期必须至少与一个人有关,但可以与几个人有关。
但是,从理论上讲,每个人都有一个生日(并且会有一个死亡日期),所以我被一篇作文所吸引。但有些人可能更愿意将这些日期保密,我想知道组合是否允许这样做。
此外,一个日期可以对应几个人,在这里我也猜想组合是不可能的,否则是我混淆了个人 class 和它的实例(个人)然后组合是可能的但不是上述基数。
目前我选择的是:
Aggregation :
___________ _______________
|Birthdate|0..1-----1..*< >| |
___________ | <<Individual>>|
|Deathdate|0..1-----1..*< >|_______________|
但是我对这个犹豫不决
Composition :
___________ _______________
|Birthdate|0..1-----1<#>| |
___________ | <<Individual>>|
|Deathdate|0..1-----1<#>|_______________|
正确答案是什么?感谢关注
该方法存在一些问题。
首先 - 对日期使用 class 简直是矫枉过正。 birthdate 和 deathdate 都是特定人的属性,可以很容易地建模为 Individual class 的内联属性。除非有一些重要的理由需要使用比旧的日期数据类型更多的东西,否则请使用标准方法。
对于可见性问题,正如面向对象的原则所说,您无论如何都不应该直接公开属性。而不是你应该有一个操作负责检索出生日期和死亡日期,这将控制日期是否可以读取。您可以添加支持它的布尔属性,但如果查看日期的能力取决于个人的某些状态或其他事物(例如 "who" 询问),则没有必要。在前一种情况下,您可能还希望将那些布尔属性显式显示为派生属性。
如果您坚持使用 class 作为日期(例如,因为您想要 Wikipedia-style "Born on date"/"Deceased on date" 集合),您应该只创建一个 class 日期和建立与此 class 的关联与您在第二种方法中所做的方式非常相似。在这种情况下,多重性不起作用 "database style" 而是关联本身的 属性。特别是协会,您有一个 birthdate/deathdate 和一个个人。默认情况下,您将有两个 1-0..1 关联,但根据具体方法,您可能还会有更复杂的方法。
为了更清楚,我稍后会添加图表。
最后一点。
不要使用 << >>
作为 class 名称。保留这些以表示刻板印象。
如果你想表明 Individual 是抽象的,要么用斜体显示它,要么(如果你的工具不允许这样做)使用 <<abstract>>
刻板印象。