头图

又是面向对象的一天

做棵大树
521了,就聊点和对象相关的吧~

背景

如果说要聊下面向对象(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语言中的一些理念和原则,写个小短文,可以点个关注哦~ 觉得文章哪里有问题的小伙伴,可以点击查看原文滑到页面底部进行留言(没办法,公众号太年轻了,没这个功能了)

关注:做棵大树 咱们一起进步~

阅读 165
1 声望
0 粉丝
0 条评论
你知道吗?

1 声望
0 粉丝
宣传栏