前几天跟着腾讯课堂又学了一下面向对象的思想,对此又有了新的一些发现和理解。由此想把这个想法写下来,因为觉得百度或是别人和我说的都不是特别的透彻,尤其好多都是抽象意义上的理解,没有体现在编程上,同时也没有达到让一个完全不懂程序的人,去理解面向对象的编程思维。在此想分享一下个人对面向对象的深入理解。
在学Java基础的时候就说面向对象编程,之前是面向过程编程也就是c语言,到底什么是面向过程编程,面向过程简单的理解就是一连串的函数组合,传入参数,通过这几个函数组合的操作加工(选择,判断,循环:图灵提出的要完成一件事情的基本模型)返回给调用者,组成方式是形参实参,函数体,描述的中心也是这几个参数和函数体的算法,纯粹的函数传参和调用。
面向对象是将原来的函数体和具有特征和实际意义的参数提取出来,将其形成若干对象(事物)并在潜意识上组建了各个主体之间的关系关系,使代码落地更加优雅和容易,不用像面向过程一样写大量的判断和函数调用,在面向对象中可以使用继承不同的方法实现来使调用更加清晰。
这是三个函数传入参数:
goHome(me);
buyGreans(me,money,supermarket);
makeFood(me,greans,kitchen);
如果用面向对象的思维就是这样的:
class Me{
int money;
Person returnHome(me){
return gohomeperson;
}
Greans buyGreans(me,money,supermarket){
return Supermarket.sellGreans();
}
Food makeFood(me,greans ,kitchen){
kitchen.makeFood(me,greans );
}
}
class Supermarket{
Greans sellGreans(person,money){}
}
class Kitchen{
food makeFood(person,greans ){
洗菜,切菜,做饭。。。
return food;
}
}
总结:面向对象强调完成一件事情过程的基础之上同时也强调了在完成这件事情所需要的对象比如上面的人,超市,厨房,同时也对对象做一定的描述比如说人有一个属性他有多少钱。过程就是这个人能回家,能买菜,能做饭等等。
纯粹的面向对象或是面向过程都不能很好的完成描述事物的发展以及办事的过程,过分的强调面向对象将办一个事情细粒度的抽象也会导致程序很臃肿和关系复杂,过分强调过程会导致程序复杂晦涩难懂不利于维护和开发,两者结合相得益彰才是王道。