浅谈面向对象——追溯法

前端进阶训练营第一周

winter大大给我们布置了一个作业,使用追溯法来谈一谈面向对象,其实在我看来,还是要弄懂 是什么? 为什么? 怎么办?

参考这篇文章 追溯法-------面向对象 追溯法------面向对象2

追溯

工具

Wikipedia

历史

使用追溯法,难免会遇到这个情况,追溯下去不知道自己收获了什么

  • 对象和实例概念的最早萌芽可以追溯到麻省理工学院的PDP-1系统
    • PDP-1:迪吉多公司PDP系列所推出的第一个机型
      • 迪吉多:成立于1957年的一家美国老牌电脑公司
  • 1960年,Simula语言,初具面向对象程序设计的雏形
    • 出现原因:在软硬件环境逐渐复杂的情况下,软件如何得到良好的维护?
    • 解决方案:设计模式上强调某种可重复性
  • 20世纪70年代的Smalltalk语言,面向对象语言的基础(堪称经典) ……

所以我觉得追溯法,要带着目的、问题去追溯。特别是,特别是,弄懂是什么?为什么?怎么办?

PS:让我想到了上学的时候考试的阅读理解,区别在于自己成了那个出题人……

面向对象

问题: 面向对象从1960年到现在,为什么还能够徐徐生辉

将这个问题拆分成若干小问题来处理

面向对象是基于什么样的背景出现?

1960年前后,玩软件和硬件的人越来越多,硬件就不断升级,软件也越写越复杂,这时候软件维护慢慢成了问题…… 你想想,新来一个人,需要学习成千上万个函数,以及这些函数之间相互是如何调用的…… 是不是有种头皮发麻的感觉…… 因此急需一种解决方案来处理这种困境

面向对象是如何出现的?

既然有了这种困境,大家都会开始摸索,我以设计模式搜索发现,哦~原来面向对象设计模式并不是单单只某一种设计模式,而是一类设计模式的统称。这里引述一下维基百科的原话:

面向对象设计模式通常以类别或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类别或对象。

然后我看了一下历史~ 相当有趣!!!

  • 设计模式的思想,是来自一位建筑师 克里斯托佛·亚历山大 1977/79年编制了一本汇集设计模式的书。 结果这本书在建筑设计领域的影响居然没有比在软件开发领域的影响大。

PS:所以说,感兴趣想读啥就读啥~不要给自己的人生设限(winter大大提的蛮多的一句话)

Kent Beck,Ward Cunningham

这两位大神在1987年,将这种设计思想运用到Smalltalk中的图形用户接口(GUI)的生成中。

受此影响,之后出现一本突破性的书:《设计模式:可复用面向对象软件的基础》,这里面的趣事就不展开了……

这里我比对了一下面向对象的历史————

发现萌芽可以追溯至1965年源自于麻省理工林肯实验室所制造的 TX-0 电脑。(引申出一个思考:这个萌芽是什么?)

  1. 基于容量架构(表示完全不懂)

然后比较明显的是雏形是1960年的Simula语言(据说他们是为模拟船只而设计了这种语言)

  1. 类与对象
  2. 静态对象

再之后是20世纪70年代的Smalltalk语言

  1. 对象是动态的,可以被创建,修改和销毁
  2. 引入了继承性

到20世纪80年代变成主导思想,有两大助力

  1. C++的推广
  2. GUI的引入,图形用户界面的崛起

这里我说说我的感触和理解:

  1. 很多东西往往最开始只是为了解决当下的问题去做的尝试,可能在思想上并没有很成熟的体系,莫慌!只要实际的数据展示这样方案的有效性,就可以不断去深入尝试和探索。就像那本成熟的《设计模式》一书是在1994年10月21日首次出版,距离最开始的面向对象雏形都有29年之久。
  2. 放到面试这个问题上面,如果在面试过程中遇到不懂的专业名词怎么办?问呗~最终你可以锁定它需要解决的问题到底是什么?再用自己的话来解释自己如何解决就好。

那面向对象是如何解决上述问题的呢?

我在查阅文档的时候,认为核心是:抽象出某种重复性。本来成千上万个函数,现在变成了一个个对象,你可以给他们起不同的名字来方便记忆,而这些对象都符合统一的规范,有继承,多态,属性,方法,接口等等。用同一套思想去解决各类问题。这不就是传说中的方法论吗?!!!也就是说“面向对象”这是一种设计思想的方法论,基于这套方法论的设计模式会有很多很多,比如创建型模式有抽象工厂模式,工厂方法模式,生成器模式…… (更多)嗯…… 我为自己这样的想法笑出了声~

现在写代码,特别是react,基本都是用面向对象的思想来写的。你看,一个button,一个input,甚至是一个div,都写成了面向对象,大大提高了组件的复用性,降低了软件开发的难度。

posted @ 2020-05-06 20:37  林来  阅读(491)  评论(0编辑  收藏  举报