面向對象的認識---如何找出類

客串:屌絲的坑人表單神器數據庫那點事兒探討負載均衡php

推薦:手把手教你作關鍵詞匹配項目(搜索引擎)---- 第一天(起點)、手把手教你作關鍵詞匹配項目(搜索引擎)---- 第十九天(最新)html

 

同類文章:面向對象的認識----新生的初識面向對象的番外----思想的夢遊篇(1)sql

 

吐槽:一上班收到博客園的來信說到,「咱們會綜合多方面的因素進行考慮,對於首頁的管理咱們正在努力改進。」,深感欣慰, 這就是不一樣的答覆,有不一樣的效果,我也但願博客園能說到作到。
最近那些童鞋們做業不作,要求卻是蠻多的,其中一位提到培訓下Mysql語句方面的知識,即SQL語句的使用。我直接回了句:先完成上次培訓的做業先。
最近也是爲了要培訓的效果有所成效,當時那位管理級別的就說要搞懲罰措施,對那些不完成做業的進行懲罰,懲罰無外乎就是那些吃吃喝喝的,我當時就說了,學習是自覺的事情,懲罰措施不用搞,當時他就直接反駁說到,你搞了兩年,你看哪一個自覺了,你就一坑貨。我只好無語了,坑壞了下一代的花花朵朵咋辦……
也許是心地太好,我就提倡到不交做業的就給1元錢吧,天天早上拿個小碗遇到那些童鞋就說:童鞋來施捨點,好幾天沒飯吃了,行行好!數據庫

------------- 華麗的分割線  正式進入正文 --------------數組

上回說到類、對象啥的,還沒看的童鞋趕忙了:面向對象的認識----新生的初識負載均衡

我問到:童鞋們,類的基礎知識大家都理解了,那麼怎麼找出類呢,你們有方法嗎?
童鞋們:…….(咱們要是知道,還要你培訓幹毛)
我眼睛晃過了一圈,一片沉默,這個是什麼形成了如今的現狀?post


哎呀,我只好天然自語的說到:
類嘛,其實都挺好找的,就專找名詞,咱們從哪兒找名詞,就從需求文檔裏。
名詞這個概念就不用我解析了吧!(連我這種專打錯別字的都曉得)學習

當時有位童鞋直接站起來講到:沒有需求文檔咋辦?
這種叫作沒事找事作的,典型的找抽型。
沒有需求文檔就從口頭描述那兒得來,笨的人跟他說半天,他也不懂。
(如今現實不少公司沒有需求文檔,不過這不是理由)this

我再次說到:說歸說,仍是實戰來得靠譜,大家聽清楚需求,而後從裏面找出名詞。搜索引擎


我來到超市,在門口有籃子和購物車,我比較勤快,我拿起了籃子,開始逛超市,我通常先會看看商品的價格,而後以爲把便宜的商品放進了籃子,我提着籃子來到收銀臺,收銀漂亮妹子把籃子裏面的商品經過讀碼器,所有刷一次,而後告訴我總價,我給了現金,收銀漂亮妹子不知道幹了啥,找零的抽屜打開了,而後他把零錢以及購物憑證給了我,順手把抽屜推了進去,最後把商品裝進了購物袋,而後說了多謝惠顧,歡迎下次關臨。我高高興興的把商品提回了家。


而後那些童鞋們找出了這些名詞,千奇百怪:
我(購物者)、超市、籃子、購物車、商品、商品的價格、便宜的商品、購買的商品、收銀臺、收銀漂亮妹子(收銀員)、讀碼器、現金、抽屜、零錢、購物憑證、購物袋

我就說了:好了,名詞找出來了,假設你要作個收銀系統,你要怎麼辦,這麼多的名詞都要用嗎?
童鞋們:……. (咱們要是知道,還要你培訓幹毛)


我繼續說到:咱們就想一想這些名詞跟這系統有沒有關係


購物者跟系統有關係嗎?
當時他們的想法有兩種,一種是有,一種是沒有。
我當時就說了,好像輸入商品的不是購物者,而是收銀員。
收銀員成了一個類。我乘勝追擊,繼續問到:收銀員都作了什麼事情?
          1. 用讀碼器掃商品
          2. 收取現金
          3. 打開抽屜
          4. 關閉抽屜
Very good!
後面也是同樣,經過激烈的討論, 最終定下了以下類:
收銀員    

     - 用讀碼器掃商品
     - 收取現金
     - 打開抽屜
     - 關閉抽屜

商品

     - 價格
     - 條形碼
     - 名稱

購物憑證

      - 所購買的商品 - 商品
                          - 數量
                          - 折扣
                          - 總價
      - 總價
      - 折扣
      - 折後價
      - 付款的金額
      - 找零的金額
      - 購物憑證的編號

超市

       - 商品列表

讀碼器

        - 讀取商品


很好,咱們把類都定義好了,我給他們的做業是把這些轉成代碼。

過了幾天我收到了一份程序,當時我懵了,這是什麼節奏?


錯得太離譜了,我直接噴血了。。。。
而後沒辦法我又浪費一天的時間一步一步的去教。

首先定義個收銀員類,他有哪些操做:
    1. 新建購物憑證
    2. 在新建的購物憑證上,用讀碼器掃商品
   3. 收取現金,用於支付該次購物

代碼以下:

<?php

class Cashier
{

    /**
     * @var Order $order
     */
    private $order;

    /**
     * 新建購物憑證
     */
    public function newOrder() {
        $this->order = new Order();
    }

    /**
     * 用讀碼器掃商品
     * @param $goodsId
     * @param $num
     */
    public function scan($barcode, $num)
    {
        #讀卡器讀取商品
        $goods = CodeReader::read($barcode);
        $this->order->add($goods, $num);
    }

    /**
     * 收取現金
     * @param $money
     * @throws Exception
     */
    public  function pay($money)
    {
        $totalMoney = $this->order->getTotalMoney();
        if ($money > $totalMoney) {
            $this->order->setPayMoney($money);
            $balanceMoney = $this->order->getBalanceMoney();

            #顯示屏展現找零
            Display::show($balanceMoney);
            #訂單結算
            $this->order->setFinished();

            #抽屜打開
            Drawer::open();
            
            #訂單打印
            Printer::print($this->order);

        } else
            throw new Exception("金額不夠丫,請老闆賞臉打發一下");

    }

}
        

收銀員的代碼寫好了,我繼續讓他們去寫購物憑證。

咱們經過收銀員類裏面知道訂單有如下方法:

       1. add($goods,$num); //添加所購買的商品

       2. getTotalMoney(); //獲取總價

       3. setPayMoney($money); //設置支付價錢

       4. getBalanceMoney(); //獲取找零

       5. setFinished(); //訂單結算

 

童鞋們在寫Order類的時候,遇到了一下狀況:

       1. 類裏面的屬性不會用。

       2. 不知道如何把所購買的商品轉化成數組或者對象 (明顯的基礎沒打好)

       3. 數組的使用不熟練

這些我真心忍了,看樣子得專門搞個課程,名字我都想好了,叫作:面向對象的認識----類的轉化

這些娃有坑爹的,來看看童鞋們的代碼:

class Order 
{
    public $orderList = array();

    public function add($goods,$num)
    {
        $this->orderList[] = array($goods,$num);
        
    }

    public function getTotalMoney()
    {
       $Money = 0;
        foreach($this->orderList as $order)
        {
           $Money += $order['0']->price*$order['1'];
        }
        return $Monry;
    }
}

class Goods 
{
    public $price; 
    
}

在來瞧瞧另一個版本的:

class Order
{

    /**
     * @var OrderGoods[] $orderGoodsList
     */
    private $orderGoodsList = array();
    private $payMoney = 0;

    public function add($goods, $num)
    {
        $orderGoods = new OrderGoods($goods, $num);
        $this->orderGoodsList[] = $orderGoods;

    }

    /**
     * 獲取訂單總價
     * @return int
     */
    public function getTotalMoney()
    {
        $totalMoney = 0;
        foreach ($this->orderGoodsList as $orderGoods) {
            $totalMoney += $orderGoods->getTotalMoney();
        }
        return $totalMoney;
    }

    public function setPayMoney($payMoney)
    {
        $this->payMoney = $payMoney;
    }

    public function getBalanceMoney()
    {
        return $this->payMoney - $this->getTotalMoney();
    }

    public function setFinished()
    {
        #該幹嗎幹嗎
    }

}

class OrderGoods
{
    /**
     * @var Goods $goods
     */
    private $goods;
    private $num;

    public function __construct($goods, $num)
    {
        $this->goods = $goods;
        $this->num = $num;
    }

    public function getTotalMoney()
    {
        return $this->goods->price * $this->num;
    }
}

class Goods
{
    public $price;
    public $name;
    public $id;
}

class Shop
{
    public $goodsList;

    public function find($goodsId)
    {
        return $this->goodsList[$goodsId];
    }
}

 

好了,今天的課程到此結束,反正心冷了....

今天的目的也是讓你們怎麼從需求文檔裏面找出所謂的類。任何事情都是一步一步來的,熟能生巧嘛。。。

請你們繼續關注:面向對象的認識----類的轉化

相關文章
相關標籤/搜索