hello wordl!
keep coding!🏃
学编程不是将来要当程序猿,而是在学习编程思维。比尔盖茨、扎克伯格、乔布斯用经验告诉我们,拥有编程思维的人,就相当于成功了一半——不但逻辑清晰心思缜密,而且解决问题能力、管理能力也非一般人可比。但什么是编程思维呢?
编程思维
编程思维是解决问题的算法加代码实现的过程的集合,编程思维有两个组成部分,一部分是算法设计,另一部分是代码实现。
问题拆解
编程思维的核心,不是编程语言,也不是语法,甚至不是算法或数据结构本身,而是如何分解问题,从中发现规律,建立解决问题的模型,并映射到合适的数据结构和算法上,然后才能根据算法写程序实现。
比如吃一个大西瓜时,一口肯定吃不掉,这时就会把它切成一块一块的,或是用勺子一口一口吃。这就是把一个问题拆分再逐个解决的过程。
而编程的过程,就是把复杂和庞大的问题“自下而上,逐步拆解,直至理顺”。这种思维在学习和生活中叫“分解思维”。
在做数学题时也是一样的道理,解答一道复杂的大题通常需要把它 拆分
具备这种思维的人,做事情是有条不紊并且有耐心的,即便面对一道有挑战的数学题,也能列出清晰的解题步骤,清楚的知道自己每一步的进展,而不是遇到难题时脑子里一团乱麻。
运用抽象
想象一下房子的形象,一般人的想象中它可能是这样的
但在建造师的想象中,它可能是这样的
建筑师想象中的房子,具体到了房子内部的具体架构和材料,每一面墙、每一扇门窗应该如何更精巧地设置。
抽象级别越高,则越接近事物的本质,规律的适用面也越广。编程的世界里,就包含“子系统、模块、包、类、方法和语句”等不同层级的抽象。
模式识别
模式识别是“ 如何发现相似的模式并有效地解决细分问题
算法逻辑思维
算法设计,就是根据问题拆解去设计一步一步的具体解决路径(尽可能优算法),从而解决整个问题。
在具体解决问题的过程中,较关键的能力有两个 —— “逻辑思维”和“调试纠错”。
逻辑思维
说逻辑思维经常说的一个笑话是,程序员老公买10个包子,如果遇到卖西瓜的,就买1个,结果就是老公只买了1个包子,原因是因为遇到了卖西瓜的。
这其实是很典型的逻辑思维。逻辑思维中有个很重要的原则叫 MECE(Mutually Exclusive and Collectively Exhaustive),意思就是“相互排斥且整体完备”,也就是“不重复,不遗漏”。
编程里,只有对与错,没有模糊值。在程序运行的过程中,只要较终的结果与期望不符合,就证明算法中肯定有错漏。
调试纠错能力
但程序中的bug常常不是一下就能找到的,需要把程序的运行顺序一步步地跟走一遍,同时观察每一步的运行结果。这就需要很多的耐心、观察力和专注力,对孩子的抗挫能力也是一种磨练。
为啥的人总在进步?就是因为他们懂得“回溯、调试、纠错”,不断进行自我优化和成长,不断be better。
什么是对象
对象是一个 抽象
面向过程和面向对象
面向过程与面向对象都是编程中编写程序的一种 思维方式
面向过程:把事情拆分成几个步骤(相当于拆分成一个个的方法和数据),然后按照一定的顺序执行。
面向对象:面向对象会把事物抽象成对象的概念,先抽象出对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法。
1. 生活举例:用洗衣机洗衣服,来看一下两者的差别。
面向过程:
放衣服(方法)=》加洗衣粉(方法)=》 加水(方法)=》 漂洗(方法)=》 清洗(方法)=》 甩干(方法)
面向对象:
new 出两个对象 ”人“ 和 ”洗衣机“
”人“ 加入属性和方法:放衣服(方法)、加洗衣粉(方法)、加水(方法)
”洗衣机“ 加入属性和方法:漂洗(方法)、清洗(方法)、甩干(方法)
然后执行:
人.放衣服(方法)=》 人.加洗衣粉(方法)=》 人.加水(方法)=》 洗衣机.漂洗(方法)=》 洗衣机.清洗(方法)=》 洗衣机.甩干(方法)
2. 生活举例:打扫卫生
面向过程:
遇到一件事时,思考“我该怎么做”,然后一步步实现的过程。
家里打扫卫生(擦玻璃、扫地、拖地、倒垃圾等),按照面向过程的程序设计方式会思考“打扫卫生我该怎么做,然后一件件的完成”,最后把家里卫生打扫干净了。
面向对象:
遇到一件事时,思考“我该让谁来做”,然后那个“谁”就是对象,他要怎么做这件事是他自己的事,反正最后一群对象合力能把事就好就行了。
家里打扫卫生(擦玻璃、扫地、拖地、倒垃圾等),按照面向对象的程序设计方式会思考“我该让谁来做,如小明擦玻璃、让小丽扫地、让小郭拖地、让小强倒垃圾等”,这里的“小明、小丽、小郭、小强”就是对象,他们要打扫卫生,怎么打扫是他们自己的事,反正最后一群对象合力把卫生打扫干净了。
优缺点对比
面向过程:
优点:
缺点:
面向对象:
优点:
缺点:
面向对象三大特征
封装
封装是面向对象编程的核心思想,简单点说就是,我把某些东西封装起来,这些关键的核心的东西不能给你看,但是我可以提供给你一些简单使用的方法。
就说现在最最常用的手机,人人都会用,打电话、发短信、玩游戏、刷视频等等,但你知道手机怎么实现这些功能的吗??不知道吧,我们会用就可以了,怎么实现的对我们来说不重要。那这就很类似封装的理念了。
封装其实是对外隐藏复杂细节,提供简单易用的接口。在Java中这种隐藏或公开是通过权限修饰符来实现
- 通过封装,我们可以保护代码被破坏,提高数据安全性。
- 通过封装,我们提高了代码的复用性(有些方法、类在很多地方都能多次反复使用)。
- 通过封装,带来的高内聚和低耦合,使用不同对象、不同模块之间能更好的协同。
继承
派生类(子类)可以继承基类(父类)的方法,我们可以将多个类 共有
在现实世界中也有很多例子的。例如:父亲很有钱,儿子可以继承父亲的产业,也可以有钱。家鸡和野鸡都属于鸡这个类别,那么它们肯定也都有鸡所属的共同特征
多态
多态是同一个行为具有多个不同表现形式或形态的能力。指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。
例如上边的图片,我们平常把它叫做家养的猫🐱,同时它也属于猫科动物,我们又可以把它叫做有生命的动物。即在不同时刻有多种表现形态。
再举个栗子,你的女盆友让你买点 水果
上边介绍了这么多,其实每个人的理解可能都有偏差,主要我们还是要在平时的工作实践当中多思考、多总结。行成于思 愿我们终能守得云开见月明