走进面向对象编程的世界

InfoQ2021-03-06 15:37:00

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

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

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

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

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

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

这四大支柱是:

  • 抽象化封装

  • 数据封装

  • 继承

  • 多态

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

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

抽象的示例。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

作者介绍:

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

原文链接:

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

(0)

相关推荐

  • 浅谈POP,OOP,AOP三者区别

    POP(面向过程编程Process Oriented Programming): 分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候依次调用. 面向过程就是一步一步的来,在项目之 ...

  • Python面向对象编程

    https://m.toutiao.com/is/dmnvNk6/?=Python面向对象编程 面向对象编程 到目前为止,我们已经使用函数.模块来操作我们的数据.这叫做 面向过程 的方式进行编程.然而 ...

  • 岁月为笔、情感为卷,通过三本书走进不一样的世界

    人生里,总有一种"趣"在等你! 百年前芸芸众生里 一个人的风花雪月 鲜衣怒马,浪漫终身 两个人的相濡以沫 浮生若梦,为欢几何 一世人的天地至美 偶寄闲情,乐乎吾心 他们笃实着.深情 ...

  • 给我三分钟,带你走进中国古典园林的世界

    中国园林因独具韵味的美学品格而在世界上享有崇高的声誉 因此被大家认为是"世界园林之母" 中国古典园林分为皇家园林.私家园林和寺院园林 而其中属私家园林的艺术成就最高.后世遗存也较多 ...

  • 书籍,让我走进了更广阔世界

    90后的王婉宁是一名药剂师.药剂师的生活忙碌而单一,但王婉宁喜欢阅读,每天都会挤出时间坚持阅读. 除了读一些专业书籍,王婉宁业余时间更喜欢读文学类书籍,总是觉得自己读的书太少.每天下班后的阅读时间,成 ...

  • 中国美术名家:走进田志刚艺术世界

    [画家简介] 田志刚,1979生于江苏连云港,中国书画院研究员,北京现代典藏美术馆职业画家,北京聚风堂画院理事.中国美术家协会会员,中国工笔画协会会员,江苏美术家协会会员,北京房山美术家协会会员,现居 ...

  • 女人为何难走进男人的精神世界?原因有三,大多数女人抓不住重点

    很多人都在抱怨这个世界不公平,首先不公平的就是人生起点,有的人一出生就站在了别人奋斗一生的终点上,关键是奋斗终生也未必能达到. 其次是很多事情似乎命运早就注定好了,所以你的努力就会变成笑话,因为最后还 ...

  • Python教程:面向对象编程的一些知识点总结

    类与实例 类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息. 类.属性和方法命名规范 类名通常由大写字母打头.这是标准惯例,可以帮助你识别类,特别是在实例 ...

  • 面向对象编程(中)

    继承性(inheritance) 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类 中, 那么多个类无需再定义这些属性和行为,只要继承那个类即可 多个类称为子类(派生类),单独的这个类称为父类 ...

  • 爱牙日,医学硕士带二小学子走进龋齿的秘密世界

    9月19日下午,乳山市第二实验小学邀请永聚牙科专业医学硕士柳红光走进校园开展全国爱牙日宣传活动,现场300多名学生以及部分教师参与. 据了解,今年9月20日是第30个全国爱牙日,活动主题为" ...

  • java 面向对象编程

    什么是面向对象 回顾方法的定义与调用 方法的定义 import java.io.IOException; //Demo01 类 public class Demo01 { //main方法 publi ...