模块化程序设计

上传人:kms****20 文档编号:56880402 上传时间:2018-10-16 格式:PPT 页数:20 大小:710.50KB
返回 下载 相关 举报
模块化程序设计_第1页
第1页 / 共20页
模块化程序设计_第2页
第2页 / 共20页
模块化程序设计_第3页
第3页 / 共20页
模块化程序设计_第4页
第4页 / 共20页
模块化程序设计_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《模块化程序设计》由会员分享,可在线阅读,更多相关《模块化程序设计(20页珍藏版)》请在金锄头文库上搜索。

1、模块化设计,模块化设计,这个概念几乎是在每个刚接触软件编程设计学习时就会被不断提醒的。但是真正地去理解和使用模块化,将其应用于所编写的程序上的变成学习者却不多。这是为什么呢?原因大概如下:第一,大多数的编程学习者在一开始接触和学习到的程序很小,代码量很少,甚至只有几十行。对于这样短小的程序进行模块化设计的确是有难度的(不过哪怕是再短小的程序,都可以实现模块化设计!)。,第二,很多情况下程序模块化设计需要“浪费”很多时间,例如增加了代码的数量,增加了构思的时间。 第三,很多编程学习者体验到了他们不用模块化设计,到最后也可以顺利完成程序,程序可以正常运行。那么既然不用模块化设计更加便利和快速,为什

2、么还需要模块化的程序设计呢?为什么不把所有的程序代码都写在一个main()函数中呢?为什么不按照傻瓜式的流水线从头到尾写代码,而是要去考虑一个一个模块的功能呢?,模块化程序设计的优点,第一,把所有代码都统统写在一个main()函数中是疯狂的做法(虽然大部分的编程教学书籍都这样做)!为什么会疯狂呢,很多学习者都是这样写的,而且最后程序成功执行! 这样的想法在很多时候都会萌生,因为学习者刚开始编写的大多数程序都是“一次性”的快餐程序!学习者一旦完成了程序,就根本不需要回头修改,或者是以后再阅读。 没有模块化设计的程序是极其难以阅读和改进的,即便是程序的作者本人,在一段时间后,也很难重新对程序进行修

3、改。第二,模块化程序设计个人认为是编程的核心所在,即便现在有了“面向对象”的编程,可以面向对象的编程在某种程度上也是对模块化的一种延伸,使得程序的组织结构更加富有层次感,立体感和降低程序的耦合度!,第三,几乎所有商用程序都必须使用模块化程序设计理念!这里很想使用“全部”代替“几乎”,因为真的很难想像没有模块化的商用软件!那么究竟如何进行模块化的程序设计呢?其实不得不说很遗憾,虽然极尽全力地想从互联网上搜索出详尽的资料,希望能够得到一个商用软件的模块化设计流程,但是因为各公司之间的商业保密和竞争,这部分的资料实在是少得可怜。这在很大程序上也造成了编程学习者难以学习真正的模块化程序设计!编程初学者

4、难以了解一个商用软件(比如说暴风影音,QQ等)究竟是如何进行多人合作编写的,究竟是如何进行模块化划分的! 模块化程序设计并不仅仅只是多写函数,多分文件这么简单!,如何进行模块化程序设计,鉴于收集到资料实在有限和个人水平有限,这里只能够浅谈一点,当作抛砖引玉。所谓模块化,就是要把一个整体的设计进行“合理”的拆分成很多小部分。 在这个过程中,其实“合理”是最难的! 当程序的设计思路被提出,然后准备着手设计的时候,首先就是要对程序进行合理的模块化分割。 分割的依据如下: 第一,分析目前团队人数,团队技术实力分配。 在一个团队中,每个人的技术研究方向和实力都很难保持一致,这也就导致了“合理”分配的困难

5、。模块化分割的时候必须充分考虑分割出的模块能够分配给最适合去完成它的人!,简单程序小例子 这是一个十分简单的计算器小例子:程序的功能只有输入两个数和运算符,然后计算出运算结果。这是程序一,直接编写。,class Program static void Main(string args)Console.Write(“请输入数字A:“);string A = Console.ReadLine();Console.Write(“请选择运算符号(+,-,*,/):“);string B = Console.ReadLine();Console.Write(“请输入数字B:“);string C = C

6、onsole.ReadLine();string D = “;if(B = “+“)D = Convert.ToString(Convert.ToDouble(A) + Convert.ToDouble(C);if(B = “-“)D = Convert.ToString(Convert.ToDouble(A) - Convert.ToDouble(C);if(B = “*“)D = Convert.ToString(Convert.ToDouble(A) * Convert.ToDouble(C);if(B = “/“)D = Convert.ToString(Convert.ToDoubl

7、e(A) / Convert.ToDouble(C);Console.WriteLine(“结果是:“ + D); ,模块化一 这么简单的迷你小程序可以模块化吗?其实程序真的无论大小,都是完全可以进行模块化处理的,下面我们就来看看第一个改进后的版本。,class Program static void Main(string args)tryConsole.Write(“请输入数字A:“);string strNumberA = Console.ReadLine();Console.Write(“请选择运算符号(+,-,*,/):“);string strOperation = Console

8、.ReadLine();Console.Write(“请输入数字B:“);string strNumberB = Console.ReadLine();string strResult = “;,switch(strOperation)case “+“:strResult = Convert.ToString(Convert.ToDouble(strNumberA) + Convert.ToDouble (strNumberB);break;case “-“:strResult = Convert.ToString(Convert.ToDouble(strNumberA) - Convert.

9、ToDouble (strNumberB);break;case “*“:strResult = Convert.ToString(Convert.ToDouble(strNumberA) * Convert.ToDouble (strNumberB);break;case “/“:if(strNumberB != “0“)strResult = Convert.ToString(Convert.ToDouble(strNumberA) / Convert.ToDouble(strNumberB);elsestrResult = “除数不能为0“;break;Console.WriteLine

10、(“结果是:“ + strResult);Console.ReadLine();catch(Exception ex)Console.WriteLine(“您的输入有错:“ + ex.Message); ,模块化二 从两个程序的对比中能够看出程序在改进之后比原先的程序结构更加清晰了,也更容易增加新功能和拓展了,但是能否还能继续进一步改进呢?我们继续往下看,继续利用模块化的思想对程序进行改进。,Operation运算类 public class Operation public static double GetResult(double numberA,double numberB,strin

11、g operate)double result = 0d;switch(operate)case “+“:result = numberA + numberB;break;case “-“:result = numberA - numberB;break;case “*“:result = numberA * numberB;break;case “/“:result = numberA + numberB;break;return result; ,客户端代码: static void Main(string args) tryConsole.Write(“请输入数字A:“);string

12、strNumberA = Console.ReadLine();Console.Write(“请选择运算符号(+,-,*,/):“);string strOperate = Console.ReadLine();Console.Write(“请输入数字B:“);string strNumberB = Console.ReadLine();string strResult = “;strResult = Convert.ToString(Operation.GetResult(Convert.ToDouble(strNumberA),Convert.ToDouble(strNumberB),st

13、rOperate);Console.WriteLine(“结果是:“ + strResult);Console.ReadLine();catch(Exception ex)Console.WriteLine(“您的输入有错:“ + ex.Message); ,模块化三 是不是再次感觉程序的模块更加清晰了,可是这会是这个简单的小程序的模块化的终点吗?我们继续往下看,继续升级和改进的版本:,public class Operation private double _numberA = 0;private double _numberB = 0;public public double Numbe

14、rAgetreturn _numberA;set_numberA = value;public public double NumberBgetreturn _numberB;set_numberB = value;public virtual double GetResult()double result = 0;return result; ,class OperationAdd : Operation public override double GetResult()double result = 0;result = NumberA + NumberB;return result;

15、class OperationSub : Operation public override double GetResult()double result = 0;result = NumberA - NumberB;return result; class OperationMul : Operation public override double GetResult()double result = 0;result = NumberA * NumberB;return result; class OperationDiv : Operation public override dou

16、ble GetResult()double result = 0;if(NumberB = 0)throw new Exception(“除数不能为0“);result = NumberA / NumberB;return result; ,简单运算工厂类: public class OperationFactory public static Operation createOperation(string operate)Operation oper = null;switch(operate)case “+“:oper = new OperationAdd();break;case “-“:oper = new OperationSub();break;case “*“:oper = new OperationMul();break;case “/“:oper = new OperationDiv();break;return operate; ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号