一、概述

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

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

1、面向对象和面向过程

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

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

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

2、面向对象的本质

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

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

二、层次化思维

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

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

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

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

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

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

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

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

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

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

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

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

三、最终为人

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

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

1、逻辑与实现分离

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

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

层次化设计-把大象装进冰箱相关推荐

  1. 浅谈面向对象的编程思想:如何优雅地把大象装进冰箱?

      许多人刚学编程时,想必都听到过这样的话:"*语言是面向对象的,而***语言是面向过程的".那时的新人还懵懵懂懂,就被大牛或者书上的大牛骗去学了一种听起来很厉害的语言,然而学了半 ...

  2. 我是如何把大象装进冰箱里的……

    前几天在知乎看到了这样一个问题:CORNERSTONE等项目管理工具体验如何? 本来利益相关太高不准备答,但是我发现题主问的是CORNERSTONE等项目管理工具体验如何,我个人理解,题主是想问:CO ...

  3. SharePoint 2013中的视频体验增强(1)——把大象装进冰箱

    从2010这个版本,SharePoint正式开始了对视频的内置支持,使用silverligth作为其播放器.不过经过某几个项目体验之后,发现2010对视频的内置支持依然是有限的,有些功能需要自己开发来 ...

  4. 大象装进冰箱要几步?Python 来解答

    我想你一定知道这个小品:问把大象装冰箱需要几步? 1.打开冰箱门 2.把大象装进冰箱 3.关上冰箱门 对应的python代码: def open_ref(ref): print("打开冰箱& ...

  5. Java大象进冰箱线程_把大象装进冰箱:HTTP传输大文件的方法

    上次我们谈到了HTTP报文里的div,知道了HTTP可以传输很多种类的数据,不仅是文本,也能传输图片,音频和视频. 早期互联网上传输的基本上都是只有几k大小的文本和小图片,现在的情况则大有不同.网页里 ...

  6. 把大象装进冰箱要几步?不清楚,但是学会SV验证只剩3步了!

    本文转自:http://www.eetop.cn/blog/html/28/1561828-5940108.html 在上一期的Lab3中,我们创建了TB所需的组件,如Monitor和Checker. ...

  7. 看我们如何“把大象放进冰箱里”

    一.数学家的办法 转自MITBBS 把大象放到冰箱里的分析学方法 1)先把大象微分,然后把它放到冰箱里,再在冰箱里把它积分. 2)重新定义冰箱或者大象的测度(如Radon测度). 3)用Banach- ...

  8. C、C++和C#的关系,以“把大象放进冰箱里”举例

    最近得用unity做虚拟仿真相关的东西,当然,它的知名还是在游戏界,像王者荣耀就是使用 unity 开发的. 使用unity就要学习C#语言,我一直以为C#是C++的升级版本,因为C++是C的改进版, ...

  9. 大象进冰箱和软件设计的关联性

    怎么把大象放进冰箱里:打开冰箱门,大象进去,关上冰箱门. 就从软件设计上讲,我觉得绝对不是笑话,而是很经典的一个成功的范例. 首先,我们需要明确的一个问题是在设计阶段,我们需要的不是具体的实现方法的考 ...

最新文章

  1. php7 curl_init(),php7.3-curl_init获取301、302跳转后的数据
  2. Oracle RMAN 清除归档日志
  3. 我自己写的第一个Xslt
  4. 06.node类型设置
  5. 潘多拉设置有线中继_避坑指南:购买无线中继器必看
  6. 内存迟迟下不去,可能你就差一个GC.Collect
  7. C/C++中const关键字的用法及其与宏常量的比较
  8. 让visio保存背景透明的图片。
  9. 如何限制用户在某一时间段多次访问接口
  10. linux五周第三次课(3月7日)笔记
  11. MySQL 游标的详解
  12. js手机端上传图片,带压缩图片
  13. 洛谷 P3403 跳楼机
  14. android xcl charts,我写的Android图表库XCL-Charts,整理好现在开源了!!!
  15. Apache Hive 垃圾回收
  16. 吉林大学计算机科学与技术专业(研)解读
  17. 服务器项目混淆,压缩和混淆node.js服务端代码
  18. 农林牧渔行业S2B2B系统高效链接上下游需求,加速平台供应链周转
  19. vue 相关的 UI 库和插件
  20. SpringBoot集成TkMapper

热门文章

  1. Revit那些让人嫌弃的操作要怎么解决?建模助手统统一键干掉!
  2. android自定义table,Android 自定义表格控件
  3. 论文阅读 | Rethinking Coarse-to-Fine Approach in Single Image Deblurring
  4. 几个英文歌曲吉他谱网站
  5. 音频特效插件包:MAudioPlugins for Mac
  6. 『MySQL』行号关联查询
  7. Wake、场库、桔多多等应用被通报下架,涉及三七互娱、新片场
  8. SQL语句压缩数据库
  9. JavaEE——SmartTomcat的使用教程与常见错误
  10. Sql server 2008忘记sa登录密码重置