面向对象设计原则
来源:互联网 发布:高爆地雷升级数据 编辑:程序博客网 时间:2024/06/14 17:06
一:面向对象设计的目标
软件是一项复杂多变的工程,需求可能会变、试用场景会变,如何设计出一个好的框架是非常重要和必要的。通常试用可扩展性、灵活性、可插入性等三个维度评估设计的好坏。
a)可扩展性:新的功能模块很容易插入到系统中,而较小的改变或者影响旧系统。
b)灵活性:可以运行代码平稳修改,而不涉及到其它模块。
c)可插入性:很容易将一个类或者模块抽离出去,同时将一个相似的类或者模块加入进来。
二:实现策略
为了实现复杂多变及好的设计方案,面向对象编程要遵循下面五个基本原则:a)发现变化,封装变化 b)面向接口或者抽象类编程,而不是面对实现编程 c)分离变化维度,单一职责原则 d) 多使用动态绑定,少使用静态绑定,多使用组合,少使用继承。 e)创建和使用分离。
具体原则细节如下
2.1 发现变化,封装变化
原理: a)找出类中需要变化的模块,把它单独抽象出来,不要和不需要变化的模块混淆在一起。 b)把需要改变的部分抽取出来,以便以后轻易的改动和扩充这部分,而不影 响不变的部分。
举例:例如我们想抽象身份证信息,我们分析身份证信息包括姓名、性别、名族、出生、住址、,身份证号码、个人图像、签发机关、有效期限。仔细分析我们发现 姓名、性 别、名族、出生、住址、、身份证号、签发机关是不变的,一旦办理了身份证,这些信息是不会变的;个人图像,有效期限是会变化的,一旦身份证丢失了或者过期了就 需要重新办理,新办理的身份证只需要更新新的图像及有效期。在我们程序中就可以抽象一个身份证类,提供各种构造函数,支持初始化所有的字段。更新身份证的时候 只需要传入图像及有效期限即可。
2.2 面向接口或者抽象类编程,而不是面对实现编程
原理:a)抽象接口:抽象出固定却能描述一组任意行为的抽象期,这个抽象期就像抽象基类或者抽象基类或者接口,任意可能的行为就是可能的派生类。
b)针对接口的设计: 由于子模块之间依赖于固定的抽象,所以它对于更改是可以关闭的。
举例: 例如我们常见的微信支付功能,我们简单的认为一个支付流程包括以下步骤,绑定银行卡,选择想要支付的银行卡,输入支付金额,支付,等待支付结果。那微信就、可以把一个支付流程抽象成一个含有这些步骤的接口。而想要接入的银行,微信只需要根据支付流程及参照接入银行的api就可以接入特定的银行。这样的话,面向接口编程,接入的新银行,完成不影响就银行的使用。
2.3 分离变化维度,单一职责
原理:a)单一职责原则:一个类应该只有一个引起它变化的原因。b)如果你能想到一个或者多个动机去改变一个类,name这个类就会多余一个原则。
举例: 我们生活中常见的政府部门,它们也是有划分不同职责的,而不是混淆在一起,一个部门啥活都做。例如交警只负责和交通相关的工作;警察主要维护公共治等; 这样的好处就是分工明确。
2.4 动态绑定,多用组合、少用继承
原理:a)多使用组合和聚合,而不是使用继承达到目的。b)该原则就是在一个新的对象里使用一些已经有的对象,是之成为对象的一部分;新的对象通过这些对象的委派 达到复用已有功能的目的。
举例: 比我我们眼镜框有 赤、橙、黄、绿、青、蓝、紫七中颜色,镜片有圆形和方形两种。如果我们想要所有的眼镜对象[赤色圆眼镜、赤色方眼镜、橙色圆眼镜、橙色方眼镜、。。。]。 如果使用继承实现的话,需要7*2=14个类,而如果采用组合实现的话,把眼镜框抽象成类,将眼镜片抽象成类,只需要7+2=9个类。
2.5 对象的创建和使用分离
原理:a)对象的时候和创建分离,要么构造对象要么使用对象。这样做的好处就是降低耦合加强内聚。
举例: 如果你吃了一只鸡,觉得味道不错,你难道一定要见到那只母鸡。
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 面向对象设计原则
- 二叉树的中序非递归遍历c语言版
- running
- tree
- 【NOIP2016提高A组五校联考1】挖金矿
- java多线程常用方法区别--备忘笔记
- 面向对象设计原则
- 获取http的gzip内容并解压相关问题(续)
- eclipse Access restriction required library rt.jar
- 【DXP】File type not recognised
- NOIP模拟题 2016.10.5 [Trie] [数学] [二分答案] [杂题] [复杂状态DP]
- PHP解析网页视频
- Spark支持四种方式从数据库中读取数据
- JSP动态获取部署的应用名
- PHP实现使用优酷土豆视频地址获取swf播放器分享地址