(delphi11最新学习资料) Object Pascal 学习笔记---第10章第6节(关于混合RAD和OOP的15个技巧)

10.6 关于混合RAD和OOP的15个技巧

​ 在本章中,我介绍了与快速应用程序开发(RAD)或可视化开发或事件驱动编程(这个三个术语都指的是同一个概念模型)相关的核心语言特性,包括属性、事件和published关键字。虽然这是一个非常强大的模型,但它有坚实的面向对象编程(OOP)架构作为后盾。有时,RAD方法可能会使开发人员忘记良好的OOP惯例。与此同时,回到纯粹的代码编写而忽略RAD方法通常又适得其反。在本章的最后一节中,我列举了一些混合这两种方法的技巧和建议。换句话说,这是“超越RAD的面向对象编程”的一个章节。

注意:本章最后一节的内容最初发表在《The Delphi Magazine》第17期(1999年7月),标题为“Delphi中的面向对象编程的20条规则”。现在我删减一些规则,对其他规则也进行了修订,但精髓任然保留。

技巧1:窗体是一个类

​ 程序员经常将窗体视为对象,而实际上它们是类。区别在于,您可以基于相同的窗体类创建多个窗体对象。令人困惑的是,IDE创建一个默认的全局变量,并且(根据您的设置)还可以在启动时为您在项目中定义的每个窗体类创建一个窗体对象。这对新手来说当然很方便,但对于任何规模大一点的应用程序来说通常是一个不好的习惯。

​ 当然,为每个窗体(及其类)和每个单元命名是非常重要的。不幸的是,这两个名称必须不同,但您可以使用一种约定以一致的方式映射这两个名称(例如,AboutForm和About.pas)。

​ 在下面的步骤中,您将看到“窗体是一个类”这个概念的实际效果。

提示2:为组件命名

​ 对于组件,使用描述性的名称很重要,不要使用窗体设计器分配的默认名称。最常见的符号是使用类类型的前几个字母,后跟组件的角色,例如BtnAddCustomer或EditName。实际上,有许多类似的符号遵循这种风格,并且真的没有理由说其中任何一个是最好的,这取决于您的个人喜好。

提示3:为事件命名

​ 为事件处理器命名同样重要。如果您为组件命名,例如,OnClick处理程序的默认名称变为BtnAddCustomerClick。尽管我们可以从按钮名称猜测方法的作用,但我认为最好使用描述方法效果命名,而不是方法触发的时机。例如,按照方法名字就是方法的作用的方式,BtnAddCustomer按钮的OnClick事件可以命名为AddCustomerToList。这使得代码更具可读性,尤其是当你从类的另一个方法中调用事件处理程序时,并有助于开发人员将相同的方法附加到多个事件或不同的组件上;但我不得不说,在任何非小程序中,将单个事件附加到多个用户界面元素时,使用 Actions 是首选。

注意 Actions 和 ActionList 组件是 VCL 和 FireMonkey UI 库的一个非常好的架构特性,它们提供了用户操作(及其状态)与它们关联的用户界面控件之间的概念分离。激活控件即可执行操作。事实上,如果从逻辑上禁用操作,与该操作相关的用户界面元素也会被禁用。这个话题超出了本书的范围,但如果你使用 VCL 或 FMX 库,还是值得研究一下的。

技巧 4:使用窗体方法
如果窗体是类,那么它们的代码就集中在方法中。除了事件处理程序,它们起着特殊作用但仍然可以像其他方法一样调用之外,向窗体类添加自定义方法通常是有用的。您可以添加执行与窗体相关的一般操作和操作的方法,并访问窗体组件的状态。向窗体添加公共方法和属性要比直接从系统的其他部分直接访问窗体组件好得多。

技巧 5:添加窗体构造函数
在运行时创建的辅助窗体可以提供除了默认构造函数(继承自TComponent类)之外的其他特定构造函数。当您需要进行特定的初始化时,我的建议是重载Create方法,添加所需的初始化参数,如下面的代码片段所示:

public
  constructor Create(const AText: string); reintroduce; overload;

constructor TFormDialog.Create(const AText: string);
begin
  inherited Create(Application);
  Edit1.Text := AText;
end;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/589718.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[C++][数据结构]二叉搜索树:介绍和实现

二叉搜索树 概念 二叉搜索树又称二叉排序树,它是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也…

【数据结构】这样学习串的朴素模式匹配算法,简直不要太容易……

串的朴素模式匹配算法 导读一、串的模式匹配1.1 模式匹配是什么?1.2 为什么要有模式匹配算法? 二、朴素模式匹配算法2.1 算法底层逻辑2.2 算法实现2.2.1 过程解析2.2.2 思路分析2.2.3 思路总结2.2.4 代码编写数据类型函数的三要素函数主体 2.2.5 代码测试…

ThreeJS:项目搭建

介绍如何基于Vite、Vue、React构建ThreeJS项目。 Vite项目 1. 初始化项目,命令:npm init vitelatest, 2. 安装依赖,命令:npm install, 3. 启动项目,命令:npm run dev。 4. 样式初始…

06 - metastore服务、hive服务启动脚本以及相关使用技巧

目录 1、metastore服务 1.1、metastore运行模式 1.2、metastore部署 1.3、测试 2、编写Hive服务启动脚本 3、Hive使用技巧 3.1、Hive常用交互命令 3.2、Hive参数配置方式 3.3、Hive常见属性配置 1、metastore服务 Hive的metastore服务的作用是为Hive CLI或者Hiveserv…

【面试经典 150 | Kadane】环形子数组的最大和

文章目录 写在前面Tag题目来源解题思路方法一:求最大非空子数组和最小子数组和 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及…

【Java基础】Maven安装与配置

1. 前言 Maven是一个基于 Java 的项目管理工具,因此最基本的要求是在计算机上安装 JDK。 Maven 对系统要求如下表: 2. Java环境设置 在 Java 官方网站 下载并安装 JDK 7.0 及以上版本,如果您不了解 JDK 的安装和配置,请参考&…

数组删除元素

数组删除元素 1.利用新的数组 将原数组arr的元素,复制到新数组newArr中,复制过程中将要删除的元素,选择不复制 public class Test01{public static void main(String [] args){String [] arr {"zhangsan","lisi","…

计算机毕业设计hadoop+hive+hbase学情分析 在线教育大数据 课程推荐系统 机器学习 深度学习 人工智能 大数据毕业设计 知识图谱 大数据毕业设计

毕 业 设 计(论 文)开 题 报 告 1.结合毕业设计(论文)课题情况,根据所查阅的文献资料,每人撰写不少于1000字的文献综述: 一、研究背景和意义 “互联网”和大数据带来了网络教育的蓬…

计算机网络chapter2——应用层

文章目录 第2章 应用层章节引出—— 2.1应用层协议原理2.1.1 网络应用程序体系结构(1)客户-服务器体系结构(2)对等(P2P)体系结构2.1.2 进程通信1.客户和服务器进程2.进程与计算机网络之间的接口3. 进程寻址 2.1.3 可供应用程序使用…

dns服务器是什么,dns服务器工具如何选?

“http”“.com”这些我们都不陌生,这就是我们平时所输入的网址的前后缀,其实他们都是某台服务器的主机名依靠DNS服务器转化的。有时我们会遇到网络访问慢或者网址打不开的情况,一般都是网速问题。但如果只有你访问慢,而其他人正常…

图像处理1,灰度,data,for循环批处理图片,图片属性查看,图片单通道查看,椒盐噪声的生成,滤波处理,图像分割

图像处理1 灰度处理data库的使用for循环批处理图像对图像属性的查看图片类型图片尺寸图片宽度图像高度通道数总像素个数最大像素值最小像素值,像素平均值图像点像素值 for循环分别显示图像rgb通道椒盐噪声的生成中值滤波处理高斯模糊处理图像切割 灰度处理 from sk…

JavaScript百炼成仙自学笔记——2

一、循环遍历&#xff1a; 方式一 for(var i0;i<10;i){console.log(i); }方式二 var i 0; while(i < 100){console.log(i);i; }细看代码就是 先定义变量i&#xff0c;再执行{}中的代码&#xff0c;最后改循环变量的值 二、遍历 什么事遍历&#xff1f; 什么时候会用…

【系统架构师】-选择题(十)

1、某计算机系统页面大小为2K&#xff0c;进程P1的页面变换表如下图所示&#xff0c;若P1要访问数据的逻辑地址为十六进制1B1AH&#xff0c;那么该逻辑地址经过变换后&#xff0c;其对应的物理地址应为十六进制 &#xff08;231AH&#xff09; 。 四位换一位 逻辑地址1B1AH对应…

一文理解前端如何调用后端(java)方法

阅读完文章大约需要3~5分钟 文章目录 一、什么是后端方法路径&#xff1f;二、ajax、axios调用后端方法总结 一、什么是后端方法路径&#xff1f; 这里针对的是 java 后端项目中在 controller 文件夹中的类文件&#xff0c;这类文件的后缀一般都会带有 controller&#xff0c…

241 基于matlab的Dijkstra算法进行路径规划

基于matlab的Dijkstra算法进行路径规划。可根据实际情况输入障碍物和起止点坐标信息&#xff1b; 输出避碰最短路径&#xff1b; 能够利用切线图算法对障碍物区域进行环境建模&#xff0c;设置障碍物的位置和区域。利用Dijkstra算法进行路径规划。程序已调通&#xff0c;可直接…

c3 笔记6 认识css样式表

<link>与import应该如何选择?事实上&#xff0c;使用link与import链接外部样式文件的效果看起来是一样的&#xff0c;区别在于<link>是HTML标记而import属于CSS语法。<link>标记有rel、type与href属性&#xff0c;可以指定CSS样式表的名称&#xff0c;这样就…

【DevOps】发布自建镜像到Harbor镜像仓库

本博文介绍了开源的本地部署Docker镜像仓库Harbor&#xff0c; 并讲解怎么样在ubuntu20.04上安装配置Harbor&#xff0c;最后用一个Web应用发布成镜像&#xff0c;推送到镜像仓库的例子结尾。学习本博文并按照步骤进行操作&#xff0c;你将掌握搭建本地镜像仓库&#xff0c;并将…

香港立法會議員容海恩女士確定出席“邊緣智能2024 - AI開發者峰會”

隨著AI技術的飛速發展&#xff0c;全球正步入邊緣計算智能化與分布式AI深度融合的新紀元&#xff0c;共同演繹著分布式智能創新應用的壯麗篇章。在這一背景下&#xff0c;邊緣智能&#xff0c;作為融合邊緣計算和智能技術的新興領域&#xff0c;正逐漸成為推動AI發展的關鍵力量…

macOS sonoma 14.4.1编译JDK 12

macOS sonoma 14.4.1编译JDK 12 环境参考文档开始简述问题心路历程着手解决最终解决(前面有点啰嗦了&#xff0c;可以直接看这里) 记录一次靠自己看代码解决问题的经历(总之就是非常开心)。 首先&#xff0c;先diss一下bing&#xff0c;我差一点就放弃了。 环境 macOS sonom…

JAVA面试题---WEB部分

网络通讯 TCP与UDP TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、 可靠的、 基于 IP 的传输层协议。 UDP 是 User Datagram Protocol 的简称&#xff0c;中文名是用户数据报协议&#xff0c;是 OSI 参考模 型中的传输层协议&#xff0c;它是…