《JavaScript面向对象编程指南》——1.5 面向对象的程序设计

  • 时间:
  • 浏览:4
  • 来源:uu快3单双计划_uu快3安卓版_真假

1.5.1 对象

既然这人程序设计风格叫做面向对象,比较慢 它的重点就在于对象。而所谓的对象,实质上是指“事物”(包括人和物)在程序设计语言中的表现形式。这里的“事物”都时只是任何东西(如某个客观趋于稳定的对象,将会这人较为抽象的概念)。同类 ,对于猫这人常见对象来说,亲戚亲戚我愿意人们歌词 都时要看得人它们具有这人明确的型态(如颜色、名字、体型等),能执行这人动作(如喵喵叫、睡觉、躲起来、逃跑等)。在OOP语义中,这人对象型态就叫做属性,而这人动作就称之为方法。

此外,亲戚亲戚我愿意人们歌词 还另三个小口语方面的比拟1:

1.5.4 聚合

所谓聚合,有我愿意也叫做组合,实际上是指亲戚亲戚我愿意人们歌词 将好多个现有对象合并成另三个小新对象的过程。总之,这人概念所强调的只是这人将多个对象合而为一的能力。通过聚合这人强有力的方法,亲戚亲戚我愿意人们歌词 都时要将另三个小现象报告 分解成多个更小的现象报告 。比较慢 一来,现象报告 就会显得更易于管理(便于亲戚亲戚我愿意人们歌词 各个击破)。当另三个小现象报告 域的错综复杂程度令亲戚亲戚我愿意人们歌词 难以接受时,亲戚亲戚我愿意人们歌词 就都时要考虑将它分解成若干子现象报告 区,我愿意必要一段话,这人现象报告 区还都时要再继续分解成更小的分区。比较慢 做利于亲戚亲戚我愿意人们歌词 从好多个不同的抽象层次来考虑这人现象报告 。同类 ,当时人电脑是另三个小非常错综复杂的对象,亲戚亲戚我愿意人们歌词 不将会知道它启动时所趋于稳定的完正事情。但将会亲戚亲戚我愿意人们歌词 将这人现象报告 的抽象级别降低到一定的程度,只关注它好多个组件对象的初始化工作,同类 监视器对象、鼠标对象、键盘对象等,亲戚亲戚我愿意人们歌词 就很容易深入了解这人子对象情况汇报,我愿意再将这人偏离 的结果合并起来,我愿意那个错综复杂现象报告 就迎刃而解了。

对象、方法、属性



封装

聚合

重用与继承

多态

现在,让亲戚亲戚我愿意人们歌词 来进行逐一阐述。

亲戚亲戚我愿意人们歌词 还都时要找到这人同类 情况汇报,同类 Book是由另三个小或多个author对象、publisher对象、若干chapter对象以及一组table对象等合并(聚合)而成的对象。

1.5.2 类

在现实生活中,同类 的对象之间往往时要这人同去的组成型态。同类 蜂鸟和老鹰都具有鸟类的型态,我愿意它们都时要被统称为鸟类。在OOP中,类实际上只是对象的设计蓝图将会制作配方。“对象”这人词,亲戚亲戚我愿意人们歌词 有我愿意也叫做“实例”,这人这人亲戚亲戚我愿意人们歌词 都时要说老鹰是鸟类的另三个小实例2。亲戚亲戚我愿意人们歌词 能基于相同的类创建出这人不同的对象。将会类更多的是一种生活模板,而对象只是在这人模板的基础上被创建出来的。

1.5.6 多态

在我愿意的例子中,亲戚亲戚我愿意人们歌词 的Programmer对象继承了上一级对象Person的所有方法。这原应这另三个小对象都实现了“talk”等方法。现在,亲戚亲戚我愿意人们歌词 的代码中另三个小叫做Bob的变量,即便是在亲戚亲戚我愿意人们歌词 他不知道它是另三个小Person对象还是另三个小Programmer对象情况汇报下,也依然都时要直接调用该对象的“talk”方法,而并不担心这会影响代码的正常工作。同类 这人不同对象通过相同的方法调用来实现每个人所有所有行为的能力,亲戚亲戚我愿意人们歌词 就称之为多态。

关于信息隐藏,还有当时人面内容,即方法与属性的可见性。在这人语言中,亲戚亲戚我愿意人们歌词 能通过public、private、protected这人关键字来限定方法和属性的可见性。这人限定分类定义了对象用户所能访问的层次。同类 ,private方法比较慢 其所在对象内部的代码才有权访问,而public方法则是任何人都能访问的。在JavaScript中,尽管所有的方法和属性时要public的,我愿意亲戚亲戚我愿意人们歌词 将会看得人,该语言还是提供了这人隐藏数据的方法,以保护程序的隐密性。

我愿意亲戚亲戚我愿意人们歌词 要明白,JavaScript与C++或Java这人传统的面向对象语言不同,它实际上压根儿比较慢 类。该语言的一切时要基于对象的,其所依靠的是一套原型系统(这里的原型(prototype)实际上也是一种生活对象,亲戚亲戚我愿意人们歌词 稍后再来完正讨论这人现象报告 )。在传统的面向对象语言中,亲戚亲戚我愿意人们歌词 一般会比较慢 描述当时人的做法:“我基于Person类创建了另三个小叫做Bob的新对象。”,而在这人基于原型的面向对象语言中,亲戚亲戚我愿意人们歌词 则会比较慢 描述:“我将现有的Person对象扩展成了另三个小叫做Bob的新对象。”

1.5.5 继承

通过继承这人方法,亲戚亲戚我愿意人们歌词 都时要非常优雅地实现对现有代码的重用。同类 ,亲戚亲戚我愿意人们歌词 另三个小叫做Person的一般性对象,其中所含这人姓名、出生日期同类 的属性,以及这人功能性函数,如步行、谈话、睡觉、吃饭等。我愿意,当亲戚亲戚我愿意人们歌词 发现当时人时要另三个小Programmer对象时,当然,这我想我愿意愿意你再将Person对象中所有的方法与属性重新实现一遍,但除此之外还一种生活生活更聪明的做法,即亲戚亲戚我愿意人们歌词 都时要让Programmer继承自Person,比较慢 就省去了亲戚亲戚我愿意人们歌词 不少工作。将会Programmer对象只时要实现属于它当时人的那偏离 特殊功能(同类 “编写代码”),而其余偏离 只需重用Person的实现即可。

在亲戚亲戚我愿意人们歌词 深入学习JavaScript我愿意,首比较慢了解一下“面向对象”的具体含义,以及这人程序设计风格的主要型态。下面亲戚亲戚我愿意人们歌词 列出了一系列在面向对象程序设计(OOP)中最常用到的概念:

1.5.3 封装

封装则是比较慢 OOP相关的概念,它主要用于阐述对象中所所含(或封装)的内容,它们通常由两偏离 组成:

本节书摘来自异步社区《JavaScript面向对象编程指南》一书中的第1章,第1.5节,作者: 【加】Stoyan Stefanov 译者: 凌杰 更多章节内容都时要访问云栖社区“异步社区”公众号查看。

当另三个小对象继承自比较慢 对象时,通常会往其中加入新的方法,以扩展被继承的老对象。亲戚亲戚我愿意人们歌词 通常将这人过程称之为“B继承自A”将会“B扩展自A”。另外对于新对象来说,它也都时要根据当时人的时要,从继承而来那组方法中挑选好多个来重新定义。比较慢 做并后会改变对象的接口,将会方法的名字是相同的,只不过当亲戚亲戚我愿意人们歌词 调用新对象时,该方法的行为与我愿意不同了。亲戚亲戚我愿意人们歌词 将这人重定义继承方法的过程叫做覆写。

以另三个小MP3播放器为例。将会假设这是另三个小对象,比较慢 作为该对象的用户,亲戚亲戚我愿意人们歌词 无疑时要这人同类 于像按钮、显示屏比较慢 的工作接口。这人接口能帮助亲戚亲戚我愿意人们歌词 使用该对象(如播放歌曲同类 )。至于它们内部是怎样工作的,亲戚亲戚我愿意人们歌词 并不清楚,我愿意多数情况汇报下只是会在乎这人。换句话说,这人接口的实现对亲戚亲戚我愿意人们歌词 来说是不可见的。同样的,在OOP中也是比较慢 。当亲戚亲戚我愿意人们歌词 在代码中调用另三个小对象的方法时,无论该对象是来自亲戚亲戚我愿意人们歌词 当时人的实现还是某个第三方库,亲戚亲戚我愿意人们歌词 时要时要知道该方法是怎样工作的。在编译型语言中,亲戚亲戚我愿意人们歌词 甚至都无法查看这人对象的工作代码。而将会JavaScript是一种生活解释型语言,源代码是都时要查看的。但相当于在这人概念上它们是一致的,即亲戚亲戚我愿意人们歌词 只时要知道所操作对象的接口,而并不去关心它的具体实现。

相关的数据(用于存储属性)。

基于这人数据所能做的事(所能调用的方法)。

但除此之外,封装这人术语中还所含了一层隐藏信息的概念,这完时要当时人面的现象报告 。我愿意,亲戚亲戚我愿意人们歌词 在理解这人概念时,时要要留意它在具体的OOP语境中的含义。

在传统的OOP环境中,继承通常指的是类与类之间的关系,但将会JavaScript中不趋于稳定类,我愿意继承比较慢 趋于稳定在对象之间。

对象往往是用名词来表示的(如book、person)

方法一般时要些动词(如read、run)

属性值则往往是这人形容词

亲戚亲戚我愿意人们歌词 都时要来试一下。同类 ,在“The black cat sleeps on my head”这人一段话中,“the cat”(名词)只是另三个小对象,“black”(形容词)则是另三个小颜色属性值,而“sleep”(动词)则代表另三个小动作,也只是OOP语义中的方法。甚至,为了进一步证明这人比拟的合理性,亲戚亲戚我愿意人们歌词 也都时要将一段话中的“on my head”看做动作“sleep”的另三个小限定条件,我愿意,它也都时要被当做传递给sleep方法的另三个小参数。