2.1 OOP的基本概念
面向对象的编程方法基于OOP的范式。这就是 所有程序的实体都被视为对象。对象 是数据加上可以对这些数据进行操作的方法/函数。
还可以说对象有状态和行为。 对象的状态通过它的数据来保证,这些数据 存储在它的内部变量中。对象的行为是 它方法执行的所有动作的集合。
中等程序中有成千上万个对象,大型程序中有几百万个。为了 减少混乱,决定将对象组织到类中,而类 又形成某种层级结构。
有趣!类层次结构的概念来自于 动物世界,有人类是灵长类,灵长类是 哺乳动物,等等。
每个对象都有一个类,用来创建它。从某种 角度看,类是对象的模板,另一方面,它是具有自身特征的独立 对象(详见下文)。
为了更好地理解类的概念,看看以下定义:
类:
类是一个创建对象的模板或模式,它定义了 这个类型的所有对象的属性和方法。类 允许将数据和处理这些数据的函数组织成 一个整体。
对象:
对象是类的实例。每个对象都有 状态(由属性定义)和 行为(由方法定义)。
封装:
封装是隐藏类的内部实现并为 与该类的对象交互提供接口。 这有助于保护数据和管理对它们的访问。
继承:
继承允许一个类(子类)继承另一个类(父类)的属性和 方法。这有助于代码的重用和简化维护。
多态:
多态允许使用一个接口来处理 不同类的对象。这是通过在子类中重写从父类继承的方法来实现的。
抽象:
抽象是提取对象的共同特征并创建 代表这些共同特征的类。这有助于 简化复杂系统并提高其可理解性。
如果你理解了至少一半,那就很好。接下来我们会更详细地分析每一个要点。
2.2 抽象
现实生活中抽象的一个好例子就是组织或公司的职位描述。职位名称是一回事,每个具体职位的职责则完全不同。
想象一下,你正在设计未来公司结构。你可以 将秘书的职责分配给其他几个 职位。也可以把CEO职位拆分成几个独立的职位:财务总监、技术总监、市场总监、人力资源总监。或者, 例如, 把办公室经理和招聘人员的职位合并为一个。
从编程的角度来看,抽象就是合理地将程序划分为对象。通常任何大型程序都可以通过几十种方式表示为交互对象的组合。 抽象允许选择主要特性并省略次要特性。
抽象就像军事中的战略。糟糕的战略,即使再多的战术技巧也无法挽救局面。
2.3 封装
封装的目标是通过简化元素间的交互来改善其质量。
最好的简化方法就是把复杂的东西隐藏起来。例如,如果你坐在波音飞机的驾驶室里,你不会马上明白怎么操作它:
另一方面,对于飞机的乘客来说,一切看起来都很简单:买票,上飞机,起飞和降落。你可以轻松地从一个大陆飞到另一个大陆,只需具备"买票"和"上飞机"的技能。所有飞行准备、起飞、降落和各种紧急情况的复杂性都对我们隐藏着。更不用说卫星导航、自动驾驶仪和机场管制中心。这简化了我们的生活。
从编程的角度来看,封装就是“隐藏实现”
。我喜欢这个定义。我们的类可以包含数百个方法,并在不同情况下实现非常复杂的行为。但我们可以
隐藏所有方法(在名称两边加上“__”),而只保留几个方法来与其他类交互。
这样,我们程序的所有其他类只会看到这个类中的三个方法,并且只会调用它们
。所有复杂性都隐藏在类内部,就像机舱对快乐的乘客一样。
2.4 继承
继承有两个方面。编程方面和现实生活方面。从编程的角度来看,继承是
两个类之间的特殊关系
。但更有趣的是,从
现实生活中看继承是什么。
如果我们需要在现实生活中创造什么,我们有两种方式:
- 从头开始创建我们需要的东西,消耗大量时间和精力;
- 在已有的基础上创建我们需要的东西。
最佳策略如下:
我们采用现有的优秀解决方案,稍作改进,调整到我们需要的用途,然后使用它
。
如果我们追溯人类的起源,会发现从生命诞生到现在已经过去了数十亿年。而如果设想人类是从猿类进化而来的,那么仅仅过了几百万年。
从零开始创造—更长。长得多
。
在编程中,我们也可以基于另一个类创建一个类。
新类成为已存在类的后代(继承者)
。当有一个类包含80%-90%我们需要的数据和方法时,这是非常有利的。
我们只需将合适的类声明为我们新类的父类,然后新类中就会自动出现父类的所有数据和方法
。是不是很方便?
2.5 多态
多态是来自编程领域的概念。它描述了在一个接口后面隐藏不同实现的情况。如果要在现实生活中寻找它的类似物,那么之一就是汽车驾驶过程。
如果一个人能够驾驶卡车,他就可以上救护车的座位,也可以上跑车的座位。
这个人可以驾驶汽车而不管汽车是什么,因为它们都有相同的控制接口:方向盘、踏板和换挡杆
。汽车的内部结构不同,但它们都有相同的控制接口。
如果回到编程,多态允许统一地处理各种类的对象(通常有共同的祖先)—这是一个难以高估的事物
。它的价值在于程序越大,它的价值就越高。
OOP是原则。内在的规律。
其中每一个都在某种程度上限制我们,但当程序发展到大规模后,这些原则提供了巨大的优势
。OOP的四个原则就像椅子的四条腿。去掉其中一个,整个系统就会变得不稳定。
GO TO FULL VERSION