推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

关于面向对象编程思想的一些思考

   2023-08-23 网络整理佚名2150
核心提示:为此对面向对象编程思想进行了一个总结,以便尽快建立面向对象编程思想。整个编程语言主要经历了从面向过程的语言到面向对象编程语言的过程(其他编程思想不在本文讨论范围之内,如:面向函数编程)。面向对象编程语言主要代表是C++、Java、Go等。即,还是“数据结构+算法=程序”的思维方式,基于我的理解,我尝试着对面向对象编程给出我的理解“对象+组合/聚合=程序”,供大家参考。

最近回顾了团队的代码,发现还是存在一些问题。 更重要的问题是面向数据库的编程和用面向对象语言编写的面向过程的代码。 为此,对面向对象程序设计思想进行总结,以期尽快确立面向对象程序设计思想。

这里形成一个文本草稿,分享给大家讨论。

离家近了。

整个编程语言主要经历了从面向过程的语言到面向对象的编程语言的过程(其他编程思想超出了本文的范围,例如:面向函数的编程)。

图:编程语言发展分析

面向过程的编程语言的主要代表是汇编、C语言等。

汇编语言对开发人员要求高,开发效率低,除了某些必要的场景,比如BIOS,现在很少有人用它来开发。 为了提高开发效率,1972年,美国贝尔实验室的丹尼斯·里奇发明了C语言,极大地提高了C语言的开发效率。 随着面向过程编程的指导思想——“数据结构+算法=程序”深入人心,很多程序员都在尼古拉斯·沃斯画的圈子里打转,无法自拔。 我认为面向过程的编程思维就是账本思维,它引导人们关注这个账本,也就是数据结构,而其他的操作,也就是算法,都是对这个账本进行修改和操作。 账本之间的关系以及账本操作的方法取决于人们,似乎是碎片化的,关系很弱。 后期需求发生变化时,不容易把握,需求变化的范围不好控制,感染也不好控制,导致后期演进的维护成本很高。

面向对象编程语言的主要代表有C++、Java、Go等。

C++语言是一门综合性语言,语法特征丰富,开发效率高。 但由于语法特征过于丰富和灵活,难以掌握,在团队工作时容易出现问题。 例如,多重继承会导致一个子类有多个父类。 多重继承,子类的父类有相同的方法等等。以后维护就找不到北了,很容易获取指针。 为此,如果选择用C++开发,就会限制语法范围,在团队限制的语法规范内进行开发,一般来说对底层性能有很高的要求。

为了解决C++的这个弊端,Java语言适时推出了。 Java语言有很多特性,比如:跨平台、单继承、反射、丢弃指针、GC等。

1、跨平台,解决了一次编译的多种使用,提高了程序的可维护性。

2.单继承解决了垂直依赖混乱的问题。

3.反射我认为是Java最大的特点。 反射的根源在于,与C和C++相比,Java保留了信息。 因此,Java可以根据对象的字节码动态构造对象,而C和C++在编译时不会保留这些。 因此,不可能从二进制动态生成对象,这也是Strus、 等系列组件存在的基础。 正是因为这些丰富的Java中间件,推动了Java生态的发展,在Web应用开发领域独树一帜。

4、GC将程序员从内存申请和释放的复杂管理中解放出来。 同时GC使得内存利用率更高,降低内存碎片的概率。 但是GC在管理内存时会造成性能损失。 可以参考GC的相关机制资料,本文不深入讨论。

由于Java语言支持跨平台的特性,因此在实现时需要先编译为字节码,然后在执行时由Java虚拟机解释执行。 虽然Java虚拟机采用了各种机制进行优化,效果也很明显,但是它与C语言性能方面的C++相比,在整体性能上还是存在一定的差距。

Go语言应运而生。 Go的目标是21世纪的C语言。 Go 是一种面向对象的语言。 语法与C语言接近,但变量的声明不同。 Go支持垃圾回收功能,取消了继承,弱化了对象的纵向关系,只能利用对象的横向聚合组合关系,从语法机制上降低了误用的概率。

从编程语言的发展趋势来看,编程语言对开发者的要求越来越低,语言开发效率越来越高,但对开发者设计能力的要求却越来越高。

事实上,大多数人都是用面向对象的语言编写面向过程的代码,导致开发效率低下,产品维护和演进困难。 这些问题的根源在于对面向对象的本质缺乏理解,我认为主要体现在两个方面:

1、固定思维的问题:仍然以记账的方式思考问题。 设计的时候首先要考虑数据库如何设计,如何存储数据。 有了这个账本之后,就可以添加、删除、检查、修改它,而不是先将其物化为对象。 ,然后抽象成类,再通过聚合组合组装成对象。 对编程思想的理解还停留在面向过程的编程思想上。

2、思维误区:学习语法时似乎什么都懂,但一旦与具体业务结合起来,就没有有效的分析方法——如何物化和提取对象、对象的功能划分、如何组合和组装对象等.一系列问题。 最终表现的仍然是用面向对象语言编写的面向过程的代码。

即仍然是“数据结构+算法=程序”的思维方式。 根据我的理解,我尝试给出我对面向对象编程“对象+组合/聚合=程序”的理解,供大家参考。

在我看来,当前面向对象编程模型的最佳实践方法是领域驱动开发。 领域建模的核心原理是“聚合根+拥塞模型”。 划分出正确的对象,然后根据场景关系对对象之间的关系进行组合/聚合,形成聚合根。

以一个简单的报销场景为例,简单说明一下领域驱动开发的领域建模流程:

1、第一步:提取账单、账单、旅游票、住宿票等作为对象,即物化过程,然后根据充值计算出总金额、行程金额、酒店金额等相关函数模型将原理放入适当的对象中,让每个对象各司其职,类似于汽车行业中各种零件的加工。

2、第二步:建立对象之间的聚合/组合关系,如:账单支付人组合/聚合关联账单、账单组合/聚合链式住宿票和旅游票等,形成聚合根,即对象组合/聚合是形成聚合根的过程,同时根据拥塞模型的原理将与对象相关的相关功能放入适当的对象中。 借助面向对象语言的组合/聚合特性来组织关联关系,类似于汽车行业的汽车装配过程。

在组合/聚合过程中,有两个需要特别注意。 首先,尽量不要在对象之间形成循环。 第二,对象的访问必须只从聚合根开始访问,即形成单向聚合和访问关系的顺序,这样对象之间的关联关系和访问原则简单,也便于划分劳动与协作、对象组装和产品协调。 维护和进化,提高生产效率,降低维护和进化成本,类似于工业批量生产中的标准化分工、流程协作、售后维护和产品进化。

掌握了面向对象编程思想的精髓后,你也能用面向过程的语言编写面向对象的代码,达到“无招胜有招”、“手中无剑,有你有我”的境界。心中有一把剑”。 例如:用C语言编写的Linux处处体现着面向对象的思想,而我也曾用PL/SQL编写过面向对象的代码,但这部分代码是编译器或者开发者自己完成的。

领域驱动开发是我认为现阶段面向对象编程思维训练的一个好方法。 建议大家深入学习。 关于领域驱动开发,我以后会专门讲解一下。

面向对象编程的思想是一种很好的思考问题的方法,类似于工业化分工协作中批量生产的方法。 如果理解深入的话,我们也可以像工业批量生产一样生产软件。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON