下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.OOA/D面向对象:封装变化之物针对接口编码,而不是对实现应用程序中的每一个类只有一个改变的理由类是关于行为与功能的目的: 使用已被证实的OO设计原则形成更可维护、更具灵活性以及更易扩展的软件一、面向对象基本概念1.1 )对象对象 是要进行研究的任何事物。是运行期的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实体。1.2 )类类是具有相同或相似性质的对象的抽象(对某种类型的对象定义变量和方法的原型)。1.3 )类与对象的关系对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。一个对象所包含的所有数据和代码可以通过类来构造。1.4 )消息消息 是对象之间进行通信的一种规格说明
2、。一般它由三部分组成:接收消息的对象、消息名及实际变元。对象之间需要相互沟通,沟通的途径就是对象之间收发信息。消息内容包括接收消息的对象的标识,需要调用的函数的标识,以及必要的信息。消息传递的概念使得对现实世界的描述更容易。1.5)动态绑定动态绑定 是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。二、面向对象的特性 / 要素2.1)封装 (Encapsulation)封装 就是 事物抽象为类,把对外接口暴露,将实现和内部数据隐藏。2.2)继承 (Inheritance)继承 是让某个类型的对象获得另一个类型的对象的特征。继承性是子类自动共享父类数据结构和方
3、法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。2.3)多态 (Polymorphism)多态 是指 对象在不同时刻体现为不同类型的能力。多态的形式:? 基类继承式多态? 接口实现式多态.三、面向对象与面向过程有什么区别?一个核心区别是:如何分配职责。过程式是一系列命令和函数的连续调用,依赖贯穿整个项目;面向对象则将职责分配到专门的对象中,尽量减少依赖。四、 面向对象分析与设计基本概念4.1 )什么是分析(analysis)?分析 是对问题和需求的调查研究。4.2 )什么是设计(
4、design)?设计 是定义系统组成并组织组件间关系的过程。设计师满足需求的概念上的解决方案(在软件方面和硬件方面)分析和设计可以概括为:(分析是)做正确的事和(设计是)做正确的事4.3)面向对象分析在面向 对象分析 ( object-oriented analysis)过程中, 强调在问题领域内发现和描述对象(或概念) 。4.4)面向对象设计在面向 对象设计 ( object-orienteddesign ,简称对象设计)过程中,强调 定义软件对象以及它们如何协作以实现需求 。4.5)职责 :引起类变化的原因 。4.6)内聚 :一个模块内部各成分之间相关联程度的度量。4.7)耦合 :类依赖其
5、他类4.8)正交 :将职责相关的组件紧紧组合在一起,与外部系统环境隔开,保持独立。五、 OOA基本步骤在用 OOA具体地分析一个事物时,大致上遵循如下五个基本步骤:第一步, 确定对象和类 。这里所说的对象是对数据及其处理方式的抽象,它反映了系统保存和处理现实世界中某些事物的信息的能力。类是多个对象的共同属性和方法集合的描述,它包括如何在一个类中建立一个新对象的描述。第二步, 确定结构 ( structure)。结构是指问题域的复杂性和连接关系。类成员结构反映了泛化- 特化关系,整体 - 部分结构反映整体和局部之间的关系。第三步, 确定主题 ( subject)。主题是指事物的总体概貌和总体分析
6、模型。第四步, 确定属性 ( attribute)。属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。第五步, 确定方法 ( method)。方法是在收到消息后必须进行的一些处理方法:方法要在图中定义,并在对象的存储中指定。对于每个对象和结构来说,那些用来增加、修改、删除和选择一个方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的。五、 面向对象设计原则设计模式源自面向对象原则。6.1 )单一职责原则(SRP) 一个类,只有一个引起它变化的原因。.6.2 )开放 - 封闭原则 (OCP) 软件实体应该是( 对外 ) 可
7、扩展,(对内) 不可修改 。也就是说,对扩展是开放的,而对修改是封闭的。 对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。 对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。6.3 )李氏替换原则(LSP)李氏替换原则(Liskov Substitution Principle LSP)是子类型必须能够完全替换其父类型(从逻辑上,而不是从语法上) 。如:正方形为长方形的特例,如果我们用长方形extends 正方形来新建长方形类,语义上就混乱了,容易产生问题。而如果用四方形作为共同的基类,则解决了问题。LSP 是继承复用的基石,只有当衍
8、生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开- 闭”原则的补充。实现“开- 闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。6.4 )依赖倒置原则(DIP)也称作控制反转,缩写为IoC("Inversion of Control"),就是 要依赖于抽象,不要依赖于具体。 面向接口编程 高层模块不应该依赖于低层模块,二者都应该依赖于抽象。 抽象不应该依赖于细节,细节应该依赖于抽象。 相对于结构化方法而言6.5 )接口隔
9、离原则(ISP) 使用多个专门的接口比使用单一的接口好; 一个类对另外一个类的依赖性应当是建立在最小的接口上的; 一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染; 接口若要稳定,就应承担较少责任,本原则同时符合单一职责原则; 可以合理利用接口的继承; 同一个类可以同时实现多个接口,站在调用者的角度,不同的接口代表不同的关注点,不同的职责,甚至是不同的角色。6.6 、合成 / 聚合复用原则(Composite/Aggregate Reuse Principle, CARP)经常又叫做 合成复用原则,是在一个新的对象里
10、面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对的委派达到复用已有功能的目的。它的设计原则是:要尽量使用合成/ 聚合,尽量不要使用继承。6.7 、最小知识原则(Principle of Least Knowledge , PLK ,也叫迪米特法则)不要和陌生人说话。七、面向对象六视点7.1 )(代码)复用(Reusibility)将重复的代码封装到类的方法中提供调用。 软件设计最大的敌人是重复。 重复的代码会导致解决方案蔓延。 复用:? 细粒度? 封装.? 高内聚 相关模式:? Prototype 模式? Proxy 模式如何提高软件的复用性?? 方法级? 重构之方法提取?
11、辅助方法? 利用静态工厂复用对象的创建逻辑? 对象级? 遵循单一职责原则? 合理的封装? 辅助类? AOP(面向方面编程)? 模块级? 根据依赖关系划分包?复用的粒度就是发布的粒度(The granule of reuse is the granule of release.)? 一个包中的所有类应该是共同复用的7.2 )(类可)扩展(Extensibility) 不修改原有代码增加新的功能,谓之扩展 实现扩展的方式:? 利用继承 实现扩展? 利用组合 实现扩展? 利用继承和组合 实现扩展? 利用抽象 实现扩展 相关设计模式? Decorator 模式? Visitor 模式? Proxy 模
12、式7.3 )(职责)分离(Separability) 软件设计需重视职责的分离 分离需与抽象结合,实现依赖的解耦 职责分离体现了? 单一职责原则? 接口隔离原则 职责分离表现为? 如何定义职责? 如何分解职责? 如何抽象职责 分离的目标:? 分离变与不变? 分离接口与实现? 分离数据与行为. 相关设计模式? Factory Method 模式? Bridge 模式? Iterator 模式7.4 )(封装)变化(Change) 对变化点进行封装 封装变化的核心是抽象? 封装创建的变化? 封装结构的变化? 封装行为的变化 解决变化应遵循:? 开放 - 封闭原则? 依赖倒置原则 封装变化的本质是隔离变化 隔离变化? 通过分离? 通过抽象? 依赖注入 相关模式? Factory Method 模式?Abstract Factory模式? Strategy 模式7.5 )(设计)简约(Simplicity) 简约需遵循:? KISS 原则? 场景驱动设计? 避免设计过度 如何实现简约:? 封装有利于简约:职责的封装? 继承有利于简约:职责的复用? 多态有利于简约:职责的委托 简约不等于简陋,等于简单加优雅 简约需要重构和精益求精 如何考量简约?? 可复用性? 可扩展性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Neryl-acetate-Standard-生命科学试剂-MCE
- 山东血液净化护理知识竞赛考试题库(含答案)
- 角度调制与解调课程设计
- 校车安全行驶路线及运行方案
- 高中人际技巧课程设计
- php课程设计贴吧贴吧
- 湖州师范学院《中学思想政治教学论》2022-2023学年第一学期期末试卷
- 建筑安全评价课程设计
- 辣椒的历史课程设计
- 校园全光网(POL)技术方案
- 《食品添加剂应用技术》第二版 课件 任务5.4 增味剂的使用
- 2024年安徽省投资集团控股限公司社会招聘易考易错模拟试题(共500题)试卷后附参考答案
- PEP人教版小学英语六年级上册教案 全册
- 医院医疗废物处置及分类测试题及答案
- 模拟电子技术智慧树知到期末考试答案章节答案2024年温州医科大学
- 24春国家开放大学《现代教育原理》期末大作业参考答案
- 反恐防暴反恐防暴安全教育
- 2《登泰山记》公开课一等奖创新教学设计统编版必修上册
- 夹脊穴的穴位注射疗法
- 2024年共青团入团考试题库(附答案)
- 系统思维与系统决策:系统动力学智慧树知到期末考试答案2024年
评论
0/150
提交评论