面向对象设计原则ppt课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《面向对象设计原则ppt课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 设计 原则 ppt 课件
- 资源描述:
-
1、面向对象设计原则目标 重新认识一下面向对象 了解面向对象设计原则重新认识面向对象 通过面向对象编程语言(OOPL)认识到的面向对象, 并不是面向对象的全部,甚至只是浅陋的面向对象 不是使用了面向对象语言就是实现了面向对象的设计和开发 我们不能依赖编程语言的面向对象机制来掌握面向对象 OOPL的三大机制“封装、继承、多态”可以表达面向对 象的概念,但是没有刻画出面向对象的核心精神。 可以用这三大机制做出好的“面向对象设计”也可以做出差的“面向对象的设计”.重新认识面向对象 OOPL没有回答面向对象的根本性问题-我们为什么要面向对象?我们应该怎样实现好的面向对象?我们应该遵循什么样的原则? 任何一
2、个严肃的面向对象程序员都要系统的学习面向对象知识,单纯从编程语言上获得的面向对象知识,不能够胜任面向对象设计与开发.举一个例子示例场景: 我们需要设计一个人事管理系统,其中的一个功能是对各种不同的类型员工,计算其当月的工资-不同类型的员工,拥有不同的薪金计算制度。机构化做法1。 获得人事系统中所有可能的员工类型2。 根据不同的员工类型所对应的不同薪金制度,计算其工资 enum EmployeeType Engineer; Sales; Manager; /计算工资程序If(type=EmployeeType.Enginner)else if (type=EmployeeType.Sales)面
3、向对象设计1 根据不同员工设计不同的类,并使这些类继承自一个Employee抽象类,其中有一个抽象方法getSalary.2 在各个不同的员工中,根据自己的薪金制度,重写(override)getSalary方法abstract class Employee public abstract int getSalary();class Sales extends Employeepublic int getSalary().class Engineer extends Employeepublic int getSalary()/ 显示工资程序Employee e = emFactory.get
4、Employee(id);System.out.println(e.getSalary();现在需求变了示例场景: 随着业务的规模的拓展,又出现了更多类型的员工,比如钟点工、计件工等等,这对系统提出了新的挑战原有的程序要改变。结构化做法: 几乎所有涉及到员工类型的地方都要做改变这些代码都要重新编译重新部署面向对象做法: 只要添加新的员工类,让其继承自Employee抽象方法,并重写getSalary()方法,然后在EmployeeFactory.getEmployee()方法中根据相关条件产生新的员工类型就可以了。其他地方不需要改变.重新认识对于前面的例子,从宏观上看,面向对象的构建方式跟更能
5、适应软件的变化,能将变化所带来的影响减小到最小。从微观层面来看,面向对象的方式更强调各个类的“责任”,新增员工类型不会影响原来员工类型的实现代码这是符合真实世界的,也更能控制变化所影响的范围,毕竟Engineer类不应该为新增的“钟点工”来买单对象是什么? - 从概念层面讲,对象是某种责任的抽象。 - 从规格层面讲,对象是一系列可以被其他对象使用的接口(API)。 - 从语言实现层面来看,对象封装了代码和数据(行为和状态)。有了这些认识之后,怎样才能设计“好的面向对象”? - 遵循一定的面向对象设计原则 - 熟悉一些经典的面向对象设计模式.面向对象设计原则 针对接口编程,而不是针对实现编程 -
6、客户无需知道所使用对象的特定类型,只需知道对象拥有客户所期望的接口 有限使用组合,而不是类继承 -类继承通常为“白箱复用”,对象组合通常成为“黑箱复用”。继承在某种程度上破坏了封装性,子类父类耦合度高;而对象组合则只要求被组合对象具有良好定义的接口,耦合度低。 封装变化点 - 使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。具体的设计原则 单一职责原则(SRP) 开放封闭原则(OCP) Liskov 替换原则(LSP) 依赖倒置原则(DIP) 接口隔离原则(ISP) 单一职责原则l就一个类而言应该仅有一个引起它变化的原因
7、。 当需求变化时,该变化就会反映为类的职责变化。如果一个类承担了多个职责,那么引起它变化的原因就有多个。 如果一个类承担的职责过多,就等于把这些职责耦合在了一起。一个职责的变化就可能会削弱,或者抑制这个类完成其他职责的能力. 如果需求变化总是引起多个职责同时变化,那么我们就不必分离它们 推论:只有变化实际发生时才有意义.开放封闭原则 OCP软件实体(类、模块、函数等等)应该是可以扩展的,但是不可以修改的 - 对扩展是开放的。当需求 变化时,我们可以对模块进行扩展,使其具有能够满足那些变化的行为。 - 对更改是封闭的。对模块进行修改时不必改动模块的源代码(并非绝对,但是应该是最小限度)例子Int
8、erface Shapepublic void draw()class Square extends Shapepublic void draw()class Circle extends Shapepublic void draw()class Test public static void main(String args) List shapes = /绘制所有图形 Iterator iter = shapes.iterator();while(iter.hasNext() (Shape)iter.next().draw(); 如果要绘制一个新的形状,只需要增加一个新的Shape的派生类
展开阅读全文