面向对象软件开发事例1

上传人:tian****1990 文档编号:82180637 上传时间:2019-02-23 格式:PPT 页数:57 大小:461.50KB
返回 下载 相关 举报
面向对象软件开发事例1_第1页
第1页 / 共57页
面向对象软件开发事例1_第2页
第2页 / 共57页
面向对象软件开发事例1_第3页
第3页 / 共57页
面向对象软件开发事例1_第4页
第4页 / 共57页
面向对象软件开发事例1_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《面向对象软件开发事例1》由会员分享,可在线阅读,更多相关《面向对象软件开发事例1(57页珍藏版)》请在金锄头文库上搜索。

1、实用面向对象软件工程教程 case studies in OBJECT ORIENTED ANALYSIS & DESIGN,软件开发原理 面向对象的概念 面向对象分析(OOA) 面向对象设计(OOD) 事例学习: 电梯控制系统ECS,实用面向对象软件工程,软件开发原理,20世纪50年代 无规范化设计的概念 20世纪60年代 瀑布方法 软件开发经历一系列规范化阶段 每个阶段的完成需交付一个或多个里程碑文档 20世纪70年代 基于模型的软件工程 首先建立系统的工作模型 再调集资源实现系统,基于模型的软件开发,蓝图、图表、库 存、采购单等,设想,建模,实现,产品,现代软件工程都是采用基于模型的方法

2、开发软件的。 工程中要考虑的问题是: What : 工程所依据的模型做什么? Why : 为什么要建立模型?(背景) How : 模型如何建立? Who : 模型的建立者是谁?,需求定义 模型,分析模型,设计模型,一个典型的软件开发生存期,实现模型,用户、顾客、开发者等,t,工作产品与里程碑,软件工程方法的一个重要概念 : 事务分离原则,分析模型与设计模型分开建立。 分析模型主要描述系统将要做什么,完全不考虑具体的实现方法和技术细节。 设计模型描述在给定的实现环境下如何创建一个特定的软件系统。 前者确定系统的行为,后者给出系统实现的蓝图。 需求定义模型主要用于获取和处理系统的整体需求。,面向对

3、象的概念,传统的方法强调程序的可理解性。 可理解性强的程序是模块化的程序。 为做到模块化 每个模块做且仅做一件事 每个模块应容纳一个数据结构 每个模块应能识别并对一个事件作出反应,且这个事件是唯一的 面向对象方法则强调要让每个模块对应且唯一对应现实世界中的某一件事。,因此,面向对象(Object-Oriented)不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系以及如何进行系统构造的软件方法学。 特点: 面向对象的技术建立的模型与客观世界一致,因而便于理解; 适应变化的需要,修改局限在模块中; 可复用性。,什么是对象 (Object)?,对象: 一般意义来讲

4、,对象是现实世界中存在的一个事物。可以是物理的,如一个桌子,可以是概念上的,如一个开发项目。 对象是构成现实世界的一个独立的单位,具有自己的静态特征(用数据描述)和动态特征(行为或具有的功能)。 例如:人的特征:姓名、性别、年龄等,行为:衣、食、住、行等。,定义: 对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,由一组属性和一组对属性进行操作的服务组成。,家 具,属性,价 格 尺 寸 重 量 位 置 颜 色,服务,购 买 销 售 称 重 移 动,写字台,属性,价 格 尺 寸 重 量 位 置 颜 色,服务,购 买 销 售 称 重 移 动,对象的分类 外部实体:与软件系统交换信息

5、的外部设备、相关子系统、操作员或用户等。 信息结构:问题信息域中的概念实体,如信号、报表、显示信息等。 需要记忆的事件:在系统运行过程中可能产生并需要系统记忆的事件,如单击鼠标左键、击打键盘“”键等。 角色:与软件系统交互的人员所扮演的角色,如经理、部长、技术支持等。 组织机构:有关机构,如单位、小组等。,位置:作为系统环境或问题上下文的场所、位置,如客户地址、收件人(机构)地址等。 操作规程:如操作菜单、某种数据输入过程等。,信息隐蔽:在标识对象时必须注意的是:须将对象的属性隐藏在对象的内部,使得从对象外部看不到对象的信息是怎样定义的。只能通过该对象界面上定义的操作来使用这些信息。 对象的状

6、态:给对象赋予具体的属性值。它只能通过该对象的操作来改变。,对象间的关系 静态关系:长期存在的关系,两个对象相互知道对方是否存在。 例如:组成关系是一种静态关系,卡车是由车体、底盘、发动机、传动装置和轮胎等组成。为什么将车辆划分成几个组成部分?这样做是为便于理解、实现,可复用(发动机)。 动态关系:对象间互相进行通信。 例如:智能汽车的传感器对象向自动驾驶仪 对象发出“前面有移动障碍物,请左转减速 规避。”的指令。,什么是类和实例?,把具有相同特征和行为的对象归在一起就形成了类(class) 。,李杰,属性,李杰 男 广东 软件 1988.4 9#楼129室,服务,看书 实验 吃饭 睡觉,杨芳

7、,属性,服务,王辉,属性,王辉 男 湖南 计算机控制 1989.1 9#楼320室,服务,看书 实验 吃饭 睡觉,杨芳 女 北京 系统结构 1989.12 5#楼418室,看书 实验 吃饭 睡觉,姓名 性别 籍贯 专业 出生年月 住址,学生,属性,服务,看书 实验 吃饭 睡觉,类成为某些对象的模板,抽象地描述了属于该类的全部对象的属性和操作。 属于某个类的对象叫做该类的实例(instance)。,关琳,属性,服务,看书 实验 吃饭 睡觉,杨芳,属性,服务,刘华,属性,关琳 女 江苏 人工智能 1990.6 4#楼212室,服务,看书 实验 吃饭 睡觉,杨芳 女 北京 系统结构 1989.12

8、5#楼418室,看书 实验 吃饭 睡觉,学生,属性,姓名 性别 籍贯 专业 出生年月 住址,服务,看书 实验 吃饭 睡觉,刘华 男 吉林 CAD/CAM 1990.2 9#楼229室,什么是继承(inheritance)?,如果某几个类之间具有共性的东西 ( 信息结构和行为 ), 抽取出来放在一个一般类中, 而将各个类的特有的东西放在特殊类中分别描述,则可建立起特殊类对一般类的继承。,类定义了各个实例所共有的结构,使用类的构造函数,可以定义属于该类的实例。 类的每一个实例都可以使用类中定义的操作。实例的当前状态是由实例所执行的操作定义的。,各特殊类中的底盘、发动机、轮胎、驱动装置等可以作为共性

9、集中到一般类汽车类中。各个特殊类可以从一般类中继承共性,这样避免了重复。 复用共同的描述,继承性往往被看作是软件复用的核心概念。,建立继承结构的好处: 易编程、易理解 代码短, 结构清晰 易修改 共同部分只要在一处修改即可 易增加新类 只须描述不同部分 怎样建立一个好的继承层次 类可以从父类继承,父类又可以从它的父类继承,形成多层次的继承结构。 当增加一个新类时,不一定在最低层,可能需要插在中间层,这样可能需要调整原来的层次结构。,现要建立一个新类起重车。它的底盘、发动机、轮胎、驱动装置等都在既存类汽车中。关系如右图所示。新类是既存类的特殊情形。这时直接让起重车类作为汽车类的子类即可。,若增加

10、一个新类拖拉机。其底盘、发动机与汽车类不同,但驱动装置、轮胎与汽车类相同。 调整继承结构。建立一个新的一般的车辆类,把拖拉机与汽车类的共性放到车辆类中,拖拉机与汽车类都成为车辆类的子类。 车辆是抽象类,相关操作到子类汽车类去找。,另一种情形是想在既存类的基础上加入新类,使得新类成为既存类的一般类。 例如,已经存在三角形类,四边形类,想加入一个多边形类,并使之成为三角形和四边形类的一般类。,多继承,如果一个类需要用到多个既存类的特征,可以从多个类中继承,称为多继承。 例如退休教师是继承退休者和教师这两个类的某些特征或行为而得到的一个新类。,前三个情况主要是通过查找(应用领域)类库,找到可以原封不

11、动地继承的类或可以通过调整继承层次结构继承的类。但如果在已有的继承层次中找不到可以继承的既存类,就从零开始完全独立地建立一个类。,多态性和动态绑定,对象互相通信,即一个对象发消息给另一个对象,执行某些行为或又发消息给另外的对象,从而执行系统的功能。 发送消息的对象可能不知道另一个对象的类型是什么。,例如在C语言程序中使用命令 ClearInt ( ) 时要严格区分该命令适合一个整数,还是一个整数数组。但在C+情形,ClearInt( ) 对两者都适用,它自己判断对象是哪一个。 这就是多态性(Polymorphism)。它意味着一 个操作在不同类中可以有不同的实现方式。如 ClearInt( )

12、 针对消息对象是 int array 还是int,其实现是不同的。 在一个面向对象的多态性语言中,可能代替一个特定类型的类型的集合就是它的子类集合。,例如,右图给出了 4 个类的继承层次。使用这个继承结构,发送给多边形类的所有消息,它的所有子类都能够响应。 又例如,想要在屏幕上画一系列多边形,,多态性允许一个表的元素可以属于一组指定的类型而不仅仅是一个类型,可以认为这是一个类族。通过遍历这个表,发送给各个表元素以draw消息,画出所有的多边形。,动态绑定(dynamic binding) 把函数调用与目标代码块的连接延迟到运行时进行。这样,只有发送消息时才与接收消息实例的一个操作绑定。它与多态

13、性可以使我们建立的系统更灵活,易于扩充。 做为动态绑定的例子,考虑在多边形类中的方法contains?(aPoint)。这个操作可以在类层次的各层重新实现,以有效利用各个子类的特殊的特征。例如,假定一个矩形有某些边与屏幕的边平行,这时,检查一个点是否包含在矩形内,比检查一个点是否在一个一般的四边形内的效率要高一些。,如果我们有一多态多边形实例的表,并且想要看一个点 p (可能是鼠标点取的位置) 是否在它们中的某一个内,那么我们遍历这个表,给表中的每个对象 P 发送消息 contains? (p)。 动态绑定保证执行与对象 P 连接的操作。例如,如果 P 是类矩形的实例,则执行与矩形连接的操作更

14、有效,而不用与类四边形或类多边形连接的操作。,总结,面向对象是一种建模的技术,由于它与人们认识世界的方法非常一致,所以建立的模型容易理解。 对象有类似性因而用类来描述;类描述了类似对象的行为和信息, 封装性 使用者不需知道类怎样实现,只要知道它的外部功能,因此修改可局限在类的内部,系统易维护。 多态性 对象可以不必知道与它通信的对象的确切的类,因此容易增加新类,易扩充系统功能,不需修改其它类。,使用继承性可以方便地复用已有代码,只需增加新代码,或修改已有功能时不必修改已有代码,只需定义新的行为;继承性必须正确使用,否则使系统的结构很难理解和不易维护,因为类的相同名字的行为功能可能不同。,面向对

15、象分析(简称OOA),本课程着重讨论的是面向对象分析 (Object _ Oriented Analysis, OOA) 和面向对象设计(Object_Oriented Design, OOD) 原则的应用。 分析过程是在软件工程的环境中建立基本系统行为的过程,目的是构造待开发软件系统的形式模型,捕捉系统最基本的需求。,建立OOA模型的任务,形式地说明我们所面对的应用问题,最终成为软件系统基本构成的对象,还有系统所必须遵从的,由应用环境所决定的规则和约束。 明确地规定构成系统的对象如何协同合作,完成指定的功能。这种协同在模型中是以一组消息连接来表示的,它们承担了各个对象之间的通信。,构造OOA

16、模型的层次,构造和评审OOA模型的顺序和由五个层次组成。 这五个层次是分析过程中的层次。 每个层次的工作都为系统的规格说明增加了一个组成部分。 这五个层次是:类与对象、属性、服务、结构和主题。,类与对 象层,属性层,服务层,结构层,主题层,主题,服务,消息,属性,实例连接,类边界,实例边界,第一层 对象类层,对象类是对与应用有关的概念的抽象,是构成软件系统的基本构造块。这一层是整个OOA模型的基础。 对象所保存的信息称为它的属性,对象收到消息后所执行的操作称为它的服务。 问题在于如何建立“现实世界中事物”的抽象表示,也就是如何建立基本块。 构造软件系统,必须先了解应用领域。,爱丽丝,女孩 物理对象 医学领域 (躯干、四肢、头、五官等),女生 角色对象 学校教育领域 (学生标识、性别、学籍

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号