面向对象结构图
今天在家画了一下午这个图,只是把概念性的东西总结了一下,不过还有不少知识点没有说到,只写了一些自己感觉用的着的东西,而且这个图也少了代码举例的东西,总之不是很完整吧,可能动物会这个隐喻有点牵强,但对理解面向对象还是挺有用的,之前看过一本书《代码大全》前几章着重讲了隐喻的重要,当时不觉得怎么样,但是后在实际去理解学习一个新技术时,把这些东西都类比成现实中的实例,确实很好理解,有时就有种茅塞顿开的感觉,隐喻本身就是一个很好地思想。还有要说一点的是,这个图主要是根据《大话设计模式》后的实习生章节改编的,然后加上自己理解的东西,《大话设计模式》也是把各种设计模式类比成实际存在的东西,很容易就理解了,很不错的一本书。现在刚看了两三个模式,已经感觉到面向对象的强大了,以后还要加紧学习了。
《大话设计模式》里面有个例子印象挺深刻的,说的是活字印刷术。以前一直以为中国的四大发明也没什么伟大的,尤其是活字印刷术,不就是把一个字做成一个独立的模板上,然后用的时候把需要的字组合起来就行了,感觉也没啥吧,要做我也能做的,有啥了不起的。但假如从整个印刷行业来看,这带来的确是一场不折不扣的思想革命,现在虽然印刷技术已经是之前无法比拟的,但是基本原理还是差不多,而且活字印刷的思想已经渗透到各行各业了。说白了活字印刷术就是就是面向对象思想,完美体现了面向对象的可复用性,可维护性,可扩展性以及灵活性。面向对象的三大特性也是很好地应用。首先把每个模板字看成是一个对象,每个模板字都能根据自己的形状印出不同的字,也就是说都有一个印字的方法,只不过印出来的字不同而已,这样模板字之间耦合性低,这就体现了封装。继承可以这么看,每一个模板字除了字不一样,但是尺寸形状都差不多,是从一个模子出来的,那么我们可以把这个模子看成是父类,这些模板字就是子类,它们有共同的属性,那这个模子就可以抽象成抽象类了,应该有一个刻字的抽象方法,每个模板继承后需重写刻字的方法。还有我们印刷的工具、技术是一样的,不会因为一个字的不一样就需要换一套工具或者技术,这就是说无论我们使用什么的字,只要它和模子的大小一样,能刻字,我们使用的工具和技术都不需要改变,这难道不是多态的体现吗? 这里还应用了设计模式中的依赖倒置原则,不依赖具体的模板字而是一种模型的接口,只要你符合模板的特性,我就能用,而制作模板字时也不依赖于某套工具,不是说工具做了点修改制作的模板字就全不能用了,而是就按照一个特定模型制作,我的工具就能使用...
没打算写那么多的,以前也没有想那么多,不过确实越写越多,越想越多,文思如泉涌啊。不过要真正在编程时,灵活的应用面向对象编程,却不是一件容易的事,还需要多多实践啊。