面向对象和面向过程究竟是怎么回事?

今天下午在一个组的项目回顾会议上,这个同事讲了本身用DDD思想对三个模块的重构。把以前在Service层的一些业务逻辑下沉到了领域层里,由之而引发的讨论。java

部门经理:“其实你的业务逻辑整体并无少,只是把边界从新划分了一下。”编程

一块儿参与开发的同事:“在第二个模块中(任务系统,包括了任务拆分,状态跟踪等)这种思想比较有优点,在一三项目中不是很明显。”函数

因而引出了个人一个问题:“到底什么是面向对象,什么是面向过程,在什么状况下适合面向对象,什么场景下适用于面向过程?”设计

  • 以C语言和Java语言为例: C语言没有类,可是有结构体,结构体中不能有函数,只能有属性。这说明了什么?说明了在面向过程的思考方式中,数据和操做是严格分离的
  • C语言中为何函数须要定义到调用此函数的前面,也就是说先声明后调用?若是按照流程化的思路来看这种设计方式,想要调用一个子流程,势必要在调用以前就定义好
  • 而在java的类中,就没有函数定义前后的问题,这与面向过程和面向对象的最小定义粒度有关,面向过程的最小定义粒度为流程(方法、操做、函数),而在面向对象中,最小定义粒度为对象,这个对象的行为没有前后,包含在对象这个大的容器中。
  • 封装、抽象、继承、多态其实就是类比的对象进行的建模,好比以人为例,人有些属性不想示人,有些属性只能给指定的人了解,这就是封装。人掌握的知识实际上是现象的一种抽象。人继承来来自父母的一些生活习惯,而又有所不一样,这就是多态。
  • 归总, 子类相对父类来讲有不一样的模型(对真实世界的建模),这是4种面向对象的终极缘由。 
  • 为何面向对象的思考方式更有利于扩展维护?拿一个工做岗位为例,一我的在一个工做岗位上,若是有一天这个岗位有了更多的工做要求,若是改动量较小,那么对该岗位的人进行技能培训就能够了。若是要求多到一种程度,拆分红两我的,或者拆分红多个岗位。而若是用面向过程的思路,那么每次改动,都至关于多了一个流程?(这里存疑,多流程的问题在哪?难维护的理由是什么?这里我没有想明白
  • 面向过程要求人有更好的流程化思惟方式,面向对象要求人有更好的抽象思惟方式。那么若是有一天出现一个“面向文档编程”呢?要求人有更好的把问题描述清楚的表达能力。换句话说, 面向过程就是面向流程思考,面向对象就是针对模型思考

最后距离,若是咱们描述入职流程,一个大牛的入职流程可能和一个应届生的入职流程彻底不同,若是把入职这个行为写到employee的方法中,那么这就是面向对象的写法,若是维护一个入职流程的方法,根据不一样的人用switch case的方式进行不一样行为的跳转,那么就是面向过程。xml

面向过程就是面向流程思考,面向对象就是针对模型思考对象

相关文章
相关标签/搜索