面向对象编程(OOP)思想小结
Concepts
- 类(class):对我们要解决问题的抽象,比如建造房子的蓝图;但实现机制上来讲,类是根据蓝图构建而成的,存储在内存中的,用来表示对象的数据。
- 对象(object):根据类构建的实体,比如根据蓝图造出来的房子;实现时,通常是复制类的数据到新的内存空间,有可能需要改变初始值。
- 实例(instance):对象的名字。指向对象在内存中存储地址的引用(reference)变量。也就是说,实例只是某个对象的别名(alias),给某个对象创建新的实例,并不会开辟新的内存空间存放一个新的对象。
4 Pillars
Encapsulation
将相关的变量和函数通过某种架构组合到一起,构成对象的类;此时该类的变量被称为属性(Property),函数被称为方法(Method)。
这样相当于将面向过程中的变量和函数做了分类,一个类中的变量可以随时被该类中的方法使用,并且不用作为函数参数来传递。因为越多的参数会使函数越难以使用,移植和维护。
Abstraction
隐藏对象内部的属性和方法。
优点:
- 简化接口设计:对外暴露的方法少,接口设计越简单;
- 减少代码变化的影响:更新模块内部私有属性和方法的代码,不会影响到模块外部适配的兼容性。
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”,中文译为多态。
优点:
- 统一方法命名
- 简化接口设计
Written with StackEdit.
面向对象编程(OOP)思想小结的更多相关文章
- JS--我发现,原来你是这样的JS:面向对象编程OOP[3]--(JS继承)
一.面向对象编程(继承) 这篇博客是面向对象编程的第三篇,JS继承.继承顾名思义,就是获取父辈的各种"财产"(属性和方法). 怎么实现继承? 我们的JavaScript比较特别了, ...
- 面向过程编程(OPP) 和面向对象编程(OOP)的关系
面向过程编程(OPP) 和面向对象编程(OOP)的关系 原文链接:http://blog.csdn.net/phphot/article/details/3985480 关于面向过程的编程(OPP)和 ...
- 2016/1/17 笔记 1,面向对象编程OOP 2,类 全
面向对象编程OOP 编程方式的发展 1,面向过程 重用性低 维护工作量大 2,面向对象 重用性高 维护容易 概念 1,对象 Object 一个具体的事物 是类的实例 2,类Class 同一 ...
- [JAVA] 面向对象编程OOP Note
面向对象编程OOP Note OOP五个基本特性1. 万物皆对象.2. 程序是对象的集合,它们通过发送消息来告知彼此所要做的.3. 每个对象都有自己的由其他对象所构成的存储.4. 每个对象都拥有其类型 ...
- 学习面向对象编程OOP 第一天
面向对象编程 Object Oriented Programming 一.什么是面向对象编程OOP 1.计算机编程架构; 2.计算机程序是由一个能够起到子程序作用的单元或者对象组合而成.也就是说由多个 ...
- JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)
一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...
- JS--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)
一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...
- S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则
注:以下图片均来自<如何向妻子解释OOD>译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html < ...
- 【软件构造】第三章第四节 面向对象编程OOP
第三章第四节 面向对象编程OOP 本节讲学习ADT的具体实现技术:OOP Outline OOP的基本概念 对象 类 接口 抽象类 OOP的不同特征 封装 继承与重写(override) 多态与重载( ...
- php面向对象编程(oop)基础知识示例解释
面向对象并不是一种技术,而是一种思想,是一种解决问题的最基本的思维方式!如何理解使用?OOP:面向对象编程 (直接代码说明) 1.面向对象的基本概念 示例demo: <?php header(& ...
随机推荐
- js如何将一个json数组对应放置到另一数组中去
需要将上面这个数组的每一个元素对应添加至下面的数组中 最后合成为这样的数组: 使用for循环,将第一个数组中的元素循环到第二个数组中
- DDL-库的管理
一.创建库create database [if not exists] 库名[ character set 字符集名]; 二.修改库alter database 库名 character set 字 ...
- 12c数据库重启后自动启动pdb
由于最近管理12c数据库,创建了9个新的pdb.相对于以前11g版本每天一个一个的环境检查,方便了很多. 但是因为一次意外宕机,数据库重启.虽然数据库重启,但是管理的pdb确不能自动重启,所以需要手动 ...
- 帝国CMS站点迁移
1.重新安装xmapp环境 安装包地址 链接:https://pan.baidu.com/s/1OSwlP90G9VMAZYVXMG245Q 提取码:gnfr 2.安装后启动 3.复制数据库信息 将旧 ...
- python的___setattr__魔方方法
___setattr__魔方方法一定要注意防止无限递归当在此方法内部给属性赋值的时候,那会调用此方法,又会重新赋值,无限重复最后要归于super是种解决方法.或者用dict方法. class R ...
- 算法训练 K好数(C/C++)AC码
蓝桥杯 算法训练 K好数 AC码 题目要求: 算法训练 K好数 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如 ...
- svn文件管理
将VS2010工程提交给Git管理时需要哪些文件: *.h *.cpp *.sln *.vcxproj *.vcxproj.filters *.qrc以及Resources目录下的资源 ...
- 消除运行MATLAB生成独立可执行程序的DOS黑屏
基于Matlab生成独立可执行文件后,每次运行都存在DOS黑屏问题,可通过以下方法解决: 在Matlab命令窗口中输入: cd(prefdir) edit compopts.bat 在打开的文件最后添 ...
- SpringMVC 中,当前台传入多个参数时,可将参数封装成一个bean类
在实际业务场景中,当前台通过 url 向后台传送多个参数时,可以将参数封装成一个bean类,在bean类中对各个参数进行非空,默认值等的设置. 前台 url ,想后台传送两个参数,userName 和 ...
- PHP base64转换成图片
获取base64文件 $image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASIAAAEiCAYAAABdvt+2AAAgAElEQV ...