软件开发中复杂的问题怎么解决?可以分2个步骤
1. 简单化
利用抽象把复杂的问题简单化,注意抽象时分层次的
如何抽象:抓关键步骤,关键功能,并给这些关键步骤和功能起一个好名字。
搭框架。抽象时要分清层级粒度,忽略该忽略的细节.
如同人体血管,树枝分叉。有主干有分支。
2.具体化
把抽象后简单的骨架代码具体化,逐层细化,逐层抽象 ,逐层细化,逐层抽象
如何具体:如同素描先画骨 后画皮,实现时一定要解决技术难点,否则无法落实
注意经过以上2个步骤这个问题最后的实现细节任然是复杂的,只是框架脉络清晰。你不可能把本身复杂的的系统实现的简单化
如果抽象的好的话 你的系统最终实现效果看起来像这样
否则就是像这样
两则虽然最终实现的功能或满足的需求是一样的,但是水平确实有高低之分。
你希望你写的软件在别人的眼中是这样的吗?
3. 如何具体实现抽象
为什么变量名称很重要? 名称也能抽象
如果 用c=ab 表示一个物理公式,你可能不知道是什么意思
但是如果写成F=ma 的话,你一定有所熟悉。
对程序也一样对变量的命名和物理公式变量命名一样,第一需要尽量约定俗称,不能标新立异,第二 需要简单明了
对变量的命名也是对 要解决问题的抽象,也能简化程序理解
使用有意义的函数和变量名字。如果你的函数和变量的名字,能够切实的描述它们的逻辑,那么你就不需要写注释来解释它在干什么。
提取函数也是抽象
如果你仔细观察代码,就会发现其实里面有很多的重复。这些常用的代码,不管它有多短,提取出去做成函数,都可能是会有好处的。有些帮助函数也许就只有两行,然而它们却能大大简化主要函数里面的逻辑。
抽象就是还未实现的功能
抽象的本质就是隐藏细节,隐藏复杂度,简化接口,便于理解主干,并不能解决细节的复杂性
接口定义顶层规范
抽象类作为基础实现