UML之组件图和配置图

什么是组件?

组件图描述软件组件以及组件直接按的关系,组件本身是代码的物理模块,组件图则显示了代码的结构。

组件图描述了软件的各种组件和他们直接按的依赖关系,通常包含3种元素:组件(component)、接口(interface)、依赖(dependency)关系,每个组件实现一些接口,并使用另一些接口。

建立组件图的用途

1、组件图能帮助客户理解最终的系统结构

2、组件图使开发工作有一个明确的目标

3、组件图有利于帮助工作组的其他人源理解系统

组件和类的比较

 相同点:都可以实现一组接口;都可以参与依赖关系;都可以被嵌套;都可以有实例;都可以参与交互

不同点:类描述了软件涉及的逻辑组织和意图,组件则描述软件设计的物理实现,即每个组件体现了系统设计种特定类的实现。

名称:组件的名字位于组件图标的内部,组件名使一个文本串。如果组件被某包所包含,可以再他的组件名前加上他所在包的名字

类型:配置组件、执行组件、工作产品租金按

接口:接口是一个类提供给另一个类的一组操作。组件可以通过其他组件的接口,使用其他组件中定义的一些操作。组件的接口又可以分为两种类型:1、导出接口(导出接口由提供操作的组件提供)2、导入接口(访问服务的组件使用导入接口)

关系:组件图中可以包括的关系:依赖、泛化、关联、实现。组件图中的依赖关系使用虚线箭头表示

组件图建模技术

1、对系统中的组件建模

2、定义相应组件提供的接口

3、对他们间的关系建模

4、对建模的结果进行精化和细化 

配置图

配置图是对面向对象系统的物理方面建模时使用的两种图之一,配置图显示了运行软件系统的物理硬件 ,以及如何将软件部署到硬件上。配置图中通常包括:节点、组件和关联关系。

节点:

节点是在运行时代表计算资源的物理元素。它通常拥有一些内存,并具有处理能力。

名称:节点的名称位于节点图标的内部,节点名是一个文本串。

节点的类型:在实际的建模过程中,可以把节点分为两种类型:处理器、设备。处理器时能够执行软件、具有计算能力的阶段,服务器、工作站和其他具有处理能力的机器都是处理器。设备时没有计算能力的节点,通常情况下都是通过其接口为外部提供某种服务,哑终端、打印机和扫描仪都属于这种设备。

配置图中通常包括依赖关系和关联关系,配置图中的依赖关系使用虚线箭头表示。

用途

  • 显示系统的部署:配置图展示了系统中的软件组件和硬件设备之间的部署关系,使开发者能够清晰地了解系统在物理资源上的分布。
  • 规划资源配置:开发人员可以根据配置图,对系统的硬件设备和软件组件进行合理的配置和规划,以满足性能和可扩展性要求。
  • 辅助系统管理:系统管理员可以根据配置图,进行系统监控、故障排除和性能优化。

实践 

  • 标识节点:使用框表示节点(硬件设备或软件容器),并在框内写明节点的名称。
  • 显示连接关系:使用箭头连接节点,表示节点之间的通信路径。
  • 配置组件:将组件放置在节点上,表示该组件在对应的节点上运行。
  • 表示资源:可以在节点内部展示资源,例如处理器、内存、硬盘等。

配置图建模技术

1、对系统中的节点建模

2、对节点间的关系建模

3、对系统中的节点建模,这些组件来自组件图

4、对组件间的关系建模

5、对建模的结果进行精化和细化

代码示例 

组件图示例

// 组件1
public interface Component1 {
    void operation1();
}

public class ConcreteComponent1 implements Component1 {
    public void operation1() {
        // 实现组件1的具体操作
    }
}

// 组件2
public interface Component2 {
    void operation2();
}

public class ConcreteComponent2 implements Component2 {
    public void operation2() {
        // 实现组件2的具体操作
    }
}

// 组件3
public interface Component3 {
    void operation3();
}

public class ConcreteComponent3 implements Component3 {
    public void operation3() {
        // 实现组件3的具体操作
    }
}

// 外观类
public class Facade {
    private Component1 component1;
    private Component2 component2;
    private Component3 component3;

    public Facade() {
        component1 = new ConcreteComponent1();
        component2 = new ConcreteComponent2();
        component3 = new ConcreteComponent3();
    }

    // 封装了一系列子系统操作的高层方法
    public void performOperation() {
        component1.operation1();
        component2.operation2();
        component3.operation3();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.performOperation();
    }
}

在上述示例中,每个组件都定义了一个接口,并有对应的具体实现类。外观类封装了这些组件,并提供了一个高层方法 performOperation(),该方法内部调用了各个组件的具体操作。客户端只需要调用外观类的方法,而无需了解每个组件的具体实现细节。 

配置图示例:

<!-- 组件1的配置 -->
<component id="component1" class="com.example.Component1Impl" />

<!-- 组件2的配置 -->
<component id="component2" class="com.example.Component2Impl" />

<!-- 组件3的配置 -->
<component id="component3" class="com.example.Component3Impl" />

<!-- 外观类的配置 -->
<component id="facade" class="com.example.Facade">
    <property name="component1" ref="component1" />
    <property name="component2" ref="component2" />
    <property name="component3" ref="component3" />
</component>

在上述示例中,通过配置文件(如XML)来定义组件和外观类的配置。每个组件通过 idclass 属性指定,分别表示组件的唯一标识和具体实现类。外观类则通过 idclass 属性指定,并使用 property 子元素来引用各个组件。

这样,在应用程序启动时,可以通过配置解析器读取配置文件,并根据配置信息创建对应的组件和外观类对象。通过配置图,可以方便地管理和调整组件与外观类之间的关系,而无需修改源代码。

区别

 

总结:

组件图和配置图是UML中用于描述系统结构和部署信息的重要图表。组件图通过展示组件、接口和它们之间的关系,帮助开发者理解系统的架构和模块化设计;配置图则展示了系统的部署拓扑和资源配置情况,帮助开发者和系统管理员进行资源规划和管理。在实践中,通过标识组件、定义依赖关系、展示接口等方式创建和使用这些图表,以支持软件开发和系统管理。希望本文能够帮助读者更好地理解和应用组件图和配置图,提升软件开发和系统设计的效率与质量。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷艳爽faye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值