今天下午在一个组的项目回顾会议上,这个同事讲了自己用DDD思想对三个模块的重构。把之前在Service层的一些业务逻辑下沉到了领域层里,由之而引起的讨论。
部门经理:“其实你的业务逻辑总体并没有少,只是把边界重新划分了一下。”
一起参与开发的同事:“在第二个模块中(任务系统,包括了任务拆分,状态跟踪等)这种思想比较有优势,在一三项目中不是很明显。”
于是引出了我的一个问题:“到底什么是面向对象,什么是面向过程,在什么情况下适合面向对象,什么场景下适用于面向过程?”
以C语言和Java语言为例: C语言没有类,但是有结构体,结构体中不能有函数,只能有属性。这说明了什么?说明了在面向过程的思考方式中,数据和操作是严格分离的。
C语言中为什么函数需要定义到调用此函数的前面,也就是说先声明后调用?如果按照流程化的思路来看这种设计方式,想要调用一个子流程,势必要在调用之前就定义好。
而在java的类中,就没有函数定义先后的问题,这与面向过程和面向对象的最小定义粒度有关,面向过程的最小定义粒度为流程(方法、操作、函数),而在面向对象中,最小定义粒度为对象,这个对象的行为没有先后,包含在对象这个大的容器中。
封装、抽象、继承、多态其实就是类比的对象进行的建模,比如以人为例,人有些属性不想示人,有些属性只能给指定的人了解,这就是封装。人掌握的知识其实是现象的一种抽象。人继承来来自父母的一些生活习惯,而又有所不同,这就是多态。
归总,子类相对父类来说有不同的模型(对真实世界的建模),这是4种面向对象的终极原因。
为什么面向对象的思考方式更有利于扩展维护?拿一个工作岗位为例,一个人在一个工作岗位上,如果有一天这个岗位有了更多的工作要求,如果改动量较小,那么对该岗位的人进行技能培训就可以了。如果要求多到一种程度,拆分成两个人,或者拆分成多个岗位。而如果用面向过程的思路,那么每次改动,都相当于多了一个流程?(这里存疑,多流程的问题在哪?难维护的理由是什么?这里我没有想明白)
面向过程要求人有更
面向对象与面向过程:C语言视角的解析

本文通过C语言和Java的对比,探讨了面向对象和面向过程的区别。C语言中数据和操作分离,强调流程化;Java的类允许对象行为无先后,体现封装、抽象、继承和多态。面向对象有利于扩展维护,因为它允许根据需求调整模型。而面向过程则要求良好的流程化思维。C/C++是强化思维和编程基础的好选择,对于程序员的成长至关重要。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



