层次化设计-把大象装进冰箱

4 篇文章 0 订阅
4 篇文章 0 订阅

一、概述

在绝大多数的面向对象软件系统设计中,逻辑结构的深度都是非常高的。

现在流行扁平化思维,在各大框架源码中复杂的类关系、执行逻辑关系让我等萌新头皮发麻,我不禁想这些源码为什么不采用扁平化思想进行设计呢?明明百十来行代码、一两句话就能说明的问题,在源码中可能扩展为十几个类、数十个函数来处理这些关系,这毫无疑问是增加了新手的学习难度,要知道,源码本来就是拿来给人看的呀。

1、面向对象和面向过程

使用面向过程的C语言来编程,如果模块划分不当,代码超过上千行后,掌控力不够的程序员就已经把握不住项目了。

这时,程序员就会想,如果我使用面向对象思维组织代码肯定不会发生掌控不住项目的情况。

但使用面向对象思想开发后,第一个问题就是使用Java写C语言程序。程序员对项目的掌控力并没有提高多少,可能只是多了个类的概念让逻辑稍微清晰一点。

2、面向对象的本质

这时可能就需要时刻默念“封装、继承、多态”。封装便是将这个类的属性和方法都封装为类属性和类方法,怎么判断封装的粒度呢?从各大框架的源码中复杂、细节的类关系的看,这个封装的粒度是可以非常细的。继承与多态在进行系统设计、类设计时是非常重要的。继承可以让子类共享父类的属性和方法,大大提高代码复用率。多态在Java中是用接口实现的,其重点在于方法、行为,接口可以引用实现了接口的子类对象,并调用接口(子类)的方法。

总结一句话——“佛祖保佑,心中时刻默念‘封装、继承、多态’。要想面向对象编程,先把这三点用起来,后面的问题后面再说”。

二、层次化思维

扁平化思维要求思维层次要降低下来,使之更容易理解、更简单。而层次化思维要求我们要将思维划分多个层次,在本层内思考时,暂时不需要考虑下一层,逻辑结构搭建起来后,再扩展下一层的思路。

1、将大象装入冰箱中需要几步呢?

按人的常规逻辑思考,冰箱怎么可能装入大象呢?

大象那么大,冰箱那么小。除非是小象,或者大冰箱。

思考到这,忽然发现最开始的逻辑完全是没道理的,主要是人的惯性思维将现有的冰箱和大象下层概念(结果性概念)带入了上层逻辑,最终导致了错误的思考。

2、将大象装入冰箱的步骤

一般听过这个问题的应该都知道答案。只需要三步即可,打开冰箱、把大象装进去、关冰箱门。

这一层的逻辑已经能够说明将大象装入冰箱需要几步的问题。

3、将大象装入冰箱的下一层——实现

但是对于程序员来说,设计是设计师干的,广大程序员从事的工作还是去实现这个设计。(祝广大年轻程序员奋发向上,早日升级为架构师或其他岗位)。

打开、关闭冰箱毫无疑问是很简单的,所以实现重点是将大象装入冰箱,常规情况下将大象装入冰箱肯定是无法做到的,所以在实现这个逻辑时,我们需要思考更多的情况,比如改变冰箱、大小的大小等等。假如,这里采用了使用一个比大象更大的冰箱,那么将大象装入冰箱这个步骤也就可以实现了。

逻辑来说,一般人肯定拿不起大象那么重的东西,所以这个步骤我们也可以思考用机器移动大象,或者使用食物吸引大象自己走进去。

三、最终为人

结构化思考,可以让我们的思维更加具有逻辑性。而扁平化可以使事物更加简化,但不合理的扁平也可能会使问题在每一层的逻辑上变得更加复杂。

经过这个问题之后,将大象装入冰箱的步骤即可,而复杂的层次设计可以使我更容易设计、实现这个问题。

1、逻辑与实现分离

在编程里面有一个思维,高层逻辑只写逻辑代码,具体的实现应该写在别的地方。这时我们查看代码时,是不是只有逻辑代码,而不会被复杂的实现代码所影响。

所以各大框架的源码所采用的复杂的类关系,逻辑与实现分离的编程方式,这些都是为了自己编程方便,别人理解方便。之所以不理解,只是个人的相关锻炼不足,没有养成层次化思维的习惯、阅读源码的习惯。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值