521 了,就聊点和对象相干的吧~
背景
如果说要聊下 面向对象(Object Oriented),那不得不提的就是和它绝对的另一个概念:面向过程 (Procedure Oriented)。而面向对象产生的背景则是设计思维和理念的提高,以及零碎的日益简单,人们缓缓发现 面向过程 这种形式曾经不再适宜解决现有问题了,于是缓缓催生了 面向对象 这一概念。
而这两个概念之间的差别点,我认为外围在于剖析问题和对待问题的角度。
面向过程 是偏差于过程的,对于一个问题,面向过程会将其拆解为一个个步骤,而后一步步执行,执行完了问题也就解决了。代表语言可能有 C 语言 ,这里说 可能 是因为 C 也能够定义构造体,也算肯定水平上狭义的对象,但整体上它还是面向过程的语言。
面向对象 在解决一个问题时候,则是偏向于形象进去一个实体,而后将其作为一个整体或多个整体进行思考,而后解决问题。代表语言有 Java(老牌咖啡了)。
这样说可能有点绕,通晓区别的不看这篇文章也能了解,不通晓的可能看了这两句话也稍稍迷一点。
例子
咱们无妨举个谈到面向对象都谈判到的一个问题:如何把一个大象放到冰箱里?。
面向过程
- 首先咱们写个办法找到这个大象
- 咱们执行办法,找到大象,失去他的坐标、大小等参数
- 定义一个挪动大象的办法,接管 步骤 2 中的参数,把大象移到冰箱前
-
定义一个管制冰箱门的办法
- 调用 步骤 4 的办法,传入 “开” 关上冰箱门
- 调用 步骤 3 的办法,大象挪动到冰箱里
- 调用 步骤 4 的办法,传入 “关” 敞开冰箱门
咱们能够看到,以上的解决问题的办法就是有一个个步骤 / 过程组合而成的,而解决问题则是通过依照肯定的顺序调用办法进行。整体都是面向过程的。
面向对象
那面向对象怎么该怎么解决这个问题呢?
首先咱们剖析下这个问题波及到哪些实体,这个问题中波及到了 冰箱 和 大象。
所以咱们就能够依照以下的形式进行了~
- 定义两个对象:大象 & 冰箱
- 给大象定义“行走”的办法(大象必定会走的嘛)
- 给冰箱定义“开门”和“关门”的办法
而后咱们就只须要
冰箱. 开门
=> 大象. 行走 (冰箱里)
(让大象走到冰箱里) => 冰箱. 关门
就 ok 了
整体咱们都是把二者作为了对象去对待,就像在事实中看待两个事物一样。
通过比照,咱们就明确面向对象和面向过程二者的区别啦~
利用
当初很多时候,说道 面向对象 大家就说 Java;有的也说 面向对象 就是 Java。这必定是错的,就像聊到区块链就说是比特币一样。
面向对象 是一种思维,而 Java 则只是它的一种在编程语言方面的利用。而它的利用绝不仅仅于此,不仅 Java,当初对于数据库的设计、零碎层面的功能设计处处都是面向对象的利用。而对于这种思维的使用,还须要咱们有肯定的 数据抽象 能力。
咱们举个人物身份如何在软件系统中形象的例子,首先咱们把人的共有属性找进去,作为所有角色共有的;而后咱们再在这个根底下来向具体的工作角色具体,而后依据他们的不同职业去增加特有的属性或办法。这在 Java 中也就是 封装 和继承 的体现。
多态 则是说同一个动作(办法),不同实体有不同的体现,比如说上图中 警察 和歌手 ,都能够 唱歌 (办法),然而警察的 唱歌 可能是唱军歌,歌手的 唱歌 则可能是唱单身情歌。同一个办法在不同的实体有不同的体现。
另外,咱们在进行一个零碎开发设计的过程中,也不乏有 面向对象 的体现。比如说,咱们要写一个树洞小程序。
首先咱们要剖析,它波及到哪些对象:用户 、 动静 、 评论 等(简略举这几个)。
而后对于 用户,他的属性就有:账号、明码、角色、邮箱、昵称等等等。
对于 动静,它就有谁发的(用户)、内容、公布工夫、更新工夫、状态等等。顺次类推,咱们零碎的库表构造根本就进去了,这里说的简略哈,具体问题具体分析。
而后对于办法,咱们围绕 动静 开展,就有公布、删除、查找等等一系列,这样围绕几个零碎的对象顺次开展,天然零碎性能根本也就列举进去了。当然到具体零碎还是须要具体流程具体分析。还是要同具体的业务逻辑挂钩滴。
定位
那 面向对象 的定位是什么呢?目前面向对象根本能够解决大多数场景下的问题,长处也非常显著:结构性强、易拓展、易复用 等。然而他也有一些毛病,比如说如果问题较小,齐全为了面向对象而面向对象,则会比拟“重”一些。
这货色就是编程倒退的必然产物,但也可能是两头产物。但就目前,这种思维还是能够滴!
之后可能会围绕 Java 的再谈一下面向对象在 Java 语言中的一些理念和准则,写个小短文,能够点个关注哦~ 感觉文章哪里有问题的小伙伴,能够点击查看原文滑到页面底部进行留言(没方法,公众号太年老了,没这个性能了)