OOP 简介
理论
§1. 基本原理
面向对象编程 (OOP) 是一种基于对象概念的编程范式,对象彼此交互以执行程序功能。每个对象都可以通过状态和行为来表征。对象的当前状态由其字段,对象的行为由其 方法.
§2. OOP的基本原理
OOP 有四个基本原则。它们是: 封装, 抽象, 遗产, 和 多态性.
- 封装 确保将数据和操作该数据的方法捆绑(=封装)到单个单元中。它还指对象隐藏其属性和方法的内部结构的能力。
- 数据抽象 意味着对象应该提供其实现的简化、抽象版本。其内部工作的细节通常对用户来说不是必需的,因此无需表示它们。抽象还意味着仅呈现对象最相关的特性。
- 遗产 是定义类之间的父子关系的机制。对象通常非常相似,因此继承允许程序员重用通用逻辑,同时将独特的概念引入类中。
- 多态性 字面意思是“具有多种形式”,是与继承相关的概念。它允许程序员为同一方法定义不同的实现。因此,名称(或接口)保持不变,但执行的操作可能不同。例如,想象一个发布三种主要文本类型的网站:新闻、公告和文章。它们有些相似,因为它们都有标题、一些文本和日期。在其他方面,它们是不同的:文章有作者,新闻简报有来源,公告有日期,之后它们就变得无关紧要了。编写一个包含所有出版物的一般信息的抽象类很方便,以避免每次都复制它,并将不同之处存储在适当的派生类中。
这些是 OOP 的关键概念。每种面向对象语言都以自己的方式实现这些原则,但其本质在不同的语言中是相同的。
§3. 对象
OOP 的关键概念自然是 目的。您周围有很多现实世界的物体:宠物、建筑物、汽车、计算机、飞机等等。甚至计算机程序也可以被视为一个对象。
我们可以识别现实世界中对象的一些重要特征。例如,对于建筑物,我们可以考虑楼层数、建造年份和总面积。另一个例子是飞机,它可以容纳一定数量的乘客并将您从一个城市运送到另一个城市。这些特征构成了对象的属性和方法。属性表征对象的状态或数据,方法表征其行为。
§4. 类
通常,许多单个物体具有相似的特征。我们可以说这些物体属于同一个 类型 或者班级.
类是 OOP 的另一个重要概念。类描述了类似对象的通用结构:它们的字段和方法。它可以被视为类似对象的模板或蓝图。对象是单独的 实例 属于一类。
按照上面提到的封装原则,任何类都应被认为是一个黑盒子,即类的使用者应该只看到和使用该类的接口部分,即声明的属性和方法列表,而不应深入研究内部实现。
我们来看以下一些例子。
例 1. 建筑类
抽象建筑,用于将建筑描述为一种对象(类)
每座建筑都具有相同的属性:
- 楼层数(整数);
- 面积(浮点数,平方米);
- 建造年份(整数)。
建筑类型的每个对象具有相同的属性,但不同的值。
例如:
- 1号楼:层数=4,面积=2400.16,建造年份=1966;
- 2号楼:层数=6,面积=3200.54,建造年份=2001。
确定建筑物的行为非常困难,但这个例子很好地展示了属性。
例 2. 飞机类
与建筑物不同,飞机的行为很容易定义:它可以飞行并将您运送到地球上的两点之间。
用于将所有平面描述为一种对象类型(类)的抽象平面
每个平面均具有以下属性:
- 名称(字符串,例如“Airbus A320”或“Boeing 777”);
- 载客量(整数);
- 标准速度(整数);
- 当前坐标(导航所需)。
此外,它还有一个行为(方法):将乘客从一个地理位置转移到另一个地理位置。此行为会改变飞机的状态,即其当前坐标。
§5. 对象和类
在 OOP 中,一切都可以视为对象;例如,类也是对象。程序由相互交互的不同对象组成。对象状态和行为通常是结合在一起的,但情况并非总是如此。有时我们会看到没有状态或方法的对象。当然,这取决于程序的用途和对象的性质。
例如,有一种东西叫做接口。它不是用户界面,而是一个类,它只用于继承,以保证其后代类有一个接口。它是一个无状态的类。由于历史原因,C++ 中存在结构。现在 C++ 中的结构也是一个类,但曾几何时,结构只有属性,没有任何方法——一种用于存储数据的类型,没有其他任何东西。这些都是特殊情况,有时很有用。
§六,结论
简而言之,您应该记住以下几点:
- 面向对象的程序由一组相互作用的对象组成。
- 根据封装原则,对象的内部实现是用户不可访问的。
- 一个对象可能具有特征:字段和方法。
- 对象是类(类型)的一个实例;
- 类是一个比单个对象更抽象的概念;它可以被视为描述一组类似对象的共同结构的模板或蓝图。
您还可以查看 hyperskill.org 上的课程.
实践任务及答案
给出了任务和答案选项。正确选项以 蓝色的 颜色。
№1. 面向对象程序的单元
问题: 每个面向对象的程序本质上都由一组...组成
从列表中选择一个选项:
- 相互作用的物体 ✔
- 交互方法
- 互动课程
- 相互作用的变量
№2. 基本原则
问题: 面向对象编程基于 4 个原则。找出解释错误的一个:
从列表中选择一个选项:
- 抽象就是只向用户提供对象最相关的特征。
- 多态就是定义同一方法的不同逻辑。
- 封装就是向世界隐藏对象的内部数据。
- 继承是一种以传统方式命名变量的方式。✔
№3. 状态和行为
问题: 状态和行为可以表征什么?
从列表中选择一个选项:
- 方法
- 班级
- 对象 ✔
- 字段(或属性)
№4. 交互对象
问题: 通常,对象通过...相互作用。
从列表中选择一个选项:
- 遗产
- 类
- 方法✔
- 字段
№5. 对象属性
问题: 下面哪些选项可以作为 Car 类对象的属性?请选择所有正确的选项。
从列表中选择一个或多个选项:
- 驾驶
- 价格✔
- 路标
- 看地图
- 载客量✔
- 汽车品牌✔
№6. 什么是蓝图
问题: 类是用于创建...的模板(或蓝图)...
从列表中选择一个选项:
- 方法
- 类型
- 场地
- 对象 ✔
№7. 匹配主要概念
问题: 将概念与相应的定义进行匹配。
匹配左列和右列的项目:
- 类别——对象的类型。
- 字段——对象的状态。
- 方法——对象的行为。
- 对象——某个类的单个实例。
№8. 声明
问题: 选择关于类和对象的所有正确的陈述。
从列表中选择一个或多个选项:
- 类描述了一组对象的通用结构。✔
- 字段存储对象的状态。✔
- 通常来说,一个对象的内部状态是向全世界开放的。
- 一个对象总是有字段。
№9. 方法
问题: 让我们讨论一下方法。我们对它们了解多少?
找出一個錯誤的表述!
- 一个对象可能具有特征:字段和方法。
- 对象通过调用方法相互交互。
- 一个对象可能根本没有方法
- 对象的状态由其方法表示。✔
№10. 对象和类
问题: 类和对象有何关系?
找出所有正确的陈述。
从列表中选择一个或多个选项:
- 对象是某个类的实例。✔
- 每个类只有一个对象。
- 类用于创建对象。✔
- 类是某个对象的实例。
№11. 对象方法
问题: 下面哪些选项可以作为 Airplane 类对象的方法?请选择所有正确的选项。
从列表中选择一个或多个选项:
- 淹没
- 走
- 起飞 ✔
- 前往太空
- 进近着陆 ✔
№12. 对象的行为是什么
问题: 对象的行为由其...来表示。
从列表中选择一个选项:
- 方法✔
- 字段(或属性)
- 班级
- 源代码
- 朋友们
№13. 对象状态的存储位置
问题: 对象的状态存储在其...
从列表中选择一个选项:
- 班级
- 朋友们
- 字段(或属性)✔
- 源代码
- 方法