早期的程序实际上就是一连串对计算机下达的指令,例如求解第 N 大的质数,或联立计算若干个方程的解。
由于问题实际上都是数学问题,所以主要的矛盾在算法设计上,而变量通常都是简单的数据类型,例如整数和小数等。
随着时代的发展,计算机应用于各行各业中,而不再是研究所和科学家的专利。此时,就需要用程序来表示更多实际生活中的对象,例如一个订单、一件产品等。
这些对象千变万化,各不相同。但是,我们都可以将它抽象为一个拥有若干属性和方法的抽象自定义变量。
例如订单拥有属性创建时间、过期时间等,产品拥有属性产品名、产品等级、产品价格等。为了配合计算机描述这种抽象变量,面向对象程序设计(Object-oriented Programming, OOP)的语言提岀了类的概念。
类可以多次被实例化,实例化后的产物叫做对象,如下图所示。
实际生活中,例如“产品类型”被实例化就相当于制造了一个新产品。
前面已经提到过,类是一个可以包含 0 或者多个成员的类型,这些成员可以是常量、字段、属性、方法等。
通过引入类,面向对象语言可以更加准确的模拟实际社会生产生活的各种事件。
面向对象的三大特性是:
类可以将它的成员私有化,只暴露它认为应当暴露给外界的成员。通过私有化成员,外界不必了解这些成员的实现细节。
单词 capsule 有胶囊之意,encapsulation 即为“使成为胶囊”的意思。
子类可以继承父类,从而简单地自动实现父类所有的成员,并增加自己的成员。
通过方法的重写和隐藏,子类还可以修改父类的行为。继承是面向对象程序设计代码复用能力的一种体现。
实际上是继承的一种特殊情况,此时,子类一定会复写父类的行为(通常父类没有提供代码)。
对于相同的方法,不同类型的子类有着不同的实现。接口和抽象类都是多态的体现。
词根 morph 代表形状,前缀 poly 则为“多”的意思。
通常认为面向对象程序设计有如下的好处: