速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

走进面向对象编程的世界

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

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

关注

评论

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

Android音视频——相关概念

程思扬

音视频 音视频开发

虎符交易所Hoo研究院|音乐NFT的路径在哪

区块链前沿News

NFT 虎符 Hoo 虎符交易所

DDD洋葱架构才是 yyds!阿里大牛手记(DDD)领域驱动设计应对之道

Java架构追梦

Java 架构师

Android音视频——基础介绍

程思扬

音视频

跑赚项目-stepn后续-如何月入过万(33/100)

hackstoic

投资 web3

GitHub霸榜月余的24万字Java面试手册,竟是阿里机密

Java架构追梦

Java 程序员 后端开发

Java并发JUC(java.util.concurrent)集合不安全

芝士味的椒盐

Java Java集合框架 5月月更

架构实战营模块三作业

哈啰–J

架构、框架侃侃而谈算法望而却步?吃透这份笔记轻松掌握算法技能

Java架构追梦

Java 架构

渗透必备:Kali中安装漏洞靶场Vulhub

喀拉峻

网络安全 漏洞 渗透 靶场

无死角窥探的焦虑:AI如何反击隐私侵占?

脑极体

Git进阶系列 | 8. 用Reflog恢复丢失的提交

俞凡

git 最佳实践

网站开发进阶 (十一) 知识汇总

No Silver Bullet

二维码 标签 5月月更 打印 元素隐藏

都说区块链可信,到底信了个啥?

亨利笔记

区块链

WebAssembly技术_编译ffmpeg(ubuntu20.04)

DS小龙哥

5月月更

模块9-设计电商秒杀系统

卡西毛豆静爸

#架构训练营

leecode上的代码到pycharm运行解决历程

武师叔

5月月更

电阻电路的等效变换 (Ⅲ)

謓泽

5月月更

DevOps系列之 —— DevOps概览(三)DevCloud HE2E DevOps 框架及其主要服务

若尘

DevOps 5月月更

励志!一年时间,从小白到进入阿里核心部门,“他”的逆袭之路

Java架构追梦

Java 后端开发 程序员面试

吃透这份Github点赞120k的Spring全家桶笔记Offer拿到手软

Java架构追梦

Java 程序员 后端开发

Harbor v2.5远程复制:制品的签名如影随形

亨利笔记

【JAVA秘籍功法篇-分布式事务】事务的实现原理

王老狮

分布式事务 CAP原理 BASE理论 ACID 事物的实现

拿了阿里、腾讯的offer的大佬给想进互联网大厂的程序员一个忠告

Java架构追梦

Java 阿里 程序员面试

不可谓不“细”!阿里内部价值百万“微服务架构精髓”限时开源

Java架构追梦

Java 微服务 后端开发

撸了一个Spring Boot + VUE 框架开发的分布式网盘系统「源码开源」

Java架构追梦

spring java面试 后端开发

Java并发JUC(java.util.concurrent)线程池

芝士味的椒盐

Java Java多线程 5月月更

26岁到来之际,我在阿里实现了年薪40W+的小目标

Java架构追梦

Java 后端开发 程序员面试

Redis+Nginx+设计模式+Spring全家桶+Dubbo阿里P8技术精选文档

Java架构追梦

Java 阿里 后端开发

算法:动态规划-斐波那契数列问题

正向成长

动态规划

TypeScript 原始数据类型

Emperor_LawD

typescript 基础 5月月更

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