




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、* 设计架构设计架构 Designing Architecture (第九周第九周) 王湖南王湖南 提纲提纲 构架结构与视图构架结构与视图 演变交付生命期模型演变交付生命期模型(EDLC) 构架设计(构架设计(ADD方法)方法) 1 构架结构和视图构架结构和视图 软件构架的定义 某个软件或计算机系统的软件构软件构 架架是该系统的一个或多个结构, 他们由软件元素,这些元素之间 的外部可见属性和这些元素之间 的关系组成 1.1 视图视图 现代的软件系统非常复杂,我们很难一 下子就理解他们。正确的做法是任何时 刻我们只关注软件系统的一个或几个结 构。这正如不同的医生关注病人的不同 部分 视图视图视图
2、是构架元素内聚集的表述 ,由系统涉众编写和阅读,它由一个元 素集合表示和元素之间的关系组成,用 于表示构架中的某个结构 1.2 构架结构构架结构 结构结构结构是元素本身的集合,他们 存在于软件和硬件中,比如,模块结构 是系统的模块和其组织的结构,模块视 图是该结构的表示 构架结构根据元素的主要特性可以分为 三类: 模块结构模块结构 组件组件连接器结构连接器结构 分配结构分配结构 1.3 软件结构软件结构 常见的软件构架结构 模块 分解类 使用 分层 组件-连接器 客户机/ 服务器 共享 数据 并发 进程 分配 工作 分配 实现 部署 1.3.1 模块结构 模块结构模块结构的元素是模块,模块表示
3、一种 考虑系统的基于代码的方法。 模块结构要回答的问题: 1、分配给每个模块的主要功能责任 2、允许模块使用的其它软件元素 3、它实际使用的其它软件是什么 4、什么模块通过泛化和特化(类的继承) 关系与其它模块相关 1.3.1 模块结构 基于模块的结构包括如下内容: 1、分解(任务分解)、分解(任务分解) 分解模块通过“是一个子模块”的关 系将彼此关联起来,它展示了如何将大 的模块分解为小模块,直到很容易理解 为止 该方法适用于资源分配、项目结构化 和规划,信息隐藏等 1.3.1 模块结构 2、使用(调用关系)、使用(调用关系) 使用单元也是模块、过程或模块结 构上的资源,这些单元通过“使用”
4、 关系彼此关联 该结构单元用于设计子集、设计扩 展等,便于系统的增量式开发 比如,我们为一个系统设计数据处 理,我们可能有很多处理被调用,但 开始时我们只完成有限的实际处理单 元,然后再扩展 1.3.1 模块结构 3、分层(特殊的使用关系)、分层(特殊的使用关系) 当以一种特定的方式小心地控制该结 构中的使用关系时,就出现了由层组 成的系统,在该系统中,一个层就是 相关功能的一个一致的集合。在一个 严格的分层结构中,第n层只能使用 第n-1层提供的服务 分成适用于增量式开发,在“虚拟机 ”上实现可移植性,操作系统多采用 分层结构 1.3.1 模块结构 4、类或泛化、类或泛化 该结构中的模块单元
5、是类,关系是 “继承自”或“是一个实例” 该结构适用于面向对象的编程中, 从一个公共的模板中产生快速的、相近 的实现 1.3.2 组件连接器结构 该结构的元素是运行时的组件和连接器 该结构回答如下问题: 1、什么是主要的执行组件,它们之间如何 交互 2、什么是主要的共享数据存储 3、数据在系统中经过了哪些地方 4、系统的哪些部分可以并行运行 5、系统执行时,其结构可能发生的变化 1.3.2 组件连接器结构 组件结构包括如下内容 1、进程或通信进程、进程或通信进程 此处的单元为通过通信、同步和/或排 除操作将彼此相连的进程或线程 该结构用于调度分析;性能分析等 1.3.2 组件连接器结构 2、并
6、发、并发 该结构能够使设计师确定并行的机会 以及可能出现的资源争用的位置。 单元是组件,连接器是“逻辑线程” 其适用于确定存在资源争用,线程交 叉、连接、被创建或被杀死的位置 1.3.2 组件连接器结构 3、共享数据或存贮库、共享数据或存贮库 该结构由创建、存储和访问持久数据 的组件和连接器组成 该结构展示了软件元素如何产生数据 和使用数据,可以使用该结构确保良好 的性能和数据完整性 1.3.2 组件连接器结构 4、客户机、客户机/服务器服务器 组件是客户机和服务器,连接器是协 议以及它们共享来执行系统工作的消息 该结构适用于关注点的分离(支持可 修改性)、物理分布和负载平衡 1.3.3 分配
7、结构 分配结构分配结构展示了软件元素,创建并执行 软件的一个或多个外部环境中的元素之 间的关系 它回答如下问题: 1、每个软件元素在什么处理器上执行 2、在开发、测试和系统构建期间,每个元 素都存储在什么文件中 3、分配给开发小组的软件元素是什么 1.3.3 分配结构 1、部署、部署 该结构展示了如何将软件分配给硬件 处理和通信元素 该结构的元素是软件、硬件和通信路 径;关系是“分配给”和“移植到” 该结构用于工程人员对性能、数据完 整性、可用性和安全性进行推断 1.3.3 分配结构 2、实现、实现 该结构展示了软件元素是如何映射到 系统开发、集成或配置控制环境中的文 件结构上。这对于开发活动
8、和构架构成 的管理非常重要 1.3.3 分配结构 3、工作分配、工作分配 该结构将实现和集成模块的责任分配 给开发小组 该构架适用于项目管理、最佳利用专 业技术等,具有管理和构架两层含义 1.4 构架之间的关联 上面描述的各种构架都提供了关于某一 系统不同的考察视角和设计线索,他们 都是有用而且有效的。 这些构架之间是相互关联的,一个项目 往往将某种构架作为主要构架,并根据 结构的需要考虑运用其它构架 并不是所有的系统都需要在构架上采用 多种结构 结构代表了构架的主要工程设计平衡点 1.4 通常我们会选择那些结构 1、模块模块视图结构,这是关键的抽象视图结构,这是关键的抽象 2、进程进程,该视
9、图解决功能的并发和分布,该视图解决功能的并发和分布 问题问题 3、开发开发,该视图展示了软件模块、库、,该视图展示了软件模块、库、 子系统和开发单元的组织子系统和开发单元的组织 4、部署部署,该视图将其它元素映射到了处,该视图将其它元素映射到了处 理和通信节点上理和通信节点上 2. 演变交付生命期模型演变交付生命期模型 任何一个好的系统都具有的两个特性:任何一个好的系统都具有的两个特性: 1.存在一个强大的构架构想存在一个强大的构架构想 2.应用管理良好的应用管理良好的迭代式增量迭代式增量开发周期开发周期 演变交付生命期演变交付生命期(Evolutionary Delivery Life cy
10、cle)模型使开发的软件系统具有上模型使开发的软件系统具有上 述两个特征,它也是微软公司采用的软述两个特征,它也是微软公司采用的软 件开发策略的基础件开发策略的基础 2.1 演变交付生命期模型说明演变交付生命期模型说明 演变交付生命期模型的意图是通过获得演变交付生命期模型的意图是通过获得 用户和客户反馈,并在发布最终版本前用户和客户反馈,并在发布最终版本前 通过几个版本进行迭代通过几个版本进行迭代 该模型的目的是支持具有上市时间压力该模型的目的是支持具有上市时间压力 且产品的功能具有不同优先级的组织,且产品的功能具有不同优先级的组织, 因为它能够使该组织将产品的任何一次因为它能够使该组织将产品
11、的任何一次 迭代发布出去迭代发布出去 2.2 构架在演变交付生命期中的位置构架在演变交付生命期中的位置 构架作为软件开发过程中的基础,在整构架作为软件开发过程中的基础,在整 个软件的生命期中有其特定的位置个软件的生命期中有其特定的位置 在演变交付生命期模型中,构架位于初在演变交付生命期模型中,构架位于初 始需求和骨架系统之间,参见下图始需求和骨架系统之间,参见下图 软件软件 概念概念 初步的需初步的需 求分析求分析 构架和系构架和系 统核心的统核心的 设计设计 汇总客汇总客 户反馈户反馈 开发一开发一 个版本个版本 交付该交付该 版本版本 获取客获取客 户反馈户反馈 交付最交付最 终版本终版本
12、 演变交付生命期模型演变交付生命期模型(EDLC) ADD 设计设计 2.3 构架驱动因素的概念构架驱动因素的概念 功能、质量和商业需求的某个集合塑造功能、质量和商业需求的某个集合塑造 了构架。我们把这些塑造需求称为了构架。我们把这些塑造需求称为构架构架 驱动因素驱动因素 为了确定构架驱动因素,需要识别优先为了确定构架驱动因素,需要识别优先 级最高的业务目标。我们使用质量属性级最高的业务目标。我们使用质量属性 场景(表示质量属性)和用例(表示功场景(表示质量属性)和用例(表示功 能)来表述这些业务目标能)来表述这些业务目标 2.3.1 构架驱动因素举例构架驱动因素举例 变电站综合自动化仿真系统
13、变电站综合自动化仿真系统 模拟机柜模拟机柜 模拟操作开关模拟操作开关 主线路图主线路图 2.3.3 仿真系统的主要功能仿真系统的主要功能 一次设备的模拟一次设备的模拟 二次设备模拟(保护功能)二次设备模拟(保护功能) 主电路图模拟(监控功能)主电路图模拟(监控功能) 操作人机界面的模拟(控制功能)操作人机界面的模拟(控制功能) 不同设备之间的交互关系模拟不同设备之间的交互关系模拟 不同变电站具有不同的设备和布局不同变电站具有不同的设备和布局 2.3.4 仿真系统的构架驱动因素仿真系统的构架驱动因素 可修改性可修改性,因为要适应于不同的变电站,因为要适应于不同的变电站 可测试性可测试性,对于所作
14、的输入要能够做出,对于所作的输入要能够做出 相应的反应相应的反应 性能性能,能够在指定的时间内完成响应,能够在指定的时间内完成响应 2.4 开始我们的构架设计开始我们的构架设计 我们在业务目标列表中选择对构架影响我们在业务目标列表中选择对构架影响 最大的需求,通常少于最大的需求,通常少于10个,这些个,这些需求需求 就构成了构架驱动因素就构成了构架驱动因素 比如:空中交通管制系统中的可用性比如:空中交通管制系统中的可用性 和性能和性能 在确定了构架驱动因素之后,就可以开在确定了构架驱动因素之后,就可以开 始我们的构架设计了始我们的构架设计了 3.设计构架设计构架 属性驱动的设计方法属性驱动的设
15、计方法(Attribute Driven Design, ADD),该方法可以用于设计一),该方法可以用于设计一 个满足一定质量需求和功能需求的构架个满足一定质量需求和功能需求的构架 ADD把一组质量属性场景作为输入,并把一组质量属性场景作为输入,并 使用对质量属性实现和构架之间的关系使用对质量属性实现和构架之间的关系 的了解,对构架进行设计的了解,对构架进行设计 3.1 ADD设计方法设计方法 ADD方法将模块分解过程建立在软件必方法将模块分解过程建立在软件必 须满足的质量属性之上,它是一个递归须满足的质量属性之上,它是一个递归 分解过程,其中在每个阶段都选择适当分解过程,其中在每个阶段都选
16、择适当 的战术和构架模式来满足一组质量属性的战术和构架模式来满足一组质量属性 场景,然后对功能进行分配,以实例化场景,然后对功能进行分配,以实例化 由该模式所提供的模型类型由该模式所提供的模型类型 3.1.1 ADD设计方法的过程设计方法的过程 功能需求功能需求 质量属性质量属性 限制条件限制条件 ADD设计方法设计方法 构架视图构架视图 ADD设计原则设计原则 把质量属性的限制加到模块分解过程中去把质量属性的限制加到模块分解过程中去 3.1.2 ADD设计的结果设计的结果 在了解了构架驱动因素之后,我们开始在了解了构架驱动因素之后,我们开始 进行进行ADD设计设计 ADD设计的结果是构架的模
17、块分解视图设计的结果是构架的模块分解视图 和其他视图的最初几个层次和其他视图的最初几个层次 ADD并不得到视图的所有细节,当我们并不得到视图的所有细节,当我们 做出更为详细的设计决策之后就能够得做出更为详细的设计决策之后就能够得 到最后的构架了到最后的构架了 3.2 ADD设计的样例设计的样例 我们使用我们使用ADD方法为家庭信息系统中的方法为家庭信息系统中的 车库门开关器设计一个产品线构架车库门开关器设计一个产品线构架 3.3 ADD方法的步骤方法的步骤 ADD构架设计方法的执行步骤构架设计方法的执行步骤 选择要分解的系统选择要分解的系统 对分解模块进行求精对分解模块进行求精 对需要进一步分
18、解的对需要进一步分解的 每个模块重复上述两个步骤每个模块重复上述两个步骤 3.3.1 对分解的模块进行求精对分解的模块进行求精 根据下面的步骤对模块进行求精根据下面的步骤对模块进行求精 从具体的质量场景和功能需求集合中选从具体的质量场景和功能需求集合中选 择构架驱动因素择构架驱动因素 1.选择满足构架驱动因素的构架模式,根选择满足构架驱动因素的构架模式,根 据用来实现驱动因素的战术创建模式据用来实现驱动因素的战术创建模式 3.3.1 对分解的模块进行求精对分解的模块进行求精 实例化模块并根据用例分配功能,使用实例化模块并根据用例分配功能,使用 多个视图进行表示多个视图进行表示 定义子模块的接口
19、。该分解提供了模块定义子模块的接口。该分解提供了模块 和对模块交互类型的限制和对模块交互类型的限制 验证用例和质量属性场景并对其进行求验证用例和质量属性场景并对其进行求 精,使它们成为子模块的限制精,使它们成为子模块的限制 3.3.2 选择构架驱动因素选择构架驱动因素 车库门系统的构架驱动因素:车库门系统的构架驱动因素: 用于开、关门的设备和控制装置不同,用于开、关门的设备和控制装置不同, 应该可以直接从产品线构架中推导出一应该可以直接从产品线构架中推导出一 组特定控制装置的产品构架组特定控制装置的产品构架 1.不同产品中使用的处理器可能不同,应不同产品中使用的处理器可能不同,应 该可以直接从
20、产品线构架中推导出每个该可以直接从产品线构架中推导出每个 特定处理器的产品构架特定处理器的产品构架 3.3.2 选择构架驱动因素选择构架驱动因素 如果车库门在下降过程中检测到一个障如果车库门在下降过程中检测到一个障 碍物,它必须在碍物,它必须在0.1秒内停止秒内停止 应该可以在家庭信息系统内使用特定于应该可以在家庭信息系统内使用特定于 产品的诊断协议来诊断和管理车库门开产品的诊断协议来诊断和管理车库门开 关器,应该可以直接产生一个反映该协关器,应该可以直接产生一个反映该协 议的构架议的构架 3.3.3 选择构架模式选择构架模式 这一步的目标是建立一个由模块类型组这一步的目标是建立一个由模块类型
21、组 成的总体构架模式。该模式通过组合选成的总体构架模式。该模式通过组合选 定的战术满足了构架驱动因素定的战术满足了构架驱动因素 两个因素支配了战术的选择:两个因素支配了战术的选择: 构架驱动因素本身构架驱动因素本身 1.实现战术的模式对其它质量属性产生的实现战术的模式对其它质量属性产生的 副作用,也就是要权衡选择的战术副作用,也就是要权衡选择的战术 3.3.3 选择构架模式选择构架模式 根据该系统的构架驱动因素我们知道,根据该系统的构架驱动因素我们知道, 由于该系统要实现一个产品线,因此由于该系统要实现一个产品线,因此可可 修改性修改性是它需要支持的一个重要质量属是它需要支持的一个重要质量属
22、性;另外,在遇到障碍物的时候车库门性;另外,在遇到障碍物的时候车库门 需要在需要在0.1秒内停下来,因此秒内停下来,因此性能性能也是它也是它 要满足的一个质量属性要满足的一个质量属性 3.3.3 选择构架模式选择构架模式 针对可针对可修改性修改性,我们采用的战术就是,我们采用的战术就是“ 局部化变更局部化变更”,具体战术为:语义一致,具体战术为:语义一致 性和信息隐藏。我们使用单独的模块来性和信息隐藏。我们使用单独的模块来 处理用户接口、通讯和传感器,这些模处理用户接口、通讯和传感器,这些模 块被称为虚拟机块被称为虚拟机 针对针对性能性能,我们采用提高计算效率和精,我们采用提高计算效率和精 心
23、调度的战术来保证关键性能计算在规心调度的战术来保证关键性能计算在规 定的时间内完成定的时间内完成 3.3.3 选择构架模式选择构架模式 用户接口用户接口 非关键性非关键性 能计算能计算 虚拟机虚拟机 关键性关键性 能计算能计算 调度程序调度程序 3.3.4 实例化模块和分配功能实例化模块和分配功能 质量属性构架驱动因素通过战术的使用质量属性构架驱动因素通过战术的使用 确定模块的分解结构确定模块的分解结构 我们将前面的构架模式实例化,比如,我们将前面的构架模式实例化,比如, 我们把管理障碍物检测和停止车库门升我们把管理障碍物检测和停止车库门升 降的责任分配给关键性能部分,而将诊降的责任分配给关键
24、性能部分,而将诊 断能力分配给非关键性能部分;虚拟机断能力分配给非关键性能部分;虚拟机 的责任则标识为通信和传感器两部分的责任则标识为通信和传感器两部分 3.3.4.1车库门开关器的第一级分解车库门开关器的第一级分解 用户接口用户接口 升升/降门降门 传感器传感器/ 激励器激励器 障碍物检测障碍物检测 调度程序调度程序 诊断诊断 通讯虚拟机通讯虚拟机 3.3.4.2 表示构架的视图表示构架的视图 并发视图,这是组件并发视图,这是组件-连接器视图中的连接器视图中的 一种。用于对系统的动态执行过程建模一种。用于对系统的动态执行过程建模 。通过该视图我们可以讨论并发和同步。通过该视图我们可以讨论并发
25、和同步 的几个问题:的几个问题: 1.两个用户同时执行类似的功能,这有助两个用户同时执行类似的功能,这有助 于识别于识别资源争用资源争用或或数据完整性数据完整性问题。比问题。比 如车库门系统,一个人在远程关门,另如车库门系统,一个人在远程关门,另 一个人利用控制器进行关门操作一个人利用控制器进行关门操作 3.3.4.2 表示构架的视图表示构架的视图 一个用户同时执行多个功能,这有助于一个用户同时执行多个功能,这有助于 揭示数据交换和活动控制问题揭示数据交换和活动控制问题 启动系统,这为系统中永久运行的活动启动系统,这为系统中永久运行的活动 及如何初始化提供了一个良好的概念及如何初始化提供了一个
26、良好的概念 关闭系统,这有助于揭示清除问题关闭系统,这有助于揭示清除问题 3.3.4.2 表示构架的视图表示构架的视图 并发视图并发视图 关门关门 激励器激励器 障碍物检测障碍物检测 传感器传感器 关门关门 检查检查 3.3.4.2 表示构架的视图表示构架的视图 部署视图部署视图:如果系统中使用了多个处理:如果系统中使用了多个处理 器或硬件系统,则需要考虑部署视图器或硬件系统,则需要考虑部署视图 部署视图导致了并发视图的虚拟线程,部署视图导致了并发视图的虚拟线程, 并发视图又分解为特定处理其中的虚拟并发视图又分解为特定处理其中的虚拟 线程和在处理器间传输的消息线程和在处理器间传输的消息 部署视
27、图有助于确定是否需要某些模块部署视图有助于确定是否需要某些模块 的多个实例的多个实例 3.3.4.2 表示构架的视图表示构架的视图 家庭信家庭信 息系统息系统 车库开关车库开关 门系统门系统 通讯通讯 部署、并发视图部署、并发视图 3.3.5 定义子模块的接口定义子模块的接口 模块的接口展示了所提供的服务和所要模块的接口展示了所提供的服务和所要 求的属性。他对其它接口可以使用的服求的属性。他对其它接口可以使用的服 务和可以依赖的接口编写文档,来揭示务和可以依赖的接口编写文档,来揭示 子模块的交互假定子模块的交互假定 模块视图的编档:模块视图的编档: 1.信息的生产者信息的生产者/消费者消费者
28、2.要求模块提供服务并使用他们的交互模要求模块提供服务并使用他们的交互模 式式 3.3.5 定义子模块的接口定义子模块的接口 并发视图的编档:并发视图的编档: 线程间的交互线程间的交互 组件活动的信息组件活动的信息 组件同步、序列化组件同步、序列化 部署视图的编档:部署视图的编档: 硬件要求硬件要求 1.通信需求通信需求 3.3.6 验证并求精用例验证并求精用例 功能需求,验证分解是否正确功能需求,验证分解是否正确 每个子模块都有一部分从分析功能需求中每个子模块都有一部分从分析功能需求中 分解得出的责任,车库门系统的模块分解得出的责任,车库门系统的模块 用户接口,识别用户请求用户接口,识别用户
29、请求 升升/降门模块降门模块 障碍物检测障碍物检测 通讯虚拟机,管理与家庭信息系统的通信通讯虚拟机,管理与家庭信息系统的通信 传感器传感器/激励器虚拟机;诊断;调度等激励器虚拟机;诊断;调度等 3.3.6.1 验证并求精质量属性场景验证并求精质量属性场景 对质量属性场景进行求精,然后分配给对质量属性场景进行求精,然后分配给 子模块,子模块, 可以通过分解完全满足质量属性场景可以通过分解完全满足质量属性场景 通过对子模块的有限制的分解来满足质通过对子模块的有限制的分解来满足质 量属性场景量属性场景 分解是中性的分解是中性的 质量属性场景可能不满意当前的分解,质量属性场景可能不满意当前的分解, 此
30、时需要再分解此时需要再分解 3.4 形成团队结构形成团队结构 在构架的模块分解结构的最初几个层次在构架的模块分解结构的最初几个层次 稳定后,就可以把这些模块分配给开发稳定后,就可以把这些模块分配给开发 小组,这就是工作分配视图小组,这就是工作分配视图 构架对开发组织结构的形成产生重要影构架对开发组织结构的形成产生重要影 响。开发小组根据模块的划分构成。开响。开发小组根据模块的划分构成。开 发小组的结构和对小组间交流的控制就发小组的结构和对小组间交流的控制就 是影响大型项目开发成功与否的重要因是影响大型项目开发成功与否的重要因 素素 3.4 形成团队结构形成团队结构 分配任务的原则分配任务的原则 1.开发小组内部是高内聚,外部是松耦合开发小组内部是高内聚,外部是松耦合 2.根据开发
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年项目招标保密协议翻译及竞争分析合同
- 二零二五年度工业厂房保温隔热工程承包合同
- 二零二五年度智能仓储服务外包合作仓库租赁合同模板
- 二零二五年保姆家庭管理服务合同模板
- 二零二五版彩钢房租赁及维护服务合同
- 二零二五年度安装工程玻璃原材料供应及合同范本
- 二零二五年度招聘活动策划委托合同
- 二零二五版车辆运输项目风险防控合同
- 二零二五版餐饮行业外卖配送平台数据保密合同
- 二零二五年度安全报警系统网络优化与升级合同
- 2024中储粮集团财务限公司人员招聘公开招聘历年考点共500题附带答案
- 村务监督主任培训会-深化整治群众身边不正之风 筑牢基层监督防线
- 药品追溯管理制度培训
- 2025年广东省中考英语试卷真题及答案详解(精校打印版)
- 2024年安徽省合肥市北城片区七年级数学第一学期期末学业水平测试试题含解析
- 农业保险培训课件
- 2021-2025北京高考真题物理汇编:力学选择
- 数字时代亲属关系重构-洞察及研究
- 管理类本科论文
- 前列腺癌全程管理课件
- GB/T 20424-2025重有色金属精矿产品中有害元素的限量规范
评论
0/150
提交评论