《统一建模语言(UML)》第1章面向对象技术概述重点:软件工程相关概念面向对象相关概念1.1软件危机与软件工程软件发展的几个时期1946(第一台计算机)~1960“软件”雏形是简单的程序20世纪60年代末到70年代初“软件”成为产品至今软件工程时期软件危机软件危机指的是在计算机软件的开发和维护过程中所遇到的一系列严重问题。如何开发软件,以满足不断增长的、日趋复杂的要求如何维护规模不断庞大的软件产品软件工程,由北大西洋公约组织NATO于1968年提出软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。1.1软件危机与软件工程软件开发的现状软件工程学科不断发展软件危机仍然存在中小型软件开发较为成熟,大型软件存在问题常见软件开发方法瀑布模型增量模型原型模型螺旋模型(风险驱动)1.1软件危机与软件工程1.2软件开发的基本认识大型软件系统的特点开发代价高、时间长,参与人员多,软件生命周期长。软件系统开发的两个方面软件开发过程软件开发中资源的协调和管理1.2软件开发的基本认识软件是逻辑部件,而不是物理部件,软件产品与硬件产品的区别表现形式不同(看不见,摸不着,长期运行看效果)生产方式不同(人与人的沟通,容易有疏忽与失误)产品需求不同(软件不允许有误差)维护方式不同(出现bug要调整,进而引发新bug)1.3软件固有的复杂性软件开发的复杂性与困难性是由于软件的特点造成的,软件的复杂性是固有的。软件复杂性的原因跟计算机体系结构相关(冯.诺依曼硬件简单/软件复杂)软件开发是智力活动,无法形成统一开发模式软件系统的需求经常改变软件元素之间的关系不确定软件依赖硬件环境1.4软件工程的一般原则分解,“分而治之”或“各个击破”,降低复杂性抽象,抽取系统本质特征,忽略非基本特征(Miller神奇的数字7)过程抽象数据抽象模块化,基本要求是高内聚、低耦合信息隐藏,也称封装(电话)复用软件自动化软件构件组装结构化的开发方法SA、SD、SP特点:面向数据流DFD软件结构图SC优化划分模块内部算法和流程初审领料单已审核领料单复审发货通知发货Jackson方法(不常用)面向数据结构(例如,学生信息管理系统,处理各表的输入输出)面向对象的开发方法OOA、OOD、OOP1.5几种基本的软件开发方法1.6面向对象的发展历程1960-70年代COBOL(商用语言,银行)、FORTRAN(工程计算)、C(系统开发)结构化分析和设计技术1980年-90年代初期Smalltalk、Ada、C++、VisualBasic早期面向对象生成(代码)方法90年代中晚期JavaUMLUnifiedProcess1.7面向对象技术的优点面向对象技术的优点稳定性较高,需求的较小改变不会影响软件的结构开发的系统更易于理解,贴近现实世界(功能为基础PK对象为基础)可靠性高复用结构化方法对问题进行功能分解,强调软件的结构按照功能来组织,一旦功能改变,软件结构就不稳定OO方法按照问题域分解,能够更直接地描述现实世界各个开发阶段之间过渡平滑OOA与OOD阶段无鸿沟1.8面向对象领域的基本概念OO技术领域存在一些基本术语和概念,需要掌握和理解。1.8.1对象和实例对象(Object)有意义的一切事物都是对象它是系统用来描述客观事物的一个实体,是构成系统的一个基本单位。对象包括:属性(静态特征)和方法(动态特征)对象之间对过消息进行通信。实例(Instance)它与对象的概念很类似,但其含义更广泛一些。1.8.2类类(Class)它是具有相同属性和方法的一组对象的集合为某类对象提供统一的描述类是静态概念,对象是动态的对象是类的实例1.8.3封装封装(Encapsulation)就是把对象的属性和方法结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。封装使对象具有2个部分:接口部分和实现部分(硬盘)封装提供2种保护保护对象防止直接访问对象内部细节保护客户防止对象实现部分的变化影响客户对象1.8.4继承继承(Inheritance)它使子类可以继承父类的属性和方法继承增加了软件复用的机会单继承与多继承override与overload覆盖(override)在子类中增加或重新定义所继承的属性或方法。publicclassA{Stringname;publicStringgetValue(){return“Valueis:”+name;}}publicclassBextendsA{Stringaddress;publicStringgetValue(){return“Valueis:”+address;}}重载(overload)同一个类中有多个同名方法,但它们在操作数或操作数类型上有区别。系统根据实参引用不同方法。1.8.5多态多态(polymorphism)在OO技术中,多态指使一个实体在不同上下文条件下具有不同意义或用法的能力与多态有关的概念继承覆盖动态绑定向上转型(指派)圆柱体锥体立方体1.8.6消息消息(Message)是指向对象发出的服务请求对象直接用消息的方式传递信息,而不是参数包括:提供服务的对象的标识、服务标识、输入信息和回答信息等对象间的消息传递是OO方法的基本原则消息包括同步消息,请求者需要等待响应者返回异步消息,请求者不需要等待响应者返回,发出消息后可以继续自己的后续工作(和函数调用有本质区别)1.9面向对象分析与设计分析模型Analysismodels描述应用领域设计模型Designmodels描述软件系统如structurechartOO开发方法中分析模型和设计模型之间使用相同的模型和建模概念,二者之间映射方便,平滑过渡,防止不一致。OOA用面向对象方法分析问题域,建立基于对象、消息的业务模型,形成对客观世界和业务本身的正确认识。生成业务对象的动、静态模型和抽象类UML业务模型、用例图以及初步的交互图。OOD针对OOA给出的问题域模型,用面向对象方法设计出软件的基础架构(概要设计)和完整的类结构(详细设计),以完成业务功能。最后编码。生成对象类的动、静态模型(解决域)UML类图、交互图(顺序图和协作图)、状态图、活动图以及实施阶段的组件图和部署图。1.9面向对象分析与设计小结软件工程学科发展,但软件危机依然存在;软件固有的复杂性决定了这一局面;控制的基本原则有:分解、抽象、模块化、信息隐藏、复用;OO方法充分体现了上述原则;OO方法是解决软件危机的有效途径之一。谢谢观看