面向对象编程是一种基于以”对象”为概念的编程范式,它可以使用字段包含数据,可以使用方法来包含程序。对象的一个功能是他们的方法是对外暴露的,通常情况下可以使用这些方法去改变数据。在面向对象编程中,计算机程序被设计成一个个相互交互的模型。OOP语言是多种多样的,但是最流行的一种是基于class的面向对象,在这种语言中对象是类的实例,当我们拿到一个对象时,我们能够知道他所属的类型。
许多广泛使用的编程语言例如C++、JAVA、Python都是多范式的编程语言,他们在或多或少支持面向对象编程的同时还支持命令式和过程式编程。主要的面向对象语言包括Java, C++, C#, Python, PHP, JavaScript, Ruby, Perl, Object Pascal, Objective-C, Dart, Swift, Scala, Common Lisp, MATLAB, and Smalltalk.
与非面向对象语言相同的部分
- 基本的逻辑结构
- 基本数据类型
- 内置数据结构 List Hash
- 方法 函数
- 模块化编程 支持模块引入
对象和类
支持面向对象的编程语言使用继承做到对代码的复用,可以继承自类也可以继承自原型对象。基于类的面向对象语言主要包含以下两种概念
- Class 定义了指定类型中的数据和可用的代码
- Object 基于类的实例
基于类的面向对象语言中的组成
- Class variables
- Instance variables
- Member variables
- Class methods
- Instance methods
基于类 VS 基于原型
在基于类的语言中,需要先定义类,通过类实例化对象,而在基于原型的语言中对象是主要的实体,没有类的存在,对象之间通过prototype互相连接,每一个对象都有且只有一个原型,当对象被创建的时候会绑定一个原型对象,当访问对象上的属性的时候首先在对象本身访问,如果不存在则会一次寻找原型对象,通过原型只能够实现单继承。
封装
保护数据不被滥用和损坏,所有的数据改变都是可控的。
组合 继承 代理
has-a is-a use?
多态
基于同一个父类派生的多个子类可以重新父类的方法 在调用的时候能够做到与特定子类型无关的同时会别使用各自实现的方法从而实现关注点的分离。
设计模式
- 单一职责
- 开放封闭
- 里氏替换
- 接口隔离
- 依赖倒置