zoukankan      html  css  js  c++  java
  • 无辜的RAD(RAD是让你去创造和使用可复用的组件,不是让程序员“变白痴”)good

    无辜的RAD

    2005-3-21

    说实话,RAD很无辜。从出生的那天其就被骂,天天被指着鼻子说“不就是拖个控件嘛”,就好像当年说学电脑“不就是插个鼠标嘛”。也怪程序员大都天性犯贱,就爱一遍又一便的写基础代码库,什么字符串类啦、智能指针啦、动态集合啦,能写的都自己写一遍,要是用现成的啊,你都不好意思跟人说。天天重复重复再重复地做着重复重复再重复的事情,还以为自己做着多么伟大的事情,直到哪天一位民工叔叔拍拍他的肩膀说道:“省省吧,我们早就不用砖头盖大楼哩!”

    复用性是软件开发的核心之一,从函数到类,到组件,到中间件,复用的规模逐渐加大。RAD的核心就是复用。至于控件,其实就是可视组件。

    1. 函数是最早,也是最简单的复用单元,代表语言C。你一定认为我重复这个old的基本概念是在浪费带宽,那么为数不少的程序员仍然在写超过1000行的单个函数,是不是该把他们拖出去斩了?

    2. 类随着面向对象概念而出现,作为包含一组操作函数和数据的复用单元,代表语言C++,经过当年MFC若干年的努力,终于广为接受。而随着现在Unix的复兴,反对派也有了一定声强。原因很简单,连设计可复用的函数都有很多人做不到,更别说类了。很多人只是把所有要用的函数堆到一个类里,结果还不如不用。

    3. 组件随RAD概念而出现,作为包含共同完成一项功能的一组类的复用单元。代表语言Delphi,到不是说Delphi提供了多少组件,而是它提供了一种方便的实现组件的方式,开发人员利用这种方式创造的大量的良好可复用组件。Borland的组件化设计同样造就了JavaBean,也延伸到dotNet。如果有人还不明白,简单的说就是:RAD是让你去创造和使用可复用的组件,不是让程序员“变白痴”。

    4. 中间件就是半成品,是比组件更大的复用单元,而且不再强调用什么方式实现,不强调使用什么样的接口。在这种规模下,一般开发工作与设计工作已经分离由不同的专职人员完成。

    比起函数和类,组件和中间件都更为抽象,不拘泥于某种实现形式,而且由于问题规模更大,往往要伴随相关文档来构成一个完整的整体。这些方式没有哪种是最好的,使用哪种方式完全取决于需求和问题规模。

    不少RAD反对者认为使用组件就远离了底层,就好像把厕所改叫盥洗室就有人找不到大号,无非都是些函数和类,和底层不底层有什么关系。其实只不过是VB不支持指针,所以VB的组件大都只提供高级接口,就被以偏概全。还有反对者认为用封装好的东西就不能了解底层,非要自己写一遍才行,就好比要重新证明力学三定律。如果是为了专研学习确实精神可嘉,如果是做工作就是神经。枉费了文档和源码还都理解不了底层,还要在这点问题上浪费生命。于是,有人用for(int *p = src, *q = dst, *e = src + count; p < e; *q = *p, p++, q++);重写memcpy,还自诩比系统的快,我@#$%^&*。人家XBox的广告说得好,“人生苦短,及时行乐”,何不把时间花在赚钱的事情上。

    当然,C的领地内是不提组件的,因为广为接受的组件的概念是基于类的。正如OO传道者说的,OO只是一种概念,如果说能够做OO设计的语言都是面对对象的语言的话,C也是面对对象的,Ada也是。同样,组件也是一种概念,它只是一个独立可复用的模块,由于C的纯粹性,在C里实现这样一个东西比在C++里容易。C++上很难发展组件的原因是,可复用的组件必须有易于模块对接的接口,而C++偏偏没有统一的基础库,就连个字符串都每个类库一套实现。组件又是相对高层的结构,只得依附某一代码框架,也就只能在同一框架下复用,也就大大限制了组件的发展也由此催生了COM,作为和语言框架无关的接口。可惜COM认的老大是VB,C++要是想和COM打个照面啊,那个难啊。

    总的来说,很多人还处在旧PC时代,那时候一个人就能写出个WPS,一个人就能写出个CCDOS,而现在这些只能是唐吉诃德的美梦。手机软件的兴起让很多人重温了一下旧梦,不过最终还是要回到现实。

    http://blog.csdn.net/nightmare/article/details/353337

  • 相关阅读:
    Head first javascript(七)
    Python Fundamental for Django
    Head first javascript(六)
    Head first javascript(五)
    Head first javascript(四)
    Head first javascript(三)
    Head first javascript(二)
    Head first javascript(一)
    Sicily 1090. Highways 解题报告
    Python GUI programming(tkinter)
  • 原文地址:https://www.cnblogs.com/findumars/p/6339343.html
Copyright © 2011-2022 走看看