在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

走进面向对象编程的世界

  • 2021-03-05
  • 本文字数:2027 字

    阅读完需:约 7 分钟

走进面向对象编程的世界

面向对象编程(Object-Oriented Programming,OOP)是一种编程范式或编程方式,它使用类和对象来解决问题。


类只是定义任何有形事物的属性和能力的方式之一。然而,一个类并不能直接使用。为了访问类中定义的属性和方法,人们需要一个对象,即类的实例化。因此,一种编程范式,即创建类并使用它们的对象来解决任何给定的问题,这就是 OOP。


举个例子,若要计算出不同型号的汽车在一个月内的总油耗。以面向对象的编程范式,你可以创建一个名为 “Vehicle”的抽象类,该类包含基本属性,如车辆识别号码、颜色、注册号、类型、燃料类型、平均油耗等,这些属性是所有车辆共享的。


你也可以创建用输入、显示或使用这些属性值的函数或方法。现在,你可以实例化同一个类“Vehicle”的不同对象,如 HondaCity、Tesla、Maruti、Nissan 等,并相应地设置它们的属性。接下来,你只需要一个函数,接受一种车辆并计算总的油耗,就可以了,问题就这样解决了。



描述类的图像,以及上面示例的它的对象


现在,我们已经了解了面向对象的编程。让我们来谈谈共同支撑 OOP 世界的四大支柱。


这四大支柱是:


  • 抽象化封装

  • 数据封装

  • 继承

  • 多态


接下来,逐一解释这些概念。


抽象化更通俗的说法是封装。其原理是,我们只向用户展示相关的细节,将那些可能与用户不那么相关的背景细节隐藏起来。举个例子,当你开车的时候,你只需要关心方向盘、离合器或油门、刹车和齿轮,而你对它们的后端机械工作方式几乎一无所知。这就是数据抽象的一个例子。你只是向用户展示了方向盘、离合器等细节,而不是让用户关心这些内部工作的细节。



抽象的示例。


抽象化是隐藏背景细节,只向用户展示相关细节的过程。


数据封装是将所有元素封装在一起,形成一个内聚单元的过程。数据封装往往会导致内部的数据抽象。举个例子,当你坐在汽车里时,你有没有想过有多少不同的系统同时协作,从而实现汽车的各种功能?空气冷却系统、发动机、汽车的其他不同部件,如座椅、结构、头枕等,都安装在一辆车上,共同为你提供整体的舒适体验。


不同属性的部件聚集在一起,形成一个内聚单元,也就是汽车。而且,你只能看到相关的细节,但看不到它们的内部工作情况,这就是抽象化。因此,封装往往会导致抽象化。


从编程的角度来看,数据封装的一个很好的例子就是类。由于一个类有许多不同的属性和方法,对应不同的组件,因此它们是将数据封装成一个内聚单元的完美示例。



数据封装是将所有元素封装在一起,形成一个内聚单元的过程。


在 OOP 的世界里,下一个最重要的概念或原则就是继承。继承就像这个词所暗示的那样,继承父类的属性和方法(大多数是公共和保护性质的)。这允许子类或从另一个类(父类)继承的类,使用父类的现有特性,而无需再次重写它们。


举个例子,想象一下,你在一家电子商务公司工作,公司要求你开发他们的系统。你可以先创建一个名为User的类,其中包含了各种使用该接口的人都会有的基本属性和方法。比如公共属性,如姓名、性别、年龄、地址、出生日期等等。但也可以有多种类型的用户,如客户和卖家。


现在,为了解决这个问题,你可以简单地创建一个子类CustomerSeller,它们继承了类User。因此,User成为父类,而CustomerSeller成为它的子类。现在,这两个类将拥有父类的所有属性,且它们可以拥有自己的属性来添加到从父类继承的属性上。例如,子类Customer可以有额外的属性,如送货地址、首选商品类型、购买历史等。同样,另一个子类Seller也可以有其他属性,如卖家 ID、卖方商品清单、卖家历史等等。下图是对此的总结。



描述从父类到子类的继承的图像。


继承是指子类继承父类的属性和方法的过程。


接下来谈谈 OOP 的第四个也是最后一个支柱:多态


多态是指代码能够根据所处的环境进行自我变形,而不会对其性能造成太大的影响。换句话说,它是一个实体改变成任何生存和持续性能所需形式的能力。


举个现实生活中的例子。在任何时刻,你都是一个人,是某个公司 / 网站 / 服务的用户,是某个机构的员工,是女儿 / 儿子,是姐姐 / 弟弟,也是人。你作为一个人,随着不同的情况和环境,你适应了多少种形式和角色。你就是多态的最佳例子。你在人生的不同阶段扮演着不同的角色,即使你可能会随着每个角色的变化而稍有改变,但从根本上说,你还是那个始终如一的你。因此,我们会根据不同的情况变形为各种不同的形态,从而在日常生活中实现多态化。


在编程方面,想象你开发了一个软件。现在,你的软件应该能够适应操作系统的变化、计算能力的变化、其他工作条件的变化,且还能保持运行。因此,你的软件需要具备执行多态性的能力。


多态是指实体根据自己所处的环境进行变形或调整而不影响其性能的能力。


因此,如果任何一种编程范式都是基于使用类和对象,且遵循四个原则:抽象、封装、继承和多态,那么它就是一种面向对象的编程方法。


作者介绍:


Ananya Banerjee,德克萨斯州大学达拉斯分校计算机科学研究生。


原文链接:


https://towardsdatascience.com/introducing-you-to-the-world-of-oop-object-oriented-programming-95c33ae4df2

2021-03-05 14:282120
用户头像
刘燕 InfoQ高级技术编辑

发布了 1123 篇内容, 共 610.0 次阅读, 收获喜欢 1982 次。

关注

评论

发布
暂无评论
发现更多内容

1688商品评论API:轻松挑选优质商品的利器

Datafox(数据狐)

1688商品评论API 1688评论API 1688评论数据 1688评论采集

BeeWorks企业即时通讯软件怎么样?

BeeWorks

即时通讯 IM 私有化部署

算电协同,商汤大装置为AI基础设施“降碳提智”提供新范式

Lily

PCTA认证-101课程学习笔记

TiDB 社区干货传送门

学习&认证&课程

TiDB 企业版敏捷模式试用:政企实战场景体验

TiDB 社区干货传送门

社区活动 TEM 试用 平凯数据库敏捷模式

第四期共读《斯坦福大学人生设计课》

ShineScrum

读书感悟 读书方式 #读书

亿级O2O(智能设备)系统架构笔记【原创】

车江毅

架构规划 技术战略规划 百万设备在线 亿级订单 o2o

智源具身框架Thor开源:迈向类人级全身控制,让机器人在强对抗中“站稳脚跟”

智源研究院

1688图片搜索API秘籍!轻松获取相似商品数据

Datafox(数据狐)

1688图片搜索接口 1688图片识别接口 1688图搜API 1688拍立淘api 1688按图搜索接口

企业必读:等保测评的几个误区——你的信息真的安全吗?

等保测评

网络安全 信息安全 数据安全 黑龙江等保测评 哈尔滨等保测评

五款远程控制软件盘点排名:我们应该选择哪一款?

科技经济

MyEMS:智能化能源管理的创新实践者

开源能源管理系统

开源 能源管理系统

2025新规:歇业、整改、罚款!——只因忽略一件事

等保测评

网络安全 信息安全 数据安全 黑龙江等保测评 哈尔滨等保测评

数字孪生项目开发框架与特点

北京木奇移动技术有限公司

数字孪生 软件外包公司 webgl开发

ClkLog埋点分析系统:快速实现用户行为数据采集与分析

ClkLog

开源 数据分析 埋点 sdk 画像

Web3 软件的开发框架

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

面试官狂问的 27 个 RAG 问题全解析:从基础到架构优化,一次讲透!

测试人

软件测试

人工智能AI在行业的应用和技术方案

金陵老街

人工智能 AI 大模型

如何利用境外舆情网站分析与应对公关事件

沃观Wovision

舆情监测 舆情监测系统 海外舆情监测 舆情监测网站

破壁OLTP与OLAP:TiDB如何用“双引擎”与“异步魔法”重塑数据库架构!

TiDB 社区干货传送门

OLAP 金融 OLTP HTAP 国产化替代

达能×火山引擎:用AI升级消费者洞察

字节跳动数据平台

企业的“数字安全基建”——等保测评,为未来“扫雷”

等保测评

网络安全 信息安全 数据安全 黑龙江等保测评 哈尔滨等保测评

基于 Code 开源版二次开发流程:DDD 架构落地用户模型管理全流程

王中阳Go

DDD

I2:产品运营大树

执于业务

让 ETL 更懂语义:DataWorks 支持数据集成 AI 辅助处理能力

阿里云大数据AI技术

人工智能 阿里云 AI辅助 Dataworks

区块链Web3 系统的开发技术

北京木奇移动技术有限公司

区块链技术 软件外包公司 web3开发

LED屏幕样品可提供吗?

Dylan

产品 LED LED display LED显示屏 LED屏幕

数字孪生项目开发技术栈

北京木奇移动技术有限公司

数字孪生 软件外包公司 webgl开发

TiDB v7.1.8 多语法兼容MySQL 多场景验证

TiDB 社区干货传送门

测试 数据库迁移 国产化替代 7.x 实践 平凯数据库敏捷模式

数字孪生项目的开发

北京木奇移动技术有限公司

数字孪生 软件外包公司 webgl开发

开源能源管理系统的标杆之作——深度解析MyEMS的技术优势与应用价值

开源能源管理系统

开源 能源管理系统

走进面向对象编程的世界_语言 & 开发_Ananya Banerjee_InfoQ精选文章