23

JS语言是不是面向对象的?(二)

 3 years ago
source link: http://nakeman.cn/engineering/webprogramming/is-javascript-object-oriented-2.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

最新的编程技术研究成果:2020-10-25

  • 第一,OO和FP都是 程序构造术,两种都使用了抽象,但不同的思想范型;
  • 第二,构造过程分为,功能编程,和结果编程两步;
  • 第三,(两种)程序构造术 都为解决复杂性,通用协作,和复用达到这个意义目标;

Table of Contents

    • 什么是对象?类是不是对象?函数呢?
    • 对象与封装是什么关系?对象一定是封装的吗?封装的意义?
  • 面向对象的标准特征是什么
    • 使用对象及对象关系 描述 真实世界
    • 面向对象什么特性来满足 事务应用程序的什么组织需要?
  • JS有没有,以及如何实现这个特征

阐述的步骤

1 为什么要面向对象

2 什么是面向对象

3 面向对象的标准特征是什么,

4 JS有没有,以及如何实现这个特征。

为什么要 面向对象

1 针对 事务应用程序 (数据量大,代码重复率高)的程序特点而设计的构造术

2 特点是思维粒度适中,易编写和阅读维护

什么是面向对象?

以 对象 为单元 组织程序(功能)

什么是对象?类是不是对象?函数呢?

「对象」是封装了计算功能的程序组件单位,「完整形式的对象」应该是具数据和方法的;缺损形式的都是对象的特殊,如只有数据的JS对象,和只有方法的JS轻便对象;

「类」是抽象的对象,实现上(实例了一个对象作为单位)需要语言的“反抽象”支持

「抽象类」则更为抽象,设计目标是为了复用代码,多一层“反抽象”支持

对象与封装是什么关系?对象一定是封装的吗?封装的意义?

将计算功能的实现细节「封装」起来,使用者在对象逻辑(更高粒度)之上工作,解决了计算复杂性;

「封装」起来,也便于团队协作,专业独立

对象封装了什么?

对象封装了计算功能,但对使用者来说,对象的名字可能不足于表达它的功能涵义,所以这是一个技艺(待研究),对象可以需额外的文档进行解释「它的封装功能」

面向对象的标准特征是什么

使用对象及对象关系 描述 真实世界

描述真实:must enable a developer to describe the reality using objects and to define relationships among objects

抽象:将细节包装成一个符号,便利分析思考

面向对象什么特性来满足 事务应用程序的什么组织需要?

对象细节封装,对象功能抽象,和对象继承或组合复用

(类或函数)对象参数派生 是一级复用,类继承是二级复用

对象组合是一种轻便的二级复用

面向对象标准特性

满足 事务应用程序组织需要

主要有支持两个方面,满足大程序开发和组织的需要

1 协作

逻辑封装单元:对象实例(函数是特殊对象实例)

物理封装单元:模块

2 复用

一级抽象复用(模板[函数和类]的派生和组合):对象参数派生,组合是一种特殊的派生

代码模板:对 「对象」 进行局部的抽象(形式参数)产生的代码模板,用(实际参数)来派生对象实例

派生与组合:

二级抽象复用(继承):类继承,抽象类,高阶函数

介于一代面向过程程序构造术(也有协作和复用的功能特性)相区分,面向对象构造术特点在:

第一,封装单元是有状态数据的 计算对象,而不是无状态记忆的过程函数;

第二,支持二级抽象复用

技术实现

协作和复用特性,一般实现技术有哪些?JS又是怎样实现的?

未完……

JS有没有,以及如何实现这个特征

JS 对象闭包比较接近封装技术

JS动态性——一个对象可任意更改形式,与严格封装相悖;JS似乎倾向于一种约定封装,而非技术封装(js class 没有private修饰)

原型继承和高阶函数是JS二级抽象复用技术

未完……

参考

JS语言是不是面向对象的?(一)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK