zoukankan      html  css  js  c++  java
  • 面向对象的认识----新生的初识

    客串:屌丝的坑人表单神器

    走过的那些事儿:数据库那点事儿

    推荐:手把手教你做关键词匹配项目(搜索引擎)---- 第一天

    最新:手把手教你做关键词匹配项目(搜索引擎)---- 第十八天

    探讨:探讨负载均衡


    吐槽:最近博客园老大总是质疑我的文章,把我用来培训的文章全部当作内容上不够深入,对分享的知识点缺少足够的文字讲解,每份文章都是一个多小时的结晶就被批判成这样,看样子确实值得要深思,把每个点写透写明白,不给读者一个思考的机会。

    最近感觉自己越来越像老师,每天都要讲3-4小时的培训课程,我就跟他们开玩笑说,你看我讲课讲得这么累,好歹也送瓶水给我喝,大家都笑了,公司缺心,缺粮,最不缺的就是水了。

    最近在跟博客园的棒子们纠结,所以那份手教你做关键词匹配项目(搜索引擎)更新会相对慢点。

    回到正文:
    我一说到类,童鞋们的反应就是封装、继承和多态。我当然不反对大家是这样的反应,我继续说到,这个太难了,我有点不太懂,能不能给个简单的方法来比喻他。
    童鞋们:…..(心里估计在骂我,就一装B货)
    我只好继续说到:我们这么多人在这儿,我们统称人叫什么…..是不是人类?
    大家这次的反应很激动,回答到:是。
    我指着桌子说到,那这个桌子的统称叫……?
    童鞋们回得也快:桌子类…..家具…..四角桌类。
    当然我都没有否定他们的说法。
    然后我指着风扇说到,那这个风扇的统称叫……?
    童鞋们回答到:风扇类、电器类…能想到的基本都说出来了。
    我说道,好了,我们该做总结的时候了。


    类:一类事物的统称或者归类。


    那么我们在计算机里面如何表示人类。
    童鞋们很快就写出了

    class Person {
    }

    那我就继续说了,人都有眼睛,手,嘴巴。

    所有的童鞋们都说是类的属性。我看到有个童鞋在沉思,我就问他,童鞋你在想什么?神游了。

    他弱弱的回答到:我在想……眼睛是不是也是个类。
    这个我要留给读者去思考了,这不会博客园的棒子们批我了吧。
    后续的对话跳过……


    然后我继续说:人是不是可以吃饭?
    童鞋们很happy的说,这是类的方法或者行为
    小小童鞋们很兴奋丫,然后我就写了个类,专门来处理吃饭的问题(php 版本):

    Class Person {
        private $eyes;
        private $hand;
        private $mouse;
    
        public function eat(){
              #手使用筷子
              $this->hand->use($chopsticks);
              #筷子夹起食物
              $chopsticks->Pickup($food);
              #食物放进嘴巴
              $food->Putin($this->mouse);
               #……
         }
    }            

    我就问大家,这段代码有没有问题。童鞋们很放心的说到没问题(估计对我比较依赖,认为我写的代码肯定是正确的)。

    我反问了大家:筷子能夹起食物吗,它能夹起是谁的功劳?
    童鞋们发觉气氛不对,颤抖的回答到:人的手。

    然后我又反问了大家:食物能放进嘴巴吗,它能放进嘴巴是谁的功劳?
    童鞋们越发觉气氛不对,越没信心的回答到:人的手。

    最后的代码成了这样:

    <?php
    
    class Person
    {
        private $eyes;
        private $hand;
        private $mouse;
    
        public function eat()
        {
            #手使用筷子
            $this->hand->use($chopsticks);
            #手用筷子夹起食物
            $this->hand->Pickup($food);
            #手把食物放进嘴巴
            $this->hand->Putin($this->mouse);
            #……
        }
    }
    
    class Hand
    {
        private $chopsticks;
        private $food;
    
        public function use($chopsticks){
            $this->chopsticks = $chopsticks;
        }
    
        public function pickup($food)
        {
            if ($this->hasChopsticks()) {
                $this->food = $food;
            } else
                throw new Exception(“你还没有装备筷子”);
        }
    
        public function Putin($mouse)
        {
            If ($mouse->isFull()) {
                Throw new Exception(“嘴巴里面的东西塞满了,不能再塞了”);
            }
            If ($this->hasFood()) {
                Throw new Exception(“手上没食物,请先拿食物”);
            }
            $mouse->add($this->food);
        }
    }

    我就跟他们说:在写方法的时候,多想想这件事是不是他应该做的事情。

    我瞄了一眼,上次那位童鞋又在沉思,估计昨天的dota或者lol没打过不甘心。
    我看不下去了,我在这儿夸夸奇谈,他在那儿梦游。
    我就专门问了下他,童鞋你有什么高见?
    这位童鞋就讲了,我在想….就那位xx同事 写代码类里面对每个参数都进行检测,他是不是有点恐惧症,生怕人家传的参数是错误的,我的意思就是想说,何时需要对参数的完整性做校验,是否还有更好的方案来做这个校验问题?

    尼玛,坑爹丫,突然来个好复杂的问题,思想飘得好远,佩服。
    我的回答是:后续的对话跳过……读者自行领悟,或者专门开个课程来讲解这些,这尼玛又不得不再坑下那些博客园的棒子们。
    其实当时我是回答了那位童鞋的….

    类就告一段路了,我们继续讲下面的课程.
    我就在白板上面写了这个

    Person->eat();

    下面的童鞋马上尖叫起来了,这是错误的,不能用,要求纠正。

    纠正之后的代码是这样的

    $person1 = new Person();
    $person1->eat();

    我也一样问到大家,那样写为什么是错误的,要new一个出来才能用,这个new到底是什么呢?

    下面的童鞋说到:没有实例化,不能用eat,new就是为了实例化一个对象
    那么这个就要说到对象这个概念了。

    对象是类的实体,一个实实在在的物体。

    了解到了对象,那么我继续问到:假设李四在吃饭,那么张三也在吃饭吗?
    童鞋们回答到:不一定。

    对象之间是相互独立的。

    了解了这么多的概念,童鞋们对类的了解够深刻的了,只有理论知识,哪能架起桥梁。那么如何找出类是他们迫切希望的技能。

    要想更多的了解后续的知识,请关注:面向对象的认识---如何找出类

    后面继续请关注:面向对象的番外----思想的梦游篇

  • 相关阅读:
    现在分词和过去分词
    VMware Workstation Ubuntu 20.04 LTS无法连接网络问题
    Java中定时器Timer致命缺点(附学习方法)
    2020 年度编程语言排行榜出炉!C 语言称霸,Java 遭遇滑铁卢…….
    人工智能必备数学基础:线性代数基础(1)
    初学VBA
    何同学新视频火了!找到减少沉迷手机的最佳方法:附免费APP
    支付宝蚂蚁森林下线能量提醒功能 产品经理:被骂了、我改
    可抵御所有已知黑客攻击 中国组建天地一体化量子通信网络
    MYSQL数据库 增删改查基础语句
  • 原文地址:https://www.cnblogs.com/oshine/p/3944689.html
Copyright © 2011-2022 走看看