zoukankan      html  css  js  c++  java
  • 避免OOP的形式,POP的思想

    好久没发技术性文章了,今天在21PHP里看到有位兄弟发了这贴子,转了过来.对加强OOP的学习有些用
    ----------------------------------------------------------
    避免OOP的形式,POP的思想
    随着PHP对OOP(面向对象编程)支持的增强以及程序设计思想的发展,越来越多的PHP程序员走进了OOP的世界.通过简单的学习,大多数程序员都能

    快速的掌握OOP编程的基本技能.程序员们所写的代码里class,new等字符串也越来越多.但是作为程序员的你,是否陷入了一种OO形式,PO思想的

    编程陷阱呢?
    作为POP时代的程序员,为了实现计算一件房子的所有门的价格,他们会写这样一个函数.
    代码:
    /******************************************
    函数:priceOfHouseDoor($num,$price)
    功能:计算所有的门的价格总和
    参数:$num门的数量,$price每扇门的价格
    备注:surfchen@http://www.yubeinet.com/
    ******************************************/
    functionpriceHouseDoor($num,$price)
    {
    return$num*$price;
    }
    echopriceHouseDoor(2,5);//输出价格
    或者干脆来个更过程的:
    代码:
    $doors=2;//门数量
    $price=5;//每扇门的价格
    echo$doors*$price;//输出价格

    这是典型的POP.当了解了OOP后,很多人可能会改变实现这个功能的代码.或许,程序员们会这么写:
    代码:
    classhouse
    {
    /******************************************
    函数:getDoorPrice($num,$price)
    功能:计算所有的门的价格总和
    参数:$num门的数量,$price每扇门的价格
    备注:surfchen@http://www.yubeinet.com/
    ******************************************/
    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.mscto.com/PHP/2009022886968.html
  • 相关阅读:
    20170728xlVba SSC_TODAY
    卸载angular版本
    union 共用体
    bootstrap的粗认识
    结构体,结构体数组,结构体指针
    C语言的枚举
    nodeJS 的认识
    nodejs 平台搭建
    动态表单
    指针
  • 原文地址:https://www.cnblogs.com/yangjian/p/1573829.html
Copyright © 2011-2022 走看看