980 likes | 1.25k Views
软件工程 Software Engineering. 电气与信息学院计算机系 Institute of Electrical & Information Department of Computer Science. 6.1 内容提纲. 面向对象方法概述 基本思想与发展史 面向对象的软件工程方法 面向对象建模方法 对象模型、动态模型、功能模型 三种模型之间的关系 统一建模语言 UML UML 语言概述 UML 语言基本元素 常用的 UML 图. 软件开发的常见问题. 需求的错误 不完整、不一致、不明确 开发人员和用户无法以同样的方式说明需求 需求的变化
E N D
软件工程Software Engineering 电气与信息学院计算机系 Institute of Electrical & Information Department of Computer Science
6.1 内容提纲 • 面向对象方法概述 • 基本思想与发展史 • 面向对象的软件工程方法 • 面向对象建模方法 • 对象模型、动态模型、功能模型 • 三种模型之间的关系 • 统一建模语言UML • UML语言概述 • UML语言基本元素 • 常用的UML图
软件开发的常见问题 • 需求的错误 • 不完整、不一致、不明确 • 开发人员和用户无法以同样的方式说明需求 • 需求的变化 • 需求在整个项目过程中始终发生变化 • 设计后期发生变化 • 持续的变化 • 系统功能不断变化 • 许多变化出现在项目的后期 • 维护过程中发生许多变化 • 系统结构的崩溃 • 系统在不断的变化中最终变得不可用
问题的解决方法 • 解决方法 • 严格的需求和规划阶段 • 设计系统结构使其适应变化 • 分析 • 问题域相对而言是稳定的 • 银行系统:账户、客户、ATM • 系统功能和数据表示极有可能发生变化 • 银行系统:账户的可选项、ATM的不同界面 • “建造软件系统应该基于问题域,而不是实现域”
面向对象方法 • 面向对象模型更接近于问题域 • 以问题中的对象为基础建模 • 以对象、属性和操作对问题进行建模 • 反复细化高层模型直到可以实现的程度 • 努力避免在开发过程中出现大的概念跳变 • 将模型组织成对象的集合 • 真实世界中的具体事物 • 驾驶执照、信用卡、飞机等 • 逻辑概念 • 操作系统中的分时策略、军事训练中的冲突解决规则等
问题的根本所在 • 软件越来越复杂,开发人员仍然沿用25年前的方法来开发,这就是问题的根本所在 • --Ivar Jacobson
开发过程解析 • 目前的现实是什么? ——业务建模 • 在这个现实下,开发系统是为了达到什么目标? ——愿景 • 为了达到这个目标,系统应该对外提供什么样的功能和性能? ——需求 • 为了提供功能,系统内部应该有什么样的业务核心机制? ——分析 • 为了满足性能,系统的核心机制如何在选定架构上实现? ——设计 找 到 问 题 解 决 问 题
方法演变:无方法 • 软件作坊——边做边改模型(Code-Fix) • 程序越来越大,难以掌握——软件危机
方法演变:功能分解法 • 结构化方法——瀑布模型(自顶向下,逐层分解) • 不适应需求的变化、阶段间文档较多,工作繁重、不能化解风险
方法的演变:数据流法 • 结构化方法——快速原型(自顶向下,逐层分解) • 数据与方法分离,内聚性不够,与现实世界模型不一致
方法的演变:信息建模法 • 结构化方法——快速原型(自顶向下,逐层分解) • 数据与方法分离,内聚性不够,与现实世界模型不一致
方法的演变:对象分解取代功能分解 • 面向对象方法——组件法、增量法 • 数据与方法结合,内聚性高,与现实世界模型相吻合
方法演变:用例驱动的面向对象方法 • 面向对象方法——迭代法(喷泉法) • 数据与方法结合,内聚性高,用例驱动、与现实世界模型相吻合
面向对象开发技术的核心特点 • 结构化理论 • 是面向过程的设计方法,是以算法为核心,从计算机的角度出发,把数据和处理过程作为相对独立的部分,数据代表问题域中的实体,而程序代码则用于处理这些数据 • 系统模型是对处理过程的映射,即将应用分解为功能模块、功能接口;与现实问题域的东西没有直接联系 • 面向对象理论 • 是面向对象的设计方法,是以对象为核心,从现实世界中问题域的对象角度出发,将数据和处理过程封装在一起,模拟现实世界中不同实体之间的联系 • 系统模型是对问题域的直接映射,即从现实世界中直接抽象出一个模型,然后在计算机中实现出来
面向对象开发技术的今天—核心基础 • 核心基础:组件技术、UML建模技术 • 组件技术:大型项目与系统的必由之路 • 需要支持多平台:SOA、ESB—连接组件 • 拥有大量组件:重用、MDA—快速、廉价集成组件 • 响应日益复杂的业务操作:EA(连通软件与业务的鸿沟)、PLE(处理产品线可变性)、反向工程(重用遗留系统) • 框架:J2EE、.NET等 • 独立与厂商的组件描述语言--UML
面向对象的软件工程方法 • 面向对象分析(OOA) • 分析和理解问题域,找出描述问题域和系统责任所需的类及对象,分析它们的内部构成和外部结构,建立OOA模型 • 面向对象设计 • 将OOA模型直接转换成OOD模型,并且补充与一些实现有关的部分,如人机界面、数据存储、任务管理等 • 面向对象编程 • 用一种面向对象的编程语言将OOD模型中的各个成分编写成程序,由于OOA→OOD → OOP实现了无缝连接和平滑过渡,因此提高了开发工作的效率和质量
面向对象的软件工程方法 • 面向对象测试(OOT) • 面向对象测试是指对于运用OO技术开发的软件,在测试过程中继续运用OO技术进行以对象概念为中心的软件测试 • 以类作为基本测试单位,集中检查在类定义之内的属性、服务和有限的对外接口,大大减少了错误的影响范围 • 面向对象的软件维护(OOSM) • 在面向对象方法中,各阶段采用的表示是一致的,从而大大降低了理解的难度,无论是从程序中的错误追溯到问题域,还是需求的变化都要从问题域追溯到程序,整个过程都是平坦的。另外,对象的封装性使得一个对象的修改对其他对象的影响很小,不至于牵一发而动全身
6.1 内容提纲 • 面向对象方法概述 • 基本思想与发展史 • 面向对象的软件工程方法 • 面向对象建模方法 • 对象模型、动态模型、功能模型 • 三种模型之间的关系 • 统一建模语言UML • UML语言概述 • UML语言基本元素 • 常用的UML图
对象模型 • 对象模型的本质 • 表示静态的、结构化的系统的“数据”性质,是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构 • 强调的是围绕对象而不是功能来构建系统 • 对象模型的作用 • 为建立动态模型和功能模型提供了实质性的框架 • 建立对象模型的目标是从客观世界中提炼出具体应用有价值的概念 • 对象模型的表示方法 • 通常使用国际通用的统一建模语言UML所提供的类图来建立对象模型
动态模型 • 动态模型的本质 • 表示瞬时的、行为化的系统的“控制”性质 • 规定了对象模型中的对象的合法变化序列 • 动态模型的作用 • 考察对象的动态行为 • 状态是对对象属性值的一种抽象,各对象之间的相互触发形成了一系列的状态变化,一个触发行为称作事件 • 动态模型的表示方法 • 通常使用国际通用的统一建模语言UML所提供的状态图来建立动态模型,用以描绘对象的状态、触发状态转换的事件以及对象的行为(对事件的响应)
功能模型 • 功能模型的本质 • 表示变化的系统的“功能”性质 • 指明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求 • 功能模型的作用 • 建立功能模型的目标是描述外部行为者所理解的系统功能 • 功能模型的表示方法 • 数据流图:在OO中,建立顶层的DFD有助于软件开发人员更深入地理解问题域,改进和完善自己的设计 • 用例模型:通常使用国际通用的统一建模语言UML所提供的用例图来建立功能模型,来描述系统、行为者、用例以及用例之间的关系
三种模型之间的关系 • 面向对象建模技术所建立的三种模型,分别从三个不同的侧面描述了所要开发的系统。这三种模型相互补充,相互配合,使得我们对系统的认识更加全面 • 功能模型:指明了系统应该“做什么” • 动态模型:明确规定了什么时候(即在何种状态下接受了什么事件的触发)做 • 对象模型:定义了做事情的实体
OO模型与传统模型之间的关系 • OO模型和传统模型之间的关系 • 针对每个类建立的动态模型,描述了类实例化的对象的生命周期(生命周期有很多阶段组成,生命周期中的阶段就是对象的状态) • 状态转换驱使行为发生,这些行为在DFD中被映射成加工/处理,在用例图中被映射成用例,它们同时与类图中的服务(操作)相对应 • 功能模型中的处理(或用例)对应于对象模型中类所提供的服务,也有一个服务对应多个处理(或用例)的时候
OO模型与传统模型之间的关系 • OO模型和传统模型之间的关系(续) • DFD中的数据存储,以及数据的源点和终点,通常是对象模型中的对象 • DFD中的数据流,往往是对象模型中对象的属性值,也可能是整个对象 • 功能模型中的处理(或用例)可能产生动态模型中的事件 • 对象模型描述了DFD中的数据流、数据存储以及数据源点/终点的结构
6.1 内容提纲 • 面向对象方法概述 • 基本思想与发展史 • 面向对象的软件工程方法 • 面向对象建模方法 • 对象模型、动态模型、功能模型 • 三种模型之间的关系 • 统一建模语言UML • UML语言概述 • UML语言基本元素 • 常用的UML图
什么是UML? • 什么是UML? • UML是1995年由世界著名的面向对象技术专家Grady Booch, Jim Rumbaugh和Ivar Jacobson发起在著名的Booch方法、OMT方法和OOSE方法的基础上开发出了统一建模语言(UML)
什么是UML • UML是一种直观化、明确化、构建和文档化软件系统产物的通用可视化建模语言 • 象任何语言一样,UML提供了用于交流的词汇表及其组词规则,说明如何创建或理解结构良好的模型,但并没有说明在什么时候创建什么样的模型
UML不是什么? • UML不是什么? • 不是一种可视化程序设计语言,而是一种可视化建模语言 • 不是工具或知识库的规格说明,而是一种建模语言规格说明,是一种表示的标准 • 不是过程、也不是方法,但允许任何一种过程和方法使用它
什么是UML? • UML可以描述开发所需要的各种视图 • 概念的:业务过程和系统功能 • 具体的:程序中的类、数据库模式、可重用的软件组件 • 设计者为UML设定的目标 • 运用面向对象概念来构造系统模型 • 建立起从概念模型直至可执行体之间明显的对应关系 • 着眼于那些有重大影响的问题 • 创建一种对人和机器都使用的建模语言
UML是什么 • 是一种可视化的建模语言 • 软件开发的难点之一在于项目参与人员之间的沟通和交流,领域专家、软件设计开发人员、客户等各自使用不同的语言交流,对系统的概念模型容易产生错误的理解 • 另外,阅读程序代码虽然可以推断其含义,但无法正确地理解它,在接受别人的开发工作时,也会由于难以理解而不得不重新实现部分程序 • 因此,Uml提供一组具有明确语义的图形符号,可以建立清晰的模型便于交流,所有开发人员都可以无歧异地解释这个模型
什么是UML • 是一种可用于详细描述的语言 • 详细描述意味着建立精确的和无歧异的模型 • UML为所有重要的分析、设计和实现决策提供了精确的、无歧异的和完整的描述 • 是一种构造的语言 • UML不是一种可视化的编程语言,但它所描述的模型可以映射成不同的编程语言 • 正向工程:从UML模型到编程语言的代码生成 • 逆向工程:由编程语言代码重新构建UML模型
什么是UML • 是一种文档化的语言 • UML可以建立系统体系结构及其详细文档,提供描述需求和用于测试的语言,同时可以对项目计划和发布管理的活动进行建模
UML的模型元素 • 在UML中,模型元素是一些基本的构造元素以及它们之间的连接关系
UML结构事物:类 • 可见性 • public +:公有的(缺省值),对于一个给定的类,任何一个带有可见性的外部类都可以使用该特征 • protected #:受保护的,类的任何子类均可使用该特征 • private -:私有的,只有类本身才可以使用该特征 • 抽象类 • 抽象类是不能直接产生实例的类 • 在UML中,将类名写成斜体字来表示抽象类,也可以使用构造型《abstract》
UML结构事物:类 • 类在不同层次上的说明
UML结构事物:接口 • 接口 • 接口描述了一个类或构件的服务(操作)集 • 接口描述了一个元素的外部的可见行为 • UML符号
UML结构事物:构件 • 构件(组件) • 构件是系统中物理的、可替代的部件 • UML符号
UML行为事物:交互 • 交互 • 交互由在特定环境中共同完成一定任务的一组对象之间交换的消息组成 • UML符号
UML分组事物:包 • 包 • 包是用来组织UML模型的基本分组事物 • UML符号
UML注释事物:注释 • 注释 • 注释是依附于一个元素或一组元素之上,对其进行约束或解释的简单符号 • UML符号
UML关系:关联 • 关联 • 关联是一组结构关系,它描述了一组对象之间的连接 • 关联两端的类可以某种角色参与关联 • 角色是关联中靠近它的一端的类与另一端的类呈现的责任 • 如果关联上没有标注角色名,则隐含地用类的名称作为角色名 • 关联具有多重性 • 多重性表示可以有多个对象参与该关联 • 固定值:3 • 多值: n 或者* • 区间: 0…1或者3…n • 集合: 2, 4, 8
UML关系:关联 • 限定关联 • 带有限定符的关联称为限定关联 • 限定符是一种关联属性 • 限定符的作用:给定关联一端的一个对象和限定符值,可确定另一端的一个对象或对象集合
UML关系:关联 • 关联类 • 关联本身也可以有特性,关联类是一种具有关联特性和类特性的建模元素 • UML符号
UML关系:聚合和组合 • 聚合是一种特殊形式的关联,它表示类之间的整体与部分的关系 • 组合是一种特殊形式的聚集,组合关系中的整体与部分具有同样的生存期