




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章 面向对象的软件开发(Object-Oriented Software Development)任课老师:黄武2022/9/18提纲面向对象技术概述面向对象分析(OOA)面向对象设计(OOD)面向对象程序(OOP)面向对象语言(OOL)2022/9/181. 面向对象技术概述面向对象技术的基本思想是:以接近人认识客观世界的方法对一个软件系统进行分析,设计具体讲就是对问题域进行自然分割,以接近人类思维的方式建立问题域模型,从而使设计出的软件尽可能地描述现实世界,构造出模块化、可重用、可维护性的软件,并能控制软件的复杂性和降低开发维护费用2022/9/181.1 面向对象技术的基本概念面向对
2、象技术包含以下基本概念类(Class)类是对现实世界中具有相同性质的一类事物的抽象,比如人,飞机,汽车等等。类不代表某个个体,其主要特点是抽象。在程序设计中无空间对象(Object)对象是类中的一个具体个体,比如蒋文涛同学,王晓娜同学等。程序设计中对象占据一定空间,具有自己的状态信息和操作函数2022/9/181.1 面向对象技术的基本概念属性(Property)表示类的特征信息,对象的内部状态,根据可见性可以分为公有属性、私有属性等,通常为私有方法(Method)对对象的内部状态进行操作的函数接口(Interface)外部与对象进行交互的手段,是一类特殊的方法2022/9/181.1 面向对
3、象技术的基本概念关联(Association)表示不同类之间的关系,比如司机与汽车,客户与订单,酒店与旅客等等构成了不同的关系聚集(Aggregation)聚集是一种特殊形式的关联,它表示类之间的关系是整体与部分的关系,比如人与手足,汽车与方向盘,公司与职员等关联与聚集是类之间的静态关系2022/9/181.1 面向对象技术的基本概念对象之间的动态关系消息传递(Message sending)消息传递是对象之间动态联系的手段,分为同步消息和异步消息面向对象方法的一个原则就是通过消息进行对象之间的通信,一个对象通过消息通知其他对象,并且将相关的信息带到其他对象2022/9/181.1.1 类对象
4、举例classcar/ 类的定义intcolor;/ 颜色 属性intweight;/ 重量 属性pointposition;/ 位置 属性void move (int x, int y)/ 汽车移动 方法position.x += x;position.y += y;void draw(int x, int y)/ 画一辆汽车 方法carblackcar;/ 定义一个blackcar,blackcar称为对象2022/9/181.2 面向对象设计与结构化设计不同结构化的设计将上层功能分解为具体实现的下层模块(细节),从而造成上层的业务逻辑过分依赖于下层实现细节,当用户需求(通常对应上层的功能
5、)更改时,造成下层细节的更改,这通常是困难的比如,我们作通讯软件,上层是读取数据,下层为具体读取串口数据的函数read_com,如果我们现在要读取并口数据,那么上层需要修改调用函数,下层则需要重新构建read_parallel2022/9/181.2 面向对象设计与结构化设计不同面向对象设计创建的抽象不依赖于任何细节,而细节则高度依赖于上层的抽象比如刚才的通讯软件我们建立一个通讯类,然后通过继承生成串口类和并口类,我们在具体通讯时,只要根据不同的要求(消息中携带的参数信息)生成不同的具体通讯对象就可以了,上层的调用和生成关系不变2022/9/181.2 面向对象设计与结构化设计不同意大利建筑师
6、戴维菲舍 2022/9/181.3 面向对象技术的三个主要特征封装性(Encapsulation)将对象的属性和方法结合成一个独立的系统,隐藏对象的内部细节不受外界的干扰,并且保护客户端软件封装使一个对象形成了两个部分:接口部分和实现部分类接口方法属性封装2022/9/181.3.1 面向对象技术的继承性继承性(Inheritance)是某个类获得另一个类的部分或全部特征,它是类抽象以及代码可重用的重要手段,通过继承,子类可以重用父类的代码比如,我们定义飞机类,我们可以在飞机类的基础根据飞机的用途定义民航飞机,军航飞机,其它飞机2022/9/181.3.2 面向对象技术的多态性多态性(Poly
7、morphism)是相同的方法产生不同的结果。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方法减少代码的复杂度这种方法对应于程序的晚绑定技术,相当于根据上下文环境来调用不同对象的相同功能函数,造成不同的处理结果2022/9/181.4 面向对象技术特征举例classcar / 封装性 private:intx, y; public:virtual void draw (int x, int y);classTruck : public car/ 继承性intiCarrying_Capacity;classbus : public carint iPassenger_Numb
8、er;classtax : public carbool bFlag;2022/9/181.4 面向对象技术特征举例car cars4 ;cars0= new car;cars1= new truck;cars2= new bus;cars0= new taxi;:for(int i=0; iOOD-OOP2022/9/182.1 面向对象分析概述(OOA)面向对象分析(Object-Oriented Analysis)是指在一个软件系统的开发过程中,按照面向对象的方法来分析问题其核心思想是:利用面向对象的概念和方法为软件需求建造模型,以使用户需求逐步精确化、一致化、完全化。实质上就是对现实世
9、界的系统进行抽象建模2022/9/182.2 面向对象分析的作用面向对象分析模型帮助我们:明确问题需求为用户和开发人员提供需求分析为用户和开发人员提供一个协商的基础,以作为后继设计和实现的框架因此系统分析的第一步就是陈述需求2022/9/182.3 面向对象分析的过程开发者用 户管理者用户知识领域知识现实世界的经验一般需求建 模问题陈述面向对象分析过程对象模型动态模型功能模型系统设计2022/9/182.4 面向对象分析的三种模型对象模型:对操作模型进行分析,把系统分解成相互协作的分析类,这是系统的静态模型对象模型 = 对象图 + 数据字典动态模型:描述系统的动态行为,以揭示对象间如何协作来完
10、成某个具体的任务动态模型 = 状态图 + 全局事件流图功能模型:操作功能的模型(对数据进行处理加工功能模型 = 数据流图 + 约束2022/9/182.5 OOA的主要优点加强了对问题域和系统责任的理解改进各类人员之间的交流对需求的变化具有较强的适应性支持软件的复用贯穿软件生命周期全过程的一致性有利于用户的参与与理解2022/9/182.6 OOA方法的基本步骤OOA方法包括以下5个步骤:识别对象识别对象的属性识别对象的行为识别对象所属的类定义主题词2022/9/182.6.1 识别对象对象是实际问题域中有意义的个体或概念实体,具有自己的状态和操作我们按照下面的步骤来识别对象:标识潜在的对象,
11、选择名词从标识的对象中筛选对象:对象具有状态信息,具有有意义的操作,具有多个属性,属性和操作应该适合于所有对象,对象是软件需求模型的成分2022/9/182.6.2 识别对象的属性属性是对问题域中对象性质的刻画,属性决定了对象所有可能的状态信息,我们需要识别出所有有用的属性识别属性应注意的问题如果一个实体独立存在更有意义,应该识别为对象将描述外部不可见状态的属性删除不要保存导出属性,比如矩形的面积需求分析的各个阶段是迭代完成的2022/9/182.6.3 识别对象的行为对象的行为可理解为对象应该展现的外部服务的总和通常而言,对象的行为可以分为三类:对象生命周期中的创建、维护和删除行为对象中的计
12、算性行为状态监视性行为(状态事件相应行为)创建操作结束对象生命周期2022/9/182.6.4 识别对象所属的类面向对象需求模型中众多对象可能属于不同的类,这些类之间往往存在着继承关系和部分-整体关系。我们需要识别一个对象所属的类并建立类之间的关系识别继承关系,寻找类之间的继承关系识别部分-整体关系2022/9/182.6.5 定义主题词我们根据需求信息识别出来的对象会很多,造成不易理解,所以我们应该对这些已分类对象进行组合,形成一一系列主题词:将关系比较密切的紧耦合类和对象划分为一组策略:将紧密联系的类按主题词划分根据主题词将需求分析划至不同小组逐步细分对话框1对话框2对话框n人机接口由多个
13、类构成人机接口2022/9/183 面向对象的设计(OOD)面向对象的设计(Object-Oriented Design)是OOA和OOP之间的中间环节OOD的作用是对OOA的分析结果按照编程模型的形式做进一步的规范化整理,以便能够使OOP直接使用实际上OOA相当于对现实世界的直接抽象,即分析建模,而OOD是对OOA的结果按照计算机数据结构的要求进行规范化,是设计建模2022/9/183.1 OOD的目标和过程OOD的目标是建立可实现的系统模型OOD的过程是完善OOA的成果,细化分析,结合实现技术、实现环境考虑,比如采用什么平台,什么开发语言等OOD包括全局性设计解决策略(系统设计)和局部模型
14、细化(对象设计)两个方面2022/9/183.2 OOD的实现方法OOD通过管理程序内部的相互依赖,将程序分成块(对象),每个块的规模应该小到可以管理的程度,然后分别将各个块隐藏在接口后面,让他们只通过接口进行交流,从而便于编程的实现比如,在机床控制系统中,我们编写控制机床刀头步进的程序,我们只采用一个抽象接口,具体的实现由单独的类实现,这就考虑到了程序的设计而非现实2022/9/183.2 OOD的实现方法OOA与OOD的区别钻床控制刀头旋转刀头步进各种刀头旋转各种刀头步进抽象层实现层2022/9/183.3 OOD的七个准则模块化,对象即OOD方法中的模块支持过程和数据的抽象注意信息隐藏不
15、同对象之间应该采用低耦合的方式对象内部应该是高内聚设计的对象应该比较简单,容易开发和管理对象之间通讯的协议应该比较简单2022/9/183.4 OOD方法中的系统设计系统设计是问题求解及其解答的高级策略。系统设计决定了整个系统的结构和风格,是具体设计的基础2022/9/183.4.1 系统设计的基本内容系统设计从高层入手,逐步细化。系统设计的基本内容如下:将系统分解为子系统确定对象之间的并发性,分配处理器数据存贮管理设计全局资源处理,比如网络、USB接口等选择控制机制设计人机交互接口2022/9/183.5.1对象设计的原则开闭开闭原则(Open Closed Principle)对修改关闭,
16、对扩展开放就是在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展 在面向对象设计中,不允许更改的是系统的抽象层,而允许扩展的是系统的实现层 。比如,我们设计一个汽车引擎,那么对于不同的汽车引擎,我们可以扩展,但上层程序不变2022/9/183.5.2对象设计的原则-替换替换原则(Liskov Substitution Principle)子类可以替换父类由于子类是父类的扩展,因此父类能够具有的属性和方法子类都具有,因此子类可以替换父类的工作2022/9/183.5.3对象设计的原则-依赖依赖倒置原则(Dependency Inversion Principle)在进行业务设计时,
17、与特定业务有关的依赖关系应该尽量依赖接口和抽象类而不是具体类比如,Windows中对各种设备,包括打印机,串口、USB接口的操作都依赖于接口Open,Read,Write,Close等,而不是与具体的设备打交道,比如OpenPrint,ReadUsb2022/9/183.5.4对象设计的原则-接口分离接口分离原则(Interface Segregation Principle)使用多个专门的接口比使用单一的总接口要好。也就是说,一个类对另外一个类的依赖性应当是建立在最小的接口上比如,Get_Color,Get_Weight,Get_Height比一个Get_Status更加清晰2022/9/1
18、83.6 OOD方法中的对象设计对象设计包括:算法设计优化设计控制的实现调整继承关联的设计2022/9/183.7 OOD的步骤OOD的步骤如下:细化重组类细化和实现类间关系,明确其可见性增加属性,指定属性的类型与可见型分配职责,定义执行每个职责的方法对消息驱动的系统,明确消息传递方式利用设计模式进行局部设计画出详细的类图和时序图2022/9/183.8 面向对象分析和设计举例银行网络系统用户需求:设计支持银行网络的软件,银行网络包括人工出纳站和分行共享的自动出纳机每个分理处用自己的计算机保存各自的帐户,处理各自的事物各自分理处的出纳站与分理处计算机通信,出纳站录入帐户和事物数据自动出纳机与分
19、行计算机通信,分行计算机与拨款分理处结帐自动出纳机接收现金卡,与分行计算机通讯完成事务,发放现金,打印收据,保存记录2022/9/183.8.1 银行网络系统的图形表示银行网络系统的示意图自动出纳机自动出纳机自动出纳机分行计算机出纳站分理处计算机分理处计算机出纳站帐户帐户2022/9/183.8.2 建立对象模型构造对象模型首先要确定相关的对象类,对象包括物理实体和概念我们通过查找问题陈述中的名词来选择类需求说明选取名词暂定的类删除虚类类确定类的过程2022/9/183.8.2.1 确定对象对于银行系统,我们选取的名词包括:软件银行网络 出纳员 自动出纳机分行分理处 帐户 分行计算机用户现金卡
20、 现金 分理处计算机顾客记录 系统 事务数据收据帐户数据 分理处 事务确定对象后,我们根据规则筛选对象,去除重复类,模糊类,单独的属性,操作等2022/9/183.8.2.2 准备数据字典为所有建模实体准备一个数据字典,描述各个类型的含义,包括类的成员、方法,限制等比如:分理处:是银行分行的一个下属分支机构,拥有自己的出纳员与计算机系统,在自己的计算机上保存自己客户的帐户资料。用户可以通过分理处出纳员办理帐户,也可通过自动出纳机与分理处计算机相连,但是中间需要通过分行的计算机进行通讯2022/9/183.8.2.3 确定关联确定两个或多个类之间的相互依赖关系关联常用描述性动词或动词词组来表示银
21、行系统的陈述中的关联包括:银行网络包括出纳站和自动出纳站(聚集)分行共享自动出纳机分理处计算机保存帐户等2022/9/183.8.2.4 绘制初步的分析对象图 银行网络系统的初步对象图分行分理处帐户顾客分行计算机分理处计算机自动出纳机出纳站出纳员出纳事务现金卡远程事务组成拥有有所有通信所有所有拥有录入涉及涉及访问有认可录入2022/9/183.8.2.5 确定属性属性是个体对象的性质,通常用修饰性的名词词组来表示,我们必须借助于应用域的知识及对客观世界的知识才能够找到它们首先找出重要属性,并要为各个属性取有意义的名字比如:银行名,卡片号等2022/9/183.8.2.6 使用继承来细化类自底向
22、上:通过把现有类的共同性质一般化为父类,寻找具有相似的属性、关系或操作的类来发现继承,比如远程事务与出纳事务类似,可一般化为事务自顶向下:将现有的类细化为更具体的子类,比如将现金卡分解为卡片权限和现金卡2022/9/183.8.2.7 完善对象模型对象建模不可能一次就能保证模型是完全正确的,软件开发的整个过程就是一个不断完善的过程,我们需要做:查找多余的类查找丢失的关联等2022/9/183.8.3 建立动态模型1. 准备脚本 动态分析从寻找事件开始,然后确定各对象的可能事件顺序2. 确定事件 确定所有外部事件,事件包括所有来自或发往用户的信息、外部设备的信号、输入、转换和动作2022/9/1
23、83.8.3.1 银行系统的事件流图自动出纳机分行分理处顾客插入卡,输入密码,取现金,取卡显示,不可读卡,要求密码,数量分发现金,继续,不正确账户等确认卡的分理处,处理事务分理处事务成功、失败,分理处账户正确,不正确确认账户不正确的账号,事务成功、失败等2022/9/183.8.3.2 建立动态模型状态图3. 准备事件跟踪表 把脚本表示成一个事件跟踪表,即不同对象之间的时间排序表,每个对象占据一列4. 构造状态图 对各对象类建立状态图,反映对象接受和发送的事件,每个事件跟踪都对应于状态图中的一条路径2022/9/183.8.3.3 银行网络系统的状态图开始开始do:显示主屏检查do:要求密码核
24、对do:确认账户选择do:要求类型输数据do:要求数据不可读do:不可读卡取消do:取消信息账户错误do:错误信息失败do:失败信息卡片退出do:退卡片结束do:打印数据继续否?do:请求继续发现金do:发现金事务do:处理事务插卡片输入密码取卡片输入类型插卡片取消帐户错等5秒取消取消继续取现金事务成功取消密码错取消2022/9/183.8.4 建立功能模型确定输入值、输出值 输入、输出值是系统与外界之间的事件参数自动出纳机的输入输出值现金卡自动出纳机顾 客银行码卡号密码事务类型账户类型现金收据2022/9/183.8.4.1 建立功能模型的数据流图功能模型用来说明值是如何计算的,表明值之间的
25、依赖关系及相关的功能数据流图有助于表示功能的依赖关系,说明输出值是怎样从输入值得来的,通常按层次组织2022/9/183.8.4.2 数据流图自动出纳机“执行事务”处理的数据流图选择分理处选择卡确认密码选择帐户更新账户不正确银行码分行银行码银行码卡号无效卡号卡授权密码密码不正确密码不正确账户账户类型账户账户账户数量、事务类型2022/9/183.8.5 确定操作在建立对象模型时,确定了类、关联、结构和属性,还没有确定操作,只有建立了动态模型和功能模型之后,才可能确定类的操作2022/9/184. 面向对象编程(OOP)面向对象编程(Object-Oriented Program)是一种计算机编程架构其基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 优化资源配置的年度工作计划
- 为法学概论加分的试题及答案
- 2024年黑龙江建华区公益性岗位招聘笔试真题
- 2024年安徽相山水泥公司招聘笔试真题
- 法学概论考试形式与内容的结合研究试题及答案
- 软件设计师常考技能解析与试题及答案
- 河南省新乡市部分重点中学2025届七下数学期末统考模拟试题含解析
- 私募股权投资中的风险评估和管理试题及答案
- 界面用户反馈收集试题及答案
- 材料力学性能测试结果验证重点基础知识点
- 水利专项资金管理办法
- 2024年重庆市高考思想政治试卷真题(含答案解析)
- 部编人教版小学二年级语文下册(全册)教案
- 锅炉安装改造维修质量保证体系文件(手册+程序文件+表格+工艺文件汇编)-符合TSG 07-2019特种设备质量保证管理体系
- 急性呼吸窘迫综合征-课件
- 2024版兼职主播合作协议书
- 福建小凤鲜禽业有限公司100万羽蛋鸡养殖基地项目环境影响报告书
- 2023-2024学年广东省惠州市惠城区八年级(下)期末数学试卷(含答案)
- 2022-2023学年广东省广州市番禺区教科版(广州)四年级下册期末测试英语题卷(无答案)
- 纺纱厂管理制度
- 2024年福建省莆田市初中八年级教学质量检测生物试卷
评论
0/150
提交评论