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

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

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

【OSTC讲师专访】腾讯TDW项目:开源的分布式数据仓库 ID爆发的物联网时代,我们该如何管理手中的数百个账户 取代Google Maps?苹果大幅优化Apple Maps用户体验 中交兴路系统架构师杨晓明:Hadoop+Storm+ HBase…,打造交通行业创新型服务 雨果·巴拉的第二春:我与小米的那些事儿 为什么Android Wear能统领智能手表领域? LinkedIn缘何抛弃Ruby,转投NodeJS怀抱 【OSTC讲师专访】九秒社团李明:开源对游戏产业的渗透与帮助 IBM 2014中国论坛:挖掘新互联网时代下“智慧企业”的发展之路 Facebook工程部副总裁Cory Ondrejka谈企业在早期所遇到的管理瓶颈 小团队管理工具选择:不需要大而全 《近匠》聚合CEO左磊:基础数据免费,API开放 IDC:HTML5与原生应用之争还将长存 不甘称臣,Google誓要击败Amazon 【OSTC讲师专访】腾讯追风(QcloudMna):开源移动加速SDK Google Go:一门为云而生的编程语言 3月26日:没有Larry Page,就没有今天的Google Hortonworks再获1亿美元融资,Hadoop领域三足鼎立 Intel收购Basis Science,欲拓展可穿戴设备市场 Facebook以20亿美元收购Oculus:虚拟现实将是未来计算平台又一大事件 基于NodeJS的14款Web框架 Hadoop导航:版本、生态圈及MapReduce模型 把黑匣子送上“云” 失联困境能否不再 看看全球十大电信巨头的大数据玩法 尹绪森:打开圈子拥抱变化,谈Spark玩家的自我修养 从Healthbook看苹果将如何颠覆移动医疗和健身追踪 Google可穿戴:详解Android Wear的十大功能 初创企业非技术人员的迷思 【OSTC讲师专访】王兴博:Genesis-3D,3D开源游戏引擎 Facebook发布开源项目Tweaks,让iOS应用开发更加便捷 移动开发创业团队再下一城!UCloud与飞流战略合作 两机相连的问题??? 提问题给的最高分于其余的分有何关系?请问斑竹 什么叫数据库的别名,应该怎样设置数据库的别名? 怎样与telnet应用服务程序通信 怎样在TStringGrid的整个框内绘图,而不是在某个单元中绘图? WEB安全认证问题 TO: neweb(永不言败) 请问各位大虾,哪里有jdk1.3 for linux SPARC 版本 求救!硬盘坏了! 晨昏三灌水,早晚一个屁 怎么在EXCEL中用VBA控制图表的位置? Delphi确实很好,学了好几年了,但在上海差点没有找到工作,很少有招学Delphi的 关于 VC 6.0 有没有什么补丁,升级文件之类的东西? 高分争解 怎么利用Jsp发邮件? 有谁知道光驱加锁的问题 parodox数据库问题 各位平时用 VC 作东西,都用那些辅助工具?  高分争解 【 http://www.esoftware.com.cn/search.php?condition=%BA%AB%C1%F7%C0%B4%CF%AE&page=1&mode=3 】 JBuilder的使用问题 在VFP中,编程执行SQL语句时,怎样使系统的查询结果不出现? 一个程序流程的问题 为什么当我的SpeedButton的enabled为false时,上面的图标就没有了? 囡囡(baicolt)请进,问你一点事情 简单问题,请赐教 高分相赠!!!:操作系统和SQL SEVER2000都是英文版,用VB连接如何可以正确的输入和显示中文? 则么在程序中得到sql的存储过程的返回值? 请问 VB 6.0 有没有最新的升级文件之类的东西?高分争解 谢谢 谁有用java做的复杂一点的图行界面的例子 网管来看看,为什么不能给分了!右边的文本框又不见了! 各位用 VB 编程都用那些辅助工具? 高分争解 关于ShellExecute 装了redhat7,在/etc里没有inetd.conf文件,谁见过这咋整 菜鸟请教大侠!很急!谢谢!!只有10分对不起! 请问一个关于CLASSWIZARD 的问题 这里有PB反编译程序,你信吗? 怎样解 关于大数据量的问题,经验丰富者里面谈! 我想在程序里控制程序外的浏览器窗口资源管理器窗口,怎么做呢?急呀!!!!!! 请问:我用JavaMail收下的邮件主题,发信人姓名不能正常显示。。。。。 认识我的人都进来跟我聊聊吧,我最近新换了工作,还没有适应,你们各位是怎么换工作? 请问如何在Delphi中表示二进制,或者十六进制数呢? 各位35以后干什么?我们能干什么? ????? 如何将eltree中的数据和某数据表关联 有没有比RECORDCOUNT快的方法实现同样的功能? 鉴于目前有些东西说话不知轻重,把这个旧闻再贴一遍,不要以为真的在网上 “没人知道你是一只狗” Java 工具 怎样解决vb中编译成exe文件中出现的问题? 你别说国企,只要是沾的国企的气味就他妈的黑! api函数我不懂。 我要开发一个网络监听的程序,捕获所有以太网中所有的帧,象NT和Win2000中的网络监视器一样 找了半天,看不到一个熟人,认识的过来报到 下表记录了一次实验中时间与温度的数据时间/min 0 5 10 15 20 25 温度/ 10 25 40 55 70 85 1.如果温度的变化是均匀的,21min时的温度是多少?2.什么时间的温度是34摄氏度? 某课外活动小组的同学在实验室做锌和浓硫酸反应的实验.(其反应方程式为Zn+2H2SO4(浓)== ZnSO4+SO2+H2O )甲同学认为产生的气体中只有SO2,乙同学认为除SO2外,还可能有H2.为了验证甲、乙两同学的 化学粗盐提纯除 泥沙 硫酸盐 MgCl2 CaCl2的步骤及现象 为探究PH值对唾液淀粉酶活性的影响,某同学设计的实验步骤如下表 (两题不会做求帮忙) 化学:摩尔浓度为多少的硫酸才是浓硫酸? 如果要除去粗盐中含有的可溶性杂质CaCl2(氯化钠),MgCl2(氯化镁)及一些硫酸盐,按下表所示顺序,应加入什么剂 下表是某小组探究“过氧化氢酶的活性是否受pH影响”的实验,请依据设计的实验操作步骤,回答下列问题:(1)本实验的因变量是____,可观测的指标是____. (2)上述操作步骤中存在明显的缺陷,请写 某班参加数学课外活动小组的有22人,参加物理课外活动小组的有18人,参加化学课外活动小组的16人,至少参加一科课外活动小组的有36人,则三科课外活动小组都参加的同学有多少人?{A∪B∪C}={A} 粗盐中含可溶性CaCl2,MgCl2及一些硫酸盐粗盐中含可溶性CaCl2、MgCl2及一些硫酸盐除去这些杂质的试剂可选用①Na2CO3、②NaOH、③BaCl2、④ HCl 加入的先后顺序可以是 A①②③④ B②③①④ C②①③ 为验证pH对唾液淀粉酶活性的影响,某学生设计了下表中的实验方法步骤.在同学们提出的下列评价中,不合理的是项目 试管1 试管21 加入可溶性淀粉溶液 2mL 2mL2 加入新鲜唾液淀粉酶溶液 1mL 1mL3 用海带制取碘的化学实验1.本实验的原理2.实验前为什么要用刷子而不用水冲干海带3.碘单质易升华,为什么还可以用酒精灯灼烧干海带4.能否用氯水代替稀硫酸和双氧水 除杂:Na2SO4,MgCl2,CaCl2,如果用BaCl2,NaOH,NaCO3除,最后不是还有Ba离子吗?那应该怎么才可以完全除去就按照这个顺序除 在测定唾液淀粉酶活性时,将溶液PH由2上升到6过程中,该酶活性将? 某化学课外活动小组以海带为原料获得少量碘水,并以CCl4为溶剂将碘从碘水中提取出来.具体过程如下图所示则:操作①的名称是 ,在操作过程中使用到的玻璃仪器有 .操作②中发生反应的化学 6.粗食盐中常含CaCl2、MgCl2、Na2SO4等杂质,需按一定顺序加入NaOH溶液、Na2CO3溶液、 BaCl2溶液和盐酸(A.Na2CO3、BaCl2、NaOH、HCl B.NaOH、BaCl2、Na2CO3、HCl C.BaCl2、NaOH、HCl、Na2CO3 D.BaCl2、Na2CO3、HCl 某同学为了探究pH对人唾液淀粉酶活性的影响,设计如下实验步骤:①在A、B、C、D、E5支试管中分别加入pH5.0、6.0、7.0、8.0、9.0的适宜浓度缓冲液5mL,再分别加入质量分数为1%的淀粉液1mL.②各试 用海带为原料制取少量碘水,现用CCI4从碘水中萃取碘并用漏斗分离两种溶液,实验过程操作如下:A:把盛有溶液的分液漏斗放在铁架的铁圈中;B:把500ml碘水和15mlccl4加入分液漏斗中,并改好玻 粗盐的除杂 杂质Na2SO4,MgCl2 试剂 Na2CO3,NaOH,BaCl2,HCl 答案是BaCl2,NaOH,Na2CO3,HCl既然Na2CO3也可以沉淀MgCl2,那加NaOH不是可以去掉吗? 以下各项措施中,可以消除分析测试中的系统误差的是().A、进行仪器校正 B、增加测定次数 C、增加称样量 D、提高分析人员水平 我做实验时,为什么煮得的提取液是浓浓的黑色(像煲中药似的)?反复过滤后仍无法得到澄清透明的液体?海带的用量过多会有影响吗? 粗盐有MgCl2,CaCl2,Na2SO4用NaOH,Na2CO3,BaCl2过量之后加适量盐酸除去,为何氯化钡要放在碳酸钠之前? 直流电桥(惠斯通电桥)测电阻的实验误差主要来源是什么?我们在实验中采取了什么措施来减小这种误差?还可以采用哪些方法来减小这种误差? 如何用化学的方法从海带中提取碘 过滤后的食盐水仍含有可溶性的CaCl2、MgCl2、Na2SO4 等杂质,通过如下几个实验步骤,可制得纯净的食盐水:① 加入稍过量的Na2CO3溶液;② 加入稍过量的NaOH溶液;③ 加入稍过量的BaCl2 溶液;④ 在真正做实验时逐差法能减少误差吗?比如一条纸带有O、A、B、C、D、E、F七个计数点.相邻两点的距离记为S1、S2、S3、S4、S5、S6.根据逐差法的公式,有:a=[(s4+s5+s6)-(s1+s2+s3)]/9T^2问题来了.在实验 为了除去粗盐中的CaCl2,MgCl2,Na2SO4及泥沙等杂质,某同学设计了一种制备精盐的实验方案,如图:1.在第4步和第六步中,写出所有反应的方程式2.判断BaCl2已过量的方法: 过滤后的食盐水仍含有可溶性的CaCl2、MgCl2、Na2SO4 等杂质,通过如下几个实验步骤,可制得纯净的食盐水:① 加入稍过量的Na2CO3溶液;② 加入稍过量的NaOH溶液;③ 加入稍过量的BaCl2 溶液;④ 牛顿环实验采取什么方法消除误差 如何除去粗盐中的可溶性杂质CaCl2,MgCl2,Na2So4等,得到较纯的食盐?加入的顺序为BaCl2、NaOH、Na2CO3 为什么是这个顺序? 除去食盐中的CaCl2,MgCl2,及Na2SO4,可否按照,1,BaCl2;2,Na2CO3;3,NaOH;4,HCl的顺序进行?如果不行,why? 为了减小测量遏止电压的误差,在实验过程中应采取哪些措施 如何提纯含泥沙、MgCl2、CaCl2、Na2SO4的粗盐为原料提取NaCl的固体的工艺流程图 急用 一氧化碳的物理性质为?化学性质为?煤气是一种重要的燃料,它的主要成分是一氧化碳,煤气是一种没有颜色、没有气味的气体,日常生活中为了防止煤气中毒,常在煤气中加入少量有强烈 酒精检测 实验方案设计!设计方案 和 氧化反应啥的忘记说了 还要配图 T T 如何除去NaCl中所含的Na2SO4、MgCl2、CaCl2按顺序写出所加试剂及相应的方程式. 求一氧化碳的物理性质四条和化学性质两条~ 实验方案设计的疑问下列实验方案设计正确的是A、分解高锰酸钾制氧气后,残留在试管内壁上的黑色物质可用稀盐酸洗涤B、失去标签的硝酸银溶液、稀盐酸、氢氧化钠溶液、氯化铝溶液可选 怎样除去粗盐中的Mgcl2和Cacl2啊? 一氧化碳具有什么特性 探究生物学问题时,在确定了课题后进行实验方案设计的主要依据是……发现的现象\观察结果/假设/得出的结论 氯化钠是日常生活的必需品,也是重要的化工原料.(1)粗盐除含NaCl外,还含有少量MgCl2、CaCl2、Na2SO4以及泥沙等杂质.以下是粗盐提纯的操作流程.提供的试剂:Na2CO3溶液、K2CO3溶液、NaOH溶液、BaCl2 一氧化碳具有还原性,是什么变化性质(物理, 对比实验对比实验需要注意两个问题一是---两是---对比实验需要注意两个问题 生物遗传实验设计方案 氯化钠是日常生活的必需品,也是重要的化工原料..在滤液中加盐酸的作用是( ).1)粗盐除含NaCl外,还含有少量MgCl2、CaCl2、Na2SO4以及泥沙等杂质。以下是粗盐提纯的操作流程。提供的试剂:N 家庭实验有哪些可以做啊 实验如下:目的:探究不同烟草浸出液对金鱼的毒害.实验要分三组:分别为红塔山牌、石狮牌和普通烟草的一定浓度的浸出液对金鱼的毒害作用.希望帮忙设计一个实验报告.包括实验过程说 食盐是日常生活的必需品,也是重要的化工原料.粗食盐常含有少量K+、Ca2+、Mg2+、Fe3+、SO42-等杂质离子,实验室提纯NaCl的流程如下按滴加顺序依次为Bacl2,NaoH,Na2CO3.为什么Na2CO3要最后滴加?放在Bacl 小学科学实验在空瓶子口上套一个小气球,先把他放在热水里,再把他放在冷水里 谁有高中生物全部实验的总结,急需! (2011•津南区一模)氯化钠是日常生活的必需品,也是重要的化工原料.粗盐除含NaCl外,还含有少量MgCl2、CaCl2、Na2SO4以及泥沙等杂质.以下是粗盐提纯的操作流程.提供的试剂:Na2CO3溶液 科学实验设计方案证明.的事业1实验目标:.2.实验器材.3.4.实验现象.5.试验推理.6试验结论. 化学某课外活动小组从实验室取出硫酸试剂,试剂瓶上标签的部分内容如下图所示.该小组欲用此硫酸试剂配制450ml0.2mol/L的稀H2SO4溶液 化学纯(cp)(500ml) 品名:硫酸 h2so4 相对分子质量:98 密度: 如何除去NaCl中的MgCl2和CaCl2? 某学生实验过程中获得以下数据,不合理的是A.用10ml的量筒量取了8.5ml浓硫酸B.用托盘天平称得某大理石样品质量为23.5gC.用pH试纸测定某工厂排放的污水pH=5.20D.测的某粗盐中氯化钠的质量分数 某化学课外活动小组从实验室取出硫酸试剂,试剂瓶上标签的部分内容如图所示.该小组欲配制450mL0(1)所需试剂瓶内硫酸溶液的体积为________mL.为什么不能用质量守恒V=0.45L*0.2mol/L*98/1.84g·cm-3为 要除去粗盐中含有的杂质cacl2、mgcl2及一些硫酸盐,所加试剂顺序可以颠倒吗?书上是先加bacl2,然后naoh.最后na2co3. 你认为下列实验测得的数据不合理的是( ).A用pH试纸测得某河水的pH值为6.24.B用托盘天平称得氧化铜粉末的质量为11.5g.C用10ml量筒取8.5ml的溶液.D测得某粗盐中氯化钠的质量分数为90.5%.请告诉 现有失去标签的相同体积的两瓶液体,一瓶是98%的浓硫酸,另一瓶是10%的稀硫酸,请你用学过的物理和化学 高一化学必修一第一单元粗盐中含可溶性CaCl2、MgCl2及一些硫酸盐,除去这些杂质的
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn