JS语言是不是面向对象的?
第一篇,阐述的步骤
1 为什么要面向对象
2 什么是面向对象
3 面向对象的标准特征是什么,
4 JS有没有,以及如何实现这个特征。
为什么要 面向对象
1 针对 事务应用程序 (数据量大,代码重复率高)的程序特点而设计的构造术 2 特点是思维粒度适中,易编写和阅读维护
什么是面向对象?
以 对象 为单元 组织程序(功能)
什么是对象?类是不是对象?函数呢?
「对象」是封装了计算功能的程序组件单位,「完整形式的对象」应该是具数据和方法的;缺损形式的都是对象的特殊,如只有数据的JS对象,和只有方法的JS轻便对象; 「类」是抽象的对象,实现上(实例了一个对象作为单位)需要语言的“反抽象”支持 「抽象类」则更为抽象,设计目标是为了复用代码,多一层“反抽象”支持
对象与封装是什么关系?对象一定是封装的吗?封装的意义?
将计算功能的实现细节「封装」起来,使用者在对象逻辑(更高粒度)之上工作,解决了计算复杂性; 「封装」起来,也便于团队协作,专业独立
对象封装了什么?
对象封装了计算功能,但对使用者来说,对象的名字可能不足于表达它的功能涵义,所以这是一个技艺(待研究),对象可以需额外的文档进行解释「它的封装功能」
面向对象的标准特征是什么
面向对象什么特性来满足 事务应用程序的什么组织需要?
对象细节封装,对象功能抽象,和对象继承或组合复用 (类或函数)对象参数派生 是一级复用,类继承是二级复用 对象组合是一种轻便的二级复用
面向对象标准特性
1 满足 事务应用程序组织需要 主要有支持两个方面,满足大程序开发和组织的需要 2 协作 逻辑封装单元:对象实例(函数是特殊对象实例) 物理封装单元:模块 3 复用 一级抽象复用(模板[函数和类]的派生和组合):对象参数派生,组合是一种特殊的派生 代码模板:对 「对象」 进行局部的抽象(形式参数)产生的代码模板,用(实际参数)来派生对象实例 派生与组合: 二级抽象复用(继承):类继承,抽象类,高阶函数
介于一代面向过程程序构造术(也有协作和复用的功能特性)相区分,面向对象构造术特点在: 第一,封装单元是有状态数据的 计算对象,而不是无状态记忆的过程函数; 第二,支持二级抽象复用
技术实现
协作和复用特性,一般实现技术有哪些?JS又是怎样实现的?
JS有没有,以及如何实现这个特征
《设计模式之美》作者的观点 实际上,我个人觉得,只要某种编程语言 支持类或对象的语法概念,并且以此作为组织代码 的基本单元,那就可以被粗略地认为它就是面向对象编程语言了。至于是否有现成的语法机 制,完全地支持了面向对象编程的四大特性、是否对四大特性有所取舍和优化,可以不作为 判定的标准。
转载自:https://juejin.cn/post/6869338621699162126