首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合继承与组合

组合继承与组合
EN

Software Engineering用户
提问于 2020-02-16 22:25:24
回答 2查看 372关注 0票数 1

假设您有一个充当桥接器/无线中继器的无线网络。如何将这两种因素都纳入类图?在我看来,拥有一个可以独立存在的父对象是一种感觉。然后,既依赖于父对象又同时创建父对象实例的子对象。子实例可以访问所有继承的属性,同时能够重载使用父实例的方法和属性的方法。

在我看来,无线中继器有一个父无线网络(聚合),但也有一个完全独立的网络继承有线网络属性。我想要这个方向,因为桥网络是主无线网络的一个专用扩展,需要能够在序列图中显示这一点。

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2020-02-17 00:52:15

在您的设计中,WirelessNetwork可以有一个或多个WirelessRepeater,而WirelessRepeater本身就是WirelessNetwork。这里没有UML问题,只是如果您将继承和组合保持图形上的不同(例如,两条平行线),您的图表就会更容易阅读。

设计的结果是WirelessRepeater拥有WirelessNetwork的所有属性。但是有了它自己的价值,这并不一定与拥有网络的价值相对应。此外,中继器将提供所有网络服务,包括一些可能与中继器无关的服务(实际中继器的e.g.the配置选项与路由器的配置选项相比非常有限)。

因此,您的模型不准确:

  • 首先,根据UML语义,当父网络被破坏时,中继器也应该被销毁。所以最好用一个聚合,甚至一个简单的关联来代替这个组合。
  • 第二,中继器不是网络。中继器连接到网络并扩展其范围。但是,例如,它没有定义自己的寻址方案。

一个更好的应用程序是使用代理模式:中继器将是网络的代理,网络和代理都将继承一个类,该类将定义对两者都可用的网络方法(例如,connect()),但不包含仅与网络相关的方法(例如setIPAdressingScheme())。

票数 3
EN

Software Engineering用户

发布于 2020-02-17 00:12:51

这是多余的。当你继承的时候,你无论如何都要构造你的父母。如果你也组成自己的父母,你只是结束了你的父母的第二个实例。

继承将为您提供父级的实例、它们的接口以及它们之间的连接。

作文(和授权)给你同样的东西,但你需要额外的击键,因为你必须把所有的东西都连接起来。但是在这里你会发现很多的力量和灵活性。

在没有任何特定原因的情况下同时做这两件事,除了让维护开发人员感到困惑之外,实际上并不能给您带来什么好处。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/405303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档