前言:
每当提到面向对象的时候,初学者肯定都是一脸懵逼的状态,到底什么是面向对象?会用面向对象后有什么牛逼之处吗?不会用是不是就会死掉?答案肯定不会死掉,我们可以来简单的举一
  个栗子

  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

用大白话扯扯那"神奇"的面向对象编程思维(一)的更多相关文章

  1. 【面向对象】用大白话扯扯那"神奇"的面向对象编程思维(二)

    前言: 上一章我们用大白话讲解了一下面向对象的编程思维,那么这一张我们来讲讲如何用面向对象来书写代码.终于到了激动人心的时刻了..... 传送门:https://www.cnblogs.com/sy1 ...

  2. java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念

    类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网 ...

  3. Python之路【第五篇】:面向对象编程

    面向对象编程思维导向图

  4. Java基础--面向对象编程1(类与对象)

    1.类(class)的定义 类是对一组具有相同特征和行为的对象的抽象描述. 在程序中,引入类的概念,就是为了快速生成更多的具有相同特性和行为的事物. 2.对象(object)的定义 对象是类的具体实现 ...

  5. 扯扯maven的蛋

    同样是放在有道云笔记里,各种散乱加发霉,抽空来整理整理,分几个部分来扯扯maven. 一.Maven是啥求. Maven 为Apache 组织中的开源项目,主要服务于基于Java 平台的项目构建.依赖 ...

  6. 用大白话讲Java动态代理的原理

    动态代理是什么 首先说下代理模式,代理模式是常见的一种java设计模式,特征是代理类与委托类实现了同样的接口,代理类主要负责为委托类预处理.过滤.转发,以及事后处理等.代理类与委托类之间通常会存在关联 ...

  7. 用大白话讲大数据HBase,老刘真的很用心(1)

    老刘今天复习HBase知识发现很多资料都没有把概念说清楚,有很多专业名词一笔带过没有解释.比如这个框架高性能.高可用,那什么是高性能高可用?怎么实现的高性能高可用?没说! 如果面试官听了你说的,会有什 ...

  8. Python黑帽编程2.9 面向对象编程

    Python黑帽编程2.9 面向对象编程 我个人认为,计算机语言的发展,有两个方向,一个是从低到高的发展过程,在这个过程中,语言的思考和解决问题的方式是面向硬件的.硬件本质上处理的是信号,在此基础上, ...

  9. php面向对象编程学习之高级特性

    前几天写了一篇关于php面向对象基础知识的博客,这两天看了php面向对象的高级特性,写出来记录一下吧,方便以后拿出来复习. 面向对象除了最基本的定义类之外,最主要就是因为面向的一些高级特性,运用这些高 ...

随机推荐

  1. bzoj2118(加法原理)(墨墨的等式)

    题目大意:给定n个物品,每个物品有一个非负价值,问[L,R]区间内有多少价值可以被凑出来. 题意网上一大片,具体求解过程是利用了加法原理,将各个模数拥有的个数之和相加. 就是说随机取一个数a[k],那 ...

  2. jvm的垃圾回收算法

    一.对象存活判断判断对象是否存活一般有两种方式:1.引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收.此方法简单,无法解决对象相互循环引用的问题.2 ...

  3. JavaWeb基础之JdbcUtils工具类2.0

    使用c3p0连接池来改版JdbcUtils工具 1. 使用c3p0连接池获取连接,使代码更加简单 /** * 使用c3p0连接池做小工具 * JdbcUtils v2.0 * @author hui. ...

  4. 画布跟js.oop

    <Canvas> 是HTML5中新出现的一个元素.就是可以通过  JS绘制图形. 画布(Canvas)是一个没有内容也没有边框的矩形区域.我们可以控制里面的每一个像素. 下面我们首先定义一 ...

  5. Linux系统初始化过程及运行级别简介

    Linux开机过程: 1 开机自检(BIOS):初始化硬件,查找启动介质 2 MBR引导 3 GRUB引导菜单:GRUB程序安装在Bootloader 4 加载内核(kernel) 5 运行INIT进 ...

  6. 部署LAMP+NFS实现双Web服务器负载均衡

    一.需求分析 1.前端需支持更大的访问量,单台Web服务器已无法满足需求了,则需扩容Web服务器: 2.虽然动态内容可交由后端的PHP服务器执行,但静态页面还需要Web服务器自己解析,那是否意味着多台 ...

  7. jquery事件使用方法总结

    jquery提供了许多的事件处理函数,学习前端一段时间了,下面对其总结一下,梳理一下知识点. 一.鼠标事件 1. click():鼠标单击事件 $div = $("div") $d ...

  8. ReactiveCocoa_v2.5 源码解析之架构总览

    ReactiveCocoa 是一个 iOS 中的函数式响应式编程框架,它受 Functional Reactive Programming 的启发,是 Justin Spahr-Summers 和 J ...

  9. 【特效】select美化

    select的默认样式往往很丑,为保证页面样式风格统一,需要对select进行美化.虽然其美化的插件很多,一搜一大把,但是需要引入长长的css文件和js文件实在是件头痛的事.其实select的实现原理 ...

  10. ajax请求service报405错误 - 【服务器不允许的方法】

    产生原因:web服务器找不到service方法处理请求. 检查方向: ① service方法名称写错 ② service方法参数类型与标准不一致 ③ service方法异常,返回值类型和标准不一致 ④ ...