标签:
为什么使用面向对象编程
因为面向对象编程基于7大原则编写, 这让用面向对象编程编写的程序有了可扩展,可维护,可复用的效果,更灵活一些。
7大原则:
(网上看的,解释是自己的理解,不一定对,标准的请上网上)
1、单一职责原则SRP(Single Responsibility Principle)
一个类只负责它本身的功能 这样可以降低类的复杂度,每个类都有了专属的作用,阅读,修改,排错时都更容易
2、开放封闭原则OCP(Open-Close Principle)
就是写基本代码时写好一个基本的架构,然后可以在需要的时候添加新的类来完成新的功能或要求,但是原有的代码不进用(也最好不能)行更改。就是只能 加,不能改。(为了未来的要求而写)
3、里氏替换原则(the Liskov Substitution Principle LSP)
子类应当可以替换父类并出现在父类能够出现的任何地方。
4、依赖倒转原则(the Dependency Inversion Principle DIP)
(没看懂,大意好像是让具体实现功能的类依赖抽象类(父类)或接口,接口和抽象类是更底层的代码,而实现功能的是高层类)
具体依赖抽象,上层依赖下层。假设B是较A低的模块,但B需要使用到A的功能,
这个时候,B不应当直接使用A中的具体类: 而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到
了 依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。通过上层模块难以避免依赖下层模块,假如B也直接依赖A的实现,那么就可 能造成循环依赖。一个常见的问题就是编译A模块时需要直接包含到B模块的cpp文件,而编译B时同样要直接包含到A的cpp文件。
5、接口分离原则(the Interface Segregation Principle ISP)
(一样不太懂)
模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来。即面向接口编程
6、“迪米特”法则
(。。。。。。。。是类应该尽量独立的意思吗? 应该就是上边的接口分离类似,一个隔离模块,一个让类尽可能独立,功能单一性? 单一职责原则?)
又叫最少知识原则,就是说,一个对象应当对其他对象有尽可能少的了解
① 在类的划分上,应该创建有弱耦合的类;
② 在类的结构设计上,每一个类都应当尽量降低成员的访问权限;
③ 在类的设计上,只要有可能,一个类应当设计成不变类;
④ 在对其他类的引用上,一个对象对其它对象的引用应当降到最低;
⑤ 尽量降低类的访问权限;
⑥ 谨慎使用序列化功能;
⑦ 不要暴露类成员,而应该提供相应的访问器(属性)。
7、.组合/聚合原则(泛型集合的类型是一个类,这个类又有其他类的集合包含在里面,这个算么?)
又叫合成复用原则。原则就是在一个新的对象里面通过关联关系(包括组合关系和聚合关系)使用一些已有的对象,使之成为新对象的一部分,新对象通过委派调用已有对象的方法达到复用其已有功能的目的。也就是,要尽量使用类的合成复用,尽量不要使用继承。
就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过向这些对象的委派达到复用已有功能的目的。这个原则有一个简短的描述:要尽量使用合成、聚合,尽量不要使用继承。
1) 新对象存取成分对象的唯一方法是通过成分对象的接口
2) 这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不到的
3) 这种复用可以在运行时间内动态进行,新对象可以动态的引用与成分对象类型相同的对象
4) 合成、聚合可以应用到任何环境中去,而继承只能应用到一些有限环境中去
5) 导致错误的使用合成、聚合与继承的一个常见原因是错误的把“Has-a”关系当作“Is-a”关系。如果两个类是“Has-a”关系那么应使用合成、聚合,如果是“Is-a”关系那么可使用继承
在面向对象设计中,可以通过两种基本方法在不同的环境中复用已有的设计和实现,即通过组合/聚合关系或通过继承。
1) 继承复用:实现简单,易于扩展。破坏系统的封装性,从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性;只能在有限的环境中使用。(“白箱”复用 )
2) 组合/聚合复用:耦合度相对较低,选择性地调用成员对象的操作;可以在运行时动态进行。(“黑箱”复用 )
组合/聚合可以使系统更加灵活,类与类之间的耦合度降低,一个类的变化对其他类造成的影响相对较少,因此一般首选使用组合/聚合来实现复用;
其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理解,降低复杂度,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继承复用。
总结面向对象编程:就是面向对象(对像:男朋友或女朋友),他/她的要求才是你编程的方向,你得面向他/她才行,或者说是面向要求编程,对象就是一个实实在在的存在,你要考虑到他的各种需求。
那为什么要面向对象编程那:就是考虑了一些可能的情况,在将来需要的时候更容易完成,在单一的,隔离,开放封闭等这样的基础下复用性更强,更简单。
对于面向对象的7大原则的理解,我还差的太远,只是刚知道而已,更别提面向对象编程了,在做书上的项目时就经常疑惑,自己写的好像不是面向对象。
不过这篇文章我会随着理解的加深,一点点的补上自己对7大原则的看法,也许得一直写吧。
标签:
原文地址:http://www.cnblogs.com/xiangtianxiayu/p/4827736.html