版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、引言o 什么是面向对象方法?o 结构化方法和面向对象方法有何不同?5.1结构化方法的一个例子o 设计并实现一个四则运算软件,输入两个数和运算符号,输出运算结果。n 用数据流程图来表示,只有三个处理:“数据数据录入录入”, “计算计算”, “结果输出结果输出”,转换成设计模块也只有“主模块主模块”“”“数据录入数据录入”“”“计算计算”“”“结果输出结果输出”4个简单的模块。n 注:模块太简单,画图略去,直接进入编码如下。模块名称:input 功能:输入运算数和运算符输入模块主要代码输出/返回无提示输入信息:请输入数字A、B和运算符:读入NumberA、NumberB和OperateNumber
2、A,NumberB,Operate输入模块主要代码输出/返回NumberANumberBOperateString Result = ;Switch(Operate)case +: Result =string(NumberA + NumberB);break;case : Result =string(NumberA NumberB);break;case *: Result =string(NumberA NumberB);break;case /: if (NumberB!= 0)Result =string(NumberA NumberB);else Result = 除数不能为0br
3、eak;Result模块名称:compute 功能:计算输入模块主要代码输出/返回ResultConsole.WriteLine(运算结果: + Result); 无模块名称:output 功能:输出结果o 当需求发生变化,例如,增加一个平方运算或开根运算时,需要修改计算模块,这就要求程序员对计算模块的代码非常了解。o 这对于功能简单的软件比较容易实现,当软件规模比较大,功能复杂时,非常容易出错,并且软件的维护量很大。用面向对象方法实现o 首先设计一个计算类operation,有两个私有的操作数numberA和numberB、三个方法:NumberA(),NumberB()和GetResult
4、()o 类图如下: 点评:o在客户端主程序直接调用实例化工厂类创建相应的运算类对象,工厂返回相应的运算类对象指针。例如:nOperation oper;noper = OperationFactory. createOperate(+) ;noper.NumberA = 1; noper.NumberB =2;ndouble.result = oper.GetResult();o每个计算分别设计为一个子类,如果要增加新的运算,只需添加子类,同时在实例化工厂类中添加相应的switch分支,其他的处理不受影响。也就是说,程序员不必了解其他运算的处理代码,程序的整体结构没有变化。结构化方法的特点:o
5、 数据流程图和软件模块结构图之间需要进行转换,转换有一定的随意性。o 功能变化就会导致软件模块结构发生变化,造成了软件结构不稳定。不适合大规模的软件开发。结构化方法的问题(续):o 将数据定义与处理数据的过程相分离,不利于软件复用。o 例如,在图书馆信息管理系统中,对图书基本信息进行处理的典型方法是:在数据说明中定义图书基本信息,并设计图书信息添加模块、修改模块、删除模块等功能模块,实现对图书信息的处理。o 当新的系统要复用图书处理功能时,要分别复制数据说明定义和各个功能处理模块。5.2 面向对象的概念o 什么是对象?n在现实世界中的任何有属性的单个实体或概念,都可看做对象。 学生张三是一个对
6、象,具有姓名、学号、班级等属性;一个银行账户是一个对象,具有用户名、余额等属性;一份订单也是一个对象,具有货品名、单价、数量等属性。n对象可以有属性和操作。属性是静态特征,操作是动态特征。o 什么是类?n类是具有相同属性和相同行为的对象集合。 学生是一个类,其中的一名学生张三是学生类的一个实例,其属性有:姓名=张三,学号=J20080101,班级=计算机08-1:具有的操作可以是获得或设置属性值,或与其他对象用消息通信。例如,获得学生的姓名、修改班级号,向其他对象发送消息。o 类和对象的关系?面向对象其他概念(P161)o 消息机制o 封装性o 继承性o 多态性4种面向对象的开发方法o Boo
7、ch方法o Coad方法o OOSE方法o OMT方法5.4 UML语言o Booch、Rumbaugh和Jacobson三人创建了统一建模语言UML。n 不是一种可视化的程序设计语言,而是一种可视化的建模语言;n 不是工具或知识库的规格说明,而是一种建模建模语言规格说明语言规格说明,是一种表示的标准表示的标准;n 不是过程,也不是方法,但允许任何一种过程和方法使用它。UML中的各种视图(View)o 参见P167,自学剩下内容面向对象方法的基本阶段:o 面向对象分析:n 分析和构造问题域的对象模型,区分类和对象,整体和部分关系;定义属性、服务,确定约束。o 面向对象设计:n 根据面向对象分析
8、,设计交互过程和用户接口,设计任务管理,配置资源,确定边界条件,划分子系统,确定软、硬件元素分配;o 面向对象实现:n 使用面向对象语言实现面向对象设计。6.1 面向对象需求分析概述o 面向对象分析和设计涉及到3方面内容:n 一套完善的建模符号o 目前流行的建模符号采用UML的一套图形符号;n 一系列有效的分析步骤o 从描述用户需求的文件中,抽象出目标系统的本质属性,建立以用例模型、对象模型和动态模型用例模型、对象模型和动态模型为核心的分析模型;n 一个方便易用的建模工具。o Rational ROSE等。面向对象需求分析的任务o 以用例和场景用例和场景为基础,建立简洁、精确、可理解的模型。o
9、 在此基础上,开发人员和用户一起检查模型,保证模型的正确、一致、完整和可行。o 循序渐进,多次循环迭代完成。建立用例模型o 用例模型是用来描述用户需求描述用户需求的模型n 第1步:确定角色o 系统发生交互活动的所有角色,如使用者、外部系统、外部设备、时间(定时器、触发器等)n 第2步 确定用例o 从每个角色出发研究该角色要干什么?把要做的事情映射到用例o 分析过程中,研究过程中需要弄清的几个问题:n 角色要求系统提供哪些功能(使用者需要做什么)?n 角色需要了解和处理的信息有哪些类型?n 必须提醒角色的系统事件有哪些?角色必须提醒系统的事件有哪些?怎样把这些事件表示成用例中的功能?n 第3步
10、确定用例模型o 使用用例图展示系统的用例模型。n 第4步 用例模型说明o 包括角色说明;用例总览和详述。 n 第5步 用例模型评价(评审)n 第6步 优化用例模型n 第7步 构造用户界面的原型 o 整个步骤详细参见P186页建立对象模型o 第1步:识别分析类。n 分析用例模型的每个用例,确定实现用例的类,分析每个类的职责、属性和关联。n 将参与用例实现的类收集到一个类图中。分析类分为:o 边界类描述系统与外部角色之间的接口。o 控制类在分析模型内表示协调、顺序、事务处理以及控制其他对象的类。o 实体型为需要长久保存的信息进行建模的类。边界类控制类建立对象模型(续)o 第2步 构造类图建立动态模
11、型o 用交互图来描述分析类如何相互协作实现用例的功能。交互图如活动图、状态图和顺序图等o 例如,图书馆信息管理系统“借书”用例的顺序图。图8-10借书的基本顺序图图8-11借书失败的顺序图面向对象设计的概念o 面向对象分析和设计的界限是模糊的,从面向对象分析到面向对象设计是一个逐渐扩充模型逐渐扩充模型的过程。o 分析的结果通过细化直接生成设计结果,在设计过程中逐步加深对需求的理解,从而进一步完善需求分析的结果。o 分析和设计活动是一个反复迭代反复迭代的过程。o 面向对象设计的四个层次:n 确定系统的总体结构和风格,构造系统的物理模型,将系统划分成不同的子系统。n 中层设计:对每个用例进行设计,
12、规划实现用例功能的关键类,确定类之间的关系。n 进行底层设计:对每个类进行详细设计,设计类的属性和操作,优化类之间的关系。n 补充实现非功能性需求所需要的类。o 设计要点:n 对接口进行设计n 发现变化并且封装它n 先考虑聚合然后考虑继承高内聚、低耦合o 类内聚设计类的原则是一个类的属性和操作全部都是完成某个任务所必须的,其中不包括无用的属性和操作。o 应该通过类的公共接口实现耦合应该通过类的公共接口实现耦合,不应该依赖于类的具体实现细节。o 在设计时应该尽量减少对象之间发送的消息数应该尽量减少对象之间发送的消息数和消息中的参数个数和消息中的参数个数,降低消息连接的复杂程度。o 设计时应该适当
13、使用适当使用继承耦合可重用性o 重用性有两个方面的含义:n尽量使用已有的类,包括开发环境提供的类库和已有的相似的类;n如果确实需要创建新类,则在设计这些新类时考虑将来的可重用性。o 设计一个可重用的软件比设计一个普通软件的代价要高,但是随着这些软件被重用次数的增加,分摊到它的设计和实现成本就会降低。框架o 框架是一组可用于不同应用的类的集合。n 例如,Java应用程序接口(API)就是一个成功的框架包,为众多的应用提供服务。n 一般不会直接去修改框架的类,而是通过继承等为应用创建合适的类。o 软件架构和软件框架有何区别?软件架构和软件框架有何区别?n 软件框架是一特殊的软件,由实际的代码构建而
14、成,是软件系统、子系统的半成品。n 软件框架为具体的解决方案提供了基础,提供了基础服务和可扩展点,同时也建立了一些约束,开发人员在此基础上进行特定业务功能的定制开发。n 例如,在J2EE企业级应用程序开发中,经常使用struts+spring+hibernate来搭建一个基本的项目结构。n 软件架构决定了软件系统如何划分,在一定程度上描述了被划分的各个部分之间的静态、动态关系。软件架构的决策体现在软件系统的框架中。7.2 构架设计(参见P220)o 构架设计的目的是要勾画出系统的总体结构,这项工作由经验丰富的构架设计师主持完成。o 该活动以用例模型、分析模型为输入。o 输出:物理结构、子系统及
15、其接口、概要的设计类。设计模式o 所谓Pattern就是一种规则,或是一种模型,或是一种习惯。Pattern这个东西到处都是,并不只有技术圏子里才有。n 比如:诗歌总是抒情的,论文总是死板的,讲稿总是高谈的,漫画总是幽默的,n 经济领域:温州模式,电商的商业模式等设计模式o 软件设计模式n 每种模式解决一种特定问题n 设计模式并不是只在OO中独有n 理解每种模式的意图,适用的场景,使用的限制n 参考P209面向对象类设计原则o 可参见P2091.o 开闭原则(Open Closed Principle)简称OCPn 在扩展性方面是开放的,而对内部的更改应该是封闭的(外部看不到)。o 因此在进行
16、面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。 老式收音机旋钮式收音机按键式收音机问题描述:开关、调台、音量o 不同收音机,实现的细节不同o 处理方式:n用一个类来处理各种不同类型收音机的操作方式n定义一个接口类,提供开机、关机、增加频率、降低频率、增加音量、降低音量这六个抽象方法。不同的收音机继承并实现这六个抽象方法。o 点评:n前者要新增一中收音机的控制方式时,需要整个程序都读一遍,整体的修改;n后者新增收音机类型不会影响其它原有的收音机类型,收音机类型扩展极为方便。已存在的收音机类型在修改其操作方法时也不会影响到其它类型的收音机。 设计的收音机处理软件类图2.o 替换原则 (
17、Liskov Substitution Principle)简称LSPn 子类可以替换父类,并可以出现在父类能够出现的任何地方。圆形子类椭圆父类p运用替换原则时,应该尽量把类B设计为抽象类或者接口类,让C类继承B,并实现操作A和操作B。p运行时,类C实例替换B,这样即可进行新类的扩展,同时无须对类A进行修改。 3.o 依赖原则(Dependency Inversion Principle)简称DIP。n 类之间的依赖关系尽量依赖接口和抽象类,不要依赖于具体类(具体类只负责相关业务的实现)n 修改具体类不影响上层的抽象类。4.o 单一职责原则(Single Responsibility Principle)简称为SRP。n 一个类应该有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物理板块模型课程设计
- 乒乓球用品行业销售工作总结
- 酒店旅游行业行政后勤工作总结
- 线描基本技法课程设计
- 图文制作行业前台接待工作总结
- 三年高考地理(全国乙卷21-23)真题知识点-人口与城市
- 组织学生参加竞赛活动计划
- 2023-2024学年北京市清华大学附中朝阳学校高一(下)期中语文试卷
- DB32T 3393-2018 警务效能监察工作规范
- 網絡零售店店员工作总结
- 2024年有限合伙股权代持
- 广东珠海市驾车冲撞行人案件安全防范专题培训
- 花城版一年级上册音乐 第3课 《国旗国旗真美丽》(教案)
- 2024年四川高校对口招生考试中职英语试卷真题(含答案)
- 食品质量安全法律法规培训
- 医疗仪器安装与调试方案
- 陕西省陕西师大附中2025届高一物理第一学期期末统考模拟试题含解析
- 人教版2024年小学二年级上学期语文期末考试往年真题
- 2024年保安员证考试题库及答案(共130题)
- 2024压铸机安全技术规范
- 期末综合素养评价 (三)(试题)-2024-2025学年一年级上册数学
评论
0/150
提交评论