对象[编辑]

对象(Object)是类的实例。比如。“狗”这个类列举狗的特点,从而使这个类定义了世界上全部的狗。

而莱丝这个对象则是一条详细的狗,它的属性也是详细的。狗有皮毛颜色。而莱丝的皮毛颜色是棕白色的。因此,莱丝就是狗这个类的一个实例。

一个详细对象属性的值被称作它的“状态”。(系统给对象分配内存空间。而不会给类分配内存空间。

这非常好理解。类是抽象的系统不可能给抽象的东西分配空间,而对象则是详细的。)

如果我们已经在上面定义了狗这个类,我们就能够用这个类来定义对象:

定义莱丝
莱丝.毛皮颜色:棕白色
莱丝.吠叫()

我们无法让狗这个类去吠叫,可是我们能够让对象“莱丝”去吠叫,正如狗能够吠叫,但没有详细的狗就无法吠叫。

类和对象就好比是“实型”和“1.23”,“实型”是一种数据的类型,而“1.23”是一个真正的“实数”(即对象)。全部的“实数”都具有“实型”所描诉的特征,如“实数的大小”,系统则分配内存给“实数”存储详细的数值。

§消息传递[编辑]

一个对象通过接受消息、处理消息、传出消息或使用其它类的方法来实现一定功能,这叫做消息传递机制(Message Passing)。

如:莱丝能够通过吠叫引起的注意。从而导致一系列的事发生。

§继承[编辑]

继承性(Inheritance)是指,在某种情况下,一个类会有“子类”。

子类比原本的类(称为父类)要更加详细化。比如,“狗”这个类可能会有它的子类“牧羊犬”和“吉娃娃犬”。

在这样的情况下,“莱丝”可能就是牧羊犬的一个实例。子类会继承父类的属性和行为。而且也可包括它们自己的。

我们如果“狗”这个类有一个方法(行为)叫做“吠叫()”和一个属性叫做“毛皮颜色”。

它的子类(前例中的牧羊犬和吉娃娃犬)会继承这些成员。这意味着程序猿仅仅须要将同样的代码写一次。

在伪代码中我们能够这样写:

牧羊犬:继承定义莱丝牧羊犬
莱丝.吠叫()    /* 注意这里调用的是狗这个类的吠叫方法。*/

回到前面的样例,“牧羊犬”这个类能够继承“毛皮颜色”这个属性,并指定其为棕白色。

而“吉娃娃犬”则能够继承“吠叫()”这种方法,并指定它的音调高于寻常。

子类也能够增加新的成员,比如。“吉娃娃犬”这个类能够增加一个方法叫做“颤抖()”。设若用“牧羊犬”这个类定义了一个实例“莱丝”。那么莱丝就不会颤抖,由于这种方法是属于吉娃娃犬的,而非牧羊犬。其实,我们能够把继承理解为“是”或“属于”。莱丝“是”牧羊犬,牧羊犬“属于”狗类。因此,莱丝既得到了牧羊犬的属性。又继承了狗的属性。 我们来看伪代码:

吉娃娃犬:继承
開始公有成员:颤抖()
结束
类牧羊犬:继承定义莱丝牧羊犬
莱丝.颤抖()    /* 错误:颤抖是吉娃娃犬的成员方法。 */

当一个类从多个父类继承时,我们称之为“多重继承”。如一仅仅狗既是吉娃娃犬又是牧羊犬(尽管其实并不合逻辑)。

多重继承并不总是被支持的,由于它非常难理解,又非常难被好好使用。

§封装性[编辑]

具备封装性(Encapsulation)的面向对象程序设计隐藏了某一方法的详细运行步骤,取而代之的是通过消息传递机制传送消息给它。因此,举例来说。“狗”这个类有“吠叫()”的方法,这一方法定义了狗详细该通过什么方法吠叫。

可是。莱丝的朋友并不知道它究竟是怎样吠叫的。

从实例来看:

/* 一个面向过程的程序会这样写: */
定义莱丝
莱丝.设置音调(5)
莱丝.吸气()
莱丝.吐气()/* 而当狗的吠叫被封装到类中,不论什么人都能够简单地使用: */
定义莱丝
莱丝.吠叫()

封装是通过限制仅仅有特定类的对象能够訪问这一特定类的成员,而它们通常利用接口实现消息的传入传出。

举个样例,接口能确保幼犬这一特征仅仅能被赋予狗这一类。

通常来说,成员会依它们的訪问权限被分为3种:公有成员、私有成员以及保护成员。

有些语言更进一步:Java能够限制同一包内不同类的訪问;C#和VB.NET保留了为类的成员聚集准备的keyword:internal(C#)和Friend(VB.NET);Eiffel语言则能够让用户指定哪个类能够訪问全部成员。

§多态[编辑]

多态(Polymorphism)是指由继承而产生的相关的不同的类。其对象对同一消息会做出不同的响应[2]。比如,狗和鸡都有“叫()”这一方法,可是调用狗的“叫()”,狗会吠叫。调用鸡的“叫()”,鸡则会啼叫。 我们将它体如今伪代码上:


開始公有成员:叫()開始吠叫()结束
结束类
開始公有成员:叫()開始啼叫()结束
结束定义莱丝
定义鲁斯特
莱丝.叫()
鲁斯特.叫()

转载于:https://www.cnblogs.com/brucemengbm/p/6742615.html

OOP Class具体解释相关推荐

  1. Python Day26:多态、封装、内置函数:__str__、__del__、反射(反省)、动态导入模块...

    ## 多态 ```python OOP中标准解释:多个不同类型对象,可以响应同一个方法,并产生不同结果,即为多态 多态好处:只要知道基类使用方法即可,不需要关心具体哪一个类的对象实现的,以不变应万变, ...

  2. delstr函数python_Python Day26:多态、封装、内置函数:__str__、__del__、反射(反省)、动态导入模块...

    ## 多态 ```python OOP中标准解释:多个不同类型对象,可以响应同一个方法,并产生不同结果,即为多态 多态好处:只要知道基类使用方法即可,不需要关心具体哪一个类的对象实现的, 以不变应万变 ...

  3. 计算机术语多态意思,C ++中的多态性

    据我所知: C ++提供了三种不同类型的多态性. 虚拟功能 函数名称重载 运算符重载 除了上述三种类型的多态性外,还存在其他种类的多态性: 运行 编译时间 ad-hoc多态性 参数多态性 我知道运行时 ...

  4. ansys 内聚力_纯功能:高内聚力,低耦合

    ansys 内聚力 TL;DR Why would you bother to write pure functions? Do you really need to establish high c ...

  5. php opp 面向对象,解释 OOP 与 OPP 的关系

    可能大多数人学习PHP的时候,是冲着他的简单易开发来的,所以很多初学者,不是很能理解OOP和OPP的概念,今天我就依照我的观点详细解说下. 首先我先谈谈OOP,OOP即是面对对象编程,Object O ...

  6. 乔布斯是如何形象解释 OOP 的

    原文地址: http://blog.jobbole.com/93941/ 有童鞋在 Quora 上问「什么是面向对象编程 OOP?」下面是 Amogh Talpallikar 的回答. 对于面向对象编 ...

  7. Java中OOA、OOD、OOP、OOT、OOSM、OOM的具体含义解释

    OOA: Object-Oriented Analysis(面向对象分析)  是指确定需求或者业务的角度,按照面向对象的思想来分析业务. OOD: Object-Oriented Design(面向对 ...

  8. OOP 面向对象 七大原则 (一)

    OOP 面向对象   七大原则 (一) 大家众所周知,面向对象有三大特征继承封装多态的同时,还具有这七大原则,三大特征上一篇已经详细说明,这一篇就为大家详解一下七大原则: 单一职责原则,开闭原则,里氏 ...

  9. 面向对象编程概念_如何向6岁的孩子解释面向对象的编程概念

    面向对象编程概念 by Alexander Petkov 通过亚历山大·佩特科夫(Alexander Petkov) Have you noticed how the same cliche ques ...

最新文章

  1. OpenCV 笔记(04)— OpenCV2 升级到 OpenCV3/CV4 的改动(去掉 CV_前缀、使用新的前缀替换、使用新的命名空间宏)
  2. VMware vSphere开发(1)安装配置VMware vSphere Web Services SDK的运行环境
  3. Win10:tensorflow-gpu安装总结
  4. android纹理缓存,Android OpenGLES(七) 理解纹理与纹理过滤
  5. TID大会学习心得之敏捷软件架构-微服务
  6. server2008R2平台部署exchange2010
  7. Windows 8.1下安装Mac OS X 10.8虚拟机
  8. unity 烘焙参数 设置_Unity通用渲染管线(URP)系列(九)——点光源和聚光灯
  9. laravel数据迁移问题
  10. word怎么调列宽_怎么给文件加密???
  11. 审车按月还是日期_@老司机,你该审车了,秒懂的审车攻略,快快揣口袋吧
  12. python编程入门指南-Python 入门指南
  13. 推荐算法之Thompson(汤普森)采样
  14. 20款免费项目管理系统推荐
  15. android ems具体意义?
  16. 完美解决Macbook安装win 10调节亮度的问题
  17. 九宫八阵图之虐翼阵——网闸
  18. 北大核心+CSCD期刊《电光与控制》投稿经验分享,2023年4月最新
  19. Android RSS订阅
  20. 让流媒体服务SRS支持P2P通信

热门文章

  1. C++多继承中的二义性问题
  2. Activiti7.0实战学习(九):查询历史表中的数据
  3. asp.net paypal信用卡支付功能
  4. Jquery——将页面定位到某个具体位置
  5. 专业办公套件WPS Office 2020 for Mac
  6. 香橙派Zero2电视盒子开发板连接HDMI如何修改分辨率
  7. 超人:钢铁之躯 Man of Steel (2013)
  8. java计算机毕业设计疫情期间高校师生外出请假管理系统录屏源代码+系统+数据库+lw文档
  9. 程序员的进化 - 在拉勾1024程序员节上的演讲
  10. 云计算实战应用案例精讲-【深度学习】多模态融合(论文篇三)