面向对象软件开发事例1.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

实用面向对象软件工程教程

casestudiesin

OBJECTORIENTED;软件开发原理;基于模型的软件开发;现代软件工程都是采用基于模型的方法开发软件的。

工程中要考虑的问题是:

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

Why:为什么要建立模型?〔背景〕

How:模型如何建立?

Who:模型的建立者是谁?;需求定义

模型;软件工程方法的一个重要概念:

事务别离原那么;面向对象的概念;;什么是对象(Object)?;定义:

对象是系统中用来描述客观事物的一个实体,是构成系统的一个根本单位,由一组属性和一组对属性进行操作的效劳组成。;;位置:作为系统环境或问题上下文的场所、位置,如客户地址、收件人〔机构〕地址等。

操作规程:如操作菜单、某种数据输入过程等。;对象间的关系

静态关系:长期存在的关系,两个对象相互知道对方是否存在。

例如:组成关系是一种静态关系,卡车是由车体、底盘、发动机、传动装置和轮胎等组成。为什么将车辆划分成几个组成局部?这样做是为便于理解、实现,可复用(发动机)。

动态关系:对象间互相进行通信。

例如:智能汽车的传感器对象向自动驾驶仪 对象发出“前面有移动障碍物,请左转减速 躲避。〞的指令。;什么是类和实例?;类成为某些对象的模板,抽象地描述了属于该类的全部对象的属性和操作。

属于某个类的对象叫做该类的实例(instance)。;什么是继承(inheritance)?;各特殊类中的底盘、发动机、轮胎、驱动装置等可以作为共性集中到一般类汽车类中。各个特殊类可以从一般类中继承共性,这样防止了重复。

复用共同的描述,继承性往往被看作是软件复用的核心概念。;建立继承结构的好处:

易编程、易理解代码短,结构清晰

易修改共同局部只要在一处修改即可

易增加新类只须描述不同局部

怎样建立一个好的继承层次

类可以从父类继承,父类又可以从它的父类继承,形成多层次的继承结构。

当增加一个新类时,不一定在最低层,可能需要插在中间层,这样可能需要调整原来的层次结构。;现要建立一个新类起重车。它的底盘、发动机、轮胎、驱动装置等都在既存类汽车中。关系如右图所示。新类是既存类的特殊情形。这时直接让起重车类作为汽车类的子类即可。;假设增加一个新类拖拉机。其底盘、发动机与汽车类不同,但驱动装置、轮胎与汽车类相同。

调整继承结构。建立一个新的一般的车辆类,把拖拉机与汽车类的共性放到车辆类中,拖拉机与汽车类都成为车辆类的子类。

车辆是抽象类,相关操作到子类汽车类去找。;另一种情形是想在既存类的根底上参加新类,使得新类成为既存类的一般类。

例如,已经存在三角形类,四边形类,想参加一个多边形类,并使之成为三角形和四边形类的一般类。;多继承;多态性和动态绑定;例如在C语言程序中使用命令ClearInt()时要严格区分该命令适合一个整数,还是一个整数数组。但在C++情形,ClearInt()对两者都适用,它自己判断对象是哪一个。

这就是多态性(Polymorphism)。它意味着一个操作在不同类中可以有不同的实现方式。如ClearInt()针对消息对象是intarray还是int,其实现是不同的。

在一个面向对象的多态性语言中,可能代替一个特定类型的类型的集合就是它的子类集合。;例如,右图给出了4个类的继承层次。使用这个继承结构,发送给多边形类的所有消息,它的所有子类都能够响应。

又例如,想要在屏幕上画一系列多边形,;动态绑定(dynamicbinding)把函数调用与目标代码块的连接延迟到运行时进行。这样,只有发送消息时才与接收消息实例的一个操作绑定。它与多态性可以使我们建立的系统更灵活,易于扩充。

做为动态绑定的例子,考虑在多边形类中的方法contains?(aPoint)。这个操作可以在类层次的各层重新实现,以有效利用各个子类的特殊的特征。例如,假定一个矩形有某些边与屏幕的边平行,这时,检查一个点是否包含在矩形内,比检查一个点是否在一个一般的四边形内的效率要高一些。;如果我们有一多态多边形实例的表,并且想要看一个点p(可能是鼠标点取的位置)是否在它们中的某一个内,那么我们遍历这个表,给表中的每个对象P发送消息contains?(p)。动态绑定保证执行与对象P连接的操作。例如,如果P是类矩形的实例,那么执行与矩形连接的操作更有效,而不用与类四边形或类多边形连接的操作。;总结;使用继承性可以方便地复用已有代码,只需增加新代码,或修改已有功能时不必修改已有代码,只需定义新的行为;继承性必须正确使用,否那么使系统的结构很难理解和不易维护,因为类的相同名字的行为功能可能不同。;面向对象分析〔简称OOA〕;建立OOA模型的任务;构

文档评论(0)

ranfand + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档