首页 > 编程语言 >什么是面向对象编程(OOP)?

什么是面向对象编程(OOP)?

时间:2022-09-06 09:57:39浏览次数:96  
标签:对象 代码 蓝图 OOP 面向对象编程 使用 可以 什么

什么是面向对象编程(OOP)?

面向对象编程,通常缩写为 OOP,是一种流行的编程范式。它被许多软件应用程序/技术公司使用,并得到各种编程语言(例如,C++、Python、Java)的支持。在本文中,我们将探讨 OOP 是什么、它的支柱以及使用它的原因。

Photo by 福蒂斯·福托普洛斯 on 不飞溅

什么是面向对象?

OOP 是使用类和对象的软件实现。

  • 课程 :这些用作对象的示意图。它们定义了属性(称为 属性 )和功能(称为 方法 ) 我们要实现。
  • 对象 : 这些是类的个别实例。定义类后,我们根据类实例化一个对象。该对象将具有类中定义的所有属性和方法。

通过使用类和对象组织代码,我们提高了可重用性,因为一旦定义了一个类,我们就可以继续重用该类来创建尽可能多的对象实例。我们可以将类和对象视为蓝图和建筑物——一旦我们有了蓝图,我们就可以重用它来建造许多建筑物。

OOP 有四个核心支柱:

  1. 封装
  2. 抽象
  3. 遗产
  4. 多态性

这些支柱具有许多优势和所需的属性,这有助于为什么使用 OOP。注意:虽然 OOP 有这些支柱,但这些概念比 OOP 更广泛(即,它们在编程领域更普遍地使用/可以在其他编程范式中找到)。

封装

这是指代码是自包含的。对于 OOP,这意味着所有必要的属性和功能都在对象中定义。参考我们的蓝图类比,这是说蓝图具有建造建筑物所需的所有细节——我们不必在其他地方寻找或搜索。

这很有用,因为它使代码组织化和模块化。特性和功能可以捆绑在对象中,这些对象可以作为更大程序的构建块。当某些东西中断或需要扩展功能时,只需要触及负责它的类。此外,对于大型编码项目,新开发人员可以优先学习与其功能最相关的类,让他们移动得更快。

抽象

这指的是只提供必要的信息并将其余信息隐藏起来。对于 OOP,这意味着当使用类创建对象时,用户只能访问必要的属性和方法。这很有用的原因是因为它允许将实现代码和接口代码分开。实现代码用于构建功能并包含逻辑,而用于接口的代码是用户如何使用它(几乎就像将所有逻辑捆绑在一起的包装器)。分离很重要,因为它允许对工作流进行组织和结构化——而不是完全实现所有内容,您可以将其分解为各个部分/步骤(可以隐藏),然后有一个最终组件将其捆绑在一起(可以是裸露)。回到蓝图的类比,蓝图只会包含必要的细节,例如材料、尺寸和组装说明,但不会包含无关信息,例如最终计算的推导(因为这些与构建无关) )。

抽象有助于简化代码。对于使用该类的人来说,他们不必担心所有的内部机制。只要程序接受预期的输入并提供预期的输出,知道如何并不重要。这可以加快开发和构建新功能的速度。例如,当使用 Python 的 random 库时,它提供了生成随机数的函数,如果它执行预期的行为,它如何生成随机数并不重要(从实际的实现意义上)。

对于类的开发人员,抽象可以允许在不破坏下游使用的情况下进行更改。可以在接口保持不变的情况下更改或更新类的内部机制——因此,无需更改使用该类的所有实例即可对代码进行改进。例如,如果开发人员找到了更高效的算法,他们可以更新代码,同时保留函数的使用方式;这样,该类具有更好的性能,并且该类的所有先前用法仍然有效(尽管内部发生了变化)。此外,未来的用户将继续以相同的方式使用该课程。

遗产

这是指能够使用现有的类来创建新的类。在蓝图的类比中,它意味着我们的蓝图可以用来制作另一个蓝图(无论是原始蓝图的修改版本,例如建筑物的颜色变化,还是原始蓝图的扩展,例如添加新楼层)。

继承对于使代码可重用和模块化非常有用。新对象可以从现有类继承并采用所有先前定义的属性和方法。这很棒,因为可以重用以前建立的代码。此外,这种在类之间继承的能力有助于带来模块化代码设计,其中存在用于使子类/子类具有附加功能的父/基类。例如,可能存在一个通用的建筑蓝图,其中包含楼层数、材料和颜色等基本信息。然后,对于特定的风格(如现代、奢华、哥特式、维多利亚式等),我们可以继承通用蓝图并添加额外的组件。

多态性

这是指能够跨不同的类/对象使用相同的接口。这有效地意味着对象可以使用相同的命名约定来执行类似的操作,从而保持用法相似。这在与继承配对时非常有用,因为可以从父类形成新类,然后可以更新方法。从蓝图的类比,想象有一个部分描述了如何连接楼层,称为“楼层连接”——通过多态性,两个不同的蓝图都可以有一个描述不同平面图的“楼层连接”部分(例如,一个描述楼梯,另一个描述自动扶梯) .

多态性很有用,因为它使界面在相似但不同的对象之间保持相同——这可以使开发人员更容易,因为它减少了学习新界面的认知负担。例如,Python 中的 len() 函数可以提供字符串中的字符数、列表中的元素数以及字典中键值对的数量,尽管有字符串、列表和字典是不同的数据类型。在底层,len() 的实现方式对于每种数据类型略有不同,但使用它的接口在它们之间是相同的。

结论

OOP 是一种利用类和对象来组织代码的编程范式。类包含定义关键属性和功能的属性和方法。类充当对象的蓝图,对象是类的实例。 OOP 可以帮助使代码模块化、更易于使用/更新和可重用。 OOP 的四个原则是封装(自包含代码)、抽象(隐藏代码,以有效地分离实现和接口)、继承(通过使用类来制作类)和多态性(在不同类之间具有相同的命名约定/接口) .

有关演示 OOP 及其原则的 Python 示例,请查看这篇文章:面向对象编程 (OOP) 的 Python 示例

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/18596/45130609

标签:对象,代码,蓝图,OOP,面向对象编程,使用,可以,什么
From: https://www.cnblogs.com/amboke/p/16660705.html

相关文章

  • 为什么会出现浮动?浮动元素会引起什么问题?如何清除浮动?
    浮动将元素排除在普通流之外,即元素将脱离文档流,不占据空间。浮动元素碰到包含它的边界或者浮动元素的边界停留为什么需要清除浮动1、子元素浮动后,不占位置,父元素的......
  • 如何查询Oracle指定表名所在的表空间是什么?
    场景1:假设你知道完整的表名是student,那么可以使用下面的精确语句查询SELECT*FROMall_tablesWHEREUPPER(table_name)='STUDENT';场景2:假如你只知道表名的一部分,那么......
  • 为什么要写成mid=left+(right-left)/2
    我来解释一下,为什么要写成mid=left+(right-left)/2,而不是mid=(left+right)/2。因为会溢出!!此时的溢出指的是,mid可能会超出该数据类型的最大值我们假定一个数据类型uint8......
  • 新增一个Redis 从节点为什么与主节点的key数量不一样呢?
    在日常的Redis运维过程中,经常会发生重载RDB文件操作,主要情形有:主从架构如果主库宕机做高可用切换,原从库会挂载新主库重新获取数据主库QPS超过10万,需要做读写分离,......
  • 什么是CSS?
    CSS简介CSS指的是层叠样式表(CascadingStyleSheet),它描述了如何在屏幕、纸张或其他媒体上显示HTML元素CSS节省了大量工作。样式定义通常保存在外部.css文件中......
  • 架构分层:我们为什么一定要这么做?
    在系统从0到1的阶段,为了让系统快速上线,我们通常是不考虑分层的。但是随着业务越来越复杂,大量的代码纠缠在一起,会出现逻辑不清晰、各模块相互依赖、代码扩展性差、改动......
  • csm移动端h5用什么样的视觉方案?
    项目需要求在移动端H5需要展示一些数据统计的图表,虽然第一时间想到的是echarts,常用还有Highcharts,D3等,antv家族的图表UI好看一些,再加上F2是移动端可视化方案于是就选择F2,......
  • 高并发系统:它的通用设计方法是什么?
    我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流......
  • 【Java基础】JavaBean是什么
    1.JavaBean是什么符合如下标准的Java类类是公共的public有一个无参的公共的构造器有属性,且有对应的get、set方法2.示例publicclassJavaBean{privateStrin......
  • 什么是event loop
    经常会被人问到你来谈一谈什么是eventloop,一开始我是一脸懵逼,慢慢的在网上看到很多贴子才明白是怎么回事.先看一段代码console.log(0)setTimeout(function(){......