最适合网络开发者的网站
Java 编程语言。hyperskill 为初学者提供的课程

尿素

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. 对象状态的存储位置

问题: 对象的状态存储在其...

从列表中选择一个选项:

  • 班级
  • 朋友们
  • 字段(或属性)✔
  • 源代码
  • 方法