写点什么

走进面向对象编程的世界

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

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

关注

评论

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

“我985毕业生,凭什么和你专科生在一起,android工程师面试题目和答案

android 程序员 移动开发

“新常态”下的Android程序员要面对哪些压力,app架构图怎么做

android 程序员 移动开发

[译] WorkManager 基础入门,android小游戏源代码

android 程序员 移动开发

[译]内存泄露的八种花样(1),音视频开发工程师前景

android 程序员 移动开发

“你们程序员不就是修电脑的吗,你牛什么牛,成功跳槽百度工资从15K涨到28K

android 程序员 移动开发

代码覆盖率在敏捷式软件开发过程中的实践

爱奇艺技术产品团队

[译] 如何将 Stackdriver 连接到智能家居服务器以进行错误记录

android 程序员 移动开发

[译]使用 MODEL-VIEW-INTENT 第四部分 — 独立 UI 组件

android 程序员 移动开发

鸿蒙应用开发:如何与组件库(Glide)衔接?

ZEGO即构

鸿蒙 组件库

“终于懂了“系列,android直播面试题

android 程序员 移动开发

[译] 改善 Android Studio 的构建速度,网易资深Android架构师

android 程序员 移动开发

Apache Flink 在汽车之家的应用与实践

Apache Flink

大数据 flink

[译]使用 MODEL-VIEW-INTENT 第四部分 — 独立 UI 组件 (1)

android 程序员 移动开发

[译]内存泄露的八种花样,app优化的内容及策略

android 程序员 移动开发

英国顶级电影调色公司FilmLight发布爱奇艺定制母版渲染标准模版

爱奇艺技术产品团队

“离开公司,你什么都不是,2021Android目前最稳定和高效的UI适配方案

android 程序员 移动开发

[译] 管中窥豹:RxJava 与 Kotlin 协程的对比,Android社招面试题

android 程序员 移动开发

官宣|Apache Flink 1.14.0 发布公告

Apache Flink

大数据 flink

2021 年网易云音乐实时计算平台发展和挑战

Apache Flink

大数据 flink

[译]Android原生开发的现状,截止到2019年12月,一招彻底弄懂

android 程序员 移动开发

_带你了解腾讯开源的多渠道打包技术 VasDolly源码解析,2021移动开发者未来的出路在哪里

android 程序员 移动开发

“你们Android的程序员不就是敲点代码吗,凭啥工资这么高

android 程序员 移动开发

顺丰科技 Hudi on Flink 实时数仓实践

Apache Flink

大数据 flink

腾讯看点基于 Flink 构建万亿数据量下的实时数仓及实时查询系统

Apache Flink

大数据 flink

「正确」的使用Kotlin Flow进行搜索优化,安卓软件开发

android 程序员 移动开发

直播预告|App 首页如何动态化更新?来看蚂蚁技术专家详解「支付宝」全新卡片技术栈

蚂蚁集团移动开发平台 mPaaS

大前端 支付宝 移动开发 mPaS 卡片技术

数字化工具是数字化转型很好的切入点,但是千万不要只见树木不见森林|DBT How

王和全

数字化转型 数字化

爱奇艺自研QAV1编码器,将在4K高清画质为用户节省36.6%的流量

爱奇艺技术产品团队

“主动离职公司还给n+1,android学生管理系统项目视频

android 程序员 移动开发

10倍加速!爱奇艺超分辨模型加速实践

爱奇艺技术产品团队

架构实战营 - 毕业总结

Julian Chu

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