面向对象编程(OOP)思想小结
Concepts
- 类(class):对我们要解决问题的抽象,比如建造房子的蓝图;但实现机制上来讲,类是根据蓝图构建而成的,存储在内存中的,用来表示对象的数据。
- 对象(object):根据类构建的实体,比如根据蓝图造出来的房子;实现时,通常是复制类的数据到新的内存空间,有可能需要改变初始值。
- 实例(instance):对象的名字。指向对象在内存中存储地址的引用(reference)变量。也就是说,实例只是某个对象的别名(alias),给某个对象创建新的实例,并不会开辟新的内存空间存放一个新的对象。
4 Pillars
Encapsulation
将相关的变量和函数通过某种架构组合到一起,构成对象的类;此时该类的变量被称为属性(Property),函数被称为方法(Method)。
这样相当于将面向过程中的变量和函数做了分类,一个类中的变量可以随时被该类中的方法使用,并且不用作为函数参数来传递。因为越多的参数会使函数越难以使用,移植和维护。
Abstraction
隐藏对象内部的属性和方法。
优点:
- 简化接口设计:对外暴露的方法少,接口设计越简单;
- 减少代码变化的影响:更新模块内部私有属性和方法的代码,不会影响到模块外部适配的兼容性。
Inheritance
引入树的层级概念。从树的根节点往下,对象越来越具体。子节点上的对象比父节点的对象更具体,是其父节点的子集,可以在父节点对象的基础上,拥有更多针对子节点对象的方法和属性。
这种设计方法,可以减少代码冗余(redundancy),减少不一致性(inconsistency),降低代码的维护难度。
Polymorphism
用希腊词根解释,“poly” 意思是许多(many),“morph” 意为形式(form)。一句话解释就是针对不同的数据形式提供同样的程序接口。
例如,动物可以移动自己的位置,人可以走,狗可以爬,蛇可以爬,同时车也可以移动位置。虽然可以这样的动作都可以定义为 move()
,但他们的移动方式都不一样。
animal.move(x,y)
human.move(x,y)
dog.move(x,y)
snake.move(x,y)
car.move(x,y)
这种把不同类的方法按照其共性来统一命名,我们称之为 “Polymorphism”,中文译为多态。
优点:
- 统一方法命名
- 简化接口设计
Written with StackEdit.