《面向对象技术概述1》由会员分享,可在线阅读,更多相关《面向对象技术概述1(58页珍藏版)》请在金锄头文库上搜索。
1、1/336,软件建模技术,东北大学信息科学与工程学院 杨雷 E-Mail: ,2,第0章 Introduction,0.1 课程名称及教材 0.2 教学目的 0.3 教学内容 0.4 参考书目,3,0.1 课程名称及教材,UML语言设计 面向对象技术与UML教程 架构模式 设计模式 软件建模技术,4,0.2 教学目的,在掌握面向对象技术的基础上,学习如何采用统一建模语言(UML)来对系统进行分析、设计和开发。 掌握Rose工具。(实践能力) 了解设计模式,5,0.3 教学内容(1/2),面向对象技术概述 UML概述 用例图 类图和对象图 顺序和协作图 状态图和活动图 构件图和部署图 数据建模,
2、6,0.3 教学内容(2/2),Web建模 UML与设计模式 RUP开发过程 UML之实例分析 复习,7,0.4 参考书目(1/3),面向对象技术UML教程 王少锋 清华大学出版社 UML课程设计 董兰芳 刘振安 机械工业出版社,8,0.4 参考书目(2/3),UML 用户指南 Grady Booch,人民邮电出版社 UML和模式应用 Craig Larman,机械工业出版社 UML与Ration Rose 2002从入门到精通 Wendy Boggs,电子工业出版社,9,0.4 参考书目(3/3),用例建模 Kurt Bittner,清华大学出版社 用UML构建Web应用 Jim Conal
3、len,中国电力出版社 UML基础、案例与应用 Joseph Schmuller,人民邮电出版社,10/336,第1章 面向对象技术概述,东北大学信息科学与工程学院 杨雷 E-Mail: ,11,主要内容,软件危机及软件工程 对软件开发的认识 复杂性及控制复杂性的基本方法 面向对象技术 面向对象领域中的基本概念 小结,12,软件危机及软件工程,软件危机 软件危机:落后的软件生产方式无法满足迅速增长的软件需求,从而导致软件(大型)开发与维护过程中出现一系列严重问题的现象。 主要表现: 软件开发费用和进度失控 软件的可靠性差 生产出来的软件难以维护 软件成本在计算机系统总成本中所占的比例居高不下,
4、且逐年上升 软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的需要,Crisis!,13,软件危机例证,IBM公司的 OS/360,共约100万条指令,花费了5000个人年;经费达数亿美圆,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。 OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“像巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够逃脱淹没在泥潭中的命运。” 1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序: DO 5 I=1,3 误写为:DO 5 I=1 . 3 1967年苏联“联盟一
5、号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁。,14,硬件/软件成本变化趋势,100%,0%,1955,1970,1985,15,软件技术进步落后于需求增长,16,软件危机,原因 客观:软件本身特点 逻辑部件 规模庞大 主观:不正确的开发方法 忽视需求分析 错误认为:软件开发=程序编写 轻视软件维护,17,软件危机及软件工程,软件工程 提出:1968年北大西洋公约 软件可靠性会议(NATO) 定义 软件工程 (Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数
6、据库,软件开发工具,系统平台,标准,设计模式等方面。 目的 就是在规定的时间、规定的开发费用内开发出满足用户需求的高质量的软件系统。 (高质量不只是指错误率低,还包括好用、易用、可移植、易维护等。),18,软件工程的发展,软件工程的发展已经历了三个重要阶段:,3、第三代软件工程 构件工程(软件复用),2、第二代软件工程 对象工程,1、第一代软件工程 传统的软件工程,注:软件工程发展阶段论没有统一定论,60年代末到70年代为了克服“软件危机” (Software crisis)提出“软件工程”的名词, 将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。称为传统的软件工程。,1
7、9,软件工程的发展,软件工程的发展已经历了三个重要阶段:,3、第三代软件工程 构件工程(软件复用),2、第二代软件工程 对象工程,1、第一代软件工程 传统的软件工程,注:软件工程发展阶段论没有统一定论,80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。,20,软件工程的发展,软件工程的发展已经历了三个重要阶段:,3、第三代软件工程 构件工程(软件复用),2、第二代软件工程 对象工程,1、第一代软件工程 传统的软件工程,注:软件工程发展阶段论没有统一定论,90起年代,基于构件(Component)
8、的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。,21,软件,软件就是程序?,一定要纠正软件就是程序,开发软件就是编写程序的错误观念!,软件定义:软件是能够完成预定功能和性能的可执行的计算机程序和使程序正常执行所需要的数据,加上描述软件开发过程及其管理、程序的操作和使用的有关文档。,程序的构成: 面向过程的程序=算法+数据结构 面向对象的程序=对象+消息 面向构件的程序=构件+框架,22,软件,软件的简要定义: 软件=程序+数据+文档 程序:按事先设计的功能和性能需求执行的指令序列 数据:是程序
9、能正常操纵信息的数据结构 文档:与程序开发及过程管理、维护和使用有关的图 文材料,程序、软件与软件产品: 独唱小合唱合唱万人大合唱 | | | 简单程序 较复杂程序 软件,23,软件规模越来越大,Windows95有1000万行代码 Windows2000有5000万行代码,Exchange2000和 Windows2000开发人员结构,24,对软件开发的认识,软件概念 特点 Frederick Brooks The Mythical Man-Month 快感:造物,有用于人,精密运作,学习,自由创造 痛苦:须完美,受限制,琐碎,过时 软件是一种逻辑实体,不是物理实体,他具有抽象性 软件不会磨
10、损和老化 软件主要是研制,生产是简单的拷贝 软件成本昂贵,其开发方式至今尚未摆脱手工方式 软件维护不同于硬件维修,易产生新的问题 软件具有“复杂性”,其开发和运行常受到计算机系统的限制,即受环境影响大,25,复杂性及控制复杂性的基本方法,软件的固有复杂性: 著名的计算机专家、被称之为IBM 360系列计算机之父的F. Brooks认为软件的复杂性是固有的,软件可能是人类所能制造出来的最复杂的实体。 (F. Brooks, No Silver Bullet: Essence and Accidents of Software Engineering, Computer, April 1987,
11、pp.10-19 ) 导致软件复杂性的原因 与计算机的体系结构有关 软件开发是人的一种智力活动 各元素之间的相互作用关系的不确定性 随硬件变化而变化,26,复杂性及控制复杂性的基本方法,软件固有复杂性使得开发成员之间的通讯变得困难,开发费用超支、开发时间延期等;也导致产品有缺陷、不易理解、不可靠、难以使用、功能难以扩充等。 软件的复杂性是固有的,即不能采用某种方法彻底消除软件的复杂性,因此软件危机只能是通过控制复杂性的方法解决。,27,复杂性及控制复杂性的基本方法,控制软件复杂性的基本方法 分解 对复杂系统采用“各个击破”的策略 抽象 抽取系统中的基本特性而忽略非基本的部分 模块化 高内聚(c
12、ohesion),低耦合(coupling) 高内聚指的是在一个模块中应尽量多地汇集逻辑上相关的计算资源;低耦合指的是模块之间的相互作用应尽量少。 信息隐蔽 也称封装。 模块内部的实现细节与外界隔离,提高了软件的可维护性。,28,面向对象技术,什么是面向对象 英文:Object-oriented, OO OO是控制软件复杂性的有效途径,充分体现了分解、抽象、模块化、信息隐蔽 传统结构化方法 以过程为中心,对问题进行功能分解 面向对象方法 对问题域进行自然分割,尽可能直接地描述现实世界,29,面向对象技术,面向对象技术充分体现了分解,抽象,模块化,信息隐蔽等思想,可以有效地 提高软件生产率 缩短
13、软件开发时间 提高质量,30,面向对象技术的优势,稳定: 较小的需求变化不会导致系统结构大的改变。 易于理解:面向对象的模型更加贴切地反映了现实世界,尤其对于使用者。,面向对象的方法,Functions,功能分解法,31,面向对象的方法有助于开发大型软件系统。 具有更高的可靠性和灵活性。 符合人们通常的思维方式;从分析到设计再到编码采用一致的模型表示具有高度连续性;软件重用性好。 ,面向对象技术的优势,32,面向对象领域中的一些常用术语,Object 对象 ( Instance 实例) Class 类 Attribute 属性 Operation 操作 (Method 方法),Encapsul
14、ation 封装 Inheritance 继承 Polymorphism 多态 Message 消息 OOA 面向对象分析 OOD 面向对象设计,33,对象(Object),对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组方法组成。,34,说明: 对象只描述客观事物本质的、与系统目标有关的特征,而不考虑那些非本质的、与系统目标无关的特征。 在软件生命周期的不同阶段,对象可以有不同的表现形式。 如在OOA/OOD阶段对象是用某种表示法给出的比较粗略的定义,而在OOP阶段对象是比较详细的源程序代码。 对象之间通过消息通信。 一个对象通
15、过向另一个对象发送消息激活某一个功能。 在不是纯面向对象语言中允许有不属于任何对象的成分存在,例如C+程序中的main函数。 “实例”(instance)和“对象”的关系,对象(Object),35,类(Class),类是具有相同属性和方法的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分。,36,说明 同类对象具有相同的属性和方法,是指它们的定义形式相同,而不是说每个对象的属性值都相同。 类是静态的;类的存在、语义和关系在程序执行前就已经定义好了。 对象是动态的; 对象在程序执行时可以被创建和删除。,类(Class),37,类的示例,类: Empl
16、oyee,类名,属性,方法,38,封装(Encapsulation),封装就是把对象的属性和方法结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。 封装就是使一个对象形成两个部分: 接口和实现,对于用户来说,接口是可见的,实现是不可见的。 封装提供两种保护 1. 保护对象:防止被用户误用。 2. 保护客户端:封装能减小实现过程改变的副作用,即实现过程的的改变不会影响到相应客户端的改变。,39,继承(Inheritance),特殊类的对象拥有其一般类的全部属性与方法,称作特殊类对一般类的继承。 (一般类/特殊类;父类/子类;超类/子类;基类/派生类等是相同的概念。),40,说明: 继承保证类之间的一致性 父类可以为所有子类定制规则; (许多OOP语言提供了这种实现机制,如C+中的虚函数,Java中的接口等)。 利用继承可以开发更贴近现实的模型 继承增加软件重用的