通过面向对象编程基础知识深入了解 L(OOP)
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
“面向对象编程是一个极其糟糕的想法,它只能起源于加利福尼亚。”
——艾德斯格·迪科斯特拉
无论你喜欢还是讨厌,面向对象编程(OOP)都是该领域的主流模型之一。大学期间,OOP 的含义和概念被反复灌输到我的脑海中。甚至在一些求职面试中,我也被要求对这些基础知识了如指掌。正因如此,我认为现在讨论它们非常重要。
介绍这些概念将使我能够向新手介绍关键的高层次知识,并为已经了解这些概念的人提供快速复习(甚至可以帮助我自己获得更深入的理解)。
在这篇博客中,我将简要介绍面向对象编程(OOP),并概括地解释其四个主要概念:抽象、封装、继承和多态。我本身是Java开发者,所以会穿插一些Java代码来阐述某些要点。
注:我的目标是让以下解释具有普遍性。我不会展示大家都在用的那些例子和代码,而是会从一个不同的角度来讲解。😁
什么是面向对象编程?
面向对象编程(OOP)是一种计算机编程模型,它通过使用对象和类来组织软件设计。
对象是面向对象编程的基本单元。它们可以模拟现实世界的实体,例如狗、桌子或汽车。这意味着它们可以存储数据并执行各种行为。
对象的数据通过字段实现,行为通过方法实现。
类本质上就是对象的蓝图。它们定义了对象可以调用的状态和行为。
对象是类的实例
1. 抽象
抽象过程会隐藏对象中不必要的细节,只显示必要的属性。因此,用户可用于交互的信息量有限。
例如,开车时,你不会担心发动机的内部运作,也不会了解轮胎是如何控制汽车转向的。所有这些都是幕后运作的。
你只需与基本机制(由界面提供)进行交互,即可完成汽车应该执行的操作,例如踩油门和转动方向盘。你无需关心这些操作是如何实现的。
面向对象编程(OOP)也是如此。例如,如果你实例化一个飞机对象并调用它的函数prepareForTakeoff(),你只知道飞机将准备起飞。然而,在代码中,可能还会执行其他操作,例如测试机翼和对发动机进行诊断。
在 Java 中,抽象是通过使用抽象类和接口来实现的。
抽象 == 实现隐藏
2. 封装
封装通过将对象数据封装在一个单独的单元中来保护数据,从而实现对数据修改和可见性的控制。用户不能直接访问数据,而必须调用一个函数来修改或检索数据。这为对象增加了一层至关重要的安全保障。
例如,如果你有一个包含公共字段的表对象,你可以随时设置这些字段。你可能觉得这没什么大不了,但如果你table.legs = null不小心在某个地方设置了这些字段呢?这可能会破坏整个对象和应用程序(因为它不再是一个表了)。
但是,如果您将该字段封装在 setter 中(setLegs(null)),您可以添加一个检查,忽略将“legs”设置为 null,从而增强应用程序的安全性。
Java 中通过使用访问修饰符(即 public、private、protected)和 getter/setter 来实现封装。
封装 == 信息隐藏
3. 继承
继承允许一个类从另一个类派生数据和行为。其主要好处在于提高代码的可重用性,从而节省时间和精力,同时使代码更易读。
例如,Student 类和 Teacher 类都可以是 Person 类的子类。Student 和 Teacher 类继承Person 类的字段( firstName、、lastName)dateOfBirth和方法(doWork()、 )。goToSchool()
Student 或 Teacher 类现在可以访问 Person 类的数据和方法。因此,任何实例化这两个类的对象也可以调用它们(如果它们是公共的)。
在 Java 中,继承是通过“扩展”父类来实现的。
4. 多态性
多元逻辑??说实话,听起来比实际情况要酷得多。
多态性是指以几种不同形式存在的现象。
在面向对象编程中,多态性允许同名的数据或方法在不同的上下文中代表不同的含义。但这究竟意味着什么呢?
让我们再看一下继承的例子。由于 Student 和 Teacher 都继承doWork()自 Person 类,所以它们都可以调用 Person 类。我们也可以让他们各自实现“doWork”的方法。
- 教师可以给试卷评分。
- 学生可以学习
这被称为重写父类的方法。现在,每当创建一个 Teacher 对象并doWork()调用该函数时,Teacher 对象就会“批改试卷”。而如果创建一个 Person 对象并调用该函数doWork(),它就会“阅读一本书”。
多态性的另一个应用场景是方法重载。方法重载是通过改变方法中参数的数量和/或参数的类型来实现的。
例如,在一个名为 House 的类中,您可以拥有以下方法:
paint()paint(String color)paint(String color1, String color2)paint(boolean usePrimer)
结论
为了尽可能简化,我对这四个概念的解释非常概括。如果您对这些主题或面向对象编程(OOP)有任何见解,欢迎在下方留言。谢谢!
如果您想更深入地了解如何以编程方式实现这些想法,请查看“GeeksforGeeks”网站上的以下链接:





