谈谈面向对象

news2024/11/20 18:38:06

引言

无论你是刚入门的程序小白,还是混迹社会多年的程序大佬,谈起面向对象,想必多多少少都能侃上两句。面向对象作为程序界“家喻户晓”的一种编程思想,亦或是一种程序设计方法,重要性已是不言而喻。毫不夸张的说,程序界不能失去面向对象,就像西方不能失去耶路撒冷!!!

这篇文章我会阐述一下笔者个人对于“面向对象”的理解,我会尽量使用最简洁的语言,从不同的角度进行论述。

当你打开百度搜索词条“面向对象”,你经常会看到类似这样一段话:

“面向对象是一种程序设计方法,或者说它是一种程序设计规范,其基本思想是使用对象、类、继承、封装、多态、消息等基本概念来进行程序设计。所谓“面向对象”就是以对象及其行为为中心,来考虑处理问题的思想体系和方法。采用面向对象方法设计的软件,不仅易于理解,而且易于维护和修改,从而提高了软件的可靠性和可维护性,同时也提高了软件模块化和可重用化的程度。”

没有任何问题,这就是面向对象的定义,但是概念往往都是抽象的,看完之后你肯定会有类似这些疑问:

  1. 说了个寂寞,到底什么是面向对象?
  2. 为什么需要对象、类、继承、封装、多态、消息等基本概念?
  3. 面向对象这些优势如何体现?

这些问题也是我遇到过的,下面我我站在我的视角上替大家翻译翻译:

一、什么是面向对象?

面向对象给我们解决问题提供了一种思路,就是将问题模块化,划分为一个个的对象,可以让我们用聚少成多的方法来写程序。

谈到面向对象这种思想,我们通常会想到面向过程,举个例子,比如洗衣服:
如果使用面向过程,洗衣服大概是这样的。首先我们打来一盆水,然后放入脏衣服、洗衣粉,接下来便是手搓、拧干、晾晒。可见整个过程不仅麻烦,还是单线程的,费时费力。

如果是使用面向对象,洗衣服只需三步。第一步准备好脏衣服、洗衣粉,第二步放入全自动洗衣机并启动,第三步收衣服。整个过程完全不必在意洗衣细节,而且还支持多线程,洗衣期间可能还能做点别的事,真的是太优雅了。

二、对象、类、继承、封装、多态、消息等基本概念有什么用?

类(Class):类可以看作是对象的蓝图或模具,用于创建具体的对象实例。它定义了一组具有相似属性和行为的对象的模板。比如上面的洗衣机的生产通常需要依赖工程师提供的图纸,而这里的类就相当于是那张图纸。

对象(Object):对象是类的一个实例,它具有类定义的属性和行为。换句话说,对象是类的具体实体,代表了现实世界中的某个具体事物。比如我们上面使用的洗衣机实体就是一个对象。

封装(Encapsulation):封装是将数据(属性)和行为(方法)封装在对象内部,并对外部隐藏其内部实现细节的过程。通过封装,可以实现信息隐藏和保护对象的数据完整性,同时提供简单的接口供外部访问。比如洗衣机就是将洗衣流程封装起来,只给用户预留了一些可用的开关。

继承(Inheritance):继承是一种机制,允许一个类(子类)从另一个类(父类)中继承属性和行为。通过继承,子类可以重用父类的代码,并且可以在不修改父类的情况下添加新的功能或修改现有功能。

多态(Polymorphism):多态是指同一个方法调用可以根据调用对象的不同而表现出不同的行为。通过多态,可以提高代码的灵活性和可扩展性,使得程序可以处理不同类型的对象而不需要编写大量的条件语句。

消息(Message):在面向对象编程中,对象之间的交互是通过发送消息实现的。这个消息可能是包含了要执行的方法和相关的参数,接收消息的对象根据接收到的消息调用相应的方法进行处理。

三、面向对象这些优势如何体现?

面向对象的一个最大的优势就是“可维护性复用”,想要实现这一点,需要我们在设计时遵循一些指导性的设计原则:

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

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

相关文章

打卡第22天------回溯算法

开始学习了,希望我可以尽快成功上岸! 一、回溯理论基础 什么是回溯法?回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 回溯是递归的副产品,只要有递归就会有回溯。 回溯法的效率回溯法的本质是穷举,穷举所有可能,然后找出我们想要的答案。如果想让回溯法高效一些,可…

160. 相交链表(返回相交起点)

思路: 前提: PA headA,PB headB (B链表头节点) 过程: 1.PA与PB同时向后遍历 2.若PA遍历完,PA headB PB遍历完,PB headA 3.直到PA与PB指向相同节点(实际遍历过两次中的较短的链表即可&am…

LLM与搜索推荐

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

24款奔驰E260后排电动座椅升级,舒适度全面提升

以下是关于 24 款奔驰 E 升级原厂后排电动座椅功能的案例讲解: 升级原厂后排电动座椅通常需要直接替换整个后排座椅,包括扶手等部件。 后排电动座椅的好处是可以通过电机调节靠背角度和座椅前后移动。例如,乘客可以通过车门上的座椅调节按钮…

聚焦民生服务 助力企业发展 区块链应用加速落地

聚焦民生服务,助力企业发展,区块链应用正在加速落地。这一趋势体现了区块链技术在多个领域的广泛应用和深远影响。以下是对这一主题的详细分析: 一、区块链在民生服务中的应用 政务服务 数据共享与打通:区块链技术利用其分布式账…

征服 Docker 镜像访问限制:KubeSphere v3.4.1 成功部署全攻略

近期,KubeSphere 社区的讨论中频繁出现关于 Docker 官方镜像仓库访问受限的问题。 本文旨在为您提供一个详细的指南, 展示在 Docker 官方镜像访问受限的情况下,如何通过 KubeKey v3.1.2 一次性成功部署 KubeSphere v3.4.1 以及 Kubernetes …

Java二叉树三序遍历的非递归实现

目录 零、本文中模拟实现的二叉树源码 一、前序遍历的非递归实现 1.代码示例: 2.与递归算法的比对演示: 二、中序遍历的非递归实现 1.代码示例: 2.与递归算法的比对演示: 三、后序遍历的非递归实现 1.代码示例: 2.与递…

VScode连接算力云服务器

打开VScode,找到插件市场,搜索Remote - SSH 下载插件Remote - SSH之后会出现下面这个,直接点击。 将下面这个恒源云租服务器的登陆指令 复制到下面之中,enter确认。 然后点第一个 然后点这个 复制粘贴这个云服务器的密码,(它不会显示,但你已经粘贴了)

Paddlenlp测试

1、环境安装 使用华为云euleros操作系统,python版本3.9.5,CPU无GPU服务器: (1)pip3 install setuptools_scm -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com (2&#xf…

js 替换json中的转义字符 \

例如有以下字符串 "\"{\\\"account\\\":\\\"66\\\",\\\"name\\\":\\\"66\\\"}\"" 想得到如下字符串 {"account":"66","name":"66"} 执行替换字符串 "\"{…

【科研绘图】记录一次论文结果复现

复现原论文中的图片是科研的基本功之一,它不仅验证了研究结果的可靠性,确保了科学工作的准确性和可重复性,还深刻地评估了方法的有效性,体现了对原始研究的尊重和对科学过程的严谨态度。这个过程不仅提高了研究的透明度&#xff0…

科普文:docker基础概念、软件安装和常用命令

docker基本概念 一 容器的概念 1. 什么是容器:容器是在隔离的环境里面运行的一个进程,这个隔离的环境有自己的系统目录文件,有自己的ip地址,主机名等。也可以说:容器是一种轻量级虚拟化的技术。 2. 容器相对于kvm虚…

计算机组成原理--慕课网学习笔记

本文记录了学习慕课网课程【新版】计算机基础,计算机组成原理操作系统网络时的计算机组成原理篇的笔记,方便查阅复习使用 一、概述篇 1.1 计算机的发展历史 1)计算机发展的四个阶段 ①第一个阶段:电子管计算机 背景&#xff1a…

一文掌握什么是时间序列?时间序列研究的核心任务?目前最强大的时序分析与建模工具和项目?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 什么是时间序列? 时间序列是一系列按照时间顺序排列的数据点,这些数据点通常是随时间连续变化的测量值。时间序列分析是统计学中专门用于解析时间顺序数据的一套技术,旨在识别数据中的模式、趋势、季节性波动及其他潜在…

计算机网络:构建联结的基础

目录 1. 网络拓扑结构 1.1 星型拓扑 1.2 环型拓扑 1.3 总线型拓扑 1.4 网状拓扑 2. 传输介质 2.1 双绞线 2.2 同轴电缆 2.3 光纤 2.4 无线电波 3. 协议栈模型 3.1 OSI模型 3.2 TCP/IP模型 4. 网络设备 4.1 交换机 4.2 路由器 4.3 网关 4.4 防火墙 5. IP地址…

Linux下Centos7中的gcc/g++

命为志存。 —— 朱熹 Linux中C/C翻译过程 1、样例介绍1、1、gcc版本过低不能编译成功1、2、编写 .cxx或.cc或.cpp代码(都是C) 2、程序的翻译过程2、1、条件编译(补充)2、2、语言历史 3、深入理解链接3、1、静态链接的使用场景 1、样例介绍 1、1、gcc版本过低不能编译成功 in…

QT vs2019编译报错LNK2019无法解析的外部符号

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 "public: __cdecl Dialog_Setting::Dialog_Setting(class QWidget *)" (??0Dialog_SettingQEAAPEAVQWidgetZ),函数 "public: __cdecl QtWid…

全感知、全覆盖、全智能的智慧快消开源了。

智慧快消视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。AI安全管理平台&…

0727,学什么学,周六就应该休息!!!!!

周六就应该休息,一天就忙了两小时也不是我的错喵 目录 UDP的小总结 01:使用select实现一个基于UDP的一对一即时聊天程序。 1.0 复读机服务器和树洞客户端 2.0 byby不了一点的敬业服务器!!! 今天到此为止&#x…