前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >又是面向对象的一天

又是面向对象的一天

作者头像
做棵大树
发布2022-09-27 20:01:33
1600
发布2022-09-27 20:01:33
举报
文章被收录于专栏:代码日志

“520又是面向对象的一天,就聊点和对象相关的吧~ ”

背景

如果说要聊下面向对象(Object Oriented),那不得不提的就是和它相对的另一个概念:面向过程(Procedure Oriented)。而面向对象产生的背景则是设计思想和理念的进步,以及系统的日益复杂,人们慢慢发现面向过程这种方式已经不再适合解决现有问题了,于是慢慢催生了面向对象这一概念。

而这两个概念之间的差异点,我认为核心在于分析问题和看待问题的角度。

面向过程是偏向于过程的,对于一个问题,面向过程会将其拆解为一个个步骤,然后一步步执行,执行完了问题也就解决了。代表语言可能有 C语言, 这里说可能是因为C也可以定义结构体,也算一定程度上广义的对象,但整体上它还是面向过程的语言。

面向对象在解决一个问题时候,则是倾向于抽象出来一个实体,然后将其作为一个整体或多个整体进行思考,然后解决问题。代表语言有 Java (老牌咖啡了)。

这样说可能有点绕,知晓区别的不看这篇文章也能理解,不知晓的可能看了这两句话也稍稍迷一点。

例子

我们不妨举个谈到面向对象都会谈到的一个问题:如何把一个大象放到冰箱里?。

面向过程

  1. 首先我们写个方法找到这个大象
  2. 我们执行方法,找到大象,得到他的坐标、大小等参数
  3. 定义一个移动大象的方法,接收 步骤2 中的参数,把大象移到冰箱前
  4. 定义一个控制冰箱门的方法
    • 调用 步骤4 的方法,传入 “开” 打开冰箱门
    • 调用 步骤3 的方法,大象移动到冰箱里
    • 调用 步骤4 的方法,传入 “关” 关闭冰箱门

我们可以看到,以上的解决问题的方法就是有一个个步骤/过程组合而成的,而解决问题则是通过按照一定的顺序调用方法进行。整体都是面向过程的。

面向对象

那面向对象怎么该怎么解决这个问题呢?

首先我们分析下这个问题涉及到哪些实体,这个问题中涉及到了 冰箱 和 大象。

所以我们就可以按照以下的方式进行了~

  1. 定义两个对象:大象 & 冰箱
  2. 给大象定义“行走”的方法(大象肯定会走的嘛)
  3. 给冰箱定义“开门” 和 “关门”的方法

然后我们就只需要

冰箱.开门 => 大象.行走(冰箱里) (让大象走到冰箱里) => 冰箱.关门 就ok了

整体我们都是把二者作为了对象去看待,就像在现实中对待两个事物一样。

通过对比,我们就明白面向对象和面向过程二者的区别啦~

应用

现在很多时候,说到面向对象大家就说Java;有的也说面向对象就是 Java。这肯定是错的,就像聊到区块链就说是比特币一样。

面向对象是一种思想,而 Java 则只是它的一种在编程语言方面的应用。而它的应用绝不仅仅于此,不仅 Java,现在对于数据库的设计、系统层面的功能设计处处都是面向对象的应用。而对于这种思想的运用,还需要我们有一定的数据抽象能力。

我们举个人物身份如何在软件系统中抽象的例子,首先我们把人的共有属性找出来,作为所有角色共有的;然后我们再在这个基础上去向具体的任务角色具体,然后根据他们的不同职业去添加特有的属性或方法。这在 Java 中也就是封装和继承的体现。

图有点简陋1😹

图有点简陋2😹

多态则是说同一个动作(方法),不同实体有不同的表现,比如说上图中警察和歌手,都可以唱歌(方法),但是警察的唱歌可能是唱军歌,歌手的唱歌则可能是唱单身情歌。同一个方法在不同的实体有不同的表现。

另外,我们在进行一个系统开发设计的过程中,也不乏有面向对象的体现。比如说,我们要写一个树洞小程序。

首先我们要分析,它涉及到哪些对象:用户动态评论等(简单举这几个)。

然后对于用户,他的属性就有:账号、密码、角色、邮箱、昵称等等等。

对于动态,它就有谁发的(用户)、内容、发布时间、更新时间、状态等等。依次类推,我们系统的库表结构基本就出来了,这里说的简单哈,具体问题具体分析。

然后对于方法,我们围绕动态展开,就有发布、删除、查找等等一系列,这样围绕几个系统的对象依次展开,自然系统功能基本也就罗列出来了。当然到具体系统还是需要具体流程具体分析。还是要同具体的业务逻辑挂钩滴。

定位

那面向对象的定位是什么呢?目前面向对象基本可以解决大多数场景下的问题,优点也十分明显:结构性强、易拓展、易复用等。但是他也有一些缺点,比如说如果问题较小,完全为了面向对象而面向对象,则会比较“重”一些。

这东西就是编程发展的必然产物,但也可能是中间产物。但就目前,这种思想还是可以滴!

之后可能会围绕Java的再谈一下面向对象在Java语言中的一些理念和原则,写个小短文

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 做棵大树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 例子
    • 面向过程
      • 面向对象
      • 应用
      • 定位
      相关产品与服务
      云开发 CloudBase
      云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档