什么是面向对象编程?用外行术语解释的基础知识

大多数现代编程语言都支持“面向对象编程”(OOP)范式。但是OOP到底是什么?为什么它如此有用?...

如果你做过一些初学者编程,甚至开始研究不同的语言,你可能会遇到“面向对象编程”(或“OOP”)这个短语。

intro-object-oriented-programming

关于它是什么,有各种各样的技术解释,但今天我们将以一种简单的方式来定义面向对象编程。

开始之前:过程语言

要理解什么是面向对象编程语言,您需要理解它取代了什么。早期的编程语言是程序性的,所谓程序性语言,是因为程序员会定义一组非常具体的程序,由计算机来执行。

What Is Object Oriented Programming and How to Get Started Learning It

在早期,程序写在穿孔卡片上。这些步骤接收数据,对该数据执行一系列操作,然后输出新数据。

过程语言在一段时间内运行良好(有些仍然在使用)。但是,当您想要编写超出基本步骤序列的程序时,过程语言可能会变得难以管理。这就是面向对象编程的用武之地。

面向对象程序设计的对象

那么,什么是面向对象编程呢?

第一种面向对象语言(通常被认为是Simula)引入了对象的概念。对象是作为单一实体处理的信息集合。

我们将用一个例子更深入地探讨这实际上意味着什么,但首先我们必须讨论类。类有点像pre对象。它们包含一个属性列表,定义后这些属性将成为一个对象。

What Is Object Oriented Programming and How to Get Started Learning It

让我们以编程一个象棋游戏为例。我们可能会有一门课叫Piece。在Piece中,我们有一个属性列表:

  • 颜色
  • 高度
  • 形状
  • 允许移动

一个对象只是定义了一个属于该类的特定实例。

所以我们可以有一个叫做白皇后的物体。该对象将具有所有四个属性的定义(白色、高、带锯齿的圆柱形、任意方向上任意数量的空间)。它也可能有方法或函数。

是什么让这比程序性方法好得多?

简言之,面向对象编程语言(如Java)使组织数据和代码变得更容易,从而使大型项目更具通用性。

为了更详细地讨论它,我们将讨论面向对象编程的四个基础知识。

面向对象程序设计:抽象

仅仅因为你想使用一些东西并不意味着你需要知道它是如何工作的。例如,浓缩咖啡机就很复杂。但你不需要知道它是怎么工作的。你只需要知道,当你开始时,你会得到浓缩咖啡。

What Is Object Oriented Programming and How to Get Started Learning It

面向对象编程中的对象也是如此。在我们的国际象棋示例中,可能有一个move()方法。这种方法可能需要大量的数据和其他方法。它可能需要初始位置和最终位置变量。它可以使用另一种方法来确定是否捕获了一块。

但你不需要知道。你需要知道的是,当你叫那块移动时,它就移动了。那是抽象。

面向对象编程:封装

封装是面向对象编程创建抽象的方法之一。每个对象都是作为单个实体处理的数据集合。在这些对象中有数据——变量和方法。

对象中的变量通常是私有的,这意味着其他对象和方法不能访问它们。对象只能受其方法的影响。

Bishop对象可能包含多条信息。例如,它可以有一个名为“position”的变量,这个变量是使用move()方法所必需的。当然,它也有颜色。

通过将position变量设为private并将move()方法设为public,程序员可以保护move变量不受任何其他因素的影响。如果颜色是一个私有变量,除非有一个允许更改的方法,否则其他对象无法更改它。(你可能不会有,因为这件作品的颜色应该保持不变。)

这些变量和方法保存在Bishop对象中。因为它们是封装的,程序员可以对对象的结构或内容进行更改,而不用担心公共接口。

面向对象编程:继承

除了类之外,面向对象编程语言还有子类。它们包含父类中的所有属性,但也可以包含其他属性。

在我们的象棋游戏中,棋子需要一种方法,如果棋子到达棋盘的末端,就可以把它们变成其他棋子。我们称之为transformPiece()方法。

不是每个片段都需要transformPiece()方法。所以我们不想把它放在计件课上。相反,我们可以创建一个名为Pawn的子类。因为它是一个子类,所以它继承了Piece的所有属性。因此,子类典当的实例包括允许的颜色、高度、形状和移动。

但它也包括transformPiece()方法。现在我们再也不用担心在车上意外使用这个函数了。下面是一个技术解释:

创建子类也节省了大量时间。程序员可以创建基类,然后在需要时将其扩展到新的子类,而不是为所有的内容创建新的类。(不过,值得注意的是,过度依赖继承是不好的。)

面向对象编程:多态性

多态性是遗传的结果。完全理解多态性需要一些编程知识,所以我们只在这里讲基础知识。简言之,多态性允许程序员使用同名的方法,但是使用不同的对象。

例如,我们的Piece类可能有一个move()方法,它可以将一个片段向任何方向移动一个空间。这对国王的作品有效,但对其他作品无效。为了解决这个问题,我们可以在Rook子类中定义新的move()方法,该方法将移动定义为无限数量的向前、向后、向左或向右空格。

现在,当程序员调用move()方法并使用一个片段作为参数时,程序将确切地知道片段应该如何移动。这节省了大量的时间,而不是试图找出哪些不同的方法,你应该使用。

面向对象程序设计

如果你的头在最后四个定义之后转了一点,不要太担心。以下是您需要记住的主要事项:

  • 面向对象编程将信息收集到称为对象的单个实体中。
  • 每个对象都是一个类的单个实例。
  • 当不需要看到对象时,抽象隐藏了对象的内部工作方式。
  • 封装将相关变量和方法存储在对象中并保护它们。
  • 继承允许子类使用父类的属性。
  • 多态性允许对象和方法用一个接口处理多种不同的情况。

如果你能记住这些要点,你将很好地处理什么是面向对象编程。正如我所提到的,面向对象编程的四个基本知识可能有点难以处理。但是一旦你开始编程,他们就会变得更加清晰。

请记住,我们在本文中只讨论了一般性。不同的面向对象语言会有自己的怪癖和实现方法。一旦你为自己选择了合适的语言,你就会开始学习如何将OOP原则付诸实践。

接下来,学习如何组织面向对象的代码。

  • 发表于 2021-03-24 11:07
  • 阅读 ( 208 )
  • 分类:编程

你可能感兴趣的文章

红宝石(ruby)和python(python)的区别

...入式系统以及学术编程语言。 目录 1. 概述和主要区别 2. 什么是鲁比 3. 什么是Python 4. Ruby和Python的相似之处 5. 并列比较——Ruby与Python的表格形式 6. 摘要 什么是红宝石(ruby)? Ruby是松本由纪弘在1995年设计的一种高级编程语言。...

  • 发布于 2020-10-19 17:41
  • 阅读 ( 338 )

想学编程吗?你应该知道的5个关键术语

...本的编程术语的入门,列出了学习如何编码时所需的日常基础知识。 ...

  • 发布于 2021-03-23 09:19
  • 阅读 ( 304 )

python面向对象编程初学者指南

... 做得好!到现在为止,你应该已经牢牢掌握了基础知识。您应该能够创建和使用自己的类,每个类都有自己独特的能力和功能。 ...

  • 发布于 2021-03-24 14:43
  • 阅读 ( 211 )

面向对象编程的混乱世界,解释为rpg

...其他类型的程序,这个解释都比大多数OOP教程更有趣。为什么面向对象编程有用(以角色扮演游戏为例)|“用Python发明”博客

  • 发布于 2021-05-18 05:30
  • 阅读 ( 103 )

javascript和jquery:学习web开发的更漂亮的方法

...站的交互性,使基于web的应用程序,或只是学习一些编程基础知识的人。JavaScript是最好先学习的编程语言之一,因此本书可以作为那些考虑从事编程工作或爱好的人的跳板,特别是前端web开发。如果你已经是一个有经验的程序...

  • 发布于 2021-05-18 15:26
  • 阅读 ( 241 )

通过这些日常类比学习关键的计算机科学概念

计算机科学和程序设计有什么区别?如何向非技术人员解释大数据?有时候,日常的类比比技术上的解释更好。这个列表有40个关键的计算机科学概念简单解释。这个列表是在CarlCheo编译的,它来自各种各样的源代码,比如Stack Ov...

  • 发布于 2021-05-19 03:51
  • 阅读 ( 111 )

哦(oop)和流行音乐(pop)的区别

...”。面向对象编程和面向过程编程就是这样两种范式。 什么是面向对象程序设计(object oriented programming (oop))? OOP是一种高级编程语言,其中使用面向对象模型将程序划分为称为对象的小块,因此得名。这个范例是基于对象和类...

  • 发布于 2021-06-25 02:06
  • 阅读 ( 255 )

java(java)和java核心技术(core java)的区别

... 核心Java只是Java的一部分,它代表J2SE,包含了Java的所有基础知识,包括一些原理和包的细节。它是一个独立的Java应用程序,涵盖了从OOP概念到特殊操作符,从数据类型到包装类,从链表到数组列表,从队列到异常处理的所有内...

  • 发布于 2021-06-25 05:49
  • 阅读 ( 294 )

斯卡拉(scala)和java(java)的区别

...Java类,实现任何Java接口。   scala与java的区别 scala和java基础知识 Java是一种通用的面向对象语言,由jamesgosling和他的几位同事在20世纪90年代早期在Sun微系统公司开发。它始于1991年的一个名为“Oak”的项目,后来改名为Java。语言...

  • 发布于 2021-06-25 20:43
  • 阅读 ( 373 )

python(python)和斯卡拉(scala)的区别

...本是在2006年发布的。   python和scala的区别 Python与Scala的基础知识 –Python是一种通用编程语言,由可移植的ansic编写,是一种动态类型语言,在运行时进行类型检查。它是动态类型化和解释的,用户不必初始化变量,因为它只转...

  • 发布于 2021-06-25 22:56
  • 阅读 ( 224 )
zsvs86134
zsvs86134

0 篇文章

相关推荐