繁体   English   中英

组件图是否仅指物理组件?

[英]Do Component diagrams refer to physical components only?

在 UML 组件图中,一个很好的测试是否有资格作为“组件”,它是否是物理隔离的?

我发现的大多数定义(Wikipedia、TutorialsPoints 等)都将组件称为“文件、库、可执行文件等”。

然而,一些插图(参见http://agilemodeling.com/artifacts/componentDiagram.htm )似乎将类建模为组件(例如“学生”、“研讨会”),乍一看可能表明这些只是一些重要的应用程序中的类。 然而,阅读进一步下跌“创建组件图”的标题下,这让很多以“网络流量”(“降低潜在的网络流量”)引用的; 这意味着建模的组件是通过网络端口进行通信的不同进程或可执行文件。 这似乎意味着实例在同一个 JVM 中的各个类(我可能会添加相同的物理 .jar)应该在 UML 组件图中的同一个组件中。 这总是真的吗? 如果不是,什么时候同一个 jar 和同一个 JVM 中的对象实例会在这个图中被视为不同的组件?

不,UML 组件不限于物理文件或类似的东西。

物理甚至可能不是谈论系统上文件的好术语,因为您无法真正接触文件。 这只是位和字节。

UML 2.5 将组件定义为

组件代表系统的模块化部分,它封装了其内容并且其表现形式在其环境中是可替换的。

此外它说

组件是一个独立的单元,它封装了许多分类器的状态和行为。 组件根据其提供的和所需的接口指定了它向其客户提供的服务以及它从系统中的其他组件或服务要求的服务的正式合同。

一个组件是一个可替代的单元,可以在设计时或运行时被一个组件替换,该组件提供基于其接口兼容性的等效功能。 只要环境与组件提供的和所需的接口完全兼容,它就能够与该环境进行交互。 类似地,可以通过添加新的组件类型来扩展系统,从而增加新的功能。 系统功能的较大部分可以通过重新使用组件作为包含组件或组件组件中的部件,并将它们连接在一起来组装。

因此,可以将SkypeChrome等软件应用程序建模为组件,但也可以将聊天引擎HTML 渲染器等内部部件视为组件。

通常,组件结构实际上反映在物理实现中; 一个软件的每个组件都可以编译成一个单独的 dll

除了出色的 Geert 的回答之外,当您不一定总是需要它时,将通常看起来像一个类的所有内容封装为一个组件通常是一个好主意。

想象一个能够管理公司车队的应用程序。 通常它会支持汽车。 然而,您可能希望能够添加额外的组件,以便能够处理飞机、轮船或自行车。 在这种情况下,您也可能不需要汽车。 这些东西中的每一个都将成为组件,即使您可以简单地将其建模为驻留在称为 Vehicle 的系统核心中的唯一类的子类。 例如,您可能有与这些自行车相关的不同元素,这些元素并未包含在类本身中。 考虑一下屏幕、维护模型以及与只能应用于子类级别的不同方法相关的所有内容的不同之处。

此类系统中组件的其他示例可以是驱动程序。 这不再是 Vehicle 的子类,而是一些与 Vehicles 交互的单独类。 同样,根据情况,您可能只对公司中的汽车感兴趣,或者将它们链接到分配给它们甚至允许使用它们的驱动程序。 因此,您提出了一组完全不同的依赖项、屏幕、方法等,它们不仅与驱动程序本身有关,而且与周围环境的交互有关。

一般来说,虽然这不限于此,组件是一种很好的思考方式,可以思考如何将您的系统分成更小的部分,这些部分可以分离或附加到系统上,相应地添加或删除其部分功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM