说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi 中面向对象编程之我见

HTML文档下载 WORD文档下载 PDF文档下载
Delphi 中面向对象编程之我见

面向对象的编程技术提出来也有些年头了,开发大型软件的时候采用面向对象的编程技术可以缩短程序的开发周期,提高程序的可读性,易调试性,同时也就相应的提高了程序的可维护性,而对大型软件而言,可维护性是保证其生命力的一个极为重要的指标。

不知大家注意到没有,可视化程度很高的编程语言在采用面向对象的编程技术上很难处理。例如 VB,4.0基本不支持面向对象的编程,5.0 好一些,但微软也只敢说在面向对象的编程上 5.0 比 4.0 好得多,而不敢说 5.0 支持完全的面向对象的编程(6.0 我没用过,不知道,如果能支持,也是 VB 爱好者的福音了)。这大概就是人们常说的不用 VB 做大型程序的重要原因之一吧。 我不知 Delphi 是从什么版本开始提供面向对象编程支持的,但我从 VB 5.0 转到 Delphi 4.0,除了项目要求外,这是最重要的原因了。

由于 Delphi 除了支持面向对象的编程外,也支持一般的面向过程的编程,而且因为其可视化技术的运用,很多人(包括我)很容易就偏离了面向对象的方向,实际上,我觉得要实现面向对象的编程也不难,因为 Delphi 给你的全都是对象,你只要在编程的时候注意自己的代码就是了。下面是我对在 Delphi 中采用面向对象技术的一些体会:

1.不要用全局变量

即使要用,也要用全局对象来代替它。习惯了面向过程编程的程序员在这点上很容易犯错,而且这一点相对来说也比较难掌握。实际上,全局变量也是面向过程编程技术的一个很大的缺陷,难跟踪,难调试,也就难维护。

为什么要用对象而不是变量呢?对象可以封装对变量的操作,任何对该变量的操作都必须通过调用对象的方法来完成,我们可以在操作该变量的方法中设置断点来调试,这就解决了前面所提到的 3 个难点(难跟踪、难调试、难维护)。

举个常见的例子(也许并不能最大限度的反映这个问题):让你做一个 IE,对于 Internet Option,你打算怎样处理?

根据以上的讨论,我的想法是写一个 TDefaultINI 类,这个类负责 Option 中各项设置的保存,读取。Option window 和别的需要操作其中设置的对象都通过这个类来进行处理。这样就实现了数据的封装。你可以定义一个 TDefaultINI 类的实例作为全局对象,当然,因为这些设置是保存在存储器中可以随时读取的,你也可以只在需要的时候创建一个 Tdefault 对象来完成你的功能。

2.对象之间交换数据,尽可能的使用属性而不是变量

为什么要用属性而不是变量呢?对数据的操作可以通过属性的方法进行封装,一旦以后对象内部的数据结构发生了变化,只要我们提供的属性接口不变,对程序别的部分的影响就能减小到最小。例如 Form 之间通过属性来交换数据。以后因为某个原因你得将原来用数组实现的东西改为用链表实现,只要你的属性接口仍然是数组,那对别的对象就几乎没有影响。

3.合理的安排对象的方法

我直接举例来说明这个问题,例如在连接数据库的时候,你是在主 Form 中设置好 TdataModule 中 Tdatabase 的 AliasName 和 Params,然后用 DataModule.Database.Open 来连接呢,还是写一个 TdataModule.ConnectToDatabase 方法,将 AliasName 和 Params 作为 TdataModule 的属性,而在主 Form 中调用这个方法来连接呢?从理论上来讲,两种方法都是面向对象的。也许很多人不能体会到后一种方法的优越性,想象一下如果数据库发生了变化,以前只有 Sql Server,现在还需考虑 Oracle。后一种方法将会使你的应对轻松的多,尤其是你在主 Form 中有好几处地方需要连接数据库的时候。

4.合理的安排你的对象

一个问题该有几个对象来解决,每个对象实现什么功能,它们之间是什么联系?这个问题是面向对象编程的永恒的问题,Delphi 中这个问题怎么处理呢?在此我就和 Form 有关的问题和大家讨论一下吧,先举一个例子:写一个将 IE 中的收藏夹导入到数据库中的程序,该怎么安排你的对象?这个问题并不复杂,一个 Form 就能解决问题了,也许为了数据库管理比较方便,再加上一个 DataModule,Form 负责读入收藏夹,将之显示在 TreeView 中,用户可以选择 TreeView 的节点(即收藏夹)导入数据库。也许你的程序刚做好,老板又要求对 NetScape 的 BookMark 也完成同样的功能,怎么样,你的改动量有多大?如果你以前使用的是两个对象来完成上面讨论的一个 Form 的功能,一个对象负责将收藏夹的数据导入到 TreeView 中,而 Form 只完成对 TreeView 的操作,你就会发现你的改动是很轻松的。由此我的建议是 Form 只完成对界面的操作,对于具体的数据结构,由我们自己写的对象去完成。

5.不要在两个同级的子 Form 之间交换数据

在 Delphi 中很容易犯这个错误,这样做是很危险的,因为很有可能你认为存在的 Form 被关闭了或者干脆就没有打开过,而且这样做最大的坏处是程序晦涩难懂。解决的办法之一是可以通过它们的父 Form来交换数据,例如父 Form 中取得 A子 Form 的属性值,根据这些值来设置 B 子 Form 的属性值。

面向对象的编程技术绝不只是应用在大型软件的开发上,实际上,小型程序采用面向对象的技术开发对于今后的扩展和移植(即是只是部分功能的移植)是很有帮助的。

2013福布斯中国富豪榜:李彦宏第三、马化腾第五、马云第八 Storm又获东风,Hortonworks计划将其整合到Hadoop企业版 IBM CEO:预测高新技术 五个我最喜欢的方式 我伙呆,硅谷高级工程师年薪16.5万美金起 羡煞旁人的Supercell:Clash of Clans卫冕营收榜冠军 谷歌第三财季利润增36.5% 但摩托罗拉业务继续亏损2.48亿 针对应用开发者的几点建议:注意特征蔓延、加大用户评审…… Ubuntu中文衍生版UbuntuKylin 13.10正式发布 Web设计师和Web开发者之间的区别是什么? 在政府退出后,Google的量子计算机项目面临危机 SQL on Hadoop的最新进展及7项相关技术分享 联想:欲收购黑莓,还能在智能手机领域创造PC神话吗? 谁说Android开发者的收入依然不行? 代码可维护性的神秘面纱 MDCC 2013首批演讲嘉宾名单出炉 议题即将披露 MDCC2013:公开征集讲师和演讲主题 移动周报:IT人必看!9大最火移动开发技能 OpenStack H版发布 盘点2013:21个最火的云初创公司 从摩尔定律到原子计算,2013诺贝尔物理学奖背后的计算机技术 黄峻:从自制纸板键盘的孩子到Adobe技术经理的故事 Web开发正被颠覆 开发者需认清五大新现实 最发人深省的亚马逊面试题,你会如何作答? 所见即所得:8款实用HTML5开发框架 Groovy最受欢迎 Java系开发者更偏爱其他JVM类语言?(图) [开源专访]iNews创始人赵戈戈:36小时开发的PHP版HackerNews 使用Spring框架的12个开源项目 甲骨文仍旧“憎恨”开源软件 开发者应该避免使用的6个Java功能 不可小觑的Web开发编码规范 软件工程师如同花园园丁,清理代码就好比拔草! 如何在模块中编写一个函数,对数据库进行增,删,修改操作? a 请问各位DirectDraw是做什么的?最好能详细谈谈他的前景?谢谢! 我的win2000server在域中,被以域中Administrator进入,结果我的机子以域用户进入后,机子的系统关机选项变为不可用,以域中Administrato b/s应用程序怎样限制它只能安装在某一台电脑上? FORM中,如何通过 ODBC 访问 Foxpro的 dbf 数据文件(在线等待)? 如何判断连接服务器的sql数据库成功与否?在线等待高手解答! applet waiting online 程序员招聘(西安) 怎样让我的对话框程序实现全屏显示急急急1。。。 我的用法是否正确 有本事的就进来 JSP+JDBC环境中如何配置jConnect连接Sybase数据库?需要安装jdk吗? 急,高分求解Font问题 我编写了一个读写COOKIE的公用函数在我的工程中使用,老不通过,麻烦大哥们帮我诊断诊断 请问怎样获取托盘窗体的句柄??(给一百分) 请帮帮忙,如何调用dtswiz.dll 如何用BDE Administrator设置数据库别名(不用ODBC)访问Oracle数据库。高分相送! 对不起,我知道这个问题很简单,但是我一直没有搞出来,您能告诉我吗?datagrid中进行insert,delete,update操作? 寻求eVC用ADO操作cbd数据库的代码。 两个关于枚举类的问题 问用过struts的朋友一个问题,给100分! huffan交流系数表在C中如何表示?????? 线程问题~~~ 有哪位知道在 Windows 2000 下 锁定计算机时应用程序可以得到什么消息啊? 急!!关于数据的导入导出!! Cells不被VB支持吗? 获取字段类型 如何将DataGrid1中的数据打印出来, 如何使程序自动修改CEdit中的文字? 请问在.NET类库中有这样的类吗? 如何知道某个表格被锁 求助capboy等网络视频播放高手!!! 菜鸟问题:在VC中用ALTER TABLE指令需要什么头文件? 请高手帮忙,感觉难度很高 大家做GUI时有什么好用又免费的日期控件呢? 在javabean中用sql server2000的jdbc驱动连不起数据库! 添加图片到数据库中,奇怪现象! 如果我已经得到了一个DOM树, 我第一次运行HTML HELP时,new怎么会是无效的? 我的 程序在调用FORM.ACTION的用法不正确。能告诉我怎样用它 怎幺样实现一对主从表的数据库基本操作?用ADOQuery连接SQL2000. 有关统计打印的问题 一个关于用VB调用C++builder编写的DLL文件,DLL的API函数中存在函数指针。请各位高手给点意见! 大专生如何考研?(up有分) ★★ 为高兴而送分 ★★ 关于打印的问题,请各位帮忙 请问应该用何种信用卡 利用INTERNET远程连接问题 移动办公相关问题?如在两台机器里编写同一段Web程序。 怎样将oracle sql中的in语句改为exists语句? 井下放炮时,人距放炮点的安全距离是多少? 丙级地质灾害危险评估资质到期怎么延续?急 说出来吧, 哪些科学家提高了时间的计量精度 哪些化合物中铁显+2,+3价 高手进+2的要4个 +3的要6个 用化学式 弯头怎样分直缝或无缝的 肉眼可以直接区分吗? 如何提高分光光度计检定的准确度? 撒大苏打撒旦撒撒大苏打撒旦 在本量利分析法下计算利润时,计算公式是? 如何对地质灾害点进行勘察? 速度撒大苏打撒旦撒旦撒旦 涂改液涂不出来,摇响,用什么溶解?扔了可惜了. 地质灾害勘查与矿山地质勘查的区别是什么? dad撒撒旦的撒大苏打撒旦sadasdsad 涂改液为什么会溶解海绵? 请问胰岛素冷藏温度 用什么冷藏胰岛素最好?请问大家胰岛素冷藏温度是多少,有糖友告诉我说胰岛素冷藏温度很低,温度高了可能会变质,然后医生也是这么说,但他们都没有告诉我胰岛素具体 求氨氮蒸馏装置图用蒸馏滴定法测氨氮的装置图,发一个 为什么用风油精可以溶解涂改液 胰岛素存放温度未开封的胰岛素(诺和)在冰箱冷藏时,由于冰箱出现故障,温度经常在2度到10度之间波动,有天清晨还达到了0度,估计0度的时间至少有5个小时,请问在这种温度环境下,会不会影 蒸馏法测定氨氮时 ,蒸馏装置怎样做预处理?如若用250ml水样加氧化镁和沸石先蒸馏至无氨,还需用试剂吸收溜出的氨么?是不是用蒸馏水先做处理会更好些? 我国工程测量中评定精度的标准主要有哪些? 煤矿安全规程对轨道运输的规定 化学固固加热型实验的过程用高锰酸钾制取氧气(固固加热型)的过程、注意事项,理由用过氧化氢制取氧气(固液加热型)的过程、注意事项、理由 三坐标 测算精度标准 简述样本回归函数与总体回归函数的区别 煤矿安全规程由多少条 用蒸馏-滴定法测定水中氨氮,其中蒸馏和滴定的原理方程式是什么这个方案我有的可是这里面没有反应方程式啊亲 为什么能用样本回归函数代表总体回归函数急 粗糙水平桌面上有一质量为m的铜质矩形线圈.当一竖直放置的条形磁铁从线圈中线AB正上方等高快速经过时,若线圈始终不动,则关于线圈受到的支持力FN及在水平方向运动趋势的正确判断是A 油烟机吸的废油是有用的吗?我听说吸油烟机吸的废油可以用来当养分浇花,不知道是不是有这个说法,或者你还知道有什么其他的用途? 函数回归一位 什么意思 如图所示,一条形磁铁竖直放在桌面上,一闭合圆线圈从其正上方某处,保持水平由静止下落,最后套上条形磁铁落到桌面上,该过程中( )A.线圈内产生大小、方向都不变的电流B.线圈内产生 有回收抽油烟机的废油的吗?价格怎么样? 酸碱盐中什么遇到什么会有白色沉淀或者特殊反映 精子在水里会干?或者如果跟着水进入阴道会是卵子受孕? 如何区分二价铁和三价铁的化合物不好意思,我没表达清楚。我的意思是怎么读呢?比如说FeCO3是读碳酸亚铁还是碳酸铁呢?还有FeO? 什么是船舶建造测量与精度管理,怎样实行精度管理? 地质灾害治理资质需要年检吗 如何判断铁单质与其他化合物反应,生成的是二价铁化合物还是三价铁化合物?例:AgNO3+Fe生成的是Fe(NO3)2还是Fe(NO3)3? 高精度位置控制怎么测量呢? 哪里出具"不具有地质灾害治理监理单位资质的证明" 阿萨德奥数阿斯达达阿萨德as大苏打啊啊大 在测量电压的操作中怎样提高测量结果的准确度? 为什么示差分光光度法可以提高测定的准确度? 阿斯大苏打阿斯达阿朵巴萨将不断进步 甲烷分解成?甲烷分解成C2H2和H2还是C和H2,还是什么呢? 提高装配时的测量检验精度的方法有哪些? 气煤与肥煤的区别是什么?楼上的,谢谢您的回答,不过我想知道的是气煤与肥煤的区别 甲烷多少度分解 测量中 什么方式来提高观测值得精度? 爱爱爱啊啊啊达阿斯达大苏打大苏打 甲烷的分解反应? 胰岛素的最佳储藏温度是多少? 涂改液用什么能去掉【急!】如果涂改液涂到木制的椅子上,怎样可以去除啊!不可以弄掉漆, 甲烷能分解吗最好写上化学反应方程式 采煤工作面最新使用的最大长度是多少? 涂改液是什么做的?为什么要摇才能溶化? 甲烷的分解反应有哪些越多越好 地勘与地质灾害评估的区别 请问下有人知道生物试题谢谢大家!说出来吧,打心底谢谢各位{随机数z
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘