写点什么

走进面向对象编程的世界

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

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

关注

评论

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

微博系统中”微博评论“的高性能高可用计算架构设计

Beyond Ryan

企业决策智能项目的五种失败姿势

脑极体

【死磕Java并发】-----J.U.C之深入分析CAS

chenssy

11月日更 死磕 Java 死磕 Java 并发

[Pulsar] 消息的消费

Zike Yang

Apache Pulsar 11月日更

架构训练营 - 模块六

Geek_9de3de

架构实战营

微信程序开发系列教程(一)开发环境搭建

汪子熙

JavaScript node.js 微信 11月日更 微信开发

花了2个钟才搞懂这AOP为啥没生效,水友却睡着了……

4ye

Java spring 程序员 后端 签约计划第二季

DDD领域驱动设计落地实践系列:战略设计和战术设计

慕枫技术笔记

Java 后端 签约计划第二季

Rust 元宇宙 7—— 异步和消息

Miracle

rust 异步 元宇宙

OpenELB 进入 CNCF Sandbox,让私有化环境对外暴露服务更简单

青云技术社区

云计算 云原生

面试官:final、finally、finalize 有什么区别?

王磊

java面试

架构训练营 - 模块五

Geek_9de3de

架构实战营

Python量化数据仓库搭建系列3:数据落库代码封装

恒生LIGHT云社区

量化投资 量化交易 量化

面试官:说一下final关键字和final的4种用法?

王磊

元宇宙是人类文明不可避免的一次内卷

CECBC

在线文本并集计算工具

入门小站

工具

Spring AOP内功修炼

4ye

Java spring 程序员 后端 签约计划第二季

如何用JavaScript实现2+2=5?

汪子熙

JavaScript 大前端 语音识别 语音合成 11月日更

从1天到10分钟的超越,华为云DRS在背后做了这些

华为云开发者联盟

数据库 数据 报表 华为云DRS 在线交易

使用ES6编写一个超简单的搜索算法

吴脑的键客

JavaScript 大前端

激发数字新活力 打造发展新优势

CECBC

Python Qt GUI设计:QClipboard剪贴数据类(基础篇—19)

不脱发的程序猿

Python PyQt GUI设计 QClipboard 剪贴板

使用JDK自带的VisualVM进行Java程序的性能分析

汪子熙

Java jdk 性能 性能调试 11月日更

面试官:int和Integer有什么区别?为什么要有包装类?

王磊

中国首批区块链订单融资缘何落地雄安?

CECBC

12.04 Serverless Meetup 深圳站 | Call 你来参加

阿里巴巴云原生

阿里云 Serverless 云原生 活动

AOP 插件就这?上手不用两分钟!!

4ye

Java spring 程序员 后端 签约计划第二季

spring-boot-devtools 快速重启的秘密

4ye

Java spring 程序员 后端 签约计划第二季

29 K8S之ReplicaSet控制器

穿过生命散发芬芳

k8s 11月日更

架构营模块五作业

GTiger

GitHub上星标39.9k+的开源类库,忍不住分享下

沉默王二

Java

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