OOP Class具体解释
对象[编辑]
对象(Object)是类的实例。比如。“狗”这个类列举狗的特点,从而使这个类定义了世界上全部的狗。
而莱丝这个对象则是一条详细的狗,它的属性也是详细的。狗有皮毛颜色。而莱丝的皮毛颜色是棕白色的。因此,莱丝就是狗这个类的一个实例。
一个详细对象属性的值被称作它的“状态”。(系统给对象分配内存空间。而不会给类分配内存空间。
这非常好理解。类是抽象的系统不可能给抽象的东西分配空间,而对象则是详细的。)
如果我们已经在上面定义了狗这个类,我们就能够用这个类来定义对象:
定义莱丝是狗
莱丝.毛皮颜色:棕白色
莱丝.吠叫()
我们无法让狗这个类去吠叫,可是我们能够让对象“莱丝”去吠叫,正如狗能够吠叫,但没有详细的狗就无法吠叫。
类和对象就好比是“实型”和“1.23”,“实型”是一种数据的类型,而“1.23”是一个真正的“实数”(即对象)。全部的“实数”都具有“实型”所描诉的特征,如“实数的大小”,系统则分配内存给“实数”存储详细的数值。
§消息传递[title=%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1&action=edit§ion=4" title="编辑小节:消息传递" style="text-decoration:none; color:rgb(11,0,128)">编辑
]
一个对象通过接受消息、处理消息、传出消息或使用其它类的方法来实现一定功能,这叫做消息传递机制(Message Passing)。
如:莱丝能够通过吠叫引起人的注意。从而导致一系列的事发生。
§继承[编辑]
继承性(Inheritance)是指,在某种情况下,一个类会有“子类”。
子类比原本的类(称为 title=%E7%88%B6%E7%B1%BB&action=edit&redlink=1" class="new" title="父类(页面不存在)" style="text-decoration:none; color:rgb(165,88,88)">父类
在这样的情况下,“莱丝”可能就是牧羊犬的一个实例。子类会继承父类的 title=%E5%B1%9E%E6%80%A7&action=edit&redlink=1" class="new" title="属性(页面不存在)" style="text-decoration:none; color:rgb(165,88,88)">属性
我们如果“狗”这个类有一个方法(行为)叫做“吠叫()”和一个属性叫做“毛皮颜色”。
它的子类(前例中的牧羊犬和吉娃娃犬)会继承这些成员。这意味着程序猿仅仅须要将同样的代码写一次。
在伪代码中我们能够这样写:
类牧羊犬:继承狗 定义莱丝是牧羊犬
莱丝.吠叫() /* 注意这里调用的是狗这个类的吠叫方法。*/
回到前面的样例,“牧羊犬”这个类能够继承“毛皮颜色”这个属性,并指定其为棕白色。
而“吉娃娃犬”则能够继承“吠叫()”这种方法,并指定它的音调高于寻常。
子类也能够增加新的成员,比如。“吉娃娃犬”这个类能够增加一个方法叫做“颤抖()”。设若用“牧羊犬”这个类定义了一个实例“莱丝”。那么莱丝就不会颤抖,由于这种方法是属于吉娃娃犬的,而非牧羊犬。其实,我们能够把继承理解为“是”或“属于”。莱丝“是”牧羊犬,牧羊犬“属于”狗类。因此,莱丝既得到了牧羊犬的属性。又继承了狗的属性。 我们来看伪代码:
类吉娃娃犬:继承狗
開始
公有成员:
颤抖()
结束
类牧羊犬:继承狗 定义莱丝是牧羊犬
莱丝.颤抖() /* 错误:颤抖是吉娃娃犬的成员方法。 */
当一个类从多个父类继承时,我们称之为“多重继承”。如一仅仅狗既是吉娃娃犬又是牧羊犬(尽管其实并不合逻辑)。
多重继承并不总是被支持的,由于它非常难理解,又非常难被好好使用。
§封装性[编辑]
具备封装性(Encapsulation)的面向对象程序设计隐藏了某一方法的详细运行步骤,取而代之的是通过消息传递机制传送消息给它。因此,举例来说。“狗”这个类有“吠叫()”的方法,这一方法定义了狗详细该通过什么方法吠叫。
可是。莱丝的朋友并不知道它究竟是怎样吠叫的。
从实例来看:
/* 一个面向过程的程序会这样写: */
定义莱丝
莱丝.设置音调(5)
莱丝.吸气()
莱丝.吐气() /* 而当狗的吠叫被封装到类中,不论什么人都能够简单地使用: */
定义莱丝是狗
莱丝.吠叫()
封装是通过限制仅仅有特定类的对象能够訪问这一特定类的成员,而它们通常利用接口实现消息的传入传出。
举个样例,接口能确保幼犬这一特征仅仅能被赋予狗这一类。
通常来说,成员会依它们的訪问权限被分为3种:公有成员、私有成员以及 title=%E4%BF%9D%E6%8A%A4%E6%88%90%E5%91%98&action=edit&redlink=1" class="new" title="保护成员(页面不存在)" style="text-decoration:none; color:rgb(165,88,88)">保护成员
有些语言更进一步:Java能够限制同一包内不同类的訪问;C#和VB.NET保留了为类的成员聚集准备的keyword:internal(C#)和Friend(VB.NET);Eiffel语言则能够让用户指定哪个类能够訪问全部成员。
§多态[编辑]
多态(Polymorphism)是指由继承而产生的相关的不同的类。其对象对同一消息会做出不同的响应[2]。比如,狗和鸡都有“叫()”这一方法,可是调用狗的“叫()”,狗会吠叫。调用鸡的“叫()”,鸡则会啼叫。
我们将它体如今伪代码上:
类狗
開始
公有成员:
叫()
開始
吠叫()
结束
结束 类鸡
開始
公有成员:
叫()
開始
啼叫()
结束
结束 定义莱丝是狗
定义鲁斯特是鸡
莱丝.叫()
鲁斯特.叫()
OOP Class具体解释的更多相关文章
- 一个CS出身的基本素养
从前天10号提交Paper之后,连三个晚上之后突然正常起来竟然变成倒时差状态. 这周打算给自己一个空窗期,好好想想下两到三个月要做的事. 好吧,除了"一日一算法",当下两个月还有一 ...
- 封装,封装的原理,Property ,setter ,deleter,多态,内置函数 ,__str__ , __del__,反射,动态导入模块
1,封装 ## 什么是封装 what 对外隐藏内部的属性,以及实现细节,并给外部提供使用的接口 学习封装的目的:就是为了能够限制外界对内部数据的方法 注意 :封装有隐藏的意思,但不是单纯的隐藏 pyt ...
- 2018你应该了解这些.NET面试题
2018年准备要找.NET开发相关工作的你准备好了吗,下面是小编准备的一些.NET相关的面试题,来阅读一下,也许对你有帮助哦~ 1. 谈谈你对MVC和三层架构的理解. MVC即模型.视图.控制器,模型 ...
- php面向对象编程(oop)基础知识示例解释
面向对象并不是一种技术,而是一种思想,是一种解决问题的最基本的思维方式!如何理解使用?OOP:面向对象编程 (直接代码说明) 1.面向对象的基本概念 示例demo: <?php header(& ...
- java常用英文解释
java常用名词解释: OO: object-oriented ,面向对象 OOP:object-oriented programming,面向对象编程 Author:JCC Object:对象JDK ...
- 转:如何向妻子解释OOD
如何向妻子解释OOD 前言 此文译自CodeProject上<How I explained OOD to my wife>一文,该文章在Top Articles上排名第3,读了之后觉得非 ...
- JavaScript的面向对象编程(OOP)(一)——类
在学习JavaScript面向对象的编程之前,需要知道,并了解面向对象的一些基本的常识.初学者中大多数都以为面向对象中,面向对象的编程是很重要和占据很大一部分精力.笔者在之前也是认为OOP是面向对象的 ...
- Python2.6-原理之类和oop(上)
来自<python学习手册第四版>第六部分 一.oop:宏伟蓝图(26章) 在这之前的部分中,经常会使用"对象"这个词,其实,到目前为止都是以对象为基础的,在脚本中传递 ...
- 【译文】 C#面向对象的基本概念 (Basic C# OOP Concept) 第一部分(类,对象,变量,方法,访问修饰符)
译文出处:http://www.codeproject.com/Articles/838365/Basic-Csharp-OOP-Concept 相关文档:http://files.cnblogs.c ...
随机推荐
- POJ3666 Making the Grade [DP,离散化]
题目传送门 Making the Grade Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9090 Accepted: ...
- CodeVS1169 传纸条 [DP补完计划]
题目传送门 题目描述 Description 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端, ...
- python笔记二:常用数据类型操作
1.切片:常用于取list或tuple的部分元素的操作 1)l=[1,2,3,4,5,6] l[:3]表示取前3个值,l[1:5]表示1到5个值, L[-3:]从列表最后往前数即最后3个数.... 2 ...
- Poj1182 食物链(并查集/带权并查集)
题面 Poj 题解 这里采用并查集的补集. \(x\)表示同类集合,\(x+n\)表示敌人集合,\(x+n\times2\)表示敌人的敌人集合. 如果当前给出的是一对同类关系,就判断\(x\)是否吃\ ...
- luogu P1002 过河卒
题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. ...
- JZYZOJ 1388 旅游 状压dp
http://172.20.6.3/Problem_Show.asp?id=1388 求拓扑排序方案数 状压dp,最开始以为是拓扑排序加数论或者搜索,没想到是状压dp,突然气死.jpg: 完全没有 ...
- 【模拟】Gym - 101190A - Abbreviation
让你把所有的“连续的仅有首字母大写的”词组用缩写表示,并且在后面用括号注明原词组. #include<cstdio> #include<cstring> using names ...
- 【树形dp】Codeforces Round #405 (rated, Div. 1, based on VK Cup 2017 Round 1) B. Bear and Tree Jumps
我们要统计的答案是sigma([L/K]),L为路径的长度,中括号表示上取整. [L/K]化简一下就是(L+f(L,K))/K,f(L,K)表示长度为L的路径要想达到K的整数倍,还要加上多少. 于是, ...
- android 关于Make sure the plugin is properly configured问题的解决办法
这个问题引发的原因最初的报错是: [2013-10-14 10:01:58 - XXX] The connection to adb is down, and a severe error has o ...
- python基础之条件判断和循环
1.条件判断 age = 3 if age >= 18: print('adult') elif age >= 6: print('teenager') else: print('kid' ...