- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个抽象类,代表一个组合:
我对这两个类进行了具体化,例如:
Country 抽象类作为属性的人员列表:peopleList:People
我如何保证 France 类 peopleList 属性将仅由 FrenchGuy 和 Italy 填充与ItalianGuy,并使其保持一致?
我的设计方式是反模式吗?
预先感谢您的回答
最佳答案
我将用一个不会混淆“是一种”和“是一个实例”的例子来回答这个问题。 (有关更多详细信息,请参阅我对原始问题的评论。)
您确实可以保证特定的专业只与某些其他专业相关联。您可以使用 UML 关联特化和属性重新定义来做到这一点。
我将向您介绍一下这个 UML 图告诉我们的内容:
Insurance Policy
和 Insurable Thing
之间有一个未命名的关联,它有两个属性:insures 和 insured by。它告诉我们,一般来说,每个Insurance Policy
insure 一个或多个Insurable Things
,并且每个Insurable Thing
可以投保任意数量的保险单
。¹Insurance Policy
有两个不相交的 ² specializations:Health Insurance Policy
和 Car Insurance Policy
。Insurable Thing
有两个不相交的特化:Car
和 Person
。Car Insurance Policy
和 Car
之间的关联具有重新定义(即收紧)它们允许的类型的属性。Health Insurance Policy
和 Person
之间的关联具有重新定义(即收紧)允许类型的属性。专业协会和重新定义正在这里完成所有工作。如果愿意,您可以进一步收紧多重性,甚至更改属性名称³。
¹ 请注意,UML 最近采用了一种“点表示法”,这使得关联末端缺少点变得不明确。 Pre dot 表示法,可导航属性由关联另一端的类拥有。后点表示法,可导航的属性由关联拥有——除了很少有工具支持它,而那些支持它的工具,如 MagicDraw,默认情况下在项目选项中关闭点关闭 !我个人觉得点符号很糟糕,所以这个例子没有使用它,这意味着属性由其关联另一端的类拥有。
² 不相交意味着没有任何东西可以同时是两个特化的实例,许多实现语言不允许,但现实世界和 UML 允许。不完整意味着可能还有其他类型的保险政策我们没有调出,并且可以直接实例化一般的Insurance Policy
。
³ 如果您更改属性名称,这意味着在其所有者的上下文中,该名称会掩盖通用所有者中的名称。如果您“向上转换”特化,相同的属性将具有其原始名称,因为它在广义所有者的上下文中。
关于inheritance - 如何保证类特化是一致的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42246422/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!