以漫画形式解说面向对象:把复杂的概念用简单有趣的画面呈现,启发你的思维

news2024/11/26 18:32:04
157cb93ff6d417088ac8d85094eb9bfd.jpeg


63ae5c19929896380788a56998b41d3e.jpeg


面向对象是什么

面向对象(Object Oriented,OO)的思想是软件开发中极其重要的概念和应用,它早已超越了程序设计和软件开发的范畴,延伸至数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等广泛领域。面向对象是一种对现实世界的理解和抽象的方法,它是计算机编程技术发展到一定阶段后的产物。

相比之下,面向过程(Procedure Oriented)则是一种以过程为中心的编程思想。它主要关注的是程序中正在发生的具体事情,而与谁在受影响并不直接相关。与面向对象相比,面向过程的明显区别在于缺乏封装、继承和类等特性。

无论是在软件开发还是在实际工作中,深入理解软件开发思想都是非常重要的。下面将详细介绍面向对象思想的重要性以及它在不同领域的应用。

首先,面向对象思想能够将复杂的问题分解为更小、更易理解的部分。通过将问题抽象成对象,并通过定义对象的属性和行为,我们能够更清晰地理解问题的本质,并将其分解为可管理的模块。这种分治的思想使得开发过程更加高效,同时也能提高代码的可维护性和可复用性。

其次,面向对象思想强调了封装的重要性。通过封装,我们可以隐藏对象内部的细节,仅对外暴露必要的接口。这样做的好处是可以保护对象内部的数据和状态,防止外界的误操作。同时,封装也能够提高代码的模块化程度,使得代码更易于理解和维护。

另外,继承是面向对象思想中的另一个重要概念。通过继承,我们可以创建新的对象,并从现有的对象中继承其属性和行为。这种能力使得代码的复用性大大提高,同时也能够减少代码的冗余度。继承还能够实现多态性,即同一类型的对象在不同的上下文中表现出不同的行为。

面向对象思想在实际应用中具有广泛的应用。在数据库系统中,通过面向对象的方式,我们可以将现实世界中的实体抽象成对象,并通过对象之间的关系来建立数据库的结构。这种方法能够更好地反映现实世界的模型,提高数据库的灵活性和可扩展性。

在交互式界面开发中,面向对象的思想能够将用户界面抽象成对象,并通过对象之间的交互来实现用户与系统的交互。这种方式使得用户界面的设计和开发更加灵活,同时也能够提供更好的用户体验。

在应用平台的开发中,面向对象的思想能够将平台的各个部分抽象成对象,并通过对象之间的合作来实现平台的功能。这种方式使得


e75eb83ff83718d51abe3e7e9b559f30.jpeg


从一场比赛说起

在一个软件村里

有一名资深「面向过程」程序员——老过

和一名「面向对象」信徒——阿对

同时受雇于一家挨踢店


有一天老板突发奇想

决定让这两名程序员进行一次比赛

获胜者将获得一个限量的

360 度全自动按摩椅

编程比赛开始了

ec99a8da7e52b429b015c20a6cf85112.jpeg


不一会,他俩都写出了几乎相同的代码

dc77f7d00c46356b0edc2ed54df99174.jpeg


572e9f290e3ad38c811c6f78e19fda44.jpeg

老过看到新需求,微微一笑

aa8cd0870f0e7e16f21281403ce1e430.jpeg 63bdc34d0577a93090cb5e86b89c86fa.jpeg

阿对决定让新的收银方式继承 Bill 类

先在 Bill 类中新增 discount 方法

并将其开放

8de6db0acf9da7693b561c7a92ecfbfe.jpeg

普通的收费方式在 discount

函数中直接返回价格

七夕节的收费方式则继承此类

在 discount 函数中实现打 77折

879449e5da12791923acad50f770b6fc.jpeg

当老过和阿对同时将程序交给老板时


26053608895a2a1d9ed3d8232bc05b25.jpeg

老过已经开始幻想自己将来

坐在按摩椅上的舒服日子

cb82eb443e45626ad108778031c59e91.jpeg

听到新需求

老过一阵头大

不由在「面向过程天下第一群」中吐槽道

0699cc2bb176735162c9f8ea6f37bddf.jpeg

群友也附和说

可不是嘛

就是因为老板这么多需求

才会搞得面向过程的程序一团糟

吐槽归吐槽

老过在 getPrice 函数中

再次增加了条件判断

f9819db616f99e35255462389698d3b3.jpeg

看着越来越复杂的

Bill 类和 getPrice 方法

老过眉头紧锁

他深知事情远没有结束

中秋和国庆一过

他还需要到这个复杂的类中

删掉打折的方法

天知道老板还会再提

什么天马行空的需求

无论是新增或删除代码,在这个过长的类里做修改都是件不太愉快的事。为了在一个很长的函数中找到需要修改的位置,「面向过程」使得老过不得不浏览大量与修改无关的代码,小心翼翼地修改后,又要反复确认不会影响到类的其他部分。

老过在心底里默默地祈祷

这个类不再需要修改

提交了自己的程序


阿对收到新需求时

先是新增了中秋节支付类

7b9a9827e0108260783f0bd7a43fed90.jpeg

再增加了国庆节支付类

f31c65a4360cb179d6948673edc0da30.jpeg

「面向对象」让阿对最喜欢的一点是

fe65f47e9d03584ea63ef78a9ae1435d.jpeg

有一个好消息要告诉大家!

当老板兴高采烈地说出这句话时

老过和阿对都露出了心惊胆战的表情

这句话往往意味着要更改需求

20f01fd6d11d26a433988c4f14b8c598.jpeg

老过反抗道

但他并没有说出心里另一个小九九

实在不想再去给 Bill 类添加代码了

bc906e2d516a84dea4993c0153bda911.jpeg

这次修改老过花了较长的时间才完成

ee8ccd8a68803a70111ed5f5d24c9af0.jpeg

看着那个只属于七夕节的 gifts 变量

老过像看着自己白衬衫上的油渍一样难受

以后每次收费时都会生成一个

只有七夕节才会用到的变量

都是因为老板的需求太奇葩

才让这个程序看起来乱糟糟的

由于这个类做了修改

本来已经测试通过的代码又得重测一遍


阿对打开了 LoversDayBill 类

将其修改如下

70a0a60e9285da15c689fa2bcc35ae6e.jpeg 70285864b0a673e3c672b42e4320f82b.jpeg

当老板看完老过和阿对的代码后

再次兴奋地提出新需求时

老过顿时晕了过去......


比赛真是太焦灼了

最后赢得奖励的是?


第三个参赛者

老板的傻儿子

他完全不会写程序

但他使用 Ctrl+C,Ctrl+V

拷贝了阿对的代码

272ac7af4508e72f35d4b54ab25f2dd1.jpeg


面试常见考点

在面试中,面向对象的常见考察点是三个基本特征:封装、继承、多态。

  • 封装
  • 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
  • 继承
  • 继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来类的情况下对这些功能进行扩展。通过继承创建的新类称为「子类」或「派生类」,被继承的类称为「基类」、「父类」或「超类」。
  • 要实现继承,可以通过 继承和组合 来实现。
  • 多态性
  • 多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单说就是一句话:允许将子类类型的指针赋值给父类类型的指针。
  • 实现多态,有两种方式,覆盖和重载。两者的区别在于:覆盖在运行时决定重载是在编译时决定并且覆盖和重载的机制不同。例如在 Java 中,重载方法的签名必须不同于原先方法的,但对于覆盖签名必须相同。


我对面向对象的理解:面向对象的编程方式使得每一个类都只做一件事面向过程会让一个类越来越全能,就像一个管家一样做了所有的事。而面向对象像是雇佣了一群职员,每个人做一件小事,各司其职,最终合作共赢!


2f1d34407b57af41573d1aea7e4e6247.jpeg


引申阅读

最后,我们谈谈面向对象有什么好处?

《大话设计模式》中大鸟给小菜讲的故事非常经典:

“话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是大宴众文武,在酒席间,曹操诗性大发,不觉吟道:‘喝酒唱歌,人生真爽……’众文武齐呼:‘丞相好诗!’于是一臣子速命印刷工匠刻版印刷,以便流传天下。”

“样张出来给曹操一看,曹操感觉不妥,说道:‘喝与唱,此话过俗,应改为‘对酒当歌’较好!’于是此臣就命工匠重新来过。工匠眼看连夜刻版之工,彻底白费,心中叫苦不迭。只得照办。”

“样张再次出来请曹操过目,曹操细细一品,觉得还是不好,说:‘人生真爽‘太过直接,应改问语才够意境,因此应改为‘对酒当歌,人生几何……’当臣子转告工匠之时,工匠晕倒……”

大鸟:“小菜你说,这里面问题出在哪里?”

小菜:“是不是因为三国时期活字印刷还未发明,所以要改字的时候,就必须要整个刻板全部重新刻。”

大鸟:“说得好!如果是有了活字印刷,则只需更改四个字就可,其余工作都未白做。岂不妙哉。

一、要改,只需更改要改之字,此为可维护

二、这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃可复用

三、此诗若要加字,只需另刻字加入即可,这是可扩展

四、字的排列其实可能是竖排可能是横排,此时只需将活字移动就可做到满足排列需求,此是灵活性好。”

“而在活字印刷术出现之前,上面的四种特性都无法满足,要修改,必须重刻,要加字,必须重刻,要重新排列,必须重刻,印完这本书后,此版已无任何可再利用价值。”

小菜:“是的,小时候我一直奇怪,为何火药、指南针、造纸术都是从无到有,从未知到发现的伟大发明,而活字印刷仅仅是从刻版印刷到活字印刷的一次技术上的进步,为何不是评印刷术为四大发明之一呢?原来活字印刷是思想的成功,面向对象的胜利。”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1097186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023_Spark_实验十九:SparkStreaming入门案例

SparkStreaming入门案例 一、准备工作 二、任务分析 三、官网案例 四、开发NetWordCount 一、准备工作 实验环境:netcat 安装nc:yum install -y nc 二、任务分析 将nc作为服务器端,用户产生数据;启动sparkstreaming案例中的客户端…

BOSHIDA DC电源模块关于电容器的电解液位置

BOSHIDA DC电源模块关于电容器的电解液位置 DC电源模块中的电容器扮演着一个非常重要的角色,它们能够对电路提供稳定的电源电压,同时也可以作为电路中的滤波器,去除电路中的噪声和纹波。在DC电源模块中使用的电容器通常是电解型电容器&#…

unity(WebGL) 截图拼接并保存本地,下载PDF

截图参考:Unity3D 局部截图、全屏截图、带UI截图三种方法_unity 截图_野区捕龙为宠的博客-CSDN博客 文档下载: Unity WebGL 生成doc保存到本地电脑_unity webgl 保存文件_野区捕龙为宠的博客-CSDN博客 中文输入:Unity WebGL中文输入 支持输…

2023_Spark_实验十八:安装FinalShell

下载安装包 链接:https://pan.baidu.com/s/14cOJDcezzuwUYowPsOA-sg?pwd6htc 提取码:6htc 下载文件名称:FinalShell.zip 二、安装 三、启动FinalShell 四、连接远程 linux 服务器 先确保linux系统已经开启,不然连接不上 左边…

Linux离线安装Apache HTTP

准备工作 下载apr、apr-util、pcre、httpd包 apr、apr-util下载, 如下图: pcre下载,如下图: httpd下载 ,如下图: 开始安装 1. 安装编译apr [rootlocalhost ~]# cd /usr/local [rootlocalhost local]# tar -zxvf apr-1.7.4.tar.gz -C ./ [rootlocalhost local]# cd apr…

apple pencil买不买?ipad第三方电容笔推荐

相信很多学生党的学习都离不开iPad,然而电容笔,自然也是是必不可少的。至于真的Apple Pencil,那就更贵了,一支就要一千多块钱,普通人可买不起。国内的电容笔已经做得很好了,虽然不像苹果原装电容笔那样&…

186_Power BI Desktop 支持计算组编辑

186_Power BI Desktop 支持计算组编辑 一、背景 今天是2023年10月16日,基本上是 Power BI 每月更新的时间点了。打开看到 Power BI 果然已经更新到了2023年10月版本:2.122.746.0 (23.10) (x64) 这里提一下,我使用的是商店版的 Power BI De…

多线程中ThreadPoolExecutor.map()中传递多个参数

with concurrent.futures.ThreadPoolExecutor(max_threads) as executor:results executor.map(get_captcha_image, ip_addrs, [img_url] * len(ip_addrs)) #要传入多个参数时,每个参数都得是固定相同长度的可迭代对象# 收集结果for result in results:print(resul…

便利店小程序可以做哪些营销活动呢

在当今这个数字化时代,微信小程序已经成为了人们日常生活的一部分。对于便利店来说,拥有一个优秀的小程序不仅可以提高销售,还可以扩大品牌影响力,增加客户粘性。本文将探讨便利店小程序可以做什么样的营销活动,如何利…

智慧饭堂报餐系统源码 智慧食堂源码

智慧饭堂报餐系统源码 智慧食堂源码 技术栈 1、前端技术栈:ES6、vue、vuex、vue-router、vue-cli、axios、element-ui 2、后端技术栈:SpringBoot、MyBatis、Spring Security、Jwt 介绍 一款java开发的智慧饭堂报餐系统,支持连接人脸识别…

分享一下微信报名系统怎么做

微信报名系统是一种基于微信公众号或小程序的开发和应用,可实现用户通过微信进行在线报名、支付等操作的系统。本文将介绍微信报名系统的基本概念、制作流程、功能特点、使用流程和推广策略,帮助读者了解如何制作一个高效的微信报名系统。 一、微信报名系…

从零开始学习调用百度地图网页API:三、鼠标点击绘图功能

目录 代码功能问题注意addEventListenerplot_line 代码 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta name"viewport" content"initial-scale1.0,…

WordPress 常规设置页面调用媒体中心上传图片插入URL(新版可用)

首先&#xff0c;我们需要在主题或插件文件夹中创建一个 JavaScript 文件&#xff08;如&#xff1a;media-uploader.js&#xff09;&#xff0c;该文件中包含如下代码。 /*** 媒体中心上传 js **/ jQuery(document).ready(function($){var mediaUploader;$(#upload_image_but…

AUTOSAR介绍

AUTOSAR产生背景 车辆功能的创新导致车辆E/E架构日益复杂。与此同时&#xff0c;开发要求通常自相矛盾&#xff1a;例如要求驾驶域辅助系统支持关键性驾驶操控&#xff0c;提高燃油经济性同时符合环境标准。信息娱乐和通信系统与实时车辆环境和在线服务的不断深入整合带来了更…

MASA MAUI 预览Office文件

文章目录 背景介绍1、新建MAUI Blazor项目2、创建OfficeViewer.razor组件3、使用安卓模拟器运行4、兼容iOS 总结 背景 接到一个在Maui中预览Office文件的需求&#xff0c;包含excel、word、PDF三种常见的文件&#xff0c;经过技术选型&#xff0c;最后选择了微软原生支持的off…

如何避免输入中文拼音时触发input事件

如何避免输入中文拼音时触发 input 事件 html 结构 <input type"text" name"" id"" />js 定义了一个输入框并添加了三个事件监听器。以下是每个部分的解释&#xff1a; const input document.querySelector("input"); let i…

记一次U8登录异常问题

最近陆续有同事反映U8系统登录切换不同用户&#xff0c;在选择账套时U8长时间无反应。 一开始在经历二十多秒的等待后还会出现账套下拉列表选项&#xff0c;后来经历更长的时间等待后提示连接SQL服务器错误&#xff0c;如下图&#xff1a; 因为不切换用户时直接登录使用是没有…

leetcode-1.两数之和

1. 题目 2. 解答 遍历数组元素之和&#xff0c;由于只有唯一答案&#xff0c;并且数组中同一个元素不能重复出现&#xff0c; 因此可以使用双重遍历方式来计算所有可能&#xff1b; #include <stdio.h>void solve(int num[], int len, int target) {for (int i 0; i …

spring 注解: 更加简单的存储 Bean

目录 1. 更加简单的存储 Bean 1.1 添加注解 1.1.1 Controller【控制器存储】 1.1.2 Service【服务存储】 1.1.3 Repository【仓库存储】 1.1.4 Component【组件存储】 1.1.5 Configuration【配置存储】 1.1.6 类注解存储 Bean 的命名规则&#xff08;默认命名规则&…

浅谈精密配电多回路监控装置在轨道交通项目上的应用

安科瑞 须静燕 行业背景 轨道交通作为城市公共交通系统的一部分&#xff0c;在过去几十年中得到了广泛的发展和扩张。它在解决城市交通拥堵、减少环境污染、提高城市可持续性等方面发挥了重要作用。随着科技的进步&#xff0c;轨道交通系统也在不断引入新的技术和创新&#xff…