• 展开微博窗口
  • QQ:52619941
  • 微信:cnmemory
  • 展开分类目录
  • 还没有账号?

Memory

浅谈面向对象与代码可读性

你是否能读懂下面这段代码呢,反正我是看不懂。

<?php
class MakeLove
{
    
    //Current piston motion frequency
    private $frequency 0;
    //Max piston motion frequency
    private $maxFrequency 0;
    //evaluation
    private $evaluation;
    
    public function MakeLove($maxFrequency$autoStart true)
    {
        //How long can you? it means max piston motion frequency
        $this->maxFrequency $maxFrequency;
        
        //Come on man, enjoy yourself
        if ($autoStart)
            $this->start();
    }
    
    //How to start?
    public function start()
    {
        //Hmm..Ah..ah..ah..Oh
        while ($this->xxoo()) {
            //oh, yeah, "I love you", the man said.
            if ($this->hasDone())
                break;
        }
        
        //Smoking.
        $this->evaluation $this->finish();
    }
    
    //Make love is a movement of the piston
    public function xxoo()
    {
        //so we can see here is the piston motion
        $this->pistonMotion();
        
        //and always run
        return true;
    }
    
    //Just a simple example
    public function pistonMotion()
    {
        $this->frequency++;
    }
    
    //Game over when you have ejaculation
    public function hasDone()
    {
        if ($this->frequency >= $this->maxFrequency)
            return true;
        return false;
    }
    
    //Give you an evaluation, no thx :P
    public function finish()
    {
        if ($this->maxFrequency 60) {
            return "You're come too soon";
        } else if ($this->maxFrequency >= 60 && $this->maxFrequency <= 80) {
            return "Just so-so";
        } else if ($this->maxFrequency >= 80 && $this->maxFrequency 100) {
            return "You're a real man";
        } else {
            return "Oh my god! You're not a man";
        }
        return false;
    }
    
    public function __get($p)
    {
        if (isset($this->$p))
            return $this->$p;
        return null;
    }
    
    public function __set($p$v)
    {
        if (isset($this->$p))
            $this->$p $v;
        return false;
    }
}
//Normally my max frequency is 200
$myFrequency 200;
//Today, I wanna make love with my girlfriend
$makelove    = new MakeLove($myFrequency);
//You'll see...
echo $makelove->evaluation;
//My girlfriend wanna do that once again, Although I feel so tired, But...
echo "<br/>";
//Fighting capacity decline
$myFrequency            90;
$makelove->maxFrequency $myFrequency;
//Fighting,fighting,fighting
$makelove->start();
//see you tomorrow
echo $makelove->evaluation;
?>

总结:(土豪们权且当做娱乐)

首先说说面向对象的优点,简单来说就是易维护,可复用,效率高,方便拓展

譬如说上面的MakeLove,如果采用面向过程,代码量无疑倍增,且维护起来不方面,如果你不小心遇见传说中的一夜十次郎,只能默默流泪,而采用面向对象来实现,将一件事物抽象成一个个步骤,从开始到结束,进而使得代码逻辑更接近人类的思考方式,提高编码的效率,提升代码的可读性。

在上述例子中,我们将客观的事物进行分解,封装成一个抽象的类,把每件要做的事分布在不同的模块中,提高代码的重用性,就如“The boy's girfriend wanna do that again”,我们仅仅只需要再次start()而已,另外,由于类的封装性、继承性和多态性,假设需要改变原来的需求,所做的修改也仅仅只是在类中的模块完成,从而大大节约了时间和成本。

那么一段优秀的代码不仅仅只是让机器读懂,更应该让程序员读懂,所以代码可读性也是度量程序质量中一个不可或缺的指标,规范的命名以及注释能够有效的提高代码的可读性,每个方法中清晰表达出你的意图,尽量做到一个方法只做一件事情,而不是在同一个方法中做了很多事,举个例子,比如说XXOO,你得先脱下衣服,做一些准备工作,然后就开始进入正题,你把这些统统都归到一个方法中去完成,一个复杂的问题出现了,万一有的人心急,不脱衣服直接进入正题怎么办?

程序设计是一门很深的学问,我只翻开了封面却未曾翻完目录。

码字很辛苦,转载请注明来自雨林寒舍《浅谈面向对象与代码可读性》

评论

  1. xujixuji123 #1

    纳尼~

    回复
    2014-12-19
  2. 随风漂流的星光 #2

    仔细看下说得真的很有道理

    回复
    2014-11-10
  3. 灰常记忆 #3

    我是完全看不懂!

    回复
    2014-08-31
  4. GethinAnthony #4

    下面说的话好严肃。可是看代码差点没笑喷!

    回复
    2014-08-30
    • 老虎

      程序设计是一门很深的学问,我只翻开了封面却未曾翻完目录。

      回复
      2014-08-31