OOP:(Object Oriented Programming),面向对象的程序设计。所谓“对象”在显式支持面向对象的语言中,一般是指类在内存中装载的实例,具有相关的成员变量和成员函数(也称为:方法)。
OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。
特征一 封装
定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。
目的:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,特定的访问权限来使用类的成员。
基本要求:属性私有化,对每个属性提供getter和setter方法.
特征二 继承
目的:代码复用,并在无需重新编写原来的类的情况下对这些功能进行扩展。
继承的实现方式又分实现继承,接口继承.,可视继承
实现继承是指使用基类的属性和方法而无需额外编码的能力;
接口继承是指仅使用属性和方法的名称、子类必须提供实现的能力;
可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。
特征三 多态
定义:相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。
实现多态,重写和重载.
[ 重载,多态在编译期的表现形式。出现在一个类中,判定重载的条件只有方法名一致,方法形参列表不同。其他的(如 返回值,访问修饰符)都不可以判定。
重写,多态在运行期的表现形式。出现在子父类,实现类与接口中。判定重载有一个规律:“两同两小一大”
两同:方法名和形参列表一致;
两小:抛出的异常和返回值相容于被重写的方法.(一旦返回值是基本数据类型,
那重写的方法返回值必须一致或者是Object)
一大:访问修饰符大于等于被重写方法。
注意:对于重写而言,只有可见的实例方法才可以被重写。静态方法和私有方法都是隐藏,不是重写!]
目的:增强程序的可扩展性及可维护性。
需要注意的是,子类重写父类方法时,修饰符权限不能比父类严格.
特征四 抽象
在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象。比如水果,由重量.体积等共性,却没有特性(香蕉,苹果)
抽象和封装相似而又不同,封装考虑内部实现,抽象考虑的是外部行为.封装是屏蔽细节,抽象是提取共性.
开闭原则(Open-Closed Principle, OCP)
软件实体应该对扩展开放,对修改(对已有软件模块、特别是最重要抽象层模块的的更改)关闭。
单一职责原则SRP(Single Responsibility Principle)
功能描述对象单一,不能复杂.
里氏代换原则(对于继承)(Liskov Substitution Principle,LSP)
继承必须确保超类所拥有的性质在子类中仍然成立
接口分离原则(the Interface Segregation Principle ISP)
一个类对另外一个类的依赖性应当是建立在最小的接口上的。
迪米特法则(对于封装)(Law of Demeter LoD)又叫做最少知识原则(Least Knowledge Principle,LKP)
对象间尽量最少了解,彻底将API接口和具体实现相分离,模块间仅仅通过API进行通信。迪米特法则的初衷在于降低类之间的耦合,也可能在一定程度上增加系统复杂度.
合成/聚合复用原则(对于继承)(Composite/Aggregate Reuse Principle,CARP)
在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。
依赖倒置原则(the Dependency Inversion Principle DIP)
抽象不应当依赖于细节,细节应当依赖于抽象.程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
另外:常说的OOP三大特征五大原则就是指其中的 :
封装,继承,多态.
1、单一职责原则;
2、开放闭合原则;
3、里氏替换原则;
4、依赖倒置原则;
5、接口隔离原则。