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

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 的属性值。

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

大势所趋,IBM Acme Air至少使用Netflix的5个开源工具 【观察】跨越“朦胧期”的云计算:产业、核心技术、生态圈以及突破点 Rovio Account:平台化之路修成正果 甲骨文总裁马克•赫德采访实录:用软硬件集成一体机打垮对手 如何一步一步打造高可扩展性的应用程序? 用Java编程,请保持简洁! 从安全隐患带来的商机来看,Hadoop同样很美 三年增四倍:如今谷歌服务占北美互联网流量四分之一 决战低功耗?Intel明年推低功耗Xeon处理器 在软件架构上增加新功能的注意事项 90后的代码界“女神”李雪:在编程中找到自己的“灵魂” 大数据之路不乏荆棘,然则其中的机遇却高于一切 iPhone销量令人意外:苹果Q3财季净利69亿美元 同比下滑 励志:12位早起的IT大佬们让小伙伴们都惊呆了 独家:苹果5周年限免神作,BADLAND开发者访谈 10亿次订阅!苹果Podcast的里程碑 免费利器Unity 4.2正式发布 支持WP8、Win8和BB10 SDCC 2013:Pinterest首位中国籍工程师两场演讲议题确定 甲骨文公布中国首届“Duke选择奖”名单 Moco、X幻想、开源中国获奖 直接拿来用,10个PHP代码片段 编程的未来 数据将成为主角 OpenCL 2.0发布,带来更强悍的异构计算能力 代码审查方式大调查 辅助工具居首(信息图) 一网打尽当下NoSQL类型、适用场景及使用公司 初创公司Treasure Data:每天处理7000亿行数据的20万次查询 豌豆荚王俊煜:将推支付SDK 与开发者3:7分成 英特尔-百度移动应用测试中心(MTC)正式启动 Intel将在2014年为数据中心用户定制低功耗SoC芯片 情绪低落?没事,让计算机来帮你! 水果生意难做 前新浪架构师徐佳转行试水挖煤 思考软件开发中的快与慢 在CView中如何得到CMainFrame的指针呢?狂送分 Webloic与SQL 25000 大元的防火墙现在有得下载罗。 为什么我的系统(XP)装RealOne Player用不了,而装R8好使。 ★★★非典流行语集锦★★★ 下载的控件应该放在delphi中的哪个文件夹中??? MSDN中VC+WORD例子之一! jsp中如何调用一个java程序? 在VC++中对SQL2000中List数据表的name列按拼音进行查询 继承问题 <%# Ctype(Container.DataItem,DataRowView).CreateChildView("showbbs") %>谁能解释一下? 请教。。。 SCO UNIX为什么安装那么慢? 设置tomcat4.1数据源的问题~~ 各位仁兄,有什么好的.net学习网站介绍介绍 J#下的g.drawstring格式? 用EXCEL怎么画图?急急急急急急急急急急急急急急急! 笑对非典 怎样从新更新的记录中取出数据! 请问如何把两个库中的数据和到一起? C语言下如何实现打印 AssignFile(fp,pTempEquip^.savepath);? 这句话是什么意思呢? MSDN中VC+WORD例子之二! 如何改写exec,大力看看 使用Excel进行打印的问题! 我实在没招了.大哥大姐,来帮忙呀 //我给90分 有哪些查公司口碑的网站,大家介绍一下。 关于播放视频 单步调试时的问题 "发现不明确的匹配"到底是什么错误? 能不能给一个button添加一个弹出菜单 急问各位大虾,在界面上怎么得到一块区域? zhongyj,大哥,你在吗?请进 努力ing 这个查询的SQL语句如何,ACCESS2000数据库,内详 关于多个文件网络传输的问题 急!!遇到很奇怪的问题<在线等候> 老小孩学JAVA,您别嫌烦,100分接着 *.pbl asp新手问题,有关session. 在<!---->中的ASP块中有语法错误为什么还会报错???注释不管用????? 怎么在vb中连接数据库? ****高分求助!! 我在datagrid里面加了一列LinkButton,我想点击它后删掉所在行(连数据库里的都删掉),如何确定所在行呢??谢谢! 请教 win2000下的远程管理是怎么回事 请问:如何判定一个图片文件是jpg格式的?不能就查文件后缀吧 请问为什么我传入函数的结构所指向的空间会被无端释放调?(内有源码,希望大家帮我看看) 请问BCB有没一个将已经做好的窗口锁定,避免无意操作,具体怎么做? 重复调用已编译好的PB程式出错,请教各位高手!!! 菜鸟钱庄开张啦,欢迎GG、JJ、DD、MM前来散分:) 请问:在运行发现错误时为什么Delphi先出来显示错误,如何在错误出现时,首先用VC调试? “云朝朝朝朝朝朝朝朝散,水长长长长长长长长消”的读音 蜘蛛兰的英文怎么写?怎么读?同上 求一道数学题 关于圆的如图 AB是圆O直径 弦CD⊥AB 垂足为E 弦CD,AF相交于G 过D作圆O切线 交AF的延长线于M 且弧AC=弧CF 连接AD DF 若AO=五分之四根号下15 OE=五分之一根号下15 求AC;DF值 以平行四边形的一条边为底,作出( )条高,这些高的长度都是( ) 哪首歌的歌词有from someone like you一首女生唱的,很抒情,觉得很好听,歌中有这句歌词,在歌结束的时候也有这句歌词.请问下,有人知道是什么歌吗? 1 when we heard his joke,we all felt very happy.2 can you tll me how I can get to the hospital.上面的两句改成简单句、请问怎么改Does Tom stay out late everyday 这句哪错了? 已平行四边形的一条边为底,能做出几条高,这些高的长度都() 吉林省河流众多,主要分属于____、____、____、____、____五大水系. how can make bf happy when he get sad can u all help me i so trouble now .i hope u all can giv me a good answer .thx to all if help me . 以平行四边形的一条边为底,能做出( )条高,这些高的长度都( ). 吉林省通化市的河流有哪些 老乌鸦飞不动 了,小乌鸦便到处寻食,衔回来一口一口的喂.所以《增广贤文》里讲——,——,是礼也!“ 以平行四边形的一条边为底,能作出无数条高,这些高的长度都() 一面镜子放在走廊尽头,对风水有没有影响?走廊尽头两边是卧室.镜子没有正对着卧室门.但是进房子的大门需要左转,一转就可以看见这个走廊和这个镜子.急求高手解答! 老乌鸦,我喝不到大量筒里的水!小乌鸦,你飞到装有相同水量的小量筒,就可以喝到水了!(1)利用给出的信息,利用方程的思想求出x的值(2)若这两个量筒的高都是11cm,你认为老乌鸦说的正确 一个平行四边形相邻两条边的长度分别是12厘米和四厘米其中一条底边上的高是九厘米,另一条底边上的高是多少厘米? 从矩形的一个顶点向对角线引垂线,此垂线分对角线所成两部分的比为1∶3,已知两对角线交点到矩形较长边的距离为3.6CM,则矩形对角线长为___. 小学生一年级作业,孝顺的小乌鸦,你想对小乌鸦说些什么 广东话 有滴甘计事 由已知矩形的一个顶点向其所对的对角线引垂线.由已知矩形的一个顶点向其所对的对角线引垂线,该垂线分直角为3:1的两部分,则垂线与另一条对角线的夹角? 老乌鸦,我喝不到大量筒中的水!小乌鸦,你飞到装有相同水量的小量筒,就可以喝道水了!一元一次方程大量筒的底为8cm,水高为x,小量筒的底为6cm,高为5+x列出方程就可以,麻烦再给讲一下 粤语 稳人倾计 从矩形的一个顶点作一条对角线的垂线,这条垂线分这条对角线成1:3两部分,则矩形的两条对角线夹角为 青蛙和老鼠跟人的生理结构很像吗? 平行四边形有几条长度不同的高 由矩形的一个顶点向一条对角线引垂线分为1:3,那么对角线与大边的夹角是? 为什么会有恐龙?我弟问的! That balloon is my sister’s.(划线部分:my sister’s) 是whose balloon is that? 由已知矩形的一个顶点向其所对的对角线引垂线,该垂线分直角为3:1的两部分,则垂线与另一条对角线的夹角 恐龙为什么会死 若等腰三角形一腰上的中线把它的周长分成9和15两部分,求三边长 想知道: 南阳市 邓州市北京大道 在哪 老乌鸦,我喝不到大量筒里的水!小乌鸦,你飞到装有相同水量的小量筒,就可以喝到水了!(求大量筒的高度) 关于diffusion takes place in all three states of matter3种状态即指气液固,而上述句子中的扩散指的是在气体,液体,固体环境中的扩散还是仅仅是气体,液体,固体的扩散? 河流谷地一定有河吗谷地和山谷有区别吗 QUOTA USAGE WARNING All matter found on earth exists in three states.这句话什么意思? 为什么动滑轮省力的情况和滑轮股数有关?是否每股绳子都承担相同的拉力? 一台推土机9小时可推平1350m的路.照这样计算,推平6km的路,需要几小时? 等腰三角形一腰上的中线将它的周长分为9和12两部分,则腰长为?底边长为? 某人在室内以窗户为背景摄影时,恰好把窗外从高处落下的一个小石头摄在照片中.已知本次曝光时间是0.02s 量得照片中石子运动痕迹的长度为1.6cm实际长度为100cm 以上数据你知道这个狮石头闯 英语翻译 一乒乓球从高处落地又弹起的VT图象怎么画? 物理学中的FQHE是什么东西 测量金属管的内径,选用何种测量工具根据测量要求,选用合适的测量工具. Most matter has three states[划线提问]划线的是---three 水螅的内胚层可以算是器官吗? 如何内径测量 一物体在做匀速圆周运动,画出它的vt图像rt这里vt是指速率-时间图像就是速度的大小是不是应该是一条直线? 恐龙在未来会出现在地球吗 ANever try to work when you are very hungry.If you decide to do your homework right after school,you may get something to eat before getting to work.Always do your homework before you get too tired.Don’t wait until very late in the evening,or your show us how to do puzzle是什么意思 未来人类会像恐龙那样灭绝吗? 接触式内径测量工具 小明不小心将一块三角形玻璃弄碎了,所以无法知道玻璃的另两条边的长度,你能帮小明想出一个可行的办法吗 求一道关于圆的数学题圆的半径为r=80 如图所示 在离圆心10的地方到边缘的距离为L=70 求当角为α时 x=?如何计算 英语简单的小阅读5~10篇也要有答案的, 《朝日新闻》念什么?《朝日新闻》中的“朝”念zhao还是念chao? 狼的英文怎么读 简单的方法 you can't ------ how happy I was when i won the frist prize in the spech contest.A imagine B.make C.consider D.miss 朴槿惠手戴太极旗手套为韩国职棒决赛开报告称美国一年有500名少年儿童因枪美国现实版越狱:4囚犯通过浴室天花板日本小学生制成长33.9米鱼卷 打破韩总理发表国民谈话 将彻查国情院干涉日东电职员因短信骚扰女性被捕 称为吸美现实版越狱:4囚犯通过浴室天花板通窃听乱了盟友军心 是友是敌难下定论LG正式发布弯曲屏幕手机 自称后盖划北京再陷雾霾空气达六级严重污染 明日义乌连发两起命案 一人炸死一人被捅死世界最高人举行婚礼 夫妻身高相差77安倍宣称福岛污水泄漏得到控制 逾8成美国网络销售辱华面具与服饰 迎接万圣美国最新研究称分析人类口腔细菌可知其日本:转基因食品进口大国央视曝中国富豪相亲会内幕 爱钱美女惨北京中心城区今日空气达6级严重污染 哥伦比亚反政府武装释放一名美国人质第五届全球化时代犯罪与刑法论坛在北京日本拟引进上百架美国无人机“监视”钓爱心课堂免费教学啦这个夏天,植得种植牙为啥这么火?在一起成长凤凰城党员商户联盟再发力丝绸之路河南段包括汉魏洛阳城遗址等4八尊“金爵”希腊拿走仨闭经15年终怀孕 患者说铁树开了花杞姓发祥地 难见杞姓人应多看到工士学位的积极意义坠了400多架无人机圣玛HPC国际孕妇学院免费开讲啦!工士学位是个什么学位加拿大女子被判过失杀人罪我与科痘的故事 郑州店店长王燕如何正确摘掉孩子的近视镜“安利纽崔莱营养中国行”2014将走计划在豫招102人 招生老师电话快记厄尔尼诺 再袭中国?澳政府砸钱遣送难民“书法狂人”来河南开书法展老慢支、肺气肿、慢阻肺 如何避免发生
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘