为什么采用面向对象编程
解决问题更容易
设计计算机是为了解决人类的问题。这里有一个称为动态编程的过程,这是一种将大问题拆解为小问题的技术。其策略是先解决各个较小的问题,然后把所有结果汇总在一起形成一个更大的解决方案。
模块化
把一个问题分解为小的子问题,这个过程就是模块化过程。
类与对象
分解一个复杂问题会把它变换成多个简单的子问题,不过你需要有一种方法来组织这些模块,让它们相互协作共同处理所要解决的大问题。一种方法是,把一个模块看做是相关函数的集合。在编程中,这些模块称为类。类本身由两大部分组成,分别称为属性和方法。属性是不同类型的数据对象,如数字、字符串、null和布尔类型。通常数据作为抽象数据类型存储,如存储为变量、常量和数组;方法是处理这些数据的函数。
单一职责原则
可以把类看作是有共同特征的对象的集合。特征的共同性并不是指这些对象是相同的,而是指它们都处理模块(即类)的共同问题。
php中的构造函数
php类有一个特有的特性:使用__construct{}语句作为构造函数。大多数计算机语言都使用类名作为构造函数名;不过,使用__construct{}语句有一个好处,可以消除对函数用途的疑问,也就是说,可以清楚地看出它是一个构造函数。
顺序和过程式编程有什么问题
东西没损坏的话,那就别去修理它了,很多人都有这种想法。如果一个方案可行,你可能会想当然的接受这个方案。不过,这种态度绝对是取得进展和提升的障碍。比如说,如果要从一个地方到另一个地方,可以步行过去。不过,要是距离很远,比如从一个国家的最南端到最北端,坐飞机前往会好很多。OOP和设计模式相对于顺序和过程式编程就相当于坐飞机相对于步行。
顺序编程
大多数程序员开始编程时都是逐条地写语句,建立一系列代码来执行一个程序。 例如,下面就是一个很好的php顺序程序
$a = 1;
$b = 2;
$c = $a + $b;
echo $c;
将2个数相加对于PHP来说是一个很简单的问题,只要是处理简单的问题,就可以使用简单的解决方案。
过程式编程
随着程序员开始写越来越长的程序来完成更复杂的任务,这些顺序代码就会开始相互纠缠,变成所谓的意大利面式代码。goto语句运行程序员在程序中跳转来完成一个过程,这样很容易陷入混乱。
过程编程引入了函数。function就是一个小对象,可以利用一条语句调用某个操作来完成一个序列。例如,下面是以上顺序程序的过程式版本。
function add($a, $b) {
$c = $a + $b;
echo $c;
}
add(1, 2);
过程允许程序员将代码序列分组为模块。不过,过程编程没有提供类(利用类,编程任务可以打包到对象)。类对象可以处理自己的数据结构,这是函数无法单独做到的。
因此,如果采用顺序编程,完成大型任务需要很长的序列。另外采用过程编程时,团队合作也比较困难,因为不同的团队成员无法像oop那样轻松地处理独立但相互关联的类。