面向对象的形式,面向过程的思想

从根本上理解面向对象
服务器君一共花费了665.459 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

随着PHP对OOP(面向对象编程)支持的增强以及程序设计思想的发展,越来越多的PHP程序员走进了OOP的世界。通过简单的学习,大多数程序员都能快速的掌握OOP编程的基本技能。程序员们所写的代码里class,new等字符串也越来越多。但是作为程序员的你,是否陷入了一种OO形式,PO思想的编程陷阱呢?

作为POP时代的程序员,为了实现计算一件房子的所有门的价格,他们会写这样一个函数。

/******************************************
函数:priceOfHouseDoor($num,$price)
功能:计算所有的门的价格总和
参数:$num门的数量,$price每扇门的价格
******************************************/
function priceHouseDoor($num,$price)
{
return $num*$price;
}
echo priceHouseDoor(2,5);//输出价格

或者干脆来个更过程的:

$doors=2;//门数量
$price=5;//每扇门的价格
echo $doors*$price;//输出价格

这是典型的POP。当了解了OOP后,很多人可能会改变实现这个功能的代码。或许,程序员们会这么写:

classhouse
{
/******************************************
函数:getDoorPrice($num,$price)
功能:计算所有的门的价格总和
参数:$num门的数量,$price每扇门的价格
******************************************/
functiongetDoorPrice($num,$price)
{
return$num*$price;
}
}
$house=newhouse;
echo $house->getDoorPrice(2,5);//输出价格

我们一下子就看出来,这段代码用到了OOP的代表--类和实例化。那么,这就是面向对象编程了吗?

我再仔细一看,发现这个类其实只不过是上面的priceOfHouseDoor($num,$price)函数的面向对象形式。

嗯,现在我们先探讨一下到底什么才叫面向对象编程。我的理解是:面向对象编程有两个核心内容。一是类,二是实例。类是对一类事物的抽象,而实例是这一类事物中的个体。而实例的属性(值)和方法(函数),则分别是这个个体的具体内容和动作。

我们再来看看上面的这个house类。它有一个方法,getDoorPrice($num,$price),引入了两个参数。一个是房子的门的数量,一个是房子门价。我们发现,当我们使用这个方法时,这两个值是临时构建的,并没有与房子形成任何的联系。在实际生活中,一个房子里的门与房子无任何联系,这是不可以理解的。正如我们所知道的,OOP其实是我们真实世界的一个缩影。所以,OOP中的房子和房子的门无任何联系,也是不可理解的,是非OO的思维。

那么,我们应该如何使用真正的OO来实现以上功能呢?请看以下代码:

classhouse
{
var$doors;//门的数量
var$pricePerDoors;//每扇门的价格
functionsetNumOfDoors($num){$this->doors=$num;}//设定门数量
functionsetPricePerDoor($price){$this->pricePerDoors=$price;}//设定每扇门的价格
/*************\
*获得门的价格*
\*************/
functiongetDoorPrice()
{
return($this->doors)*($this->pricePerDoors);
}
}
$house=newhouse;
$house->setNumOfDoors(2);//设定门数量
$house->setPricePerDoor(5);//设定每扇门的价格
echo$house->getDoorPrice();//输出

我们很明显地看到,以上代码的门的数量和价格房子已经结合在了一起。这才是真正的面向对象。

本文地址:http://www.nowamagic.net/librarys/veda/detail/1162,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/1162

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《编译原理(第2版)》 Alfred V. Aho (作者), Monica S.Lam (作者), 赵建华 (译者), 郑滔 (译者), 戴新宇 (译者)

《编译原理(第2版)》全面、深入地探讨了编译器设计方面的重要主题,包括词法分析、语法分析、语法制导定义和语法制导翻译、运行时刻环境、目标代码生成、代码优化技术、并行性检测以及过程间分析技术,并在相关章节中给出大量的实例。与上一版相比,《编译原理(第2版)》进行了全面的修订,涵盖了编译器开发方面的最新进展。每章中都提供了大量的系统及参考文献。《编译原理(第2版)》是编译原理课程方面的经典教材,内容丰富,适合作为高等院校计算机及相关专业本科生及研究生的编译原理课程的教材,也是广大技术人员的极佳参考读物。

更多计算机宝库...