![]() |
|
||||||||||||||
| | 网站首页 | 数据库教程 | web编程 | 服务器 | 程序设计 | | ||
|
||
|
||||||
| 抽象提高可维护性,实例来证明(delphi) | ||||||
作者:佚名 文章来源:不详 点击数: 更新时间:2007-8-3 ![]() |
||||||
|
抽象提高可维护性,实例来证明(delphi) 软件开发中面临的最大问题是维护,很多精力花在应对客户不断变化的需求而做的修改上。
功能说明:程序的结构是一个界面类调用另一个类的方法,并将方法的结果显示在文本框中。 界面元素:界面上放置一个按钮,Name为btn1;一个文本框,Name为txt1。如下所示: 传统做法 interface TA=class function TA.GetResult: String; end. 上面的代码是建立了一个类TA,它有一个公共方法GetResult,其中完成了某种运算,得出了一个结果字符串。接着再在界面类的按扭点击事件处理方法中使用该类。代码如下: interface Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Unit2; type TForm1 = class(TForm) var implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); end. 以上的代码就完成了功能的要求,最终运行结果如下: 这是传统的方法,也是最快地实现功能的方法。但这种方法在客户的需求发生变化时就暴露出很大的不足。比如说客户对TA.GetResult方法的计算公式不满意,要求用一种新的公式。在这种方法下,就需要将TA.GetResult方法中的代码进行替换,但其实这样做是不好的。因为原有的代码已经很好地满足了原来的需求,并不是本身存在错误而需要改正,将正确的代码抛弃是一种浪费。而且,客户今天要你改为这种方式,明天还可能要求你改回原来的方式。这样的话,就只有哭了。比较好的方法是把新的计算公式放到另一个类TB中,而保留原有的TA代码。这就是“用扩展代替修改”的原则。为了实现这个原则,还需要对原有的代码做一些修改,也就是做一下抽象。 为扩展而抽象的做法 实现部分: 最后,如果客户要求改为原来的功能,只需简单地在GetBaseInstance方法中将TB改回TA即可。 通过上面的例子,可以得出这样的结论:为了应对客户需求的变化与反复,不应对已成熟的代码进行修改,而应在成熟代码之外进行扩展;为了扩展的方便需要将代码进行抽象,并让调用者使用抽象对象;对抽象的依赖使得在扩展时避免不需变化的部分(比如调用代码)发生不必要的变化。由此可见抽象对提高代码的可维护性能起到十分积极的作用。 抽象的作用不仅表现在提高代码的可维护性上,它还可以提高代码的可扩展性。对于这个问题,我也做了一个例子,如有兴趣请访问我的博客:http://allentao430.spaces.live.com,文章标题为《抽象提高可扩展性,实例来证明(delphi)——面向对象编程方法的又一个例子》。 上面例子的最终代码为: interface uses Unit2; type TForm1 = class(TForm) var implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); end. ---------------------------------------------------------------------------------- interface type TBase=class TB=class(TBase) TA=class(TBase) function GetBaseInstance: TBase; implementation function GetBaseInstance: TBase; function TA.GetResult:string; function TB.GetResult:string; end.
本文来源:http://blog.csdn.net/allentao1/archive/2007/07/02/1675386.aspx
|
||||||
| 文章录入:admin 责任编辑:admin | ||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | ||||||
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 网站地图 | 管理登录 | | |||
|