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

原创 2004年10月27日 20:37:00

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

关于这个设想本身

这个设想是我在近期进行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资源管理器的模块管理器,用户可以根据需要把模块放在管理器里面合适的位置上,也可以选择自动生成管理,比如说一个类下面可以集成这个类的成员函数模块。

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

模块化编程理解

背景工作中在做客户运营系统时,发现js和css的引用还处于最原始的状态没有更新。在上一个项目中通过对象和其中的方法实现了简单的模块化编程。但随着工程项目的庞大程度增加,简单的对象已经满足不了模块化编程...
  • always_littlesun
  • always_littlesun
  • 2016年09月06日 18:03
  • 481

模块化编程分析与设计

在理想的模块化编程中,每个模块都可以看做是一个黑盒,只需要了解模块提供的功能以及使用的方法,不需要关心具体实现该模块功能的策略和方法...
  • zzfenglin
  • zzfenglin
  • 2016年06月27日 09:19
  • 1205

keil中的单片机模块化编程

好的开始是成功的一半   通过上一章的学习,我想你已经掌握了如何在程序中释放CPU了。希望能够继续坚持下去。一个良好的开始是成功的一半。我们今天所做的一切都是为了在单片机编程上做的更好。 ...
  • wanruoqingkong
  • wanruoqingkong
  • 2014年04月22日 08:24
  • 1495

初学python:模块化编程

Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用。 我们以内建的sys模块为例,编写一个hello的模块: 第1行和第2行是标准注释,第1行...
  • u011507206
  • u011507206
  • 2017年03月01日 10:39
  • 1719

C语言模块化编程的例子

以往写C语言程序都是一个文件里面写个几十、几百行,在练算法的时候还可以,现在搞开发需要模块化编程,所谓模块化编程,就是指一个程序包含多个源文件(.c 文件和 .h 文件),每个 .c 文件可以被称为一...
  • lell3538
  • lell3538
  • 2016年07月14日 16:21
  • 3000

C语言模块化编程

1.多文件编译、链接的原理 在讲解 extern 和 static 关键字的时候,我们已经给出了几个简单的多文件编程的例子,现在不妨再看一个例子。 main.c 源码: #inclu...
  • shuimanting520
  • shuimanting520
  • 2016年05月10日 07:38
  • 1752

51单片机模块化编程初识

在51单片机C语言编程中,为了提高程序的可移植性,有必要用可移植的变量类型的别名进行编程。把以下内容保存到编程软件的Include目录,并保存为了mytype.h文件. 如果你用的是Keil,这个目录...
  • kevinhg
  • kevinhg
  • 2012年08月04日 18:34
  • 3802

Python模块化开发组织代码程序示例

样例包含三部分代码,周的处理函数部分、业务数据处理部分及多线程跑批调度处理部分。 代码按功能分类存放,有助于使代码更清晰,通过from...import的方式,使代码重复使用。 另外,多线程的调用...
  • BabyFish13
  • BabyFish13
  • 2017年01月16日 19:14
  • 907

模块化编程思想

模块话编程及把算法独立写成方法,提高了代码的重复使用率方法的分类1. 无参函数:调用方法是,主掉方法不将数据传递给被调方法,无参函数可以带或者不带返回值 2. 有参函数:在调用方法时,主调方法和被掉方...
  • Harry_ZH_Wang
  • Harry_ZH_Wang
  • 2016年09月02日 20:16
  • 700

Javascript模块化编程(一):模块的写法

转载链接本文转自阮一峰老师的技术博客:Javascript模块化编程:模块的写法前言Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别...
  • zinss26914
  • zinss26914
  • 2015年06月15日 14:44
  • 3771
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模块化编程与模块化编辑器的设想
举报原因:
原因补充:

(最多只允许输入30个字)