Toggle navigation
主页
English
K8S
Golang
Guitar
About Me
归档
标签
Welcome to Sanger's Blog!
OOP
无
2023-08-16 17:06:29
28
0
0
sanger
[TOC] # 简介 今天,我想谈一谈编程世界中类似的问题: 面向对象编程的主要原理是什么? 我一直在这个问题的两面。这是经常被问到的主题之一,以至于您无法让自己不知道。 初级和入门级开发人员通常必须回答。因为这是面试官说三件事的简单方法: 1. 候选人是否准备了这次面试? 如果您立即听到答案,将获得加分-这表示认真的做法。 2. 候选人是否已超过辅导阶段? 了解面向对象编程(OOP)的原理表明,您已经超越了教程中的复制和粘贴功能-您已经从更高的角度看到了事情。 3. 候选人的理解是深还是浅? 这个问题的能力水平通常等于其他大多数学科的能力水平。相信我。 面向对象程序设计的四个原则是封装,抽象,继承和多态性。 对于初级开发人员来说,这些话听起来很吓人。维基百科中复杂而冗长的解释有时会使混乱加倍。 这就是为什么我要对每个概念进行简单,简短和清晰的解释。听起来好像是您向孩子解释的事情,但实际上,当我进行面试时,我很想听听这些答案。 # 封装 说我们有一个程序。根据程序中定义的规则,它具有几个逻辑上不同的对象,可以彼此通信。 当每个对象在类中保持其状态为private时,就可以实现封装。其他对象没有直接访问此状态的权限。相反,他们只能调用公共函数列表(称为方法)。 因此,对象通过方法管理自己的状态-除非明确允许,否则其他任何类都不能接触它。如果要与对象通信,则应使用提供的方法。但是(默认情况下)您无法更改状态。 假设我们正在构建一个小型的《模拟人生》游戏。有人,有猫。他们彼此交流。我们要应用封装,因此我们将所有“ cat”逻辑封装到一个Cat 类中。它可能看起来像这样:  你可以喂猫。但是你不能直接改变猫的饥饿程度。 在这里,猫的“状态”是私有变量 mood,hungry而energy。它还具有私有方法meow()。它可以随时调用它,其他类则不能告诉猫何时叫声。 他们所能做的是在所定义的公共方法 sleep(),play()和feed()。它们每个都以某种方式修改内部状态并可以调用meow()。因此,在私有国家和公共方法之间建立了约束。 这是封装。 # 抽象 抽象可以被认为是封装的自然扩展。 在面向对象的设计中,程序通常非常大。并且单独的对象彼此之间经常进行通信。因此,要保持这样的大型代码库多年(并且不断进行更改)是很困难的。 抽象是旨在缓解此问题的概念。 应用抽象意味着每个对象仅应公开使用它的高级机制。 此机制应隐藏内部实现细节。它仅应显示与其他对象相关的操作。 想想-咖啡机。它做很多事情,并且在引擎盖下发出古怪的声音。但是,您所要做的只是喝咖啡并按下一个按钮。 优选地,该机制应该易于使用并且应该很少随时间变化。可以将其视为少量的公共方法,任何其他类都可以在不“知道”它们如何工作的情况下调用它们。 另一个现实生活中的抽象示例? 考虑一下您如何使用手机:  您只需使用几个按钮即可与手机互动。到底是怎么回事?您不必知道-实施细节被隐藏。您只需要知道一些简短的操作即可。 实现更改(例如,软件更新)很少影响您使用的抽象。 # 继承 好的,我们看到了封装和抽象如何帮助我们开发和维护大型代码库。 但是您知道OOP设计中的另一个常见问题是什么吗? 对象通常非常相似。他们有着共同的逻辑。但他们不完全一样的。啊… 那么,我们如何重用通用逻辑并将独特逻辑提取到单独的类中呢?实现此目的的一种方法是继承。 这意味着您通过派生另一个(父)类来创建(子)类。这样,我们形成了一个层次结构。 子类重用父类的所有字段和方法(公共部分),并可以实现其自己的(唯一部分)。 例如:  如果我们的计划需要管理公共和私人教师,还需要管理其他类型的人(如学生),则可以实施此类班级结构。 这样,每个类在重复使用父类的通用逻辑的同时,仅添加必要的内容。 # 多态性 我们只能说最复杂的词了!多态性在希腊语中意为“许多形状”。 因此,我们已经知道继承的力量并乐于使用它。但是出现了这个问题。 假设我们有一个父类和一些继承自它的子类。有时我们想使用一个集合(例如一个列表),其中包含所有这些类的混合。或者我们为父类实现了一个方法-但我们也想将其用于子类。 这可以通过使用多态来解决。 简而言之,多态性提供了一种与父类完全相同的类来使用它,因此不会与混合类型混淆。 但是每个子类都按原样保留自己的方法。 这通常是通过定义要重用的(父)接口来发生的。它概述了一堆常用方法。然后,每个子类实现这些方法的自己的版本。 每当集合(例如列表)或方法需要父级实例(概述了通用方法)时,该语言都会评估通用方法的正确实现-不管传递哪个子级。 看一下几何图形实现的草图。他们重用了一个公共接口来计算表面积和周长:  现在可以在同一集合中使用“三角形”,“圆形”和“矩形” 有了这三个数字继承父Figure Interface允许您创建的混合列表triangles,circles和rectangles。并将它们视为相同类型的对象。 然后,如果此列表尝试计算元素的曲面,则会找到并执行正确的方法。如果元素是三角形,CalculateSurface() 则调用三角形的。如果是圆,则CalculateSurface() 称为cirlce 。等等。 如果您有一个使用数字的参数来处理图形的函数,则不必定义三次-一次定义一个三角形,一个圆形和一个矩形即可。 您可以定义一次并接受a Figure 作为参数。无论传递三角形,圆形还是矩形-只要它们实现了CalculateParamter(),它们的类型都没有关系。 希望对您有所帮助。您可以在面试中直接使用这些完全相同的解释。 # 参考 https://www.freecodecamp.org/news/object-oriented-programming-concepts-21bb035f7260/
上一篇:
OOP AI Result
下一篇:
golang:latest 最新镜像包编译失败
0
赞
28 人读过
新浪微博
微信
更多分享
腾讯微博
QQ空间
人人网
文档导航