一个初学者er的面向对象理解之路

    十年,弹指一挥间;当初学C++程序设计的时候理解面向对象很困难,今思之感觉原因在于没有宏观和微观角度上的分析和对比过,于是一时兴起记录一下有关想法;

1.面向对象 ————————————>线性抽象

比如 计算 A+B;

抽象按照 从左到右,从上到下,从局部元素出发走流程,离散型的思维。

(INTEGER* A)  add (INTEGER B);

2.面向过程————————————>立体抽象

同样 add(A,B)...

抽象按照从总体到局部,关心整体流程,综合性的宏观思维;

注:C是面向过程的结构化语言,

FOR XAMPLE:

a:

people A要goto place B;

面向过程:抽象出goto(*,*)

核心是动作和行为;然后填入主宾对象;可以看出goto这个动作对A,B其实是不可见的;换了C和D一样可以;


面向对象 People A ->goto(place B)

符合自然语言习惯;A要去(一个地方),这个地方是B;

核心是对象,过程对A透明,对B屏蔽,体现出了封装性;而goto对A是可见的,换了B就不能goto,除非B派生自A继承了这一特性;


后面感觉面向对象和面向过程并不是绝对的,而且互相包含,相辅相成。面向过程也可以理解为一种面向根本基类OBJECT的方式;而面向对象也可以理解为对象的某个过程;


3.下面事代码中的体现;

var func add(var x, var y){    

    var rls = x + y       //方法作为公共过程

    return rls;

}

class ADD{

    private:

            var a;

    public :

            ...

        ADD(var a){

            this->a = a;

        }

};

var ADD:: add( var b){

        this->a += b;

        return this->a;

}

调用:

   ADD* ADD1 = new ADD(3);

    var p = ADD1 -> add(5);       //方法作为某类的属性;所有权、控制权由某个命令容器转移到对象

    //这里可以和spring IOC机制进行类比; (面向过程,容器控制) *(面向对象,对象控制)

    //

    std::out(p);

    //C  命令式结构化编程语言

   //JAVA面向对象结构化

    //Lisp 声明式函数式



go语言中这一特性的体现;

func (a Integer) Less(b Integer) bool { 

// 面向对象     return a < b }

func Integer_Less(a Integer, b Integer) bool { 

// 面向过程     return a < b }

a.Less(2)      // 面向对象的用法

Integer_Less(a, 2)    // 面向过程的用法


 言归正传:行为驱动程序,则属于面向过程;

                   对象驱动程序,属于面向对象;


困了,先这样吧。


猜你喜欢

转载自blog.csdn.net/qq_32520245/article/details/80370233