网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Delphi
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.delphi函数参考手册.
.关于开发系统后门软件的几点思路.
.动态贺卡EXE生成器---Delphi中流.
.Delphi中使用纯正的面向对象方法.
.我常去的几个站点,希望对同志们.
.一个可以靠右显示的简单Edit控件.
.终于可以不用任何控件作出XP风格.
.如何在托盘图标实现漂亮的菜单.
.Delphi图象截取编程示例(6).
.COM程序编写入门(全文-3).
.一个计算器的代码,欢迎大家点评.
.如何将C/C++程序转译成Delphi.
.在Delphi中实现任意形状的窗体.
.用Delphi创建服务程序.
.公布TstringGrid增强控件TcbStrG.
.怎样屏蔽或打开windows里的快捷键.
.Delphi深度探索-CodeSite应用指.
.用Delphi做一个有颜色属性的按钮.
.delphi的面向对象之路1.
.锁定数据记录.

将面向对象的思想贯穿始终--谈Delphi开发(第二篇)

发表日期:2006-2-4


(接第一篇)

将面向对象的思想贯穿始终,这个题目好象有些大了。我刚才在这里说的,提到的,其实只是在编码的时候,应当注意的一些小问题。所以’贯穿始终’这个用语,改为’牢记在心’可能更为贴切。

对于Delphi某些特性的一点意见:

不知各位注意到没有,在Delphi的Form中放置的所有组件(包括控件),对于其他Form来说,都是可见的,准确地说,这些组件都是该Form的Public部分的内容。这样的结果,一方面是好的,因为其灵活性,其他类可以方便的引用Form上的这些组件,设置它们的属性,执行它们的方法,事件等等;但是另一方面它的缺陷也是显而易见的,那就是导致了Form的封装性的丧失。在我看来,放置于Form之上的这些组件,就使用者的本意而言,应当是作为该Form的私有属性而存在的,对于其他类或其他Form本应该不可见。即使需要访问它们,也应当通过由Form提供一系列的属性方法来间接的访问。

举个例子,让大家有些感性的认识:

procedure TForm1.Button1Click(Sender: TObject);

begin

  Form2.Edit1.Text := 'abc'; // <-- 这个句子的写法,本人很不赞同。

end;

可能很多人写这样的代码的时候脑子里还没有封装性的概念,可是你看了这篇文章,就再也不要干这样的事了(改邪归正吧你!)。在我看来TForm1就是TForm1,TForm2就是TForm2,它们都是为了实现某些特定的功能而存在的,所以它们提供给外界一些接口(一些属性,方法,还有事件,事件说严格一点,也是属性),来实现它们自己所承诺的功能。至于这些接口的具体实现,应当由它们自身来维护,外界没有必要,也没有办法插手。这个思想,对应到实际应用中,也就是Form2.Edit1是否有必要被From1直接访问的问题了。我本人比较倾向于下面的实现:

  //以下为Unit1中TForm1的部分内容

procedure TForm1.Button1Click(Sender: TObject);

begin

TForm2(FAnotherForm).EditText := 'abc'; // <-- 这个实现,体现了封装的思想

end;

//以下为Unit2中TForm2的定义

type

  TForm2 = class(TForm)

    Edit1: TEdit;

  private

    function GetEditText: string;

    procedure SetEditText(const Value: string);

  public

    property EditText: string read GetEditText write SetEditText;

   // <-- 我的推荐用法;

  end;

……

function TForm2.GetEditText: string;

begin

  result := Edit1.Text;

end;

procedure TForm2.SetEditText(const Value: string);

begin

  if Value <> EditText then

    Edit1.Text := Value;

end;

这里的FAnotherForm是TForm1的一个私有属性,它是指向TForm2的一个实例的指针(这个用法在第一篇里做了强调)。访问TForm2的EditText 属性,而不是鲁莽的直接访问TForm2的Edit1.Text,体现了一种思想,那就是分工协作的思想,那就是独立自主的思想,也就是封装性的思想。

(未完,待续)

更多文章

上一篇:自定义快速报表的打印预览窗口 人气:3976
下一篇:特色按钮 人气:4096
浏览全部Delphi的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐