面向对象的基本特征
-
封装
简单来讲:将显示世界事物抽象成计算机领域中的对象,对象同时具有属性和行为,这种抽象就是封装。
封装的一个重要特征:数据隐藏。对象之对外提供与其他对象交互的必要接口,而将自身的某些属性和实现细节对外隐藏。
通过这种方式,队形对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
着用就在确保正常交互的前提下,保证了安全性。
-
继承
面型对象的一个重要特征时复用性,继承时实现复用性的一个重要手段。
可以在不重复编写已实现的功能的前提下,对功能进行复用和拓展。
继承概念的实现方式有二类:实现继承和接口继承。
- 实现继承是指直接使用基类的属性和方法而无需额编码的能力。
- 接口继承是指使用属性和方法的名称、但是子类必须提供实现的功能
-
多态
当存在继承关系时,允许将父类对象看成为和它的一个或多个子类对象等同。这样,可以根据当前赋给父亲对象的子对象的具体特征以不同的方式进行运行。
多态的几个前提:
- 要有继承关系。
- 要有方法重写。
- 要有父亲引用指向子类对象。
多态的好处:
- 提高了代码的维护性(继承保存)
- 提高了代码扩展性(由多态保证)
- 不能使用子类的特有属性和行为。
五大基本原则
-
单一职责原则SRP(Single Responsibility Principle)
是指一个类的功能要单一,不能包罗万象。
-
开放封闭原则OCP(Open-close Principle)
一个模块在扩展性方面应该时开放的,而在更改性方面应该是封闭的。
比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,呢么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码。
这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。
-
替换原则(the Liskov Substitution principle LSP)
子类应当可以替换父类并出现在父类能够出现的任何地方。
比如:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工,也不管是总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。
-
依赖原则(the Dependency Inversion Principle DIP)
具体依赖抽象,上次依赖下层。
假设B是较A低的模块,但B需要使用到A的功能,这个时候,B不应当直接使用A中的具体类: 而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口: 这样就达到了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。
通过上层模块难以避免依赖下层模块,假如B也直接依赖A的实现,那么就可能造成循环依赖。
-
接口分离原则(the Interface Segregation Principle ISP)
模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来。