菜鸟编三维地质建模系统-设计模式(1)

 

三维地质建模系统现在做的公司比较多,成熟的国外产品有GOCAD, EarthVision, GemCom和Surpac等,性能要求高、价格昂贵、地质应用的目的也不同,国内也有超图等很多公司在做,但是同样在海量数据下只能进行简单的应用分析。由此看出编这个系统可真是难啊!我这个菜鸟既然准备编这个系统,就准备先加强基本功,第一步:深入理解设计模式!

设计模式是什么?首先要明白一点,懂了设计模式就真正的懂得了面向对象分析和设计的精髓,这就告诉我们,设计模式就是一些已经成型的、最常用的、在实战中总结出来的进行面向对象分析和设计的固定模式,就相当于学习写古诗和学习唐诗三百首的关系,但是话又说回来了,GoF23种模式是最常用的、最基本的,但是并不代表所有的,学习设计模式最重要的是学习一种思想,而思想是指导行为的一切,当你具备这种思想的时候,你就会形成更多的自己的模式,到后来达到最高的境界,你的心中已经没有了设计模式的概念,但是你的分析和设计都已经完全符合设计模式的思想。正所谓“手中无剑,心中也无剑”

设计模式所追求的就是面向对象系统的分析和设计所追求的,无外乎两点:一是高内聚,二是低耦合。为什么追求这两点呢?这个可以用我国的四大发明之一:活字印刷术来说明,为何火药、指南针、造纸术都是从无到有,从未知到发现的伟大发明,而活字印刷仅仅是从刻版印刷到活字印刷的一次技术上的进步,为何不是评印刷术为四大发明之一呢?在发明活字印刷术之前,用的是刻板印刷术,要修改某个字,必须重刻,要加字,必须重刻,要重新排列,必须重刻,印完这本书后,此版已无任何可再利用价值。用了活字印刷术后就好了,第一,要修改,只需更改要改之字,此为可维护;第二,这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃可复用;第三,若要加字,只需另刻字加入即可,这是可扩展;第四,字的排列其实有可能是竖有可能是横排,此时只需将活字移动就可做到满足排列需求,此是灵活性好。活字印刷术正是实现了高内聚、低耦合才达到了“活”的目的,软件开发亦然。

在完全不了解设计模式的情况下,我们从哪个方面开始思考呢?首先就是从对象的特点入手,对象由成员和方法(亦即特征和行为)组成,对象可以创建、删除,对象可以继承、组合、多态。这样看来,设计模式肯定和上面这些相关喽!

在结构化语言编程时代,没有对象的概念,函数和变量各自独立存在,程序中全局变量处处可见,整个程序的耦合性很高,动了一小段代码有可能就要修改很多地方,当大型软件越来越复杂的时候,软件工程行业出现了危机,软件总是不能按期交工,于是一些大师提出了面向对象编程的理念,这是通过观察大自然的结果,在整个宇宙中,各个事物都是以独立性和联系性的辩证方式存在着,都具有着特征和行为这两种状态,特征和行为之间也是可以互相影响的:

独立性:每种事物都有自己的一些可描述的特征,这些特征可能是静态不变的(比如一个人的原籍、血型、生日等等),也可能是动态可变的状态(比如一个人的身高、体重等等),当然变与不变也要利用相对性原理视具体情境而定。另外每种事物都有自己的一些行为,这些行为可能是自身特征的动态变化(比如一个人的长个、增肥、减肥等等),也可能是对外界的作用过程(比如一个人的慈善捐赠、做义工等等)。

联系性:万事万物之间都是有联系的,这是从哲学的角度来说的话,在我们人类从解决问题的实际角度出发,就要把这个联系进行一个划分和抽象了,比如说木星质量很大,但是它离我们很遥远,所以我们主要受脚下地球的引力影响,在宇宙中主要有四种力(万有引力、电磁力、强力、弱力),其中万有引力算得上一个全局变量,电磁力的作用范围就要小很多,而强力和弱力就只能算做一个局部变量了。说到这里问题就出来了,不是说要降低对象之间的耦合性吗?现在整个万事万物都有联系还解耦个P啊!是这样的,站在从不同的层面来看,起主导作用的力都不一样,在宇宙宏观的角度来说,起主导作用的就是万有引力,什么电磁力强力弱力这些都可以忽略不计了;站在地球上自然界的大视角来说,电磁力起着主导作用,万物的生长凋败、人类行走站立全都是靠的电磁力;站在原子内部的微观层面来看,强力和弱力起着主导作用,在这个层面,牛顿的力学定律已经失效了,由此诞生了量子力学。所以在不同的软件需求情境下,广泛的联系性是可以避免和优化的。

由上我们可以总结出:一个对象具有静态的和动态的特征,也具有针对自身和针对外界的行为,我们马上就会发现一个对象如果拥有针对外界的行为会提高对象之间的耦合性,确实是这样,在基于对象的编程中(VBBCB等),针对事件(鼠标按下、拖动、键盘按键、弹起等事件)的响应就是如此,不过这并不是纯粹的面向对象的编程,而是基于对象的。

如果要降低对象之间的耦合性,我们应该尽量将对象与对象之间的交互不要放在对象内部,而是另外增加一个神经中枢的控制机构,打个比方说眼睛看见美女后不是直接控制头做扭转动作去回头再看一眼,而是将美女的视觉信息传送给大脑,由大脑来分析并决定做什么。

下一篇谈继承、组合和多态。

(文中部分内容参考了书籍《大话设计模式》)

转载于:https://www.cnblogs.com/cppstudy/archive/2010/04/23/1718383.html

你可能感兴趣的:(菜鸟编三维地质建模系统-设计模式(1))