关于模块化程序设计

时间:2021-04-15 22:24:55
一个软件,由一个界面模块和两个功能模块构成,请问模块间该如何设计以使其能够协同完成用户的命令呢?

14 个解决方案

#1


晕~~~~

标题叫“关于模块化程序设计”,偶以为………………

撤啦~~

#2


先做出来再说

#3


我们现在就在做啊。
整个系统就是根据用户的命令,实现指定的功能,然后将结果显示给用户。由于功能部分是确定的,而界面部分由于应用环境的不同会有很大的变动,因此将功能与界面分离,界面部分作成一个界面模块(应该可以称为模块吧?),将用户的各种操作化解成与界面无关的标准命令向下传递,然后通过标准接口函数获得结果,显示给用户。
功能部分分成两个相对独立的模块,采用COM组件实现,只能被动调用,而且有个别用户操作命令需要两个功能模块共同来完成。
现在三个模块基本都完成了,但是如何把模块有机的组织成一个整体却考虑不清了。
就是想问问:
如果把模块看成板卡,是否通过总线将他们连通呢?
如果把模块看成积木,是否需要胶水将他们粘合呢?

#4


hehe

#5


如果把模块看成板卡,当然要有主板来连通了。如果你的功能模块是用COM组件实现的,那么它们的主板就是windows操作系统了。你的界面模块也是插在windows上面的板卡,模块之间通过windows的com基础平台来相互通讯。
你的模块划分得不错,我想你要开发的系统主要是响应用户的界面操作,用户的操作首先触发的是界面模块,那么界面模块应该可以作为主控的模块,调用其他功能模块来完成各类操作。

#6


回复人: fita(天外飞仙) 
多谢指点。
不过不能全部认同:
如果模块可以等效为板卡的话,那么板卡的基本特性应该就是平等的,互不关联的,只能与总线/主板通讯,而板卡间绝对不能相互控制,拿走一块板卡也绝不会影响其他板卡。因此我认为任何一个模块也不能做为主控模块,所有模块都应该与类似中心控制器的东西/对象通讯:将命令送交控制器,控制器按照程序员预先设计的算法将命令分解,并将子命令转交给对应的模块去执行。但我就是不清楚这样设计是否符合模块化程序设计的原理(我对模块化程序设计没有专业的学习)。
另外,COM组件/接口是否可以直接作为一个模块我也有疑虑,毕竟接口是个完全被动的东西。

还望大师多多指点。

#7


到楼上的这个贴子才开始有点意思了

其实从面向对象的观点的看
每个对象之间的交流是以消息请求达成
在对象内部本来就是自治的
也不存在所谓中心控制器

这可能符合你的设计思想

一家之言
万望指正

#8


楼上的意思是把模块也看成对象?
那样的话,面向组件编程(COP)的出现岂不没有价值了?

#9


所谓模块化设计的原理,就是将内部的实现细节封装,只通过一个定义好的接口与外部通讯。作为模块,也不一定要求它是主动的,一样也有被动。因此将COM组件作为一个模块是没有问题的。就面向对象观点来看,一个对象的动作是通过各类消息触发的,有一些对象的动作是被它内部的消息触发(比如这个对象内部有线程),可以说它是主动的,有一些对象的动作只被外部的消息触发。主动的对象常常向其他的对象发送消息,以触发其他对象的动作。

对于中心控制器,可以这样理解,模块是有层次化的,在同一层次而言,模块与它同级别的其他模块之间是相互独立的,但对于上一级别而言,这些模块同属于上一级的一个大模块,大的模块从内部实现的观点看,这些组件之间一定是有关系的,可以用某些组件控制其他组件的运行,同时上一级模块对下一级模块有依赖关系。例如:CPU和内存都是插在主板上的模块,彼此是独立的,你换一个CPU对内存没有影响,但从整个计算机来看,是用CPU控制了内存的存取,就是说从计算机这一模块层次来说,把CPU作为它内部实现种的*控制器,由它来触发其它组件的动作。

#10


界面和用户交互,然后发出事件消息触发功能模块响应啊

用消息传递来连通模块。

#11


新手意见

“面向组件编程”不过是“面向对象”的泛化
仍然是面向对象思想在构件层次上的应用

万望指正

#12


面向对象编程,面向组件编程和模块化程序设计到底有哪些相同和不同???

速食时代真的很容易让人消化不良。
还望大师给些消化药。真的胀得很难受啊。拜托啦。

#13


第一代:面向“过程”的程序设计方法(P-O)
面向软件系统的信息流程图,采用面向过程的程序设计语言(Process-Oriented Language)或面向进程的程序设计语言(Procedure-Oriented Language),如:FORTRAN、ALGOL、COBOL等编程,实现软件设计流程图所描述的信息处理过程的功能,称为面向“过程”(Process-Oriented Programming)的程序设计方法或面向“进程”的程序设计方法(Procedure-Oriented Programming)。
这种(P-O)方法适用于设计小规模的专用软件包,软件的通用性、重用性、扩展性差。

第二代:面向“模块”的程序设计方法(M-O)
结构上将软件系统划分为若干功能“模块”(Module)或实体,分别采用模块化程序设计语言如:PASCAL编程实现;再由各模块联结、组合成相应结构的软件系统。称为面向模块(Module-Oriented Programming)的程序设计方法或模块化程序设计方法(Module Programming)。也称为面向“实体”的程序设计方法(Entity-Oriented Programming)。
这种(M-O)方法适用于设计模块化、结构化程序,可提高软件系统的模块化、结构化水平,设计和组装较大规模的软件系统,有助于提高软件的通用性、重用性、扩展性。

第三代:面向“对象”的程序设计方法(O-O)
所谓“对象”是指具有一定结构、属性和功能的“实体”,采用“对象”和“对象类”,以及对象之间的相互通信的“消息”,描述客观世界中的各种事物及其相互关系,建立面向“对象”和“消息”的具有层次结构的“世界模型”。
面向对象的程序设计方法(Object-Oriented Programming)基于上述面向对象世界模型。采用面向对象的程序设计语言(Object-Oriented Language),如C++、SMALLTALK、等编程实现。
这种(O-O)方法,具有通用性,适用于广泛应用领域的大规模软件系统设计。有助于提高软件的重用性、扩展性、移植性,提高编程效率和程序自动化水平。


不知从哪抄来的。顺便说一下, 
支持 zhuma(竹马) 的说法:
面向组件编程是面向对象的一种观察角度而已。

楼主用着面向对象的COM,却要倒退到面向“模块”,
还特喜欢咬文嚼字, 不晕才怪。

#14


太感谢 rtdb(东临碣石) 了,真是一语点醒梦中人啊。
惭愧惭愧。。。

相关方面的书能否推荐些?
再次感谢、感谢。。。

#1


晕~~~~

标题叫“关于模块化程序设计”,偶以为………………

撤啦~~

#2


先做出来再说

#3


我们现在就在做啊。
整个系统就是根据用户的命令,实现指定的功能,然后将结果显示给用户。由于功能部分是确定的,而界面部分由于应用环境的不同会有很大的变动,因此将功能与界面分离,界面部分作成一个界面模块(应该可以称为模块吧?),将用户的各种操作化解成与界面无关的标准命令向下传递,然后通过标准接口函数获得结果,显示给用户。
功能部分分成两个相对独立的模块,采用COM组件实现,只能被动调用,而且有个别用户操作命令需要两个功能模块共同来完成。
现在三个模块基本都完成了,但是如何把模块有机的组织成一个整体却考虑不清了。
就是想问问:
如果把模块看成板卡,是否通过总线将他们连通呢?
如果把模块看成积木,是否需要胶水将他们粘合呢?

#4


hehe

#5


如果把模块看成板卡,当然要有主板来连通了。如果你的功能模块是用COM组件实现的,那么它们的主板就是windows操作系统了。你的界面模块也是插在windows上面的板卡,模块之间通过windows的com基础平台来相互通讯。
你的模块划分得不错,我想你要开发的系统主要是响应用户的界面操作,用户的操作首先触发的是界面模块,那么界面模块应该可以作为主控的模块,调用其他功能模块来完成各类操作。

#6


回复人: fita(天外飞仙) 
多谢指点。
不过不能全部认同:
如果模块可以等效为板卡的话,那么板卡的基本特性应该就是平等的,互不关联的,只能与总线/主板通讯,而板卡间绝对不能相互控制,拿走一块板卡也绝不会影响其他板卡。因此我认为任何一个模块也不能做为主控模块,所有模块都应该与类似中心控制器的东西/对象通讯:将命令送交控制器,控制器按照程序员预先设计的算法将命令分解,并将子命令转交给对应的模块去执行。但我就是不清楚这样设计是否符合模块化程序设计的原理(我对模块化程序设计没有专业的学习)。
另外,COM组件/接口是否可以直接作为一个模块我也有疑虑,毕竟接口是个完全被动的东西。

还望大师多多指点。

#7


到楼上的这个贴子才开始有点意思了

其实从面向对象的观点的看
每个对象之间的交流是以消息请求达成
在对象内部本来就是自治的
也不存在所谓中心控制器

这可能符合你的设计思想

一家之言
万望指正

#8


楼上的意思是把模块也看成对象?
那样的话,面向组件编程(COP)的出现岂不没有价值了?

#9


所谓模块化设计的原理,就是将内部的实现细节封装,只通过一个定义好的接口与外部通讯。作为模块,也不一定要求它是主动的,一样也有被动。因此将COM组件作为一个模块是没有问题的。就面向对象观点来看,一个对象的动作是通过各类消息触发的,有一些对象的动作是被它内部的消息触发(比如这个对象内部有线程),可以说它是主动的,有一些对象的动作只被外部的消息触发。主动的对象常常向其他的对象发送消息,以触发其他对象的动作。

对于中心控制器,可以这样理解,模块是有层次化的,在同一层次而言,模块与它同级别的其他模块之间是相互独立的,但对于上一级别而言,这些模块同属于上一级的一个大模块,大的模块从内部实现的观点看,这些组件之间一定是有关系的,可以用某些组件控制其他组件的运行,同时上一级模块对下一级模块有依赖关系。例如:CPU和内存都是插在主板上的模块,彼此是独立的,你换一个CPU对内存没有影响,但从整个计算机来看,是用CPU控制了内存的存取,就是说从计算机这一模块层次来说,把CPU作为它内部实现种的*控制器,由它来触发其它组件的动作。

#10


界面和用户交互,然后发出事件消息触发功能模块响应啊

用消息传递来连通模块。

#11


新手意见

“面向组件编程”不过是“面向对象”的泛化
仍然是面向对象思想在构件层次上的应用

万望指正

#12


面向对象编程,面向组件编程和模块化程序设计到底有哪些相同和不同???

速食时代真的很容易让人消化不良。
还望大师给些消化药。真的胀得很难受啊。拜托啦。

#13


第一代:面向“过程”的程序设计方法(P-O)
面向软件系统的信息流程图,采用面向过程的程序设计语言(Process-Oriented Language)或面向进程的程序设计语言(Procedure-Oriented Language),如:FORTRAN、ALGOL、COBOL等编程,实现软件设计流程图所描述的信息处理过程的功能,称为面向“过程”(Process-Oriented Programming)的程序设计方法或面向“进程”的程序设计方法(Procedure-Oriented Programming)。
这种(P-O)方法适用于设计小规模的专用软件包,软件的通用性、重用性、扩展性差。

第二代:面向“模块”的程序设计方法(M-O)
结构上将软件系统划分为若干功能“模块”(Module)或实体,分别采用模块化程序设计语言如:PASCAL编程实现;再由各模块联结、组合成相应结构的软件系统。称为面向模块(Module-Oriented Programming)的程序设计方法或模块化程序设计方法(Module Programming)。也称为面向“实体”的程序设计方法(Entity-Oriented Programming)。
这种(M-O)方法适用于设计模块化、结构化程序,可提高软件系统的模块化、结构化水平,设计和组装较大规模的软件系统,有助于提高软件的通用性、重用性、扩展性。

第三代:面向“对象”的程序设计方法(O-O)
所谓“对象”是指具有一定结构、属性和功能的“实体”,采用“对象”和“对象类”,以及对象之间的相互通信的“消息”,描述客观世界中的各种事物及其相互关系,建立面向“对象”和“消息”的具有层次结构的“世界模型”。
面向对象的程序设计方法(Object-Oriented Programming)基于上述面向对象世界模型。采用面向对象的程序设计语言(Object-Oriented Language),如C++、SMALLTALK、等编程实现。
这种(O-O)方法,具有通用性,适用于广泛应用领域的大规模软件系统设计。有助于提高软件的重用性、扩展性、移植性,提高编程效率和程序自动化水平。


不知从哪抄来的。顺便说一下, 
支持 zhuma(竹马) 的说法:
面向组件编程是面向对象的一种观察角度而已。

楼主用着面向对象的COM,却要倒退到面向“模块”,
还特喜欢咬文嚼字, 不晕才怪。

#14


太感谢 rtdb(东临碣石) 了,真是一语点醒梦中人啊。
惭愧惭愧。。。

相关方面的书能否推荐些?
再次感谢、感谢。。。