1、1软件建模技术软件建模技术东北大学信息科学与工程学院东北大学信息科学与工程学院 杨雷杨雷2第第0章章 Introduction 0.1 课程名称 0.2 教学目的 0.3 教学内容 0.4 参考书目30.1 课程名称课程名称 UML语言设计 面向对象技术与UML教程 软件建模技术40.2 教学目的教学目的 在掌握面向对象技术的基础上,学习如何采用统一建模语言(UML)来对系统进行分析、设计和开发。 掌握Rose工具。(实践能力)50.3 教学内容教学内容 软件建模概述 UML概述 用例图 类图和对象图 顺序和协作图 状态图和活动图 构件图和部署图 UML与统一开发过程RUP 使用UML分析设计
2、应用系统60.4 参考书目参考书目(1/2)UML与软件建模 徐宝文 清华大学出版社面向对象技术UML教程 王少锋 清华大学出版社70.4 参考书目参考书目(2/2) UML 用户指南Grady Booch .Rational Rose 2019教程考核方式考核方式项目所占成绩比例考试40%大作业30%上机实验20%平时表现、作业、考勤10%总评100%课程资源、课时安排课程资源、课时安排 课件:bb.neu.edu 本课程相关网站:uml.org 课时安排:授课+上机:24+16 学时+n自学如何学好如何学好11第第1章章 软件建模概论软件建模概论东北大学信息科学与工程学院东北大学信息科学与
3、工程学院 杨雷杨雷12主要内容主要内容 1.1 模型 1.2 软件过程 1.3 软件模型 1.4 面向对象方法基础 1.5 面向对象的软件建模方法1.1 模型模型地图模型地图模型1.1 模型模型建筑模型建筑模型1.1 模型模型规划模型规划模型绘画模型绘画模型1.1 模型模型定积分的含义:定积分的含义:欧姆定律:欧姆定律:数学、物理模型数学、物理模型1.1 模型模型软件生存周期的瀑布模型软件生存周期的瀑布模型1.1 模型模型1.1 模型模型模型定义:模型是对某一系统完整的抽象,是对现实的简化。模型是对现实系统的简化或模拟,是对现实系统本质特征的一种简化、直观、类比和抽象的描述。建模的目的是为了解
4、决客观世界中存在的问题,而不仅仅是为了描述客观事物模型的表示包括文字或图形。1.1 模型模型 (模型的作用)(模型的作用)n便于理解和交流模型可以促进项目的有关人员对系统的理解和交流。n优选方案通过模型帮助人们从多个方案中挑选出优选的方案。n缩短开发周期通过建模形象化系统开发内容和开发过程,提高开发效率,缩短开发周期。1.1 模型模型 (建模的原因)(建模的原因)n人对复杂问题的理解能力有限,通过建模对现实世界进行一定程度的抽象,可以简化所研究问题的难度。n对大型复杂系统建模时,可以采用“各个击破”的手段,将要解决的问题分解为一系列小问题,即在建模过程中一次只注重研究它的一个方面,这样通过对小
5、问题的解决从而得到整个问题的解。1.1 模型模型 (模型的特征)(模型的特征)n反映性模型用来反映客观实体n简化性以简化的方式来反映客观事物n直观性方便、直观的方式反映客观n抽象性以抽象的方式描述客观事物及其规律。可以从不同方面对模型进行分类:可以从不同方面对模型进行分类:思维模型社会模型工程模型建筑模型软件模型1.1 模型模型 (模型的类型)(模型的类型)逻辑模型实体模型n概念模型系统的雏形,对系统的概括性描述。n逻辑模型原理上合理可行的系统,是对现实系统的逻辑化、设计性描述。n物理模型逻辑模型的基础上,考虑设计细节, 实现的实在系统。需求理解需求理解模型模型模型分析模型分析建立模型建立模型
6、现实系统现实系统1.1 模型模型 (建模)(建模)建模的原则建模的原则建模的原则过程过程表示法表示法工具工具1.1 模型模型 (模型的三要素)(模型的三要素)n过程 建立模型的过程,只有确切知道建模的过程才能够成功建立一个模型。n表示法 模型的表示,也就是建模语言,是建立模型的关键,例如UML就是软件的建模语言。n工具 通过建模工具来方便建立模型。30主要内容主要内容 1.1 模型 1.2 软件过程 1.3 软件模型 1.4 面向对象方法基础 1.5 面向对象的软件建模方法1. 生命周期与过程生命周期与过程 生命周期生命周期:指事物衍生存在的时间历程。指事物衍生存在的时间历程。 人的生命周期人
7、的生命周期1.2 软件过程软件过程幼幼年年少少年年中中年年青青年年老老年年 过程过程: :是事物在其生命周期中是事物在其生命周期中, ,按照某种特按照某种特征征, ,一系列相关活动按照确定的次序演绎变化的一系列相关活动按照确定的次序演绎变化的进程。进程。人的生命周期身体发育过程身体发育过程心理成熟过程心理成熟过程性格形成过程性格形成过程接受教育过程接受教育过程2. 软件过程的概念软件过程的概念 软件过程软件过程(software processsoftware process)是指软件)是指软件在其生命周期中,一系列相关活动按照确定的在其生命周期中,一系列相关活动按照确定的次序演绎变化的进程。
8、象获取过程、管理过程、次序演绎变化的进程。象获取过程、管理过程、开发过程、维护过程等。开发过程、维护过程等。3. 3. 软件过程的提出软件过程的提出 软件年代中期以前,软件过程没有受软件年代中期以前,软件过程没有受到重视,软件过程分含在不同的软件开发方法到重视,软件过程分含在不同的软件开发方法之中,软件过程十分混乱;之中,软件过程十分混乱;年代软件过程开始受到重视,年年代软件过程开始受到重视,年国际正式颁布软件过程标准;国际正式颁布软件过程标准; 年正式接受年正式接受RationalRational提出的提出的:统一软件开发过程:统一软件开发过程。4. 软件工程过程的基本内容 按照国标按照国标
9、GB-8566-2019GB-8566-2019(信息技术软件生(信息技术软件生存期过程)规定,软件过程共包括存期过程)规定,软件过程共包括 获取过程获取过程 运作过程运作过程 供应过程供应过程 维护过程维护过程 管理过程管理过程 支持过程支持过程 开发过程开发过程 裁剪过程裁剪过程 支持支持合同合同获取过程获取过程供应过程供应过程供需观点供需观点需方、供需方、供方方管理观点管理观点管理者管理者管理管理管理过程管理过程维护过程维护过程运行过程运行过程开发过程开发过程支持支持支持过程支持过程:文档过程文档过程 质量保证过程质量保证过程配置管理过程配置管理过程 验证过程验证过程培训过程培训过程 评
10、审与审计过程评审与审计过程环境建立过程环境建立过程工程观点工程观点操作者操作者开发者开发者维护者维护者介入支持过程的人员介入支持过程的人员支持观点支持观点图图1 软件过程软件过程 美国美国RationalRational公司,于公司,于20192019年年6 6月公布了月公布了统统一软件开发过程一软件开发过程RUPRUP(Rational Unified Rational Unified ProcessProcess)。)。 结束软件开发过程的混乱局面,使软件开发结束软件开发过程的混乱局面,使软件开发过程得到了统一。过程得到了统一。5.统一软件开发过程RUP 1) RUP的提出的提出 时间维时
11、间维: : 初始、细化、构建、移交初始、细化、构建、移交4 4个阶段。个阶段。 工作维:工作维:领域分析、需求分析、系统设计、实领域分析、需求分析、系统设计、实现和测试等核心工作。现和测试等核心工作。 2) RUP的结构图2 统一软件开发过程的二维结构图3 软件各开发阶段工作的比例 领域分析领域分析(Business Analysis) 对软件所服务的业务领域进行深入分析。对管对软件所服务的业务领域进行深入分析。对管理型软件来说,领域分析的工作有:理型软件来说,领域分析的工作有: 现行企业系统调查;现行企业系统调查; 企业目标分析;企业目标分析; 机构和职能分析;机构和职能分析; 业务流程分析
12、;业务流程分析; 企业实体分析;企业实体分析; 建立领域模型等。建立领域模型等。 3) 软件的主要开发工作 需求分析需求分析(Requirements Analysis) 需求分析是对所开发的软件系统应该需求分析是对所开发的软件系统应该具有的功能、性能和作用的分析。需求分具有的功能、性能和作用的分析。需求分析主要工作:析主要工作: 需求调查;需求调查; 需求分析;需求分析; 需求建模;需求建模; 需求审核。需求审核。 系统设计系统设计(System Design) 系统设计的任务是确定软件系统的设计方案系统设计的任务是确定软件系统的设计方案。系统设计包括:。系统设计包括: 1 1)软件结构设计
13、)软件结构设计 系统平台设计系统平台设计 软件体系结构设计软件体系结构设计 软件结构设计软件结构设计 2 2)详细设计)详细设计 子系统设计子系统设计 数据库设计数据库设计 界面设计界面设计 系统实现系统实现(System Implemention) 系统实现的任务是把软件系统的设计方案系统实现的任务是把软件系统的设计方案转变成为可以交付测试的软件系统实物。系转变成为可以交付测试的软件系统实物。系统实现的工作包括统实现的工作包括 编程编程; ; 单元测试单元测试; ; 系统集成。系统集成。 .测试测试(Test) 测试是对所实现的软件系统进行的测测试是对所实现的软件系统进行的测试。测试的工作包
14、括:试。测试的工作包括: 编制测试计划编制测试计划 构造测试用例构造测试用例 实施测试实施测试46主要内容主要内容 1.1 模型 1.2 软件过程 1.3 软件模型 1.3 面向对象方法基础 1.4 面向对象的软件建模方法 软件模型软件模型:对软件系统在各个开发阶对软件系统在各个开发阶段本质特性的描述,它要反映软件系统的段本质特性的描述,它要反映软件系统的形成过程形成过程。领域模型领域模型需求模型需求模型设计模型设计模型实现模型实现模型测试模型测试模型软件模型的概念软件模型的概念1.3 软件模型软件模型用户需求用户需求业务领域业务领域软件产品软件产品软件模型软件模型软件模型软件产品软件开发过程
15、软件开发过程业务领域用户需求实现环境设计意图软件模型用户用户开发人员开发人员中介机构中介机构软件模型软件建模的要素建模过程建模过程建模方法建模方法建模语言建模语言建模工具建模工具 软件开发之喻建造房子(旅行、指挥作战)学习软件建模:如何从建筑工人成长为建筑师 音乐建模的表示载体:五线谱 建筑建模的表示载体:图纸 软件建模的表示载体:? 1.2 软件建模(内容)软件建模(内容) 1.2 软件建模(内容)软件建模(内容) 软件建模(内容)软件建模(内容)软件建模(内容)软件建模(内容) 软件建模(内容)软件建模(内容)软件建模(内容)软件建模(内容)60主要内容主要内容 1.1 模型 1.2 软件
16、过程 1.3 软件模型 1.4 面向对象方法基础 1.5 面向对象的软件建模方法611.4 面向对象方法基础面向对象方法基础 软件危机及软件工程 对软件开发的认识 复杂性及控制复杂性的基本方法 面向对象技术 面向对象领域中的基本概念62软件危机及软件工程软件危机及软件工程 软件危机 软件危机:落后的软件生产方式无法满足迅速增长的软件需求,从而导致软件(大型)开发与维护过程中出现一系列严重问题的现象。 主要表现:软件开发费用和进度失控软件的可靠性差生产出来的软件难以维护软件成本在计算机系统总成本中所占的比例居高不下,且逐年上升软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的需要Cris
17、is!63软件危机例证 IBM公司的 OS/360,共约100万条指令,花费了5000个人年;经费达数亿美圆,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。 OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“像巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够逃脱淹没在泥潭中的命运。” 1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序: DO 5 I=1,3 误写为:DO 5 I=1 . 3 1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁。6
18、4硬件硬件/软件成本变化趋势软件成本变化趋势硬件软件100% 0%19551970198565软件技术进步落后于需求增长软件技术进步落后于需求增长66软件危机软件危机 原因客观:软件本身特点逻辑部件规模庞大主观:不正确的开发方法忽视需求分析错误认为:软件开发=程序编写轻视软件维护67软件危机及软件工程软件危机及软件工程 软件工程 提出:1968年北大西洋公约 软件可靠性会议(NATO) 定义 软件工程软件工程 (Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设
19、计模式等方面。 目的 就是在规定的时间、规定的开发费用内开发出满足用户需求的高质量的软件系统。 (高质量不只是指错误率低,还包括好用、易用、可移植、易维护等。) 68软件工程的发展 软件工程的发展已经历了软件工程的发展已经历了个重要阶段:个重要阶段: 6 06 0 年 代 末 到年 代 末 到 7 07 0 年 代 为 了 克 服年 代 为 了 克 服 “ 软 件 危 机软 件 危 机 ” (Software crisis)(Software crisis)提出提出“软件工程软件工程”的名词的名词, , 将软件将软件开发纳入工程化的轨道,基本形成软件工程的概念、开发纳入工程化的轨道,基本形成软
20、件工程的概念、框架、技术和方法。称为框架、技术和方法。称为传统传统的软件工程的软件工程69软件工程的发展软件工程的发展已经历了软件工程的发展已经历了个重要阶段:个重要阶段: 80 80年代中到年代中到9090年代,面向对象年代,面向对象的方法与技术得到发展,研究的重的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和演化为一种完整的软件开发方法和系统的技术体系,称为系统的技术体系,称为对象工程。对象工程。70软件工程的发展软件工程的发展已经历了软件工程的发展已经历了个重要阶段:个重要阶段: 90起年代,基于构件(起年代,基于构
21、件(Component)的开发方法取得重要进展,软件系统的的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称提高效率和质量,降低成本的目的。称为构件工程。为构件工程。71软件软件软件就是程序? 软件定义:软件是能够完成预定功能和性软件定义:软件是能够完成预定功能和性能的可执行的计算机程序和使程序正常执行能的可执行的计算机程序和使程序正常执行所需要的数据,加上描述软件开发过程及其所需要的数据,加上描述软件开发过程及其管理、程序的操作和使用的有关
22、文档。管理、程序的操作和使用的有关文档。程序的构成: 面向过程的程序=算法+数据结构 面向对象的程序=对象+消息 面向构件的程序=构件+框架 72软件软件软件的简要定义:软件的简要定义: 软件软件=程序程序+数据数据+文档文档程序:按事先设计的功能和性能需求执行的指令序列数据:是程序能正常操纵信息的数据结构文档:与程序开发及过程管理、维护和使用有关的图 文材料程序、软件与软件产品:程序、软件与软件产品: 独唱独唱小合唱小合唱合唱合唱万人大合唱万人大合唱 | | | 简单程序简单程序 较复杂程序较复杂程序 软件软件73软件规模越来越大软件规模越来越大 Windows9595有有10001000万
23、行代码万行代码 Windows20002000有有50005000万行代码万行代码Exchange2000和和 Windows20002000开发人员结构开发人员结构Exchange2000Windows20002000项目经理项目经理25人人约约250人人开发人员开发人员140人人约约1700人人测试人员测试人员350人人约约3200人人74复杂性及控制复杂性的基本方法复杂性及控制复杂性的基本方法 软件的固有复杂性:著名的计算机专家、被称之为IBM 360系列计算机之父的F. Brooks认为软件的复杂性是固有的,软件可能是人类所能制造出来的最复杂的实体。 (F. Brooks, No Si
24、lver Bullet: Essence and Accidents of Software Engineering, Computer, April 1987, pp.10-19 ) 导致软件复杂性的原因 与计算机的体系结构有关 软件开发是人的一种智力活动 各元素之间的相互作用关系的不确定性 随硬件变化而变化75复杂性及控制复杂性的基本方法复杂性及控制复杂性的基本方法 软件固有复杂性使得开发成员之间的通讯变得困难,开发费用超支、开发时间延期等;也导致产品有缺陷、不易理解、不可靠、难以使用、功能难以扩充等。 软件的复杂性是固有的,即不能采用某种方法彻底消除软件的复杂性,因此软件危机只能是通过控
25、制复杂性的方法解决。76复杂性及控制复杂性的基本方法复杂性及控制复杂性的基本方法控制软件复杂性的基本方法 分解对复杂系统采用“各个击破”的策略 抽象抽取系统中的基本特性而忽略非基本的部分 模块化高内聚(cohesion),低耦合(coupling)高内聚指的是在一个模块中应尽量多地汇集逻辑上相关的计算资源;低耦合指的是模块之间的相互作用应尽量少。 信息隐蔽 也称封装。模块内部的实现细节与外界隔离,提高了软件的可维护性。结构化开发方法结构化开发方法 何谓“结构化”?结构化程序设计 设计过程 程序组织 语句构造 结构化 结构化分析设计 数据流图 数据字典 模块结构图 结构化的好处科学化 可读性 模
26、块化模块化 信息隐蔽.结构化开发方法结构化开发方法(1)结构化模型设计方法的实现 传统的面向过程的软件开发是从-算法的角度和业务流程进行建模。(2)模型的核心是数据词典它描述了所有的在目标系统中使用的和生成的数据对象。围绕着这个核心的有三种图:p实体-关系图(ERD) 描述数据对象及数据对象之间的关系,用于数据建模;p数据流图(DFD) 描述数据在系统中如何被传送或变换,以及描述如何对数据流进行变换的功能(子功能),用于功能建模;p使用系统结构图来表达功能间的关系 (3 3)使)使用系统用系统结构图结构图来表达来表达功能间功能间的关系的关系(4 4)使用数据流图表达功能)使用数据流图表达功能与
27、数据间关系,同时使用与数据间关系,同时使用ERER图表达数据间关系图表达数据间关系 q传统的结构化模型的设计所建立的模型(数传统的结构化模型的设计所建立的模型(数据)不能反应源代码(操作),忽略了模型据)不能反应源代码(操作),忽略了模型与代码之间不可分割的内在联系与代码之间不可分割的内在联系 模型与代码几乎没什么关系。同时根据模型与代码几乎没什么关系。同时根据模型不能生成代码,反之根据代码更不能模型不能生成代码,反之根据代码更不能生成模型。生成模型。q不能保证软件的质量,更不易软件的维护不能保证软件的质量,更不易软件的维护-没什么约束力也没有检测的标准。没什么约束力也没有检测的标准。结构化模
28、型设计方法主要的缺点结构化模型设计方法主要的缺点q传统的软件开发是从算法的角度进行建模传统的软件开发是从算法的角度进行建模-所有的软件都用函数作为构造块,这种建模所有的软件都用函数作为构造块,这种建模方法使设计人员把精力放在控制流程和对应方法使设计人员把精力放在控制流程和对应的算法进行分析上,这种方法建立的模型是的算法进行分析上,这种方法建立的模型是脆弱的,因为当需求发生变化的时候,将难脆弱的,因为当需求发生变化的时候,将难以维护。以维护。q没有体现出数据所表示的业务含义,并且对没有体现出数据所表示的业务含义,并且对客观世界的描述不够准确客观世界的描述不够准确 q过程式设计对于比较复杂的问题,
29、或是在开过程式设计对于比较复杂的问题,或是在开发中需求变化比较多的时候,往往显得力不发中需求变化比较多的时候,往往显得力不从心从心结构化模型设计方法主要的缺点结构化模型设计方法主要的缺点82面向对象技术面向对象技术 什么是面向对象英文:Object-oriented, OOOO是控制软件复杂性的有效途径,充分体现了分解、抽象、模块化、信息隐蔽 传统结构化方法以过程为中心,对问题进行功能分解 面向对象方法对问题域进行自然分割,尽可能直接地描述现实世界面向对象基本思想面向对象基本思想 在软件开发中在软件开发中, ,采用与人的思维过程相一致的采用与人的思维过程相一致的, ,直直接面向客观事物接面向客
30、观事物, ,面向所要解决的需求问题面向所要解决的需求问题, ,并用并用一套对象、类、继承、消息等机制开发软件的系一套对象、类、继承、消息等机制开发软件的系统性方法。统性方法。要点要点1 1:任何事物都是对象,对象有属性和方法。复:任何事物都是对象,对象有属性和方法。复杂对象可以由相对简单的对象以某种方式构成。杂对象可以由相对简单的对象以某种方式构成。要点要点2 2:通过类比发现对象间的相似性,即对象间的:通过类比发现对象间的相似性,即对象间的共同属性,是构成对象类的依据。共同属性,是构成对象类的依据。要点要点3 3:对象间的相互联系是通过传递:对象间的相互联系是通过传递“消息消息”来完来完成的
31、。通过对象之间的消息通信驱动对象执行一系成的。通过对象之间的消息通信驱动对象执行一系列的操作从而完成某一任务。列的操作从而完成某一任务。 2、面向对象方法的特点面向对象方法的特点 1 1)直接面向客观事物与人类思维方法)直接面向客观事物与人类思维方法一致一致 客观对象客观对象 2 2)采用一致连贯的软件模型)采用一致连贯的软件模型领域模型领域模型需求模型需求模型设计模型设计模型实现模型实现模型测试模型测试模型3 3)提高软件可重用性和效率)提高软件可重用性和效率老软件:老软件:新软件:新软件:框架框架 方案方案 程序程序 类类 文档文档继继 承承87面向对象技术面向对象技术 面向对象技术充分体
32、现了分解,抽象,模块化,信息隐蔽等思想,可以有效地提高软件生产率缩短软件开发时间提高质量历史历史 PL发展 机器语言 汇编语言 高级语言 表达式(Fortran) 控制(COBOL) 过程和函数(Pascal) 模块和数据(Modula) 对象(Smalltalk) 抽象层次二进制串变量、运算、表达式、语句面向过程(PO)面向对象(OO)面向?(XO)低高软件工程发展的历史就是人们不断追求更高的抽象、封装和模块化的历史。面向对象技术新进展面向对象技术新进展 面向对象数据库 分布组件技术 DCOM CORBA EJB和J2EE 面向对象操作系统 面向对象软件工程 UML Design Patte
33、rn 基于构件的软件工程 并行面向对象技术90面向对象技术面向对象技术 面向对象技术充分体现了分解,抽象,模块化,信息隐蔽等思想,可以有效地提高软件生产率缩短软件开发时间提高质量91面向对象技术的优势 稳定稳定: 较小的需求变化不会导致系统结构大的改变。 易于理解:易于理解:面向对象的模型更加贴切地反映了现实世界,尤其对于使用者。面向对象的方法Functions功能分解法92 面向对象的方法有助于开发大型软件大型软件系统系统。 具有更高的可靠性可靠性和灵活性灵活性。 符合人们通常的思维方式;从分析到设计再到编码采用一致的模型表示具有高度连续性;软件重用性好。 面向对象技术的优势93面向对象领域
34、中的一些常用术语Object 对象对象( Instance 实例实例)Class 类类Attribute 属性属性Operation 操作操作 (Method 方法方法)Encapsulation 封装封装Inheritance 继承继承Polymorphism 多态多态Message 消息消息OOA 面向对象分析面向对象分析OOD 面向对象设计面向对象设计 一、对象对象 1、对象的概念、对象的概念 对象是系统中用来描述客观事物的一个实体,对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。它是构成系统的一个基本单位。 对象既可以描述客观存在的事物,也可以表对象既可以描述客观存
35、在的事物,也可以表示由人主观构造的抽象观念。示由人主观构造的抽象观念。对象可以是具对象可以是具体的、有形的物,也可以是无形的事物体的、有形的物,也可以是无形的事物或概念。或概念。 汽车汽车灯泡灯泡扳手扳手农村农村共产主义共产主义对象对象汽车汽车灯泡灯泡扳手扳手农村农村汽车汽车客观世界:客观世界:(客观事物)(客观事物)主观世界:主观世界:(概念)(概念) 软件世界:软件世界: (对象)(对象)灯泡灯泡扳手扳手农村农村共产共产主义主义共产共产主义主义2、对象在三个世界中的含义客观空间客观空间软件空间软件空间主观空间主观空间扳手软盘吊车显微镜图片汽车事物事物概念概念对象对象 软件中对象由一组属性和
36、操作组成。软件中对象由一组属性和操作组成。 3、软件中的对象及性质对象名属性操作对象名称对象的静态性质对象的动态性质 例如例如: 3、软件中的对象及性质雇员雇员姓名雇员出生日期雇佣日期雇员( )Public class Employee private String name; private EmployeeDate birthDate; private EmployeeDate hireDate; public Employee(Sting name,int bYYYY, int bMM, int bDD, int hYYYY, int hMM,int hDD) this.name = n
37、ame; birthDate = new EmployeeDate(bYYYY,bMM,bDD); hireDate = new EmployeeDate(hYYYY,hMM,hDD); public String to String() return name+” birthday:”+ birthDate.toString()+ “hired:”+hireDate.toString(); 雇员对象Java编写的“雇员对象”程序收音机收音机一个对象的实例图解一个对象的实例图解内部状态内部状态Turn onTurn offAdjust volumeChange channelother101类
38、(Class) 类类是具有相同属性和方法的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分。汽车汽车灯泡灯泡扳手扳手农村农村共产主义共产主义类类 2、类的表示、类的表示 简化表示: 例: 规范表示: 例: 缩略表示:类名增加学生( )删除学生( )学校校名:Name地址:String电话:Number学校传感器类名属性操作实体类边界类控制类103说明 同类对象具有相同的属性和方法,是指它们的定义形式相同,而不是说每个对象的属性值都相同。 类是静态静态的;类的存在、语义和关系在程序执行前就已经定义好了。 对象是动态动态的; 对象在程序执行时可以被创建和
39、删除。类(Class)104类的示例类类: Employee类名属性方法105封装(Encapsulation) 封装封装就是把对象的属性和方法结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。 封装就是使一个对象形成两个部分: 接口接口和实实现现,对于用户来说,接口是可见的,实现是不可见的。 封装提供两种保护 1. 保护对象保护对象:防止被用户误用。 2. 保护客户端保护客户端:封装能减小实现过程改变的副作用,即实现过程的的改变不会影响到相应客户端的改变。一辆银灰色的汽车一辆银灰色的汽车一辆银灰色的汽车一辆银灰色的汽车 属性:颜色、型号、重量、排气量、 服务:启动、停、加速、 接口:方向
40、盘、车钥匙108继承(Inheritance) 特殊类的对象拥有其一般类的全部属性与方法,称作特殊类对一般类的继承继承。 (一般类/特殊类;父类/子类;超类/子类;基类/派生类等是相同的概念。)109说明: 继承保证类之间的一致性 父类可以为所有子类定制规则; (许多OOP语言提供了这种实现机制,如C+中的虚函数,Java中的接口等)。 利用继承可以开发更贴近现实的模型 继承增加软件重用的机会 降低开发和维护费用继承(Inheritance)110 子类可以继承父类的属性,也可以增加或重新定义继承的属性。 子类可以继承父类的操作,也可以增加或重新定义继承的操作。(重新定义称为override)
41、 override(覆盖)和overload(重载)的区别。继承(Inheritance)111覆盖override的例子public class A String name; public String getValues () return “Value is: ” + name; public class B extends A String address; public String getValues () return “Value is: ” + address; 112重载overload的例子public class A int age; String name; publ
42、ic void setValue (int i) age = i; public void setValue (String s) name = s;指一个类中有多个同名的方法,但在操作数个数或类型上有区别。113 继承可分为单继承单继承和多继承多继承单继承:子类只从一个父类继承多继承:子类从多于一个的父类继承继承(Inheritance)114单继承例子 例:交通工具是一个父类,地面交通工具和空中交通工具是子类115多继承例子 一个两栖交通工具同时继承地面交通工具和水上交通工具。116 多继承可能引起的问题:“命名冲突”问题C+中采用成员名限定解决Eiffel中采用方法再命名机制Java中不
43、支持多继承117多态(Polymorphism) 多态多态是指在一般类中定义的属性或方法被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。118多态多态AnimalObjectElephantCatMouseBehaviorEat GrassEat MouseEat CheeseMethodEat ()Eat ()Eat ()119多态多态 Case of animaltype:If animaltype=elephant then EatGrass(data);if animaltype=cat then EatMouse (data);if animaltype=mouse th
44、en EatCheese (data);end case;deerlion.120说明: 跟多态相关的概念:覆盖(override),动态绑定(dynamic binding) 多态属于运行时问题,而重载(overload)是编译时问题。121消息(Message) 消息消息就是向对象发出的服务请求,对象直接用消息的方式交互,而不是参数。它包含下述信息:提供服务的对象标识、服务(方法)标识、输入信息和回答信息。 通过消息进行对象之间的通信,是OO方法的一个原则。 采用消息消息这个术语的好处(而不是函数调用函数调用): 第一,更接近人们日常思维所采用的术语; 第二,其涵义更具有一般性,不限制采用
45、何种实现技术。 如在分布式环境中,对象可以在不同的网络结点上实现并且相互提供服务,在这种情况下,消息术语具有更强的适应性。122消息的格式消息的格式 message: destination, operation, parametersSender objectattributes:operations:receiver objectattributes:operations:message: receiver, operation, parametersmessage: sender, return value(s) 123消息传递的例子消息传递的例子 message: D,op10, me
46、ssage: C,op08, Aop1op2Bop3op4op5Dop10op11Cop6op7op8op9messagereturn value124面向对象分析OOA 简单地说,OOA (Object-Oriented Analysis) 面向对象的分析,就是运用面向对象的方法进行需求分析。 用面向对象方法分析问题域,建立基于对象、消息的业务模型,形成对客观世界和业务本身的正确认识。 结果是:生成业务模型和分析类125面向对象设计OOD 定义:OOD (Object-Oriented Design)面向对象的设计,就是在OOA 模型的基础上运用面向对象方法进行系统设计,目标是产生一个符合具
47、体实现条件的OOD 模型。 针对OOA给出的问题域模型,用面向对象方法设计出软件基础架构(概要设计)和完整的类结构(详细设计),以实现业务功能。126主要内容主要内容 1.1 模型 1.2 软件过程 1.3 软件模型 1.4 面向对象方法基础 1.5 面向对象的软件建模方法1.5面向对象的软件建模面向对象的软件建模 含义:在软件开发中,采用与人的思维方式相一致的,直接面向客观事物,面向所要解决的需求问题,并用一套对象、类、继承、消息等机制开发软件的系统化 软件建模方法。 特点 对象是软件建模的重心; 包括需求、设计、实现等多种模型; 属一类建模方法,而非一种方法。1.5面向对象的软件建模面向对
48、象的软件建模 最大的优点在于创建更具模块化的方法 - 帮助传递信息并降低复杂性 提供单个统一的方法 在生命周期的每个阶段使用相同的对象模块1.5 面向对象的软件建模面向对象的软件建模 面向对象建模方法是通过应用面向对象的模式,分析、设计和实现规划中的系统的方法分析系统设计对象设计实现迭代130小结小结 模型是对某一系统完整的抽象,是对现实的简化 人对复杂问题的理解能力有限,通过建模对现实世界进行一定程度的抽象,可以简化所研究问题的难度。 软件危机依旧存在-软件危机的根源在于软件固有的复杂性 控制复杂性-分解、抽象、模块化、信息隐蔽 OO技术充分体现了控制复杂性的思想,与结构化方法相比,OO方法更具优势 Thank you