用大白话扯扯那"神奇"的面向对象编程思维(一)
前言:
每当提到面向对象的时候,初学者肯定都是一脸懵逼的状态,到底什么是面向对象?会用面向对象后有什么牛逼之处吗?不会用是不是就会死掉?答案肯定不会死掉,我们可以来简单的举一
个栗子
1、当你想到熊猫的时候你想到了什么? 答:“国宝”
2、当你看到“国宝”穿上衣服的时候你想到了什么名字? 答:“功夫熊猫”;
其实你可以理解成面向对象就是一种武功!你可以想象一下会武功和不会武功的人有什么区别?“走路带风、飞檐走壁、不食人间烟火、让妹子一看你就走不动路了....”,好咱们先意淫到
这里,接下来你可以在想一下普通人不会武功能不能在这个社会上生存,答案是肯定可以,接下来咱们回到咱们的编程中,如果你不会面向对象难到就不能写代码了吗?不会的,你还会继续
做你的码农!
只是当你会用面向对象写东西的时候你就会发现你的思维逻辑、你的撸代码的水平、以及你撸代码的姿势都不一样了。因为你有可能在一点点的走向中级或者高级程序员!!!好了我不装逼了
下面我们正式开始了解面向对象
首先我们先来了解下我们以前写代码的一种思路:面向过程
什么是面向过程?
我们先来举第一个小"栗子"
当刚进游戏的时候我们肯定会先学习盲僧的Q技能,然后等等级上来以后我们在去学习盲僧的W技能,等到3级以后我们在去学习盲僧的E技能,依次类型,最后等到6级的时候我们肯定会
学习R技能,因为你迫不及待的想秀一波你的R闪-------其实编程就像咱们玩游戏一样技能一步一步的来。在编程里面如果我们想要做某一个效果,首先我们必须获取到相关的对象,然
后在给这个对象加一些相应的预处理函数......然后在做下一步操作!其实向这样的一个过程就是面向过程的编写方式!其实你也可以理解成javascript的同步操作!同步操作?什么是
同步?老师你在搞什么鬼,面向过程我还在懵逼状态怎么现在又跑到同步操作了?别急我们一步步来
什么是javascript中的同步&&异步?
让我们在来举一个例子!
同步:在javascript的编程思想里面你可以这样理解----》买菜--->洗菜--->切菜--->炒菜!这4步就是一步一步地完成,它的顺序很重要,你只能一步步去实现!这样的一个过程
其实就是同步,在咱们的编程中顺序执行其实就是同步的思维,你也可以理解成当去执行某一件事件的时候就不能再去执行其他事件了
异步:边洗脚边看电视、边唱歌边跳舞、边打LOL边骂人、边吃饭边上厕所(貌似这个栗子有点味道)...其实异步也就是当去执行某一件事情的时候不会影响另一件事情的执行
当我们了解了什么是同步和异步后我们在回来看一下什么是面向过程?
上面我们已经解释了面向过程跟我们的同步特别类似,所有的事情都是一步步来执行的,无法跳过某一个环节去执行下一个环节,例如你总不能不买菜就去炒菜了吧?在咱们的代码中也是
这样的你必须先获取一个对象然后在给这个对象加一个事件;这样的一些过程其实就是面向过程
最后我们以专业的角度来解释下面向过程
面向过程:以过程为核心,解决问题时,考虑的是每一步该怎么做
面向对象
什么是面向对象?
我们先用大白话来解释一波:面向对象的思想最早不是在编程中出现,而是在管理学中出现的。举一个栗子:一个公司布置了一个任务,给其中的一个领导者分配了10个人,他用了
10天时间完成了这份工作,而另一个领导者分配了5个人,用3天时间就完成了这个工作。后者是觉大多数公司最想要的一个人才,因为这个人能够懂得如何合理的分工,分配任务。
而在我们代码中也是一样的,同样一个功能如果一个人去写那么可能会耗费很长时间,当写完这个功能的时候,产品狗又让你去修改某一块的一个需求的时候你回瞬间崩溃,因为每一
个程序员都有一个共同的心声,那就是让我写代码行,但是千万别让我去改代码。但是如果我们要用面向对象的思维去书写代码的时候我们就在也不用害怕产品狗让我们去改某一个需
求了,因为面向对象的思维就是把一个“大问题分成若干个小问题,并试图分工协作来完成”,这也是我们今后要学习模块化的一个思想
说了这么多概念性的面向对象思想,下面我们来举一个实际的栗子来了解一下面向对象的思想
谷歌的模块化手机
谷歌的模块化手机其实跟我们的面向对象编程思维特别类型,这款手机的一个优势就在于
如果摄像头坏了,你只需要换一个摄像头模块就可以了
如果手机听筒坏了,那么你只需要换一个手机听筒的模块就可以了
如果你想给这个手机安装一个外接键盘,那么只需要安装一个外接键盘的模块就可以了
如果你想给这个手机安装一个定时炸弹,那么你只需要安装一个定时炸弹的模块就可以了......
我们的面向对象编程思想也是如此,我们可以把一个功能中的一些方法当做一个模块,这样我们就可以分工协作,同样也不用担心某一个环节需要有所变动,如果需要有变动那么我们只
需要改动相应的模块即可
下面我们在来举一个栗子------(请不要嫌我啰嗦,只要你能明白了面向对象的编程思维那么编写代码更本就不是问题)
我们可以想一个问题,在远古时代有没有这样一种人,他的心肝脾肺肾可以用一个器官来代替?可能会有这样一批人,但是这样的一批人为什么没有活到了现在呢?因为他们的弱点非
常明显,想要杀死这个人只需要把这个综合器官干掉就可以了,这也是好多科幻电影里面的场景,一个boos特别厉害,但是到电影快要结尾的时候发现了它某个弱点,然后一个大招把
他给干死了。
回到现实当中,现在人的身体其实就可以理解成一个面向对象的编程思维,身体的每一个器官都是一个模块,都负责相应的事情,如果某一个器官出了问题那么只需要去根治这个器官就
可以了,而不至于死亡!
以上的一些栗子就是面向对象的编程思维,不知道大家能不能理解。下面我们将总结一下面向对象的编程思维
面向对象的编程思维:面向对象思维主张的是:团队---配合---分工---协作,将大问题拆分成诺干个小问题,并试图用分工协作来完成。这也是我们长说的一句话“高内聚、低耦合”
【注】:如需转载请注明出处,码字不容易!请理解----如有不同理解,请大神多多指点
传送门:http://www.cnblogs.com/nanianqiming/p/7711496.html
用大白话扯扯那"神奇"的面向对象编程思维(一)的更多相关文章
- 【面向对象】用大白话扯扯那"神奇"的面向对象编程思维(二)
前言: 上一章我们用大白话讲解了一下面向对象的编程思维,那么这一张我们来讲讲如何用面向对象来书写代码.终于到了激动人心的时刻了..... 传送门:https://www.cnblogs.com/sy1 ...
- java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念
类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网 ...
- Python之路【第五篇】:面向对象编程
面向对象编程思维导向图
- Java基础--面向对象编程1(类与对象)
1.类(class)的定义 类是对一组具有相同特征和行为的对象的抽象描述. 在程序中,引入类的概念,就是为了快速生成更多的具有相同特性和行为的事物. 2.对象(object)的定义 对象是类的具体实现 ...
- 扯扯maven的蛋
同样是放在有道云笔记里,各种散乱加发霉,抽空来整理整理,分几个部分来扯扯maven. 一.Maven是啥求. Maven 为Apache 组织中的开源项目,主要服务于基于Java 平台的项目构建.依赖 ...
- 用大白话讲Java动态代理的原理
动态代理是什么 首先说下代理模式,代理模式是常见的一种java设计模式,特征是代理类与委托类实现了同样的接口,代理类主要负责为委托类预处理.过滤.转发,以及事后处理等.代理类与委托类之间通常会存在关联 ...
- 用大白话讲大数据HBase,老刘真的很用心(1)
老刘今天复习HBase知识发现很多资料都没有把概念说清楚,有很多专业名词一笔带过没有解释.比如这个框架高性能.高可用,那什么是高性能高可用?怎么实现的高性能高可用?没说! 如果面试官听了你说的,会有什 ...
- Python黑帽编程2.9 面向对象编程
Python黑帽编程2.9 面向对象编程 我个人认为,计算机语言的发展,有两个方向,一个是从低到高的发展过程,在这个过程中,语言的思考和解决问题的方式是面向硬件的.硬件本质上处理的是信号,在此基础上, ...
- php面向对象编程学习之高级特性
前几天写了一篇关于php面向对象基础知识的博客,这两天看了php面向对象的高级特性,写出来记录一下吧,方便以后拿出来复习. 面向对象除了最基本的定义类之外,最主要就是因为面向的一些高级特性,运用这些高 ...
随机推荐
- ZOJ3541 The Last Puzzle
这道题是宁波集训的那道题,讲课时轻描淡写吧(应该是我听课不认真罢了),所以这样就要靠自己的理解了, dp[i][j][0]表示从左端点开始完成整个区间的最小花费dp[i][j][1]表示从右端点开始完 ...
- Android 导入引用第三方项目
环境:Android Studio 1.4 1 以源工程形式导入 第一步,导入项目 File--New--Import Module--->设置导入后的项目名称 第二部,在自己工程中添加Depe ...
- FPGA多时钟处理应用
FPGA项目设计中,通常会遇到多时钟处理.即一个PLL输出多个时钟,根据条件选择合适的时钟用作系统时钟.方案一: 外部晶振时钟进入PLL,由PLL输出多个时钟,MUX根据外部条件选择时钟输出做为系统使 ...
- 纯CSS3实现轮播图
前言 纯css3实现的轮播图效果,和JavaScript控制的相比,简单高效了很多,但是功能也更加单一,只有轮播不能手动切换. 用什么实现的呢?页面布局 + animation动画 HTML部分 &l ...
- git仓库管理笔录
Git是目前世界上最先进的分布式版本控制系统(没有之一). 小明做了个个人博客,放到了Git 仓库里面.第二天换了台电脑,只需要 git clone 克隆一下git 远程仓库的代码到本地即可.然后他 ...
- github部分有意思的库记录
1.MMDrawerController (抽屉框架) https://github.com/mutualmobile/MMDrawerController 2.ijkplayer视频直播框架 htt ...
- MYSQL 数据库高频查询语句整理
一查询数值型数据: SELECT * FROM tb_name WHERE sum > 100; 查询谓词:>,=,<,<>,!=,!>,!<,=>,= ...
- Developing Universal Windows Apps 开发UWA应用 问答
开始是一些欢迎,就不翻译 Question: Is the code already there? Answer: There is some code on that codeplex site, ...
- Debian 9 中手动设置有线网络
multi-user.target中不使用networkmanager,上网需要手动设置后才可以,进行有线网线的设置: 首先得到网卡名称:ip addr or ls /sys/class/net/,以 ...
- 购物篮算法的理解-基于R的应用
是无监督机器学习方法,用于知识发现,而非预测,无需事先对训练数据进行打标签,因为无监督学习没有训练这个步骤.缺点是很难对关联规则学习器进行模型评估,一般都可以通过肉眼观测结果是否合理. 一,概念术语 ...