面向对象与面向过程

文章探讨了面向对象编程的哲学,对比面向过程,强调对象间交互与状态。通过日常活动的例子,阐述面向对象关注实体和交互,而面向过程关注数据流。文章提到DDD的概念,并指出面向对象更符合人类思维方式,因其基于空间实体的行为。作者建议在编程中考虑实体关系和交互来写出更面向对象的代码。
摘要由CSDN通过智能技术生成


以下内容纯属个人理解,和胡说八道。如有雷同,绝对是抄袭。2023-05-01_22:14

概述

  • 一种对理解面向对象毫无帮助的,对指导编程毫无意义的,绝对正确的废话是:面向对象就是万事万物皆对象;

  • 一种较为简单的但是不能类比分析的说法是:面向过程关注数据流(这个都能理解);面向对象关注实体(数据)和实体的交互、状态;这个说法很好,但是比较抽象,不好映射到计算机世界来指导编程;

    • 其实这里的面向对象的解释,类似于DDD 中的一些概念,实体+CDI,很准确但是也很抽象,DDD造出的那些概念,更多是为了人们交流时统一口径。
  • 面向对象:更多关注数据在空间/实体 的行为/交互,时间一般用于穿越空间 同时伴随实体传递(数据流动);

  • 面向过程:关注数据在不同(时间 )节点/阶段的行为;关注的是数据流,而流的延伸伴随着时间的延伸;

  • 时间、空间 在两个思维中都存在,只是关注的侧重点不同;

  • 为什么面向对象更符合人类的思维方式?:究其根本原因,人类所有的感官能感知的外界事物都是实体空间的事物,也即:人脑所处理的信息(数据)都是基于空间的,根本无法感知时间,之所以能感知到时间,也是基于空间实体作为载体进而处理时间信息;

  • 另一个方面的原因:由于人们的约定或者说是历史的积淀,真实世界的实体/对象 在发生活交互时,一般就会发生约定的行为;人类自然的关注点就在两个实体交互及行为,而不是某个主体什么时间的行为,或者说不会原生添加时间维度;比如说:人进入厕所,一般的行为是排便,洗漱,而不是翻跟头、搬砖。

  • 由此,如果两个实体没有默认约定的交互关系,那他们一定处在更大的实体中可能发生交互或者不发生交互;映射到计算机世界,就是几个关系不大的对象在一个上下文中交互,例如:ApplicationContext 聚合了很多对象。

半天的活动

  • 例如:我早上 6:30 起床去洗漱,7:00出门坐地铁,8:00 到公司,然后去食堂吃饭,吃完饭就开始搬砖,忙了一上午,连开会再汇报,累死我了,11:30 去食堂吃饭,吃完饭趴桌子眯了一会;
  • 这个过程中,我作为数据,用面向过程编程实现就类似:
fun_起床();
fun_洗漱();
fun_坐地铁();
fun_刷卡进公司();
fun_吃饭();
fun_搬砖();
fun_吃饭();
fun_睡觉();
  • 以上代码非常自然,而时间作为暗线将其行为进行串联;这种方式,映射到真实世界描述就是:6:30-我起床,6-34:我洗漱,7:00-我坐地铁,8:00-我到公司,8:05-我吃饭,9:00-我搬砖,10:00-我开会…;是不是那个味出来了,微操大师;
  • 如果有人这样描述他以上午的活动,听的人是能理解的,因为听的人会自己在脑子里加入场景,他的行为都会带出场景,人脑的思维就是有场景的;
  • 如果是在任意场景都能发生的行为在加上这种描述,就会变成:6:30-我睁眼,6-34:我闭眼(因为有水),7:00-我打喷嚏,8:00-我走路,8:05-我闭眼,9:00-我坐着,10:00-我站着…;是不是那个味更大了,微操大师;而且感觉这人有病;
  • 面向对象怎么描述的?一开始的描述就是面向对象。
  • 用面向对象编程就需要 抽象各个实体,卧室,卫生间,地铁,公司,公司食堂,公司办公区 等等;

将此思想用于指导开发编程

  • 计算机世界,面向过程的代码,有时候不好编写原因在于,1、计算机世界没有空间,空间都是人脑里想象的,无法实体感知;2、计算机世界的实体在现实世界没有对应的映射,也即没有约定的关系和默认的行为;
  • 真实世界能进行映射的活动:购物,映射到电商网站;上课,映射到在线课堂;他们之间的关系和行为基本明确;
  • 真实世界能无法映射的活动:DataSource 与 Connection ,DataSource 的行为/交互应该包括拿到 Connection;
  • FilterChain 在面向对象中使用面向过程;
  • 在实体中发生约定外的但是允许的行为:设计模式;
  • 如何写出更加面向对象的代码?考虑谁在谁里边,谁碰见谁会触发哪种默认的行为,一件事的始末,先准备那个实体再准备哪个实体(例如:框架初始化);简而言之考虑空间和交互的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值