十年,弹指一挥间;当初学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) // 面向过程的用法
言归正传:行为驱动程序,则属于面向过程;
对象驱动程序,属于面向对象;
困了,先这样吧。