《JavaScript面向对象编程指南(第2版)》——1.6 面向对象的程序设计

  • 时间:
  • 浏览:7

1.6.5 继承

通过继承这些 法律依据,大伙都也能 非常优雅地实现对现有代码的重用。类事 ,大伙有兩个叫做Person的一般性对象,其中富含一些姓名、出生日期类事 的属性,以及一些功能性函数,如步行、谈话、睡觉、吃饭等。有刚刚,当大伙发现自己也能 有兩个Programmer对象时,当然,这前一天要我再将Person对象中所有的法律依据与属性重新实现一遍,但除此之外还一种更聪明的做法,即大伙都也能 让Programmer继承自Person,另有兩个就省去了大伙不少工作。机会Programmer对象只也能 实现属于它自己的那要素特殊功能(类事 “编写代码”),而其余要素只需重用Person的实现即可。

但大伙要明白,JavaScript与C++或Java这些 传统的面向对象语言不同,它实际上压根儿没法类。该语言的一切完整性都是 基于对象的,其依靠的是一套原型(prototype)系统。而原型一种实际上也是一种对象,大伙上面也会再来完整性讨论这些 问题图片。在传统的面向对象语言中,大伙一般会另有兩个描述自己的做法:“我基于Person类创建了有兩个叫做Bob的新对象。”而在这些 基于原型的面向对象语言中,大伙则要另有兩个描述:“我将现有的Person对象扩展成了有兩个叫做Bob的新对象。”

本节书摘来自异步社区《JavaScript面向对象编程指南(第2版)》一书中的第1章,第1.6节,作者:【加拿大】Stoyan Stefanov著,更多章节内容都也能 访问云栖社区“异步社区”公众号查看

关于信息隐藏,还有自己面内容,即法律依据与属性的可见性。在一些语言中,大伙能通过public、private、protected哪2个关键字来限定法律依据和属性的可见性。这些 限定分类定义了对象用户所能访问的层次。类事 ,private法律依据只能其所在对象内内外部的代码才有权访问,而public法律依据则是任何人都能访问的。在JavaScript中,尽管所有的法律依据和属性完整性都是 public的,有刚刚大伙机会看完,该语言还是提供了一些隐藏数据的法律依据,以保护多多线程 的隐密性。

1.6.4 聚合

所谓聚合,有前一天也叫做组合,实际上是指大伙将2个现有对象合并成有兩个新对象的过程。总之,这些 概念所强调的就是这些 将多个对象合而为一的能力。通过聚合这些 强有力的法律依据,大伙都也能 将有兩个问题图片分解成多个更小的问题图片。另有兩个一来,问题图片就会显得更易于管理(便于大伙各个击破)。当有兩个问题图片域的繁复程度令大伙难以接受时,大伙就都也能 考虑将它分解成若干子问题图片区,有刚刚必要句子,哪2个问题图片区还都也能 再继续分解成更小的分区。另有兩个做有助大伙从2个不同的抽象层次来考虑这些 问题图片。

大伙都也能 试一下。类事 ,在“The black cat sleeps on my head”这些 句子中,“the cat”(名词)就是有兩个对象,“black”(形容词)则是有兩个颜色属性值,而“sleep”(动词)则代表有兩个动作,也就是OOP语义中的法律依据。甚至,为了进一步证明这些 比拟的合理性,大伙也都也能 将句子中的“on my head”看做动作“sleep”的有兩个限定条件,有刚刚,它也都也能 被当做传递给sleep法律依据的有兩个参数。

此外,大伙还有兩个口语方面的比拟1。

1.6.3 封装

封装是另有兩个与OOP相关的概念,其主要用于阐述对象中所富含的内容。封装概念通常由两要素组成。

1.6.2 类

在现实生活中,类事 对象之间往往完整性都是 一些同去的组成特征。类事 蜂鸟和老鹰都具有鸟类的特征,有刚刚它们都也能 被统称为鸟类。在OOP中,类实际上就是对象的设计蓝图或制作配方。“对象”这些 词,大伙有前一天也叫做“实例”,什么都大伙都也能 说老鹰是鸟类的有兩个实例2。大伙都也能 基于同有兩个类创建出一些不同的对象。机会类更多的是一种模板,而对象则是在哪2个模板的基础上被创建出来的实体。

在传统的OOP环境中,继承通常指的是类与类之间的关系,但机会JavaScript中不所处类,有刚刚它的继承只能所处在对象之间。

除此之外,这些 术语中还有另一层信息隐藏的概念,这完整性部都是 自己面的问题图片。有刚刚,大伙在理解这些 概念时,也能 要留意它在OOP中的具体语境。

在深入学习JavaScript前一天,大伙首没能了解一下“面向对象”的具体含义,以及这些 多多线程 设计风格的主要特征。下面大伙列出了一系列在面向对象多多线程 设计(OOP)中最常用到的概念:

以有兩个MP3播放器为例。机会大伙假设它是有兩个对象,没法作为该对象的用户,大伙无疑也能 一些类事 于像按钮、显示屏另有兩个的工作接口。哪2个接口会帮助大伙使用该对象(如播放歌曲类事 )。至于它们内内外部是怎么还还可以工作的,大伙并非清楚,有刚刚大多数请况下就是会在乎哪2个。换句话说,哪2个接口的实现对大伙来说是隐藏的。同样的,在OOP中也是没法。当大伙在代码中调用有兩个对象的法律依据时,无论该对象是来自大伙自己的实现还是某个第三方库,大伙完整性都是 也能 知道该法律依据是怎么还还可以工作的。在编译型语言中,大伙甚至都无法查看哪2个对象的工作代码。机会JavaScript是一种解释型语言,源代码是都也能 查看的。但最少在封装概念上它们是一致的,即大伙只也能 知道所操作对象的接口,而并非去关心它的具体实现。

类事 ,自己电脑是有兩个非常繁复的对象,大伙不机会知道它启动时所所处的完整性事情。但机会大伙将这些 问题图片的抽象级别降低到一定的程度,只关注它2个组件对象的初始化工作,类事 显示器对象、鼠标对象、键盘对象等,大伙就很容易深入了解哪2个子对象请况,有刚刚再将哪2个要素的结果合并起来,前一天那个繁复问题图片就迎刃而解了。

1.6.6 多态

在前一天的例子中,大伙的Programmer对象继承了上一级对象Person的所有法律依据。这愿因分析这有兩个对象都实现了“talk”等法律依据。现在,大伙的代码富含兩个叫做Bob的变量,即便是在大伙不知道它是有兩个Person对象还是有兩个Programmer对象请况下,也依然都也能 直接调用该对象的“talk”法律依据,而并非担心这会影响代码的正常工作。类事 这些 不同对象通过相同的法律依据调用来实现本人行为的能力,大伙就称之为多态。

大伙还都也能 找到一些类事 请况,类事 Book是由有兩个或多个author对象、publisher对象、若干chapter对象以及一组table对象等组合(聚合)而成的对象。

当有兩个对象继承自另有兩个对象时,通常会往其中加入新的法律依据,以扩展被继承的老对象。大伙通常将这些 过程称之为“B继承自A”机会“B扩展自A”。另外对于新对象来说,它也都也能 根据自己的也能 ,从继承的那组法律依据中挑选2个来重新定义。另有兩个做并非会改变对象的接口,机会其法律依据名是相同的,只不过当大伙调用新对象时,该法律依据的行为与前一天不同了。大伙将这些 重定义继承法律依据的过程叫做覆写。

现在,大伙就来完整性了解每个概念。当然,机会您在面向对象多多线程 设计方面是有兩个新手,机会只能挑选自己与否 真的理解了哪2个概念,那就是必太过担心。前一天大伙完整性都是通过一些代码来为您具体分析它们。尽管哪2个概念说起来好像很繁复、很高级,但一旦大伙进入真正的实践,事情往往就会简单得多。

1.6.1 对象

既然这些 多多线程 设计风格叫做面向对象,没法其重点就应该在对象上。而所谓对象,实质上就是指“事物”(包括人和物)在多多线程 设计语言中的表现形式。这里的“事物”都也能 是任何东西(如某个客观所处的对象,机会一些较为抽象的概念)。类事 ,对于猫这些 常见对象来说,大伙都也能 看完它们具有一些明确的特征(如颜色、名字、体型等),能执行一些动作(如喵喵叫、睡觉、躲起来、逃跑等)。在OOP语义中,哪2个对象特征都叫做属性,而哪2个动作则被称为法律依据。