现在的位置: 首页 > 综合 > 正文

面向对象和设计模式体会

2018年02月18日 ⁄ 综合 ⁄ 共 2353字 ⁄ 字号 评论关闭

很早以前只知道面向对象这个概念,但是以前的理解就是,把所有的东西都看成是一个对象,在编程实现时也就是一个 class。但是这种理解是只知道它的存在,却不知道它如何使用。这次由于要写面向对象的论文作业,看了 Head First 设计模式这本书,一下就被吸引了。

一切东西,原来全是人类智慧的结晶啊。在复杂的问题面前,可以用巧妙的,简单的方法把它给解决了。我想这样才是人类不同于其他生物的存在原因吧。智慧是人类最宝贵的财富。论体力,和对特定环境的适应能力,于其它物种战斗的能力,人类都不是最强大,甚至处于弱势。但是从目前为止人类的发展来看,可以说,人类是这个星球上唯一的霸主(就是不知道有木有会思考的生物或者外星人的存在了),我想这主要归功于人类能够通过思考来使用工具去扫除障碍,将环境改造成适合生存的地方。甚至以渺小的血肉之躯,毁灭这个星球的全体生命。

因此,我认为智慧结晶是最伟大的东西,没有思想的不必要体力劳动终将被智慧给代替。

言归正传

首先谈谈我对 对象 的看法。

对象这个词,在汉语中所有人都知道的一个意思就是 将来的伴侣啊。程序员中就是将所有的东西都看成 Object 翻译过来就成对象了,我们可以任意的人造对象。我恶意的猜测一下,是不是在我们这个行当中,女人较少,再加上职业问题,大部分单身,才翻译成 对象来满足我们对  对象  的渴求?!哈哈。

从学习到现在,用的最多的就是java语言。近来逐渐的理解 对象 的原理了,把任何事物都看成是一个对象,也就是用一个 class 定义,在这个class中有这个对象的属性。

就拿 “人”来讲, 我们想到的首先是class Person{},这Person类中有 各种数据项,例如 身高(height),体重(weight),头发(hair),眼睛(eye),嘴巴(mouth)等等;

除了数据项,还有 各种 人 可以做出的方法,例如 走路(walk),跳远(jump),说话(talk)等。我们可以将这些数据项和方法全部写进一个class Person中,这样它也能完成一个人能的动作(这里先叙述人具有的共性)。其中眼睛这些还可以再次分解的物体也就是一个(object)可以用一个字符 来代替。这样的话,不使用面向对象语言也成了。。。。

但是在上面那个类写完之后,我们可能会觉得这样写,不美观,也不实用。就像一个储物间,你将所有的工具不加以分类都扔进去,假设你有非常非常多的工具,有大的,有小的。那么当下次你再实用的时候怎么办呢?你需要从一堆物体中找很长很长时间,还不一定在你的耐心耗尽之前找到它,这时你或许更想去重新买一个新的。(这个比喻可能不是很合适,如果你们有更好的请告诉我一下)。但是长时间下去,这也不是个办法啊,所以你可能会想一个办法,将所有的工具分类,然后再将它们放进一个 储物间。这样你下次再用的时候,替换它或者实用它的时候就更加方便了,这样不再需要其中一个工具的时候,也很容易得跳出它并拿出去,储物间的空间也不会被使用完,是不?同样,对象
Person中我们如果将 眼睛(eye),嘴巴(mouth)等这些有着自己属性,方法的 物体 封装成一个对象,这样Person类中就不需要再定义它们的方法属性了,然后Person类中也会整洁清闲许多了吧。我们以后需要修改某一个对象的时候,也容易方便许多了(专业名词应该是 维护吧)。

总而言之,我认为要把那些有着自己属性和方法的物体但从属于其它对象的物体独立定义成一个 class。这样做的好处有: 

1 可以使我们写出的代码整洁,井井有条,这样在自己或别人要看源码的时候,看着不也赏心悦目嘛,一下就看代码的组织结构了,没准将来老板还能给我们升职加薪(当然自己做boss更好了)。

2 易于维护。在某个方法属性需要修改时,容易找到它从属的对象,并清楚它在结构中的作用。

3 能够重复利用那些写好的代码。假如写的代码一团糟的时候,我们有的时候要写同样的功能时,就不得不重写代码了。这样会极大的降低我们的效率和工作激情,所以为了以后的偷懒着想,我们一定要将这些代码的结构效率最大化(易复用,易维护即看着整洁,结构合理)来写。

4 (暂时还没想到)

你看从我们要写一个Person对象中,就冒出来了两个设计模式的思想,组合模式和Facade Pattern(外观模式,我觉得翻译的很别扭),其中eye,mouth等组合成了一个Person(组合模式),而Person 又可以代替我们来向其它对象发号令,例如让这个Person 笑,就需要对象 eye , mouth,ear 等共同做出努力,但是通过单独调用eye ,mouth,ear的方法也能做出这个笑的动作,这样做很麻烦。我们仅仅就调用 Person smile()的这个方法就可以做到,也省了我们很大的功夫。这就是设计模式了。

这样来说,设计模式就是从以前一系列的经验中抽象出来的经验。我们可以通过学习这个经验,来提高我们的效率,少走弯路。并且也会更加容易理解其他人所写的代码,思想。现在我认为,设计模式就是智慧的结晶啊!在学习它的时候,看到有些方法用的是那么巧妙。将一个复杂的问题用很简单的方法就解决掉了。

到目前为止,我认为设计模式的本质是:最大限度的重用代码。这样可以省的再重复利用代码,就像懒人会改变世界一样。他们总会去想提高效率来减掉自己的重复劳动好多休息一会。

我理解的设计模式的核心思想是:

1 尽量分离将来可能会变化的代码。

2 对修改关闭,对扩展开放。(从书上看到的,我自己也是这样想的)修改容易出现bug,而扩展就不会引起原先的代码出现bug了。

3 (目前还不了解)

所有的模式都是为了解决问题而存在,我们不能为了使用模式而用模式。这样可能还会阻碍我们解决问题,和发现新模式的伟大创举。

这是我对面向对象和设计模式之间关系的理解。

之后再谈谈具体的几种常用设计模式。

抱歉!评论已关闭.