Concepts

  • 类(class):对我们要解决问题的抽象,比如建造房子的蓝图;但实现机制上来讲,类是根据蓝图构建而成的,存储在内存中的,用来表示对象的数据
  • 对象(object):根据类构建的实体,比如根据蓝图造出来的房子;实现时,通常是复制类的数据到新的内存空间,有可能需要改变初始值。
  • 实例(instance):对象的名字。指向对象在内存中存储地址的引用(reference)变量。也就是说,实例只是某个对象的别名(alias),给某个对象创建新的实例,并不会开辟新的内存空间存放一个新的对象。

4 Pillars

Encapsulation

将相关的变量和函数通过某种架构组合到一起,构成对象的类;此时该类的变量被称为属性(Property),函数被称为方法(Method)。

这样相当于将面向过程中的变量和函数做了分类,一个类中的变量可以随时被该类中的方法使用,并且不用作为函数参数来传递。因为越多的参数会使函数越难以使用,移植和维护。

Abstraction

隐藏对象内部的属性和方法。

优点:

  1. 简化接口设计:对外暴露的方法少,接口设计越简单;
  2. 减少代码变化的影响:更新模块内部私有属性和方法的代码,不会影响到模块外部适配的兼容性。

Inheritance

引入树的层级概念。从树的根节点往下,对象越来越具体。子节点上的对象比父节点的对象更具体,是其父节点的子集,可以在父节点对象的基础上,拥有更多针对子节点对象的方法和属性。

这种设计方法,可以减少代码冗余(redundancy),减少不一致性(inconsistency),降低代码的维护难度。

Polymorphism

用希腊词根解释,“poly” 意思是许多(many),“morph” 意为形式(form)。一句话解释就是针对不同的数据形式提供同样的程序接口。

例如,动物可以移动自己的位置,人可以走,狗可以爬,蛇可以爬,同时车也可以移动位置。虽然可以这样的动作都可以定义为 move() ,但他们的移动方式都不一样。

animal.move(x,y)
human.move(x,y)
dog.move(x,y)
snake.move(x,y)
car.move(x,y)

这种把不同类的方法按照其共性来统一命名,我们称之为 “Polymorphism”,中文译为多态。

优点:

  1. 统一方法命名
  2. 简化接口设计

Written with StackEdit.

面向对象编程(OOP)思想小结的更多相关文章

  1. JS--我发现,原来你是这样的JS:面向对象编程OOP[3]--(JS继承)

    一.面向对象编程(继承) 这篇博客是面向对象编程的第三篇,JS继承.继承顾名思义,就是获取父辈的各种"财产"(属性和方法). 怎么实现继承? 我们的JavaScript比较特别了, ...

  2. 面向过程编程(OPP) 和面向对象编程(OOP)的关系

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

  3. 2016/1/17 笔记 1,面向对象编程OOP 2,类 全

    面向对象编程OOP 编程方式的发展 1,面向过程 重用性低 维护工作量大  2,面向对象 重用性高 维护容易 概念 1,对象 Object 一个具体的事物 是类的实例      2,类Class 同一 ...

  4. [JAVA] 面向对象编程OOP Note

    面向对象编程OOP Note OOP五个基本特性1. 万物皆对象.2. 程序是对象的集合,它们通过发送消息来告知彼此所要做的.3. 每个对象都有自己的由其他对象所构成的存储.4. 每个对象都拥有其类型 ...

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

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

  6. JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)

    一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...

  7. JS--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)

    一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...

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

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

  9. 【软件构造】第三章第四节 面向对象编程OOP

    第三章第四节 面向对象编程OOP 本节讲学习ADT的具体实现技术:OOP Outline OOP的基本概念 对象 类 接口 抽象类 OOP的不同特征 封装 继承与重写(override) 多态与重载( ...

  10. php面向对象编程(oop)基础知识示例解释

    面向对象并不是一种技术,而是一种思想,是一种解决问题的最基本的思维方式!如何理解使用?OOP:面向对象编程 (直接代码说明) 1.面向对象的基本概念 示例demo: <?php header(& ...

随机推荐

  1. Java中CSS&JS篇基础笔记

    HTML就是由一组标签所组成的.HTML的字体标签: <font>标签: 属性:color,size,face HTML的排版标签: h标签:标题标签. p标签:段落标签. b标签:加粗标 ...

  2. springmvc整合mybatis框架源码 bootstrap html5 mysql oracle maven SSM

    A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技 ...

  3. rman基础知识理解(一)

    rman用于对数据库的备份和恢复. 他的命令主要分成两大类:独立命令和批处理命令: 独立命令只能在rman的提示符下执行,主要的命令有: CONNECT CONFIGURE CREATE CATALO ...

  4. QueryRunner cannot be resolved to a type:关于包不能正常导入的问题

    在操作一个功能模块的时候,出现一个问题: 我原则是按着项目指导一步一步走的,但却出现, QueryRunner cannot be resolved to a type,这个问题应该属于Xxx can ...

  5. js toFixed()方法的坑

    javascript中toFixed使用的是银行家舍入规则. 银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法. 简单来说就是:四舍六入五考虑,五后非零就进一,五后为零 ...

  6. select 宽度跟随option内容自适应

    传统的select在没有设置固定宽度的情况,会因为自身的 option 选项的里,宽度最宽的option作为select本身的宽度 例如 可见效果为: select的宽度因为"宽度最宽的op ...

  7. Vue 子组件接收父组件的值

    1.父组件 <template> <div id="rightmenu8"> <rightmenu7 ref="rightmenu7&quo ...

  8. Angular4 扫雷小游戏

    扫雷小游戏,可以升级过关,难度随关卡增加.但是有很明显的bug,以后有时间会继续优化! HTML: <div class="mainContent"> <div ...

  9. 【npm 指令】 (不定时持续更新)

    查看webpack所有的版本及更多信息 npm info webpack 查看webpack所有的版本 npm info webpack versions 查看webpack最新的版本 npm vie ...

  10. pgsql 变量赋值方法

    1.网上一般说的方法如下: :=,赋值,比如user_id := 20; select into 赋值,比如 SELECT INTO myrec * FROM emp WHERE empname = ...