谈谈编程思想-抽象,状态,面向对象
前言
JavaScript的内容晚点更新,和大家聊一聊一些对于编程新手陌生或遥远,但对老程序员来说已经异常熟悉的东西
抽象
简单来说就是要求你能把一些事物进行分析,把它从“现实”的问题肢解成一个个“抽象”的行为,这个过程就是一次简单的抽象,往深了说,就是你要想办法让电脑里一两个电子管的跳动变成帮助你解决问题的工具,不过这些计算机原理的东西,了解理解就好,前人把那些东西一层层抽象包裹起来就是为了方便后人理解并使用,除非你要走在技术前沿或做研究,不然简单的了解和理解就足够了,抽象是编程里一个非常重要的思想,很多程序员的技术高低就来自于思维的差别,技术只是工具,思想和面对问题的思维才是你做程序员必须的内功,你的内功修为决定了你是否能成为大师,同时你也可以把这种思想应用在除了编程以外其他地方,比如生活中的各种事情,拿我很喜欢的一档节目《挑战荒野》(德爷的)举例,德爷在开始正式挑战前会花一点时间思考自己的情况,可能有分析,还有安抚情绪什么的,抽象这个内功夫其实在现实里无处不在,并不是只有编程用得到。
对象
关于状态我想和状态放在一起,各位是否想过其实许多java能做的事情c也能做到但为什么java是面向对象,c却不是,我们去回看许多成熟代码,你能够发现,所谓的OOP或者说面向对象编程,看起来就是多了许多new?
我们做个假设,小明要给班里的同学分发作业本,每发一个他就会少一本,小明想知道自己一共还有多少本作业要发
让我们分析一下这个问题,通过观察对象,我们能发现两个行为
1.发作业
2.计算作业数量
每种语言都有不同的表示方式,我们为了方便说明不使用真正的代码
这里我们已经完成了上方描述的抽象,我们把一个具体的问题抽象成两个行为代码块,为了让它行动起来,我们还需要状态,也就是作业数量,以此为基础把状态于行为代码按正确的逻辑编写,我们就能得到一个正常的业务逻辑,一个我们需要的问题答案,这个过程很简单,我们把现实问题分析出需求,根据需求写出代码,解决需求,本质就是这么简单,以上的内容你也能在c语言中实现,这确实,但是java这种面向对象编程里,能够让如:作业数量,在外面的控制范围内,让它不被其他情况污染,也方便我们后续进行变化,以及它能够将必要的内容进行隐藏,这也是封装的重要组成,不过现实的问题比我们现在的问题复杂得多,但面向对象设计能够让我们分而治之,更简单解决,同时各位能够注意到我是以行为为出发点,而不是以状态为起点,这在简单的项目,框架里并没什么问题,但这会导致你的代码模型出现冗余,不过只要能解决问题,就都是好的代码,只是如果你要在更大的公司,更好的框架,项目里完成有原子性和高聚性的代码模型,按照行为开始设计可能会更好一点
总结
对象到底是什么?其实就是状态与行为的结合,用来解决现实问题的一种抽象工具