面向对象的理解
1、什么叫面向
?
面向
即看待。把我们所能客观看到的一切事物都抽象成一个对象。也就是所说的“万物皆对象”。其主要思想就是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在解决问题的过程中经历的步骤和行为。
通俗点:开发一套程序和装修一个房子一样,房子里电视、电脑、空调、冰箱;你都可以当做一个个实体,一个个对象。其实每个对象都有自己独特的功能职责,我们就是把每个独立的功能模块抽象成类,然后形成对象。一个系统会有大量的对象组成,这些对象之间都能够接收信息、处理数据和向其他对象发送信息等等相互作用。
2、什么是对象?
在我们PHP里对象
是数据类型中的一种,整型、浮点、布尔、字符串又叫标量类型,标量相对复合类型而言,即是只能有一个值。数组作为复合类型能存储多种类型的值,但是当我要形容某一类的事物,且事物中又有很多种行为动作,那么就很难表现了。然后对象
类型就应运而生。我们可以用对象来保存具体的叫什么名字、什么性别、会什么功夫的人。
总结:我们编写程序就是为了解决现实中的问题,而面向对象思想更符合人们处理较大项目的业务理解和代码开发。
三大特征
1、封装
封装可不是像函数那样的代码封装。封装更主要是将一个类的实现和使用进行分开,只保留部分属性和方法给开发人员使用。于是开发人员只需要关注这个类如何使用,而不用去关心具体的实现过程。而封装主要也有三个访问控制符来体现:public(公开的)、protected(受保护的)、private(私有的),同时也体现了安全性
2、继承
子类继承了父类,便自动继承了父类中所有的(public、protected)属性和方法。抽象类的存在就是为了继承,抽象类的定义往往就是提取了子类的公共属性和功能方法,以便子类继承使用。框架中(thinkphp5)的控制器、模型,定义时若继承了控制器基类、模型基类,便拥有了类似视图渲染、页面跳转、修改器、软删除等等功能。继承体现了代码的复用性或重用性
3、多态
子类继承了来自父类中的成员属性和方法。并多其方法进行实现(抽象、接口)或重写,于是多个子类中都具有相同的方法,但是却有了不同形态、不同结果的体现。多态增强了代码的灵活性和扩展性
五大基本原则
1.单一职责原则,指一个类的功能要单一,不能包罗万象。
2.替换原则。指子类可以替换父类并出现在父类能出现的任何地方。比如公司搞年会,所有员工都能参与抽奖,不管是新员工,还是老员工。
3.开放封闭原则,一个模块在更改性方面应该是封闭的,在扩展性方面应该是开放的。比如一个网络模块,原先只有服务端的功能,现在我要加入客户端的功能。
4.依赖倒置原则:就是要依赖于抽象,不要依赖于具体。简单的说,就是要对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块之间的耦合。
在面向过程开发中,上层依赖下层,当下层剧烈的发生变化时,上层也要发生变化,这样就导致了模块之间的耦合性太高,复用性降低,从而大大的增加了开发的成本。
然而面向对象就很好的解决了这个问题,一般情况下,抽象变化的几率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断的变化,只要抽象不变,客户端程序就不用去变化,这就大大降低了客户程序域实现细节的耦合度。
比如一个合资汽车公司现在要求开发一个自动驾驶系统,只要汽车上安装上这个系统,就可以实现无人驾驶,该系统可以在福特车系列和本田车系列上使用。
5.接口隔离原则:不同的模块要通过抽象接口隔离开,而不是通过具体的类强耦合。