gpt4 book ai didi

inheritance - 如何保证类特化是一致的

转载 作者:行者123 更新时间:2023-12-02 01:16:57 25 4
gpt4 key购买 nike

我有两个抽象类,代表一个组合:

  • 国家(由组成)

我对这两个类进行了具体化,例如:

  • 国家:法国意大利
  • :FrenchGuyItalianGuy

Country 抽象类作为属性的人员列表:peopleList:People

我如何保证 France 类 peopleList 属性将仅由 FrenchGuyItaly 填充与ItalianGuy,并使其保持一致?

我的设计方式是反模式吗?

enter image description here

预先感谢您的回答

最佳答案

我将用一个不会混淆“是一种”和“是一个实例”的例子来回答这个问题。 (有关更多详细信息,请参阅我对原始问题的评论。)

您确实可以保证特定的专业只与某些其他专业相关联。您可以使用 UML 关联特化和属性重新定义来做到这一点。

redefinition example diagram

我将向您介绍一下这个 UML 图告诉我们的内容:

  • Insurance PolicyInsurable Thing 之间有一个未命名的关联,它有两个属性:insuresinsured by。它告诉我们,一般来说,每个Insurance Policy insure 一个或多个Insurable Things,并且每个Insurable Thing可以投保任意数量的保险单。¹
  • Insurance Policy 有两个不相交的 ² specializations:Health Insurance PolicyCar Insurance Policy
  • Insurable Thing 有两个不相交的特化:CarPerson
  • 顶部的未命名关联有两个具有更具体属性约束的专门关联:
    • Car Insurance PolicyCar 之间的关联具有重新定义(即收紧)它们允许的类型的属性。
    • Health Insurance PolicyPerson 之间的关联具有重新定义(即收紧)允许类型的属性。

专业协会和重新定义正在这里完成所有工作。如果愿意,您可以进一步收紧多重性,甚至更改属性名称³。


¹ 请注意,UML 最近采用了一种“点表示法”,这使得关联末端缺少点变得不明确。 Pre dot 表示法,可导航属性由关联另一端的类拥有。后点表示法,可导航的属性由关联拥有——除了很少有工具支持它,而那些支持它的工具,如 MagicDraw,默认情况下在项目选项中关闭点关闭 !我个人觉得点符号很糟糕,所以这个例子没有使用它,这意味着属性由其关联另一端的类拥有。

² 不相交意味着没有任何东西可以同时是两个特化的实例,许多实现语言不允许,但现实世界和 UML 允许。不完整意味着可能还有其他类型的保险政策我们没有调出,并且可以直接实例化一般的Insurance Policy

³ 如果您更改属性名称,这意味着在其所有者的上下文中,该名称会掩盖通用所有者中的名称。如果您“向上转换”特化,相同的属性将具有其原始名称,因为它在广义所有者的上下文中。

关于inheritance - 如何保证类特化是一致的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42246422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com