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

  • 时间:
  • 浏览:2
  • 来源:5分排列5_5分排列3

当有四个 对象继承自原本对象时,通常会往其中加入新的土办法,以扩展被继承的老对象。或多或少人通常将你這個 过程称之为“B继承自A”将会“B扩展自A”。另外对于新对象来说,它能够能够根据被委托人的都要,从继承的那组土办法中选取哪几个来重新定义。原本做无须会改变对象的接口,将会其土办法名是相同的,只不过当或多或少人调用新对象时,该土办法的行为与后要不同了。或多或少人将你這個 重定义继承土办法的过程叫做覆写。

此外,或多或少人还有有四个 口语方面的比喻1。

1.6.6 多态

在后要的例子中,或多或少人的Programmer对象继承了上一级对象Person的所有土办法。这因为这有四个 对象都实现了“talk”等土办法。现在,或多或少人的代码包蕴含四个 叫做Bob的变量,即便是在或多或少人我假若知道它是有四个 Person对象还是有四个 Programmer对象状况下,也依然都还可以够直接调用该对象的“talk”土办法,而无须担心这会影响代码的正常工作。类似你這個 不同对象通过相同的土办法调用来实现各自 行为的能力,或多或少人就称之为多态。

或多或少人都还可以够试一下。类似,在“The black cat sleeps on my head”你這個 语句中,“the cat”(名词)假若有四个 对象,“black”(形容词)则是有四个 颜色属性值,而“sleep”(动词)则代表有四个 动作,也假若OOP语义中的土办法。甚至,为了进一步证明你這個 比喻的合理性,或多或少人能够能够将语句中的“on my head”看做动作“sleep”的有四个 限定条件,或者 ,它能够能够被当做传递给sleep土办法的有四个 参数。

1.6.4 聚合

所谓聚合,有后要也叫做组合,实际上是指或多或少人将哪几个现有对象合并成有四个 新对象的过程。总之,你這個 概念所强调的假若你這個 将多个对象合而为一的能力。通过聚合你這個 强有力的土办法,或多或少人都还可以够将有四个 什么的问题分解成多个更小的什么的问题。原本一来,什么的问题就会显得更易于管理(便于或多或少人各个击破)。当有四个 什么的问题域的僵化 程度令或多或少人难以接受时,或多或少人就都还可以够考虑将它分解成若干子什么的问题区,或者 必要语句,哪此什么的问题区还都还可以够再继续分解成更小的分区。原本做能够或多或少人从哪几个不同的抽象层次来考虑你這個 什么的问题。

1.6.2 类

在现实生活中,类似对象之间往往后要 或多或少一起去的组成价值形式。类似蜂鸟和老鹰都具有鸟类的价值形式,或者 它们都还可以够被统称为鸟类。在OOP中,类实际上假若对象的设计蓝图或制作配方。“对象”你這個 词,或多或少人有后要也叫做“实例”,或多或少或多或少人都还可以够说老鹰是鸟类的有四个 实例2。或多或少人都还可以够基于同有四个 类创建出或多或少不同的对象。将会类更多的是一种生活模板,而对象则是在哪此模板的基础上被创建出来的实体。

除此之外,你這個 术语中还有另一层信息隐藏的概念,这完后要 被委托人面的什么的问题。或者 ,或多或少人在理解你這個 概念时,都要要留意它在OOP中的具体语境。

在深入学习JavaScript后要,或多或少人首不能自己了解一下“面向对象”的具体含义,以及你這個 多多多线程 设计风格的主要价值形式。下面或多或少人列出了一系列在面向对象多多多线程 设计(OOP)中最常用到的概念:

以有四个 MP3播放器为例。将会或多或少人假设它是有四个 对象,不能自己作为该对象的用户,或多或少人无疑都要或多或少类似像按钮、显示屏原本的工作接口。哪此接口会帮助或多或少人使用该对象(如播放歌曲类似)。至于它们内内外部是如何工作的,或多或少人无须清楚,或者 大多数状况下假若会在乎哪此。换句话说,哪此接口的实现对或多或少人来说是隐藏的。同样的,在OOP中也是不能自己。当或多或少人在代码中调用有四个 对象的土办法时,无论该对象是来自或多或少人被委托人的实现还是某个第三方库,或多或少人后要 都要知道该土办法是如何工作的。在编译型语言中,或多或少人甚至都无法查看哪此对象的工作代码。将会JavaScript是一种生活解释型语言,源代码是都还可以够查看的。但合适在封装概念上它们是一致的,即或多或少人只都要知道所操作对象的接口,而无须去关心它的具体实现。

1.6.3 封装

封装是原本与OOP相关的概念,其主要用于阐述对象中所蕴含的内容。封装概念通常由两每项组成。

类似,被委托人电脑是有四个 非常僵化 的对象,或多或少人不将会知道它启动时所指在的全版事情。但将会或多或少人将你這個 什么的问题的抽象级别降低到一定的程度,只关注它哪几个组件对象的初始化工作,类似显示器对象、鼠标对象、键盘对象等,或多或少人就很容易深入了解哪此子对象状况,或者 再将哪此每项的结果合并起来,后要那个僵化 什么的问题就迎刃而解了。

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

现在,或多或少人就来全版了解每个概念。当然,将会您在面向对象多多多线程 设计方面是有四个 新手,将会只能选取被委托人与非 真的理解了哪此概念,那假若必太过担心。后要或多或少人后要通过或多或少代码来为您具体分析它们。尽管哪此概念说起来好像很僵化 、很高级,但一旦或多或少人进入真正的实践,事情往往就会简单得多。

在传统的OOP环境中,继承通常指的是类与类之间的关系,但将会JavaScript中不指在类,或者 它的继承只能指在在对象之间。

1.6.5 继承

通过继承你這個 土办法,或多或少人都还可以够非常优雅地实现对现有代码的重用。类似,或多或少人有有四个 叫做Person的一般性对象,其中蕴含或多或少姓名、出生日期类似的属性,以及或多或少功能性函数,如步行、谈话、睡觉、吃饭等。或者 ,当或多或少人发现被委托人都要有四个 Programmer对象时,当然,这后要或者你再将Person对象中所有的土办法与属性重新实现一遍,但除此之外还一种生活更聪明的做法,即或多或少人都还可以够让Programmer继承自Person,原本就省去了或多或少人不少工作。将会Programmer对象只都要实现属于它被委托人的那每项特殊功能(类似“编写代码”),而其余每项只需重用Person的实现即可。

但或多或少人要明白,JavaScript与C++或Java你這個 传统的面向对象语言不同,它实际上压根儿不能自己类。该语言的一切后要 基于对象的,其依靠的是一套原型(prototype)系统。而原型一种生活实际上也是一种生活对象,或多或少人后边也会再来全版讨论你這個 什么的问题。在传统的面向对象语言中,或多或少人一般会原本描述被委托人的做法:“我基于Person类创建了有四个 叫做Bob的新对象。”而在你這個 基于原型的面向对象语言中,或多或少人则要原本描述:“我将现有的Person对象扩展成了有四个 叫做Bob的新对象。”

关于信息隐藏,还有被委托人面内容,即土办法与属性的可见性。在或多或少语言中,或多或少人能通过public、private、protected哪此关键字来限定土办法和属性的可见性。你這個 限定分类定义了对象用户所能访问的层次。类似,private土办法只能其所在对象内内外部的代码才有权访问,而public土办法则是任何人都能访问的。在JavaScript中,尽管所有的土办法和属性后要 public的,或者 或多或少人将会看完,该语言还是提供了或多或少隐藏数据的土办法,以保护多多多线程 的隐密性。

或多或少人还都还可以够找到或多或少类似状况,类似Book是由有四个 或多个author对象、publisher对象、若干chapter对象以及一组table对象等组合(聚合)而成的对象。

1.6.1 对象

既然你這個 多多多线程 设计风格叫做面向对象,不能自己其重点就应该在对象上。而所谓对象,实质上假若指“事物”(包括人和物)在多多多线程 设计语言中的表现形式。这里的“事物”能与非 任何东西(如某个客观指在的对象,将会或多或少较为抽象的概念)。类似,对于猫你這個 常见对象来说,或多或少人都还可以够看完它们具有或多或少明确的价值形式(如颜色、名字、体型等),能执行或多或少动作(如喵喵叫、睡觉、躲起来、逃跑等)。在OOP语义中,哪此对象价值形式都叫做属性,而哪此动作则被称为土办法。