面向对象一些概念简述
一、 编程范式
在我们编程语言里面,大致可以分为两个大类:命令式编程 和 声明式编程
1. 命令式编程
所谓命令式编程,就是以命令为主,给计算机一条一条命令,计算机来按照我们给的命令原封不动的执行。
命令机器如何去做事情(how)
常见的命令式编程语言有:C语言,C++,C#,Java,PHP,Ruby
从命令式编程语言又可以分为两大类:面向过程 和 面向对象
(1) 面向过程
就是分析解决问题所需要的步骤,然后把这些步骤一步一步实现
(2) 面向对象
所谓面向对象,就是将程序里面的模型看做一个一个的对象。对象和对象之间会产生彼此的联系。使用对象来解决问题
需要注意:就算是面向对象编程,里面也会有面向过程的步骤。
2. 声明式编程
所谓声明式编程,就是指告诉计算机你想要什么(what),让机器去解决如何实现。
声明式编程里面也可以分为两大类:DSL 和 函数式编程
(1) DSL
DSL翻译成中文为领域专用语言(Domain Specific Language)。顾名思义,就是指某一个领域专用的语言。
常见的DSL语言有HTML,CSS,SQL
(2) 函数式编程
将程序里面的一些模型看做是数学里面的函数来进行计算。
一、 面向对象
1. 什么是面向对象
首先需要搞清楚什么是对象(Object)。通俗来讲,就是东西。我们这个世界就是由各种各种的东西组成的。东西与东西之间有彼此的联系。
现实生活中我们描述一个东西,或者一个物品的时候,常常会从2个方面来进行描述
例如我要描述一个手机
首先第一个就是外观(属性):白色 5.5寸 矩形
接下来就是从功能来进行描述:看电影 打电话 玩游戏
2. 面向对象和面向过程的区别
面向过程的特点:由顶自下,依次执行,我们需要去考虑每一个步骤。
面向对象的特点:面向对象更加符合我们人类的思想。我们只需要找到我们需要的对象即可。
ATM机取钱
面向过程:我们需要考虑每一个步骤,例如取钱的时候金额是多少,余额是多少,用户的输入是否合法
面向对象:只需要考虑这个ATM这个对象即可
3. 面向对象的特点
一般来讲,面向对象的特点有3个:封装,继承和多态
有些老的教材,会告诉你面向对象的特点有4个:除了上面3个以外,还多加了一个抽象
封装:就是将细节隐藏起来,不向外部暴露。例如现实生活中电视机就是一个典型的封装,无法看到内部电子元件这些细节
继承:和现实生活中一样,儿子可以继承父亲的一些东西。在程序里面子类可以继承父类。
多态:如果从语言的角度来看,就是不同对象同一方法的作用不一样。例如现实生活中,一个action这个单词对于不同的职业的人来讲,意义是不一样的。
4. 类
和现实生活中一样,东西一多,按照人的思维自然就会想到分类。比如给你1万本书。我们首先会想到分类,例如分为小说类,科技类,漫画类,政治类,经济类...每一个类别下面的书都是有共同的特点的。
类和对象的关系:类是对象的一种概括,是一个抽象的东西,对象是类的一种具体实现,是一个具体的东西。
5. 创建对象
(1) 通用编程语言产生对象的方式
对象是从类产生的。所以如果我们要获取对象,首先需要创建类
(2) JS中创建对象的方式
在ES6之前,JS里面没有类的概念。所以在ES6之前都是通过函数来模拟类
模拟类的函数通常被称之为构造函数。为了区分构造函数和普通函数,有一个不成文的规定,构造函数的函数名首字母大写
对象和构造函数,以及原型对象之间的关系图(重要)
前面我们所讲述的数组,函数,数字,字符串等都有对应的构造函数。如果是通过构造函数实例化的,那么就是一个对象
对象里面有一个叫做constructor的属性,可以查看到这个对象的构造函数
在每一个构造函数里面,都有一个隐藏属性,叫做prototype,这个属性指向一个对象,这个对象就是通过构造函数实例化出来的对象的原型对象