AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

走进面向对象编程的世界

  • 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:281809
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 560.4 次阅读, 收获喜欢 1978 次。

关注

评论

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

NLP 论文领读|改善意图识别的语义表示:有监督预训练中的各向同性正则化方法

澜舟孟子开源社区

人工智能 自然语言处理 深度学习 预训练模型

Gartner:如何在中国成功应用多云模式

BeeWorks

SAVE: 软件分析验证和测试平台

华为云开发者联盟

云计算 测试 后端 开发 软件分析

深入理解和把握数字经济的基本特征

CECBC

20省市公布元宇宙路线图

CECBC

零信任安全模型-下一代网络安全架构

领创集团Advance Intelligence Group

架构 网络安全 零信任

基于 ShardingSphere 的得物数据库中间件平台“彩虹桥”演进之路

SphereEx

数据库 中间件 ShardingSphere 实践

火线沙龙第26期-多云安全专场

腾源会

观测云更新|观测云帮助文档全新上线;新增 Profile 可观测新增 Profile 可观测;新增 Deployment 网络详情及网络分布等

观测云

如何利用数仓创建时序表

华为云开发者联盟

数据库 后端 华为云 时序表

vue快速学习、基础用法

开发微hkkf5566

基于微信小程序的婚纱影楼小程序开发笔记

CC同学

小程序

混沌工程,了解一下

华为云开发者联盟

云计算 测试 后端 混沌工程 华为云

港股多支个股表现活跃,引发投资者对港股市场回暖猜想与关注

E科讯

Go语言Redis API基本功能实践

FunTester

数字经济时代文化消费新特征

CECBC

力扣每日一练之字符串Day6

京与旧铺

6月月更

你了解shiro吗?手把手教你集成shiro

阿Q说代码

springboot 鉴权 shiro 身份验证

解读2022年度敏捷教练行业现状报告

华为云开发者联盟

后端 开发 华为云

JDBC 在性能测试中的应用

阿里巴巴云原生

阿里云 云原生 JDBC 压测

中国移动应用出海发展天地宽

BeeWorks

2023年广州美博会时间地点详情

Geek_0b38bb

美博会 2023年广州美博会 春季广州美博会 广州春季美博会

区块链为化解信任危机带来新契机

CECBC

FastApi+Vue+LayUI实现前后端分离

Python研究所

6月月更

如何实现一套容器(C语言版)1

祖维

c 容器 泛型 迭代器

JDK动态代理为什么必须要基于接口?

码农参上

JAVA开发 动态代理 底层知识

盘点四种WiFi加密标准:WEP、WPA、WPA2、WPA3

wljslmz

wifi 6月月更 无线安全 wpa3 wep

泛型的类型擦除后,fastjson反序列化时如何还原?

码农参上

泛型 底层知识 Java 开发

ElasticSearch第二弹之分片原理

阿Q说代码

ES shard replica

理论+案例,带你掌握Angular依赖注入模式的应用

华为云开发者联盟

程序员 前端 华为云

墨天轮访谈 | IvorySQL王志斌—IvorySQL,一个基于PostgreSQL的兼容Oracle的开源数据库

墨天轮

数据库 oracle postgresql 开源

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