IT袋

当前位置:主页 > 经验教程 > 建站编程 >

什么是面向对象

什么是面向对象? 面向对象的概念是什么?

时间:2024-02-02 13:38:54 来源:IT袋 作者:马勇
导读:什么是面向对象,为大家说一说什么是面向对象的相关介绍,请看下面详细的介绍。 面向对象 作为一名程序员,代码编程我们平时伸手就来。 日常用到比较多的语言也许是 Java、TypeScrip

什么是面向对象

为大家说一说什么是面向对象的相关介绍,请看下面详细的介绍。

面向对象

作为一名程序员,代码编程我们平时伸手就来。

日常用到比较多的语言也许是 Java、TypeScript、C++ 等,大家都很清楚,这些都是面向对象的语言。

那么问题也随之而来,是我们需要使用面向对象的特性才选择了这些语言开发,还是人云亦云地选择了这些语言开发?

在面向对象的理念中,万物皆对象。面向对象的精髓在于抽象,面向对象的困难也在于抽象。

简单来说:面向对象的成功在于成功的抽象,面向对象的失败在于失败的抽象。

对象与对象之间都是孤立的,好比现实生活的你和我之间。

只有在特定的场景下,孤立对象之间进行了某些信息交互才表示出一个场景过程,好比基于这边文章,你和我之间才建立起了作者和读者的关系。

面向过程

既然说到面向对象,就还应该了解到另外一个选项:面向过程

面向过程认为我们的世界是由一个个相互关联的消息同组成的,这是一种类似 螺旋式 的结构,每个小系统都有明确的开始和明确的结束,开始和结束之间有着严谨的因果关系。

在面向过程的设计方法中强调将问题分解成小的、可重用的模块,每个模块负责执行特定的任务。

Talk is cheap. Show me the code!我们联想下生活中是如何购物的?浏览商品 → 加购  → 结算 。转换成对应的伪代码,应该是这样的:

什么是面向对象

这很符合我们平时的代码风格,但也确实是一种面向过程的标准写法。感

到一丝诧异和矛盾,难道我们平时都在用面向对象语言来写面向过程的代码?事实确实如此。

我们平时的方法封装调用很大一部分就是面向过程的设计。

这里并非是说面向过程的写法不正确,反而在某些场景下面向过程更加直观。但面向对象的设计为何而来?

哪怕我们平时大部分做的都是 CRUD 的工作,重复性的代码也会构建出一个庞大的系统。构成一个系统的因素太多,要把所有问题的因素都考虑到,再把所有因素的因果关系都分析清楚,接着把整个过程都用代码表述出来未免太过于困难,这不仅对创作者来说是一个灾难,对后继者来说更是:talk is cheap, code is shit

我们转换下思维,如何利用面向对象的特性设计以上代码?利用面向对象的方法论,万物皆对象。

那么由此可以设计出 商品购物车 以及 付款 的对象

什么是面向对象

通过利用这种方式,不论在哪一个层次上,我们都只需要面对有限的复杂度和有限的对象结构,从而可以专心地了解这个层次上的对象是如何工作的。

比如在付款的结构上,我们可以只专注付款的扩展,从而可以延伸出 微信付款支付宝付款银联付款 等众多方式。

How

作为开发,我们工作的本质就是把一个产品需求转化成一个可以运行的系统,中间可能会涉及产品设计、需求建模、架构设计、实现设计、代码编写等众多步骤。

在调研需求时常常会陷入面向过程的误区,我们会最先弄清楚有多少业务流程,接着画出业务流程图,然后顺藤摸瓜,找出业务流程中每个关键步骤,弄清楚上下文是如何传递的。

事实上,架构设计、实现设计、代码编写都是属于软件开发的阶段。在设计之前,我们如果有一个清晰的目标,那后面的行动无疑会变得顺利很多。我们面对着成百上千的需求,每个需求可能都存在错综复杂的关系,复杂度并非是线性增长的。需求复杂度是否相等于技术复杂度?

什么是面向对象

面向对象编程意味着编写针对建模对象的代码。

这是用于描述复杂系统动作的众多技术之一。

它是通过描述交互对象的数据和行为来定义。

那么在编程之间我们就需要进行很关键的一步:建模

ChatGPT:建模是指对客观事物建立一种抽象的方法用以表征事物并获得对事物本身的理解,同时把这种理解怀念化,并将这些逻辑概念组织起来,构成一种对所观察对象内部结构和工作原理便于理解的表达。

公式:静态的事物(物)+特定的条件(规则)+特定的动作(参与者的驱动)=特定的场景(事件)

当我们尝试为需求背后的场景建模时,首先要决定便是抽象的角度,这一步尤其重要也尤其不易。

一旦抽象角度确定,后面的设计就变得顺理成章,而不是杂乱无章。

这一步也是与面向过程的主要区别所在:

  • 面向过程:希望能够通盘考虑,把所有问题的因素都考虑到,再将这些因果关系理清,这就会将结构变得很复杂。(把事情复杂化)
  • 面向对象:希望能够把复杂的事物通过合理的抽象角度分解成小块,每个小块之间单独思考,最后再基于特定的场景将块与块之间串联。(把事情简单化)因此面向对象的关键就在于刚开始面对问题领域的时候不要决定去全盘考虑,而是找出问题领域里包含的抽象角度,只要抽象角度找对找全,那么通盘的问题也就层层解决。当然,在抽象的过程中,每个角度之间可能是互不关联的。

做需求的时候,首要目标不是要弄清楚业务是如何一步一步完成的,而是要弄清楚有多少业务的参与者,以及每个参与者的目标是什么。

而这其中参与者的目标便是你需要抽象的角度

抽象角度

抽象的层次越高,具体信息越少,对应的概括能力越强。

相关阅读

  • 分布式事务有哪些解决方案

    分布式事务有哪些解决方案

    关于这方面的知识你知道吗?分布式事务有哪些解决方案的教程内容,接下来分享详细内容。 基于XA协议的 :两阶段提交和三阶段提交,需要数据库层面支持 基于事务补偿机制的 :TCC,基于

  • 分布式存储有哪几种类型? 常见的分布式存储类型

    分布式存储有哪几种类型? 常见的分布式存储类型

    今日重点为您介绍分布式存储有哪几种类型方面的讲解,一起跟随小编看看吧! 分布式存储系统可以根据其数据模型、访问模式和设计目标等因素划分为不同的类型。 以下是一些常见的分布式

  • 局域网服务器搭建教程图解 搭建一个小型局域网详细流程

    局域网服务器搭建教程图解 搭建一个小型局域网详细流程

    今天介绍局域网服务器搭建教程图解和搭建一个小型局域网详细流程的相关介绍,很不错的方法小知识,建议收藏哦! 很多朋友多次提到,如何组建局域网?组建局域网对于公司办公来说,非

  • 穿越火线魔盒官方网站 穿越魔盒官网网址

    穿越火线魔盒官方网站 穿越魔盒官网网址

    正文核心介绍:穿越火线魔盒官方网站和穿越魔盒官网网址的方法内容,一起来了解了解吧。 cf11月密藏宝箱活动上线啦,这次的活动玩家有机会获得20万cf点哦,还有机会兑换永久武器,是不