• 面向对象的一次思考


    面向对象


    客观上来说,程序员很缺“对象”,哈哈。
    言归正传,什么是面向对象?对象是什么呢?
    对象,也可以被称为一个存在的实体,他拥有自己特有的属性和行为,比如你自身,就是一个对象 ,比如你眼前的这个电脑,灰尘,细菌,原子….
    对象不论大小,不受困于空间,他是客观存在的,具有物质性。
    现实世界是由无数个基本粒子组成的,代码的世界是由无数个对象组成的,只要能被看作一个单独的个体,它就能被看作一个对象。

    面向对象起源于计算机,但这种思想已经超脱于计算机,以前我们分析一个问题是去分析一个问题的具体流程与前后因果,但这种思维的局限性在于复杂,一个复杂的问题它的逻辑很长。于是,我们就想着如何能将一个问题简化,我们想:
    既然问题里他们才是主角,为什么不能让他们解决问题?面向对象思想这样起源。

    我们来看这样一个题目:
    有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第3个月后每个月又生一对兔子,假如兔子都不死,易知第一个月为1对,第二个月为1对,三个月为2对,第四个月为3对,.第四个月为5对,设x个月的兔子总数为n对,求出n。

    思路一:
    找到其中的数学关系,n表示月份,T(n)表示兔子数量;
    T(n)=T(n-1)+T(n-2);
    这是一道斐波那契的典型例题,但你可能一开始并没有发现这个关系。
    思路二:
    把每对兔子当作一个对象。每个对象都有一个方法:每长到第三个月及以上,就生一对兔子。
    每对兔子之间是独立的,这样我们只需要一个循环得到答案。

    private int month;
        public Rab() {
            flag++;
            this.month=1;
        }
        public Rab grow() {
            month++;
            if(month>=3) {
                return new Rab();
            }
            else
                return null;
        }

    比较两个思路:思路二在思维上更显简单顺畅,这也是面向对象考虑的一种形式,思路一则需要动动脑子。

    为什么思路二比思路一来的更加自然简单?
    当我们把兔子看作对象,它有了自己的属性(month)和方法(grow),于此,在解决问题时,我们只需要根据问题要求准确调用它的方法,而这些都是显而易见不需要你去推测的,仿佛他们就是一个个可以独立的物种,你就是制作规则的上帝,他们只需要按照规则进行演变即可,最终你就能得到答案——问题要求是规则,问题客体是对象,对象遵循规则演变,问题得到解决,这就是面向对象解决问题的思路。

    这样看来,其实上帝就是一个伟大的Coder,他创建了人,山川········这些个类,世间万事万物都是独立的对象,上帝从来不告诉你该怎么做,因为你自己知道该怎么做,上帝唯一要做的只有制定规则,我们遵循规则,或许这就是自然的演变。

    或许,以后的以后,代码世界的对象也可以发生变异,天方夜谭也会是不久后的现实。

  • 相关阅读:
    Integer和Integer常量池
    Spring中常用的23中设计模式
    GitHub 简单教程
    IDEA 中用好 Lombok,撸码效率至少提升5倍!
    Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
    ROS常用命令和VIM常用命令
    ROS运行
    VINS-Mono运行
    环境配置相关
    C89标准和C99标准C11标准的区别
  • 原文地址:https://www.cnblogs.com/gujiewei/p/9670586.html
Copyright © 2020-2023  润新知