【愚公系列】软考高级-架构设计师 093-构件

举报
愚公搬代码 发表于 2024/07/31 23:51:40 2024/07/31
【摘要】 🏆 作者简介,愚公搬代码🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。🏆《近期荣誉》:2023年华为云十佳博主,2022年CSDN博客之星TOP2,2022年华为云十佳博主等。🏆《博客内容》:.NET、Java、...

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2023年华为云十佳博主,2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏

🚀前言

在软件工程中,构件(也称为组件,英文:Component)是一个独立的、可复用的软件单元,它具有明确的功能、接口和行为,并且可以在不同的环境中加以集成和复用。构件的概念是软件架构和组件化开发的核心思想之一,其目的是促进软件系统的模块化、可维护性和可扩展性。

🚀一、构件

🔎1.概述

在架构设计中,构件(Component)是指系统的重要部分,它们是功能上独立且可以被替代或扩展的模块或单元。外界通过接口访问其提供的服务,构件通常用来划分系统的不同功能或责任,以便更容易管理、维护和扩展整个系统。构件是系统架构的基本构建块,可以包括软件模块、类、库、服务等。

电子商务网站的架构设计示例:

🦋1.1 用户管理构件

  • 功能:处理用户身份验证、注册、登录和个人资料管理等功能。
  • 组成部分
    • 用户数据库
    • 身份验证服务
    • 用户界面组件

🦋1.2 商品管理构件

  • 功能:处理商品列表、详情、购物车和支付等功能。
  • 组成部分
    • 商品数据库
    • 购物车逻辑
    • 支付处理
    • 商品页面组件

🦋1.3 订单管理构件

  • 功能:负责订单的创建、查看、修改和支付等功能。
  • 组成部分
    • 订单数据库
    • 订单处理逻辑
    • 订单页面组件

🦋1.4 库存管理构件

  • 功能:跟踪商品库存的状态和更新。
  • 组成部分
    • 库存数据库
    • 库存更新服务

🦋1.5 构件间的通信和协作

这些构件代表了系统中的不同功能区域,每个构件都可以独立开发、测试和维护。它们通过明确定义的接口和通信方式相互连接,以协同工作来实现整个电子商务网站的功能。

  • 用户管理构件可以与商品管理构件通信,以验证用户是否有权购买特定商品。
  • 订单管理构件可以与库存管理构件通信,以检查商品的库存情况。

🦋1.6 构件化设计的优点

通过将系统划分为不同的构件,架构设计可以更容易地管理和扩展系统,同时降低了系统的复杂性。这种模块化的设计方法有助于提高系统的可维护性和可扩展性。

🔎2.构件

🦋2.1 类 (Class)

☀️2.1.1 定义

类是面向对象编程中的基本概念,它描述了一种对象的属性和行为。类定义了对象的结构和行为模板,可以包括属性(数据成员)和方法(函数成员)。

☀️2.1.1 作用

类用于创建对象,对象是类的实例。通过定义类,可以封装数据和行为,实现代码的模块化和复用。类通常用于面向对象编程语言(如 Java、Python)中。

☀️2.1.3 举例

在一个图书管理系统中,可以创建一个名为 Book 的类,该类包括属性如书名、作者、出版日期等,以及方法如借阅、归还、获取书籍信息等。

🦋2.2 模块 (Module)

☀️2.2.1 定义

模块是一组相关的函数、类、变量或代码块的集合,用于将代码组织成更小的可管理单元。模块可以是一个单独的文件或一组相关文件。

☀️2.2.2 作用

模块用于划分代码,将相关功能或类放在一个地方,以便更好地组织和维护代码。它还可以支持代码的复用和封装。

☀️2.2.3 举例

在 Web 开发中,可以选择进行多模块开发,在开发软件中定义多个模块(如用户模块、商品模块、购物车模块),并使用工具(如 Maven)进行模块之间的关联和依赖管理。

🦋2.3 构件 (Component)

☀️2.3.1 定义

构件是指软件系统中的可复用组件。构件可以是代码、数据、文档或其他任何类型的软件资产。构件通常是松散耦合的,并且可以组合起来形成更大的软件系统。构件的典型示例包括类、模块、组件和框架。

🦋2.4 服务 (Service)

☀️2.4.1 定义

服务是指提供特定功能的软件单元。服务通常是独立的、可复用的,并且可以通过网络进行访问。服务的典型示例包括 Web 服务、REST API 和微服务。

🦋2.5 服务和构件的主要区别

  1. 侧重点

    • 服务侧重于功能,提供特定的功能。
    • 构件侧重于结构,是软件系统的组成部分。
  2. 独立性

    • 服务通常是独立的和可访问的,可以独立运行并通过网络进行访问。
    • 构件通常是松散耦合的和可复用的,可以组合起来形成更大的软件系统。
  3. 应用领域

    • 服务通常用于面向服务的架构 (SOA)。
    • 构件通常用于组件化开发。

具体的例子:

  • 服务:一个提供天气预报信息的 Web 服务。
  • 构件:一个用于管理用户身份验证的类库。

🔎3.案例场景

建造一座房子的场景

🦋3.1 需求分析

  1. 获取需求

    • 明确需求:决定建造一座房子,首先需要明确需求,包括房子的用途、大小、房间数量、特殊需求(例如,卧室、浴室数量,是否需要车库等)。
  2. 分析需求

    • 编写用例:例如,客厅用于娱乐,卧室用于休息。
    • 考虑家庭成员需求:例如,儿童需要自己的房间。

🦋3.2 软件架构设计

  1. 系统结构

    • 房屋组织:设计房子的架构时,考虑如何组织不同的房间和功能区,以满足需求。这包括确定房子的总体布局和连接方式。
  2. 性能和可扩展性

    • 性能需求:选择材料以保持温度、隔音等。
    • 扩展性考虑:考虑将来可能的扩建需求。

🦋3.3 系统设计

  1. 详细设计

    • 设计细节:在系统设计阶段,细化每个房间的设计,包括墙壁、窗户、门、地板和天花板的具体设计。
  2. 模块功能

    • 房间功能设计:设计每个房间的功能和布局,确保它们适合房子的整体需求。例如,厨房的功能布局需要考虑食品准备和烹饪的流程。

通过这个示例可以看到:

  • 需求分析:定义房子的基本需求。
  • 软件架构设计:决定房子的整体结构和连接方式。
  • 系统设计:详细设计每个房间的具体细节。

这三个步骤相互连接,确保最终的房子满足需求和期望,具有良好的性能和可维护性。

🔎4.软件架构设计的生命周期

软件架构设计不仅仅在开发初期进行,而是贯穿于软件开发生命周期的各个阶段,包括需求分析、设计、实现、测试、部署和维护等。

🦋4.1 需求分析阶段

  • 对象区别:需求分析面向的是问题空间,而软件架构设计面向的是解空间。
  • 模型转换:从需求模型向软件架构模型的转换主要关注两个问题:
    • 如何根据需求模型构建软件架构模型。
    • 如何保证模型转换的可追踪性。
  • 核心关注:将用户需求转换为软件架构模型,并确保模型的可追踪性。

🦋4.2 设计阶段

  • 研究内容:软件架构研究的早期和主要阶段,涉及以下内容:
    • 软件架构模型的描述。
    • 软件架构模型的设计与分析方法。
    • 软件架构设计经验的总结与复用。
  • 描述层次:研究分为三个层次:
    • 软件架构的基本概念(构件和连接件)。
    • 体系结构描述语言(ADL)。
    • 软件架构模型的多视图表示。
  • 核心关注:软件架构模型的描述、设计与分析方法,以及设计经验的总结与复用。

🦋4.3 实现阶段

  • 初期研究:最初软件架构研究关注的是较高层次的系统设计、描述和验证。
  • 实现转换:为了有效实现从软件架构设计到实现的转换,研究关注以下方面:
    • 对开发过程的支持。
    • 开发语言和构件的选择。
    • 相关测试技术。
  • 核心关注:如何将软件架构设计转换为代码,并进行测试。

🦋4.3 构件组装阶段

  • 指导作用:在软件架构设计模型的指导下,可复用构件的组装可以在较高层次上实现系统,提高系统实现效率。
  • 系统蓝图:在构件组装过程中,软件架构设计模型起到了系统蓝图的作用。
  • 核心关注:如何在架构设计模型的指导下,进行可复用构件的组装,提高系统实现效率,并解决组装过程中的相关问题。

🦋4.5 部署阶段

  • 高层视图:提供高层的体系结构视图来描述部署阶段的软硬件模型。
  • 质量分析:基于软件架构模型分析部署方案的质量属性,从而选择合理的部署方案。
  • 核心关注:如何根据软件架构模型进行部署,并分析部署方案的质量属性。

🦋4.6 后开发阶段

  • 研究方向:围绕维护、演化、复用等方面进行研究,典型的研究方向包括:
    • 动态软件体系结构。
    • 体系结构恢复与重建。
  • 核心关注:如何根据软件架构模型进行维护和演化。

软件架构设计贯穿于软件开发生命周期的各个阶段,每个阶段都有其特定的关注点和研究内容。通过这些阶段的研究和实践,可以确保软件架构设计在开发、实现、部署和维护过程中发挥其应有的作用,从而提高软件系统的质量和可维护性。

🔎5.构件的作用

构件技术是利用编程手段,将一些复杂的细节进行封装,并实现各种业务逻辑规则,用于处理用户的内部操作细节。构件技术使得复杂系统的开发和维护变得更加便捷和高效,避免了最终用户直接操作底层细节。目前,国际上常用的构件标准主要有三大流派:EJB、COM、DCOM、COM+和CORBA。

🦋5.1 EJB (Enterprise Java Bean)

EJB 规范由 Sun 公司制定,主要用于 Java 平台的企业级应用开发。EJB 有三种类型:

  • 会话 Bean (Session Bean):用于管理会话和业务逻辑,有不同的类型适应不同的需求。
  • 实体 Bean (Entity Bean):用于与持久化数据交互,将对象映射到数据库表。
  • 消息驱动 Bean (Message-driven Bean):用于异步消息处理,响应来自消息队列的消息。

🦋5.2 COM、DCOM、COM+

这些技术由微软公司提出:

  • COM (Component Object Model):微软公司的一种组件标准,用于创建可重用的软件组件。
  • DCOM (Distributed Component Object Model):COM 的扩展,增加了位置独立性和语言无关性,支持分布式计算。
  • COM+:并不是 COM 的新版本,而是 COM 的进一步发展,提供了更高层次的应用功能。

🦋5.3 CORBA (Common Object Request Broker Architecture)

CORBA 标准由 OMG (Object Management Group) 制定,分为三个层次:

  1. 对象请求代理 (ORB):最底层,规定了分布对象的定义(接口)和语言映射,实现对象间的通讯和互操作,是分布对象系统中的“软总线”。
  2. 公共对象服务:在 ORB 之上定义了很多公共服务,可以提供诸如并发服务、名字服务、事务(交易)服务、安全服务等各种服务。
  3. 公共设施:最上层,定义了组件框架,提供可直接为业务对象使用的服务,规定业务对象有效协作所需的协定规则。

🚀二、练习

🔎1.题目一

题目:以下有关构件特性的描述中,说法不正确的是()。

选项:
A. 构件是独立部署单元
B. 构件可作为第三方的组装单元
C. 构件没有外部的可见状态
D. 构件作为部署单元,是可拆分的

选项分析
A. 构件是独立部署单元

  • 这种说法是正确的。构件是一种独立的、可部署的单元。这意味着它可以单独安装和运行。

B. 构件可作为第三方的组装单元

  • 这种说法也是正确的。构件可以被第三方使用和组装,形成更复杂的系统。

C. 构件没有外部的可见状态

  • 这种说法是不正确的。构件通常有外部可见的状态,比如公开的接口和方法,通过这些接口和方法,外部系统可以与构件进行交互和操作。

D. 构件作为部署单元,是可拆分的

  • 这种说法是不正确的。构件作为一个独立的部署单元,通常是一个不可拆分的整体。它是一个封装好的单元,整体部署和运行。

结合以上分析,选项 CD 都是不正确的描述,但按照题意,我们需要选择一个不正确的描述。所以,标准答案应该是 D,因为它与构件不可拆分的特性直接矛盾。

因此,题目中不正确的描述是:

D. 构件作为部署单元,是可拆分的

🔎2.题目二

题目:在构件的定义中,()是一个已命名的一组操作的集合。

选项:
A. 接口
B. 对象
C. 函数
D. 模块

选项分析
A. 接口

  • 接口 (Interface) 是一个已命名的一组操作的集合。它定义了这些操作的方法签名,但不包含具体的实现。接口用于指定构件提供的服务和行为,是构件之间交互的契约。

B. 对象

  • 对象 (Object) 是类的实例,包含属性和方法。虽然对象可能包含多个操作(方法),但它不是单纯的一组操作的集合,而是一个包含状态和行为的实体。

C. 函数

  • 函数 (Function) 是一个单一的操作或过程,它执行特定的任务或计算。函数是操作的具体实现,而不是一组操作的集合。

D. 模块

  • 模块 (Module) 是代码的逻辑分组,可以包含多个类、接口、函数等。尽管模块可能包含多个操作,但它更广泛,包含的不仅仅是操作集合,还可能包括数据结构和其他代码。

结合以上分析,选项 A 最符合题意,因为接口是一个已命名的一组操作的集合,用于定义构件提供的服务。

因此,题目的正确答案是:
A. 接口

🔎3.题目三

在这里插入图片描述

🔎4.题目四

题目:以下有关构件演化的叙述中,说法不正确的是()。

选项:
A. 安装新版本构件可能会与现有系统发生冲突
B. 构件通常也会经历一般软件产品具有的演化过程
C. 解决“遗留系统移植”问题还需要通过使用包裹器构件来适配旧版软件
D. 为安装新版本的构件,必须终止系统中所有现有版本构件的运行

选项分析
A. 安装新版本构件可能会与现有系统发生冲突

  • 这种说法是正确的。在实际开发中,安装新版本的构件可能会引入与现有系统不兼容的情况,导致冲突。

B. 构件通常也会经历一般软件产品具有的演化过程

  • 这种说法也是正确的。构件作为软件产品的一部分,会经历类似的生命周期,包括需求变化、版本更新和维护等。

C. 解决“遗留系统移植”问题还需要通过使用包裹器构件来适配旧版软件

  • 这种说法是正确的。包裹器(或称包装器、适配器)构件是常用的技术,能让旧系统与新系统兼容,是解决遗留系统问题的有效方法。

D. 为安装新版本的构件,必须终止系统中所有现有版本构件的运行

  • 这种说法是不正确的。在现代软件工程中,尤其是对于高可用性系统,通常会采取平滑升级或热部署的方式来安装新版本的构件,而不需要完全终止现有版本的运行。通过版本控制、负载均衡和切换机制,可以实现无缝升级。

结合以上分析,选项 D 不正确,因为现代系统通常不需要完全终止现有版本构件的运行来安装新版本。

因此,题目的正确答案是:
D. 为安装新版本的构件,必须终止系统中所有现有版本构件的运行

🔎5.题目五

在这里插入图片描述

🔎6.题目六

在这里插入图片描述


🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

在这里插入图片描述

再次感谢您的阅读和支持!

最诚挚的问候, “愚公搬代码”

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。