面向对象编程(OOP)其实并不难懂,不就是英文单词 Object-Oriented Programming 的首字母缩写嘛。OOP 给我们一种概念,就是“万物皆对象”——我们可以尽可能的发挥想象,把现实中的物(包括动物、人物、甚至无生命的事物)抽象为一种计算机语言(比如 Java)能懂的模型,那么接下来,计算机解决现实中的问题就变得简单了起来。

OOP 的强大之处就在于,它使我们不必依照计算机的限制来模拟现实中的物;我们可以基于现实中要解决的问题来构建对象,使这个对象具有现实中物所具有的特征(对应 Java 类中的属性)和行为(对应 Java 类中的方法)。物不同,对象所具有的属性和方法就会不同。

还拿 DOTA 中的英雄来说吧。

所有的英雄都可以抽象为一个类(对象是类的实例化),这个类包含了英雄对应的成长属性(生命值、魔法值、伤害值、护甲值等等),以及对应的技能行为。那么,怎么区分每个英雄的不同呢?比如说冰美人水晶室女是一个魔法辅助类的英雄,因此,她的初始化生命值自然比敏捷类的齐天大圣低一些,但魔法值高一些;另外,他们的技能也完全不同——孙悟空拿着一根金箍棒,所以他的技能就有棒击大地;水晶室女拿着一根法杖,所以她的技能就有冰霜新星、冰封禁制等。

面向对象编程给我们了一些重要的启示:

1)万物皆对象。

2)程序是对象相互协作的一个过程,他们通过发送消息来告知彼此要做的事情。

3)每个对象都有自己的类型,也就是“每个对象都是某个类(抽象数据类型)的一个实例”。尽管每个对象都是唯一的(在内存中拥有一个唯一的地址),但具有相同状态(属性、变量)和类似行为(方法)的对象可以归属为一个类。

4)每个对象都提供了某种服务。比如说孙悟空可以跳上树上(丛林之舞),然后再跳下来对区域内的敌人造成减速和伤害(乾坤跳跃)。

面向对象编程的代码易维护、易复用、易扩展,因为面向对象有三大特性:封装、继承、多态。

1)封装,每个类(对象的模板)可以自由地定义属性和方法,使其有别于其他的类。封装可以隐藏对象的内部细节,使其对外形成一道边界,只保留有限的属性和方法与其他对象进行交互。封装的原则是使对象以外的部分不能随意的访问和操作对象的内部属性,从而避免了外界对对象内部属性的破坏。

2)继承,子类可以轻松地复用父类的代码(非 private 修饰的属性和方法),只需要一个关键字——extends。如果父类的属性不满足子类的需求,可以追加;如果父类的方法不满足子类的需求,可以覆盖。

3)多态,父类中定义的方法被子类继承之后,可以表现出不同的行为。这使得同一个方法在父类及其各个子类中具有不同的语义。例如:“椭圆”和“多边形”都是“几何图形”,假如它们都有一个名叫“绘图”的方法的话,方法内容肯定是不同的。

多态性体现在两个方面:由方法重载实现的编译时多态和方法重写实现的运行时多态。

编译时多态:在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来确定调用相应的方法。

运行时多态:由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引用子类的实例来调用子类的方法。

封装、继承、多态这三个特性对于初学者来说,有点头大。不过不用担心,我会在后面的文章中继续深入地介绍。

什么是面向对象编程(OOP)相关推荐

  1. 【廖雪峰Python学习笔记】面向对象编程OOP

    面向对象编程 OOP:Object Oriented Programming 程序的基本单元:对象 [ = 数据 + 操作数据的函数] [属性 + 方法] 三大特点:数据封装.继承和多态 OPP中的计 ...

  2. 面向对象编程OOP的三大特性

    面向对象的三个基本特征是:封装.继承.多态. 封装 封装最好理解了.封装是面向对象的特征之一,是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类 ...

  3. python oop编程_23 Python - 面向对象编程OOP

    面向对象编程OOP 01 方法__repr__()和__str__() __repr__()方法类似java中的toString方法,用于反馈类的相关信息且可以自己定义,一般用于开发人员控制台调试 _ ...

  4. 学习面向对象编程OOP 第一天

    面向对象编程 Object Oriented Programming 一.什么是面向对象编程OOP 1.计算机编程架构; 2.计算机程序是由一个能够起到子程序作用的单元或者对象组合而成.也就是说由多个 ...

  5. 面向对象编程(OOP)和函数式编程(FP)的思考

    最近看过不少 JavaScript 的类(实际是嵌套 function),自己也写了一些,发现一个值得思考的问题. 有的作者可能为了提高一点性能,喜欢有事没事把方法里面的某个变量做成类的字段(attr ...

  6. [转载] Python3基础:08_02_面向对象编程(OOP)——类和对象

    参考链接: Python中的面向对象编程OOP | 3(继承,对象示例,issubclass和super) 0.前言   这篇博文将讲述Python面向对象开发中的类与对象的概念,包括对类和对象的理解 ...

  7. S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则

    注:以下图片均来自<如何向妻子解释OOD>译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html <How ...

  8. python oop求三角形面积公式_Python面向对象编程-OOP

    Python面向对象编程-OOP 20141216 Chenxin整理 OOP的3大特性: 封装,继承,多态 一.封装 OOP目的,OOP为了代码重用 :分解代码 ,最小化代码的冗余以及对现在的代码进 ...

  9. opp原则_面向过程编程(OPP) 和面向对象编程(OOP)的关系

    面向过程编程(OPP) 和面向对象编程(OOP)的关系 原文链接:http://blog.csdn.net/phphot/article/details/3985480 关于面向过程的编程(OPP)和 ...

  10. c 子类对象 访问父类对象受保护成员_面向对象编程(OOP)

    这节讲一下,什么是面向对象(Object Oriented Programming).说面向对象之前,我们不得不提的是面向过程(Process Oriented Programming),C语言就是面 ...

最新文章

  1. oracle 10035 err 942,案例:Oracle日志报错 Fatal NI connect error 12170 TNS-12535 TNS-00505
  2. netty系列之:netty初探
  3. 循环录(输)入 java 课的学生成绩(5个学生),统计分数大于等于 80 分的学生
  4. 代做html网页多少钱,代做排名网站有吗,做排名帮你实现财富自由
  5. Hanlp得到语义相似度的方法
  6. 从零开始学前端:字符串和数组的方法 --- 今天你学习了吗?(JS:Day10)
  7. php7 fastcgi安装,安装windows 下 php7+nginx+fastcgi
  8. 买了一个 站立式办公 桌子。
  9. 阶乘很简单?恕我直言,阶乘相关的面试题你还真不一定懂!
  10. CAD用直线绘制矩形
  11. LeetCode-347. Top K Frequent Elements [C++][Java]
  12. 几种公共图床Python调用
  13. BMap添加海量点数据,BMap.Point携带数据
  14. 华视100UC 身份证阅读器 Java
  15. 今日头条广告如何优化?这四个思路至关重要
  16. 毕业论文用什么流程图软件比较好?
  17. 是德科技34461a万用表
  18. 思科EtherChannel链路聚合
  19. 如何设计人力资源管理体系?
  20. springcloud:什么是分布式微服务,如何学习微服务(一)

热门文章

  1. 如何接受上级指令_上级应该如何向下属下命令---如何领导你的下属
  2. 现在女生做什么赚钱,这8种职业非常有前途!
  3. 安科瑞WHD智能温度控制器,用于中高压开关柜、端子箱、环网柜、箱变等设备内部温度和湿度的调节控制
  4. HTTP常见面试问题
  5. Xtensa 仿真环境tunning分析(ISS profile)
  6. 【Unity】OpenCV Plus Unity 获取Unity中摄像机并调用opencv使其灰度化实例
  7. 20230220英语学习
  8. 锐龙可以装服务器系统吗,【勉强算个技术贴】锐龙3500U实战安装WIN7——完美使用...
  9. python-opencv第一期:imread函数详解
  10. 2018兰亭序系列书法作品集