面向对象软件开发事例1_第1页
面向对象软件开发事例1_第2页
面向对象软件开发事例1_第3页
面向对象软件开发事例1_第4页
面向对象软件开发事例1_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实用面向对象软件工程教程casestudiesinOBJECTORIENTED软件开发原理面向对象的概念面向对象分析(OOA)面向对象设计(OOD)事例学习:电梯控制系统ECS实用面向对象软件工程软件开发原理20世纪50年代

无规范化设计的概念20世纪60年代

瀑布方法软件开发经历一系列规范化阶段每个阶段的完成需交付一个或多个里程碑文档20世纪70年代

基于模型的软件工程首先建立系统的工作模型再调集资源实现系统基于模型的软件开发蓝图、图表、库存、采购单等设想建模实现产品现代软件工程都是采用基于模型的方法开发软件的。工程中要考虑的问题是:

What:

工程所依据的模型做什么?

Why:

为什么要建立模型?(背景)

How:

模型如何建立?

Who:

模型的建立者是谁?

需求定义模型分析模型设计模型一个典型的软件开发生存期实现模型用户、顾客、开发者等t工作产品与里程碑软件工程方法的一个重要概念:

事务分离原则分析模型与设计模型分开建立。分析模型主要描述系统将要做什么,完全不考虑具体的实现方法和技术细节。设计模型描述在给定的实现环境下如何创建一个特定的软件系统。前者确定系统的行为,后者给出系统实现的蓝图。需求定义模型主要用于获取和处理系统的整体需求。面向对象的概念传统的方法强调程序的可理解性。可理解性强的程序是模块化的程序。为做到模块化每个模块做且仅做一件事每个模块应容纳一个数据结构每个模块应能识别并对一个事件作出反应,且这个事件是唯一的面向对象方法则强调要让每个模块对应且唯一对应现实世界中的某一件事。因此,面向对象(Object-Oriented)不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系以及如何进行系统构造的软件方法学。特点:面向对象的技术建立的模型与客观世界一致,因而便于理解;适应变化的需要,修改局限在模块中;可复用性。什么是对象(Object)?对象:一般意义来讲,对象是现实世界中存在的一个事物。可以是物理的,如一个桌子,可以是概念上的,如一个开发项目。对象是构成现实世界的一个独立的单位,具有自己的静态特征(用数据描述)和动态特征(行为或具有的功能)。例如:人的特征:姓名、性别、年龄等,行为:衣、食、住、行等。定义:对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,由一组属性和一组对属性进行操作的服务组成。家具属性价格尺寸重量位置颜色服务购买销售称重移动写字台属性价格尺寸重量位置颜色服务购买销售称重移动对象的分类

外部实体:与软件系统交换信息的外部设备、相关子系统、操作员或用户等。

信息结构:问题信息域中的概念实体,如信号、报表、显示信息等。

需要记忆的事件:在系统运行过程中可能产生并需要系统记忆的事件,如单击鼠标左键、击打键盘“”键等。

角色:与软件系统交互的人员所扮演的角色,如经理、部长、技术支持等。组织机构:有关机构,如单位、小组等。位置:作为系统环境或问题上下文的场所、位置,如客户地址、收件人(机构)地址等。

操作规程:如操作菜单、某种数据输入过程等。信息隐蔽:在标识对象时必须注意的是:须将对象的属性隐藏在对象的内部,使得从对象外部看不到对象的信息是怎样定义的。只能通过该对象界面上定义的操作来使用这些信息。对象的状态:给对象赋予具体的属性值。它只能通过该对象的操作来改变。对象间的关系静态关系:长期存在的关系,两个对象相互知道对方是否存在。例如:组成关系是一种静态关系,卡车是由车体、底盘、发动机、传动装置和轮胎等组成。为什么将车辆划分成几个组成部分?这样做是为便于理解、实现,可复用(发动机)。动态关系:对象间互相进行通信。 例如:智能汽车的传感器对象向自动驾驶仪 对象发出“前面有移动障碍物,请左转减速 规避。”的指令。什么是类和实例?把具有相同特征和行为的对象归在一起就形成了类(class)

。李杰属性李杰男广东软件1988.49#楼129室服务看书实验吃饭睡觉杨芳属性服务王辉属性王辉男湖南计算机控制1989.19#楼320室服务看书实验吃饭睡觉杨芳女北京系统结构1989.125#楼418室看书实验吃饭睡觉姓名性别籍贯专业出生年月住址学生属性服务看书实验吃饭睡觉类成为某些对象的模板,抽象地描述了属于该类的全部对象的属性和操作。属于某个类的对象叫做该类的实例(instance)。关琳属性服务看书实验吃饭睡觉杨芳属性服务刘华属性关琳女江苏人工智能1990.64#楼212室服务看书实验吃饭睡觉杨芳女北京系统结构1989.125#楼418室看书实验吃饭睡觉学生属性姓名性别籍贯专业出生年月住址服务看书实验吃饭睡觉刘华男吉林CAD/CAM1990.29#楼229室什么是继承(inheritance)?如果某几个类之间具有共性的东西

(信息结构和行为),抽取出来放在一个一般类中,而将各个类的特有的东西放在特殊类中分别描述,则可建立起特殊类对一般类的继承。类定义了各个实例所共有的结构,使用类的构造函数,可以定义属于该类的实例。类的每一个实例都可以使用类中定义的操作。实例的当前状态是由实例所执行的操作定义的。各特殊类中的底盘、发动机、轮胎、驱动装置等可以作为共性集中到一般类汽车类中。各个特殊类可以从一般类中继承共性,这样避免了重复。复用共同的描述,继承性往往被看作是软件复用的核心概念。汽车大轿车运货车救火车起重车建立继承结构的好处:易编程、易理解代码短,结构清晰易修改共同部分只要在一处修改即可易增加新类只须描述不同部分怎样建立一个好的继承层次类可以从父类继承,父类又可以从它的父类继承,形成多层次的继承结构。当增加一个新类时,不一定在最低层,可能需要插在中间层,这样可能需要调整原来的层次结构。现要建立一个新类起重车。它的底盘、发动机、轮胎、驱动装置等都在既存类汽车中。关系如右图所示。新类是既存类的特殊情形。这时直接让起重车类作为汽车类的子类即可。汽车大轿车运货车救火车起重车起重车类汽车类若增加一个新类拖拉机。其底盘、发动机与汽车类不同,但驱动装置、轮胎与汽车类相同。调整继承结构。建立一个新的一般的车辆类,把拖拉机与汽车类的共性放到车辆类中,拖拉机与汽车类都成为车辆类的子类。车辆是抽象类,相关操作到子类汽车类去找。汽车类拖拉机类汽车车辆拖拉机另一种情形是想在既存类的基础上加入新类,使得新类成为既存类的一般类。例如,已经存在三角形类,四边形类,想加入一个多边形类,并使之成为三角形和四边形类的一般类。三角形类四边形类多边形类三角形四边形多边形六边形多继承如果一个类需要用到多个既存类的特征,可以从多个类中继承,称为多继承。例如退休教师是继承退休者和教师这两个类的某些特征或行为而得到的一个新类。前三个情况主要是通过查找(应用领域)类库,找到可以原封不动地继承的类或可以通过调整继承层次结构继承的类。但如果在已有的继承层次中找不到可以继承的既存类,就从零开始完全独立地建立一个类。多态性和动态绑定对象互相通信,即一个对象发消息给另一个对象,执行某些行为或又发消息给另外的对象,从而执行系统的功能。发送消息的对象可能不知道另一个对象的类型是什么。退休者教师退休教师例如在C语言程序中使用命令ClearInt()时要严格区分该命令适合一个整数,还是一个整数数组。但在C++情形,ClearInt()

对两者都适用,它自己判断对象是哪一个。这就是多态性(Polymorphism)。它意味着一

个操作在不同类中可以有不同的实现方式。如ClearInt()针对消息对象是intarray还是int,其实现是不同的。在一个面向对象的多态性语言中,可能代替一个特定类型的类型的集合就是它的子类集合。例如,右图给出了4个类的继承层次。使用这个继承结构,发送给多边形类的所有消息,它的所有子类都能够响应。又例如,想要在屏幕上画一系列多边形,多边形矩形多边形三角形

多态性允许一个表的元素可以属于一组指定的类型而不仅仅是一个类型,可以认为这是一个类族。通过遍历这个表,发送给各个表元素以draw消息,画出所有的多边形。动态绑定(dynamicbinding)把函数调用与目标代码块的连接延迟到运行时进行。这样,只有发送消息时才与接收消息实例的一个操作绑定。它与多态性可以使我们建立的系统更灵活,易于扩充。做为动态绑定的例子,考虑在多边形类中的方法contains?(aPoint)。这个操作可以在类层次的各层重新实现,以有效利用各个子类的特殊的特征。例如,假定一个矩形有某些边与屏幕的边平行,这时,检查一个点是否包含在矩形内,比检查一个点是否在一个一般的四边形内的效率要高一些。如果我们有一多态多边形实例的表,并且想要看一个点p(可能是鼠标点取的位置)是否在它们中的某一个内,那么我们遍历这个表,给表中的每个对象P

发送消息contains?(p)。动态绑定保证执行与对象P

连接的操作。例如,如果P

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

(Object_OrientedAnalysis,OOA)

和面向对象设计(Object_OrientedDesign,OOD)原则的应用。分析过程是在软件工程的环境中建立基本系统行为的过程,目的是构造待开发软件系统的形式模型,捕捉系统最基本的需求。建立OOA模型的任务形式地说明我们所面对的应用问题,最终成为软件系统基本构成的对象,还有系统所必须遵从的,由应用环境所决定的规则和约束。明确地规定构成系统的对象如何协同合作,完成指定的功能。这种协同在模型中是以一组消息连接来表示的,它们承担了各个对象之间的通信。构造OOA模型的层次构造和评审OOA模型的顺序和由五个层次组成。这五个层次是分析过程中的层次。每个层次的工作都为系统的规格说明增加了一个组成部分。这五个层次是:类与对象、属性、服务、结构和主题。类与对象层属性层服务层结构层主题层主题服务消息属性实例连接类边界实例边界第一层对象-类层对象-类是对与应用有关的概念的抽象,是构成软件系统的基本构造块。这一层是整个OOA模型的基础。对象所保存的信息称为它的属性,对象收到消息后所执行的操作称为它的服务。问题在于如何建立“现实世界中事物”的抽象表示,也就是如何建立基本块。构造软件系统,必须先了解应用领域。爱丽丝女孩物理对象–医学领域(躯干、四肢、头、五官等)女生角色对象–

学校教育领域(学生标识、性别、学籍、社会工作历史等)顾客角色对象–

商店管理领域(顾客标识、信用卡标识、住址、购货历史等)

同一概念在不同应用领域中抽象出来的基本构造块是不同的。对象图符订阅订阅事件抽象类或模板类的图符对象的属性和实例连接共同组成了OOA模型的属性层。

第二层属性层属性订阅服务

订阅标识订阅状态有关细节订户标识收件人标识邮局标识价格标识付款标识属性订户服务11订户标识订户信息地址标识实例连接是应用领域的某些限制条件或事务规则。体现了类的实例间的相互关联。例如,定金取消后,相应的订户也应该被取消。

第三层服务层对象的服务加上对象实例之间的消息通信,共同组成了OOA模型的服务层。属性订阅服务确认订阅请求订阅请求录入订款信息录入赠阅信息报告订户终止订阅续订属性订户服务录入订户录入地址报告地址图中各个对象的实例分别执行某些操作,为完成某项功能,这些实例之间互相通信,形成消息连接(即所谓的协同)。消息连接用有向箭头表示。服务层的消息连接实际上引入了对系统动态行为的描述。对图形表示应当伴随一段文字说明,说明一个对象在什么状态下将对哪个消息作出什么样的反应。在实际分析时还将引入交互作用图,描述几个对象如何协同合作以完成某个特定的系统功能。第四层结构层该层负责捕捉特定应用领域中的结构关系。典型的结构有两种:泛化-特化结构(Gen-Spec结构):它表明了对象-类间的继承关系。整体-部分结构(Whole-Part结构):它表明了对象-类间的聚合关系。泛化-特化结构(分类结构)泛化类是特化类的父类(基类),特化类是泛化类的子类(派生类)。在分类结构中可以合理地分配属性和服务。泛化类特化类文章已发表的文章已接受的文章整体-部分结构(组装结构)属于不同类的成员可以聚合而形成新的类。整体对象实例与成员对象实例之间用连接。实例连接的数目(基数)标明在图上。1,m11111报社采访组编辑室印刷厂第五层主题层OOA模型的结构庞大而复杂,可以将对象归类到各个主题中,把有关的对象用一个主题边框框起来。主题可以看作是高层的模块或子系统。主题“编辑管理”包括了所有与编辑功能直接相关的对象。对于OOA模型,主题表示此模型的整体框架。可以是一个层次结构。通过对主题的识别,可以让人们能够比较清晰地了解大而复杂的模型。编辑管理的主题扩展OOA模型,得到面向对象设计(OOD)模型,和OOA模型一样,包含有5个层次,但同时它又引进了4个“部分”,分别是:问题领域部分人机交互部分任务管理部分数据管理部分面向对象设计(OOD)

问题领域部分

包括与应用直接有关的所有对象或类。可以将OOA模型当作问题领域部分的初始版本,逐步地细化这个初始版本,使其最终能解决实现限制、特性要求、性能缺陷等方面的问题。

人机交互部分指定了软件系统与人交互时需要的各种对象或类。

任务管理部分则指定了创建系统时必须建立的与系统操作管理有关的对象或类。

数据管理部分定义了那些与磁盘文件和数据库管理系统接口的对象或类。

电梯控制系统

事例学习系统描述总的需求是设计和实现一个能对一座40层楼的建筑物内的4部电梯进行调度和控制的程序。这个程序应能有效地,并合理地对电梯进行调度。比如说,有人在第4层楼召唤电梯,按下向下的按钮,那么下行的将要经过第4层楼的一部电梯就应在第4层楼停下来,让这个乘客进入电梯。另一种情况是:如果一部电梯没有乘客,它就应当停在其最后一次完成的目的地请求的楼层,直到被召唤。一部电梯不应中途改变其运行方向,除非在现行方向上的乘客都到了其目的地。如果一部电梯中的乘客数已达到了电梯的容量,那么这部电梯就不应再响应任何新的召唤请求。每部电梯都有一个超重传感器,计算机和程序能够对这些传感器进行询问。目的地按钮:每部电梯配有一个面板,上面有一列40个按钮,每个按钮代表一个楼层,并标有楼层号(1到40)。从计算机传送到面板上的信号可以使这些目的地按钮亮起来。当一个乘客按下原先指示灯不亮的目的地按钮,这个面板后面的电路就向计算机发出一个中断信号。当计算机接收到这其中的一个信号后,程序就去读相应的八位输入寄存器的存储。每个中断对应一个寄存器,每个寄存器对应一部电梯。寄存器中存放引起这个中断事件的目的地按钮所对应的楼层号。当发生中断时,面板后的电路就将楼层号写入相应的映射输入寄存器的存储中。目的地按钮指示灯:目的地面板后有灯泡。当程序中的中断服务例程接收到一目的地按钮中断,它就发送一个信号到相应的面板,使相应的按钮指示灯发亮。信号的发送实际就是程序将按钮对应的楼层号写入相应的输出寄存器的存储中。按钮指示灯亮就相当于告诉乘客系统已经注意到了他的请求,而且当乘客再一次按下该按钮(由于急躁?)时就不再产生中断。当控制器在某一楼层停下电梯时,它就向目的地按钮面板发送一信号,熄灭该层的目的地按钮指示灯。楼层传感器:每一部电梯升降井的每一个楼层上都有一个楼层

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论