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

2025-06-04

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

复杂的实际需求需要建模成计算机能够理解的指令。我们有一些编程范式,例如过程式编程、面向对象编程、函数式编程等,它们可以帮助将业务需求建模成计算机程序。我们将学习一种名为面向对象编程的范式。OOP 是一种哲学,并且与语言无关。

我们将研究面向对象编程的四个支柱概念。

  • 抽象
  • 封装
  • 遗产
  • 多态性

跳过视频并继续阅读文章

 

什么是面向对象编程?

像 COBOL 和 C 这样的老编程语言遵循过程式编程方法。用这些语言编写的程序过去是一系列循序渐进的指令。它们利用过程/子例程来实现程序模块化。这种编程范式更注重逻辑而非数据,以及将两者结合在一起的程序。

Java、C# 等现代编程语言都遵循面向对象的方法。在面向对象编程中,数据比仅仅编写指令来完成任务更加重要。对象是您想要在程序中建模的事物或想法。对象可以是任何东西,例如员工、银行账户、汽车等等。

类、对象...那是什么?

要开始面向对象编程,我们必须了解什么是类和对象,以及它们之间的区别。类是创建对象的蓝图,类似于房屋的蓝图。 类定义属性和行为。如果我们要在应用程序中建模一辆汽车,那么我们可以定义汽车的属性,例如型号、燃料、制造商,以及行为,例如启动、刹车、加速等。如果您注意到,我们指定的属性和行为并非特定于某一款汽车。我们试图通过声明我们将在程序中建模的汽车将具有这些属性和行为来概括汽车。可能还有其他属性和行为,但我们对业务需求的范围和兴趣仅限于这些属性。这有助于我们创建汽车的蓝图,稍后当我们使用这个类创建对象时,我们会创建具有特定细节的汽车对象。 例如,使用同一个类“汽车”,我们可以创建不同的对象,这些对象在型号、燃料类型和制造年份方面有所不同,但具有相同的共同行为。
类与对象的说明

对象 1
模型 大众Polo
燃料 汽油
制作 2017
开始()
停止()
加速()
对象 2
模型 大众Vento
燃料 柴油机
制作 2017
开始()
停止()
加速()

通过这种方式,面向对象编程可以让你轻松地对现实世界中复杂的系统行为进行建模。使用面向对象编程 (OOP),数据和函数(属性和方法)在对象内部被捆绑在一起。这避免了 OOP 对任何共享或全局数据的需求,而这正是面向对象方法和过程式方法之间的核心区别。

抽象

抽象让你专注于对象做什么,而不是它是如何完成的。抽象背后的理念是从更高层次理解事物。抽象有助于构建独立的模块,这些模块可以通过某种方式相互交互。独立模块也更容易维护。

抽象意味着表示基本特征,而不详细说明背景实现或内部工作细节。

我们尽量选择性地关注那些对我们重要的事情,或者在编程中,对我们的模块重要的事情。修改一个独立的模块不会影响其他模块。我们唯一需要知道的就是模块能提供什么。使用该模块的人无需关心任务是如何实现的,也无需关心后台到底发生了什么。

抽象无处不在。我们日常使用的物品在不同层面都应用了抽象。例如,汽车或自行车的刹车系统。刹车系统被抽象化,并配备了一个刹车片来刹车。对加速系统的改动不会影响制动系统,因为它们是独立的。你也不必担心刹车的内部工作原理,只需踩下刹车踏板,无论是盘式制动器还是鼓式制动器,车辆就会停止。

封装

第二个概念“封装”与“抽象”密切相关。封装的核心在于公开问题的解决方案,而无需使用者完全理解问题域。封装将数据和行为绑定在一个单元中。这可以防止客户端或模块用户了解实现抽象行为的内部视图。
数据不能直接访问,而是通过公开的函数进行访问。隐藏对象的内部结构可以防止用户将组件的内部数据设置为无效或不一致的状态,从而保护其完整性。

封装不仅仅是隐藏复杂性,而且相反,以故障安全的方式暴露复杂性。

遗产

继承是面向对象编程语言的一个强大特性。继承有助于将类组织成层次结构,并使这些类能够从层次结构中上层的类继承属性和行为。
继承描述了一种“IS A”关系。这就是我们在现实世界中的交流方式。例如,鹦鹉是一种鸟。美元是一种货币。但是“银行是一种银行账户”这种说法并不正确。当您尝试在给定的业务/问题陈述中描述某个实体时,这种关系显而易见。 通过继承,您可以定义一个通用的实现/行为,然后对于专门的类,您可以将其修改或更改为某些专门的东西。 继承不能向后起作用。父类将不具有派生类的属性。


继承是一种代码重用的机制,可以帮助减少代码重复。

不要强制继承。这样只会编写不必要的代码。需要注意的是,在尝试建模需求时,不要添加多层继承。这是没有必要的。你需要尝试识别你建模的实体中的通用属性和行为,并在此基础上继续重构代码,定义一个合适的父类。然后,可以将通用的实现移到这个类中。

多态性

多态性是指一个可执行单元可以有多种不同的实现,这些实现之间的差异在幕后发生,调用者对此毫不知情。
多态性允许通过创建新的专用对象来扩展计算机系统,同时允许系统的当前部分与新对象交互,而无需关心新对象的特定属性。 例如,如果你需要在纸上写一条消息,你可以使用钢笔、铅笔、记号笔甚至蜡笔。你只需要你使用的物品适合握在手中,并且在按压纸张时能留下痕迹。因此,书写动作可以帮助你在纸上留下痕迹,至于使用什么标记或书写工具则取决于你个人的决定。另一个例子是飞机和航天飞机都可以称为飞行物体。但两者飞行的方式不同,即实现方式不同。但从观察者的角度来看,这两个物体都可以飞。

继承是实现多态性的一种方法,即可以通过编写方法的自定义实现来覆盖继承类中定义的行为。这称为方法覆盖,也称为运行时多态性。 还有一种多态性形式称为方法重载,在这种方法中,继承不起作用。方法名称相同,但方法中的参数不同。


需要帮助理解任何技术主题吗?请使用以下链接发送您的请求,我会尝试制作相应的帖子/视频。
http://bit.ly/RequestCourse

参考:

  • https://stackoverflow.com/questions/16014290/simple-way-to-understand-encapsulation-and-abstraction
  • http://www.adobe.com/devnet/actionscript/learning/oop-concepts/polymorphism-and-interfaces.html
  • https://stackoverflow.com/questions/3322318/explain-polymorphism?rq=1

来源:
图标来自http://www.freepik.com/

文章来源:https://dev.to/charanrajgolla/beginners-guide---面向对象编程
PREV
12个月的制作
NEXT
图像上超棒的打字效果叠加(CSS+JS)部分: