模块化编程与模块化编辑器的设想

来源:互联网 发布:免费制作淘宝logo软件 编辑:程序博客网 时间:2024/05/02 18:58

本文描述了一种作者设想的编程模式,以及为方便这种模式所设计的编辑器。模块化编程模式指的是将“模块”作为基本单元进行程序设计。一个模块是一段代码的集合,这个模块概念上要比传统意义上的编程基本单位“文件”要小一些,具体来说,一个模块对应一个类的声明,或者一个函数的定义。

关于这个设想本身

这个设想是我在近期进行C++(目前我只会C++和Pascal两种主流语言,还学过一点BASIC)编程时发现主流IDE都没有解决的一个问题,那就是:这些主流IDE将一段很长的代码(包含很多类的声明及函数的定义)放到一个文件里面,这样查找某个特定的代码段会或多或少的有些不便。软件工程的思想我只有一些初步的了解,但是我觉得软件工程的一个思想就是把问题模块化,通过将一个大问题分解成若干个小问题,如果一个小问题还不是“一目了然”的话,那么将这个小问题继续分解,直到最后的小问题“一目了然”了。但是通过我最近的观察体验,C++很多库文件和头文件很难做到一目了然,因为文件往往太长了,如果之前不仔细阅读文档的话,是很难“一目了然”的。因此我冒出了一个想法能不能将文件这个单位在细分一下,再细分成很多模块的话,每个模块只是一个类的声明或是一个函数的定义,这样是不是能方便许多呢?

当然,单单是这个想法可能要遇到许多问题,要是没有问题的话,直接每个文件包含很少的代码岂不是将所有问题都解决了?这显然是远远不够的,因为,那样的话会产生太多的文件难以管理。况且,这样直接改变直接改变程序设计的工作模式肯定不为所有的程序设计者所接受。因此,我设想仅改变IDE的编辑器部分,然后与编译器和调试器做尽可能的兼容,最后可以设想用内嵌的方式将它们集成进来。

这里不得不说的是,由于我才疏学浅,对目前这方面的发展也不是很了解,可能我的想法别人早已想到并付诸实践了,也可能我的想法有些地方根本就不现实,希望各位看官能以一个宽容的心态容纳我这一个想法,有什么幼稚的地方就烦请当作笑料了:-)另外,我也希望通过这篇文章能够结识一些程序设计上的朋友,使我能够同更多的人进行交流。

模块编辑器三要素

1. 独立模块
一个独立的模块就是一段代码,这段代码本身仅包含一个类的声明或者是一个函数的定义。事实上,类的声名可以看成是一系列相关函数的列表,即可以看成所有函数的目录(因此,独立列出这样的目录是很必要的)而现在程序设计的一个原则就是不要把函数设计得太长(如果太长,则说明它还可以再分成几个短函数),因此每一个函数模块也是“一目了然”的。模块的内部可以设置标题部分,模块说明部分(强制用注释括起来表示),和模块实现部分,模块说明部分与实现部分都对应实际的源文件或头文件,比如说,假如说一个源文件包含10个函数的定义,那么这10个定义都将有它们各自的模块,对这些模块进行编辑将会通过某种方式影射到对这些源文件的编辑上(事实上可以让程序设计者选择某个模块属于哪个文件)。仅仅使让每个模块独立起来无疑是一种鲁莽的做法,因此这样进行程序的编辑无非是在告诉程序设计者:这回你写程序每个文件只包含这样一个模块就可以了,于是这样就面临了模块太多难于管理的境地,下面两个要素则是针对这一点来解决模块的管理问题的。

2.模块链接
当检查一个模块的代码段时,我们总希望随时能够察看与这个代码段相关的模块。要实现这一点,我设想使用下面描述的模块链接功能。所谓模块链接功能,是指把一段代码所有出现的函数调用,函数声明或者类继承时出现的基类,都做成一个链接(链接可以自动生成),然后用鼠标点击这个链接就可以打开相关的模块了,比如说看下面的一个类的声明:
 
class example : public baseclass{
    long a, b, c;
public:
    example();
    ~example();
    long get_a();
    long get_b();
    long get_c();
}
所有蓝色下划线的部分就对应了一个链接,链接到响应的模块,再比如下面的一个函数定义:
long display(example& a, example& b, example& c) {
   a.show();
  
b.show();
   c.show();
}
所有蓝色的下划线部分也对应了一个链接。
有了模块链接这个得力的工具,我们在为某个单一的模块编写代码的时候,就可以很方便找到与它相关的代码段,这些包括了这个代码段所调用的函数,这个代码段所声明的函数,当前类进行继承的基类。事实上,我们也可以很方便的对链接进行扩充,比如说,一个类的声明我们可以通过某种方法查询到有哪些类是它的继承类,我们也可以在一个虚函数的声明中查询到都有哪些类的成员函数重写了这个虚函数。我们可以将这些相关联的信息作成一个列表,单独形成一个模块。

3.模块集成
这个编辑系统中最重要的部分也是最难实现的部分,模块集成实现了程序设计者对整个工程宏观上的管理,也实现了模块文件与源文件的对接。模块集成提供一个类似于Windows资源管理器的模块管理器,用户可以根据需要把模块放在管理器里面合适的位置上,也可以选择自动生成管理,比如说一个类下面可以集成这个类的成员函数模块。

(未完待续,望多提意见)

原创粉丝点击