面向对象
什么是面向对象
面向对象是一种优秀的软件设计思想,是相对于面向过程、面向切面等设计思想的一种软件设计理念。它的核心思想是运用更加贴近人类思维的方式去设计软件,将软件中的各个组件抽象成相应的类,再将这些类组装成我们所需的软件系统。
这里举个例子:假如用面向对象的方式设计一个电脑,我们会设计CPU类、硬盘类、显示器类、内存类等等,然后将这些类组合在一起设计成Computer类。
而面向过程的思想在解决问题时会将问题分解成一个个小的函数,然后按照某种顺序去执行这些方法,
当这些方法执行完毕,问题也就解决了。
三大基本特征和五项基本原则
● 面向对象的三大基本特征是:封装、继承和多态。正是基于这些特征,面向对象的开发语言才能拥有更好的可重用性、扩展性和维护性。
● 封装:将对象的实现细节隐藏起来,然后通过一些公共的方法向外部提供该对象的功能;
● 继承:继承是软件复用的一种重要手段(组合和代理也是代码复用的手段),子类继承父类之后将直接获得父类的属性和方法;
多态:对象可以赋给父类对象或者它实现的接口,但是运行时依然表现出子类或实现类的特征。
面向对象的五大原则如下:
● 单一职责原则(SRP):一个类专注于实现一个功能;
● 开闭原则(OCP):对象或实体应该对扩展开放,对修改封闭;
● 里氏替换原则(LSP):子类可以替换父类并且出现在父类能够出现的任何地方(这个原则就需要我们面向接口编程);
● 依赖倒置原则(DIP):高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象,抽象不应该依赖于具体实现,具体实现应该依赖于抽象;
● 接口隔离原则(ISP):使用多个专门的接口比使用单个接口要好的多:在实际编程中,为了减少接口的定义,将许多方法都放在一个接口中,最后发现,维护和实现接口的时候会花费很多精力,接口所定义的操作相当于对客户端的一种承诺,这种承诺当然是越少越好,越精练越好,过多的承诺带来的就是你的大量精力和时间去维护。不要把不相干的方法放在一个接口中定义。
另外还有迪米特原则和合成服用原则,也需要我们在设计系统和接口时考虑到。
迪米特法则:又叫最少知识法则,这个法则主张一个类要尽可能少地知道其他类地细节,并且尽可能少地和其他类进行通信交互,只和于自己有密切关系地类进行交互。
合成服用原则:合成服用原则又称为组合/聚合服用原则(Composite/Aggregate Reuse Principle):尽量采用组合(contains-a)、聚合(has-a)的方式而不是继承(is-a)的关系来达到软件