继上篇文章说到的面向过程和面向对象,再聊聊我眼中的面向对象

继上篇文章说到的面向过程和面向对象,再聊聊我眼中的面向对象

 

经典典例:把大象放冰箱;

面向过程,专注于 “开冰箱门” “塞大象” “关冰箱门” 过程,将3个过程串联起来,就完成了一个把大象放进冰箱的事件;

面向对象:将其分析出几个实体 “冰箱” “大象” ,那么冰箱有两个行为“开门”“关门”,大象有一个动作“进冰箱”,我们所考虑的是行使各个对象实体的行为,让其成为一个事件。

 

面向对象,我们更多是对事务进行边界划分,将各个事务间相互隔离,将事务特有的属性和行为进行封装,我们对于操作者而言,不需要关系各个事务内部的具体实现,具体行为,我们只关心他所暴露出来的东西。这种思维方式,有利于我们对事物进行抽象定义,划分出不变性质和可变性质。人类可以吃植物、人类也可以吃动物,但是人类一定会吃食物;我们不关注人类具体吃什么,从而引发什么动作,这是人类内部所实现的事情,但是我们所关注的是人类可以做什么,有什么行为。

 

从开始接触开发,我们开始的就是思考一些行为怎么实现,怎么快速实现行为,怎么通过数据,去实现具体的事情。这种思考,我们更多的是去考虑开发解决了什么问题,从而思考怎么去高效,便捷解决什么问题,通过逻辑去解决。但是我们忽略了一个重要的问题,就是我们没有形成系统的去思考,抽象概念。

我们很多人都朗朗上口,Java 4大特性,抽象、封装、多态、继承;那么这4大特性,我们有没有深入思考过,切合一个实际问题去考虑过:有哪些对象,对象由哪些行为,我们更多的都是想着,怎么构造一个对象,然后怎么去操作这个对象,让这个对象中的某个属性变成我们预期的最终值。就是因为这种思维定式,导致我们更多的是去思考,操作一个对象,而不是去思考,这个对象,有哪些行为,他能干什么。这样渐渐的,我们从对象自身变成了对象的操作者,然后编码的风格也就往“面向过程”偏离了。

 

然而对于一个面向对象的结构设计,我们也是这样做的,我们更多是考虑眼前的需求实现为主,而不是去思考对象的根本属性,哪些属性不属于他,算不算冗余。这也是一种数据库表结构的设计规范。

 

因为我们一开始接触数据,然后我们所思考的就是怎么去操作数据,而不是让数据自我变化。(有点绕)

 

由于面向对象思维,会加重我们对系统设计的工作量,且目前看来并没有带来可观的优势,这也是我们偏离的原因之一。

 

本质上来说,面向对象,就是一种对逻辑上分析的哲学。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值