Delphi面向对象的编程方法(七)

 我来答
黑科技1718
2022-10-16 · TA获得超过5876个赞
知道小有建树答主
回答量:433
采纳率:97%
帮助的人:82万
展开全部

   程序库单元的初始化部分 

        初始化当前库单元所使用的数据 或是通过interface部分将数据提供给其他应用程序 库单元使用时 您可以在库单元中加入一个initialization部分 在库单元的end前加上您的初始化语句 当一个应用程序使用一个库单元时 在库单元中的initialization部分会先于其他的代码执行 如果一个应用程序使用了多个库单元 则每一个库单元的初始化部分都会在所有的程序代码前执行  

   使用Delphi的可视化部件及其库单元 

       当您在窗体中加入可视化部件时 如果该部件在可视化部件库中 Delphi会在您的库单元的interface部分的uses子句中自动加上需要使用的库单元名称 但有些对象在Delphi的环境中并没有可视化部件存在 例如 您想在库单元中加入一个预定义的信息框 则您必须把MsgDlg库单元加入您的uses子句中 如果您要使用TPrinter对象的话 必须将Printer库单元加入uses子句中 在在线帮助中可以查到对象所属的预定义库单元

       要使用在其他库单元中说明的函数 应在函数的前面加上这一库单元的名称 并用 号隔开 例如 要在Unit 中使用Unit 中说明的Calculate函数 应使用下面的方法

  Number := Unit Calculate( );

       您可以在任何标识符如属性 常量 变量 数据类型 函数等之前加上库单元的名称 您可以在自由地在任何Delphi库单元中加入程序代码 但不要改变由Delphi生成的程序  

   建立与窗体无关的新库单元 

       如果您想在工程中建立一个和任何窗体无关的新库单元 可以现选用File|New Unit 这时一个新的库单元加入了工程 新库单元的代码如下  

  unit Unit ;  interface  implementation  end  

       Delphi将根据您的工程中的文件数目为您的库单元选择名称 您可以在程序骨架间加入您的程序代码

       当编译您的工程时 这个新加入的库单元会被编译为一个具有 DCU后缀的文件 这个新生成的文件是链接到工程的可执行文件上的机器代码    将库单元加入工程 

       将库单元加入工程是比较简单的 无论是您自己建立的库单元还是Delphi建立的与窗体有关的库单元 如果已经完成 则先打开您想加入库单元的工程(可以用Open Project打开工程) 再选用File|Open File 然后选择您想加入的源程序( PAS文件) 并选择OK即可 则库单元被加入到应用程序中  

   用Delphi的对象进行编程 

       Delphi是基于面向对象编程的先进开发环境 面向对象的程序设计(OOP)是结构化语言的自然延伸 OOP的先进编程方法 会产生一个清晰而又容易扩展及维护的程序 一旦您为您的程序建立了一个对象 您和其他的程序员可以在其他的程序中使用这个对象 完全不必重新编制繁复的代码 对象的重复使用可以大大地节省开发时间 切实地提高您和其他人的工作效率  

   什么是对象 

        一个对象是一个数据类型 对象就象记录一样 是一种数据结构 按最简单的理解 我们可以将对象理解成一个记录 但实际上 对象是一种定义不确切的术语 它常用来定义抽象的事务 是构成应用程序的项目 其内涵远比记录要丰富 在本书中 对象可被理解为可视化部件如按钮 标签 表等

        了解对象 最关键的是掌握对象的特性 一个对象 其最突出的特征有三个 封装性 继承性 多态性  

   对象的封装性 

        对对象最基本的理解是把数据和代码组合在同一个结构中 这就是对象的封装特性 将对象的数据域封闭在对象的内部 使得外部程序必需而且只能使用正确的方法才能对要读写的数据域进行访问 封装性意味着数据和代码一起出现在同一结构中 如果需要的话 可以在数据周围砌上 围墙 只有用对象类的方法才能在 围墙 上打开缺口  

   对象的继承性 

        继承性的含义直接而且显然 它是指把一个新的对象定义成为已存在对象的后代 新对象继承了旧类的一切东西 在往新对象中添加任何新内容以前 父类的每一个字段和方法都已存在于子类中 父类是创建子类的基石  

   对象的多态性 

        多态性是在对象体系中把设想和实现分开的手段 如果说继承性是系统的布局手段 多态性就是其功能实现的方法 多态性意味着某种概括的动作可以由特定的方式来实现 这取决于执行该动作的对象 多态性允许以类似的方式处理类体系中类似的对象 根据特定的任务 一个应用程序被分解成许多对象 多态性把高级设计处理的设想如新对象的创建 对象在屏幕上的重显 程序运行的其它抽象描述等 留给知道该如何完美的处理它们的对象去实现  

   通过Delphi实例了解对象 

      让我们结合Delphi的实例讨论对象的概念:

      当您要建立一个新工程时 Delphi 将显示一个窗体作为设计的基础 在程序编辑器中 Delphi将这个窗体说明为一个新的对象类型 并同时在与窗体相关联的库单元中生成了创建这个新窗体对象的程序代码  

  unit Unit ;   interface   uses SysUtils Windows Messages Classes Graphics Controls Forms Dialogs;   type  TForm = class(TForm) {窗体的类型说明开始}  private{ Private declarations }  public{ Public declarations }  end; {窗体的类型说明结束}   var  Form : TForm ; {说明一个窗体变量}   implementation   {$R * DFM}    end  

       新的窗体类型是TForm 它是从TForm继承下来的一个对象 它具有对象的特征 含有域或方法 由于您未给窗体加入任何部件 所以它只有从TForm类中继承的域和方法 在窗体对象的类型说明中 您是看不到任何域 方法的说明的 Form 称为TForm 类型的实例(instance) 您可以说明多个对象类型的实例 例如在多文档界面(MDI)中管理多个子窗口时就要进行这样的说明 每一个实例都有自己的说明 但所有的实例却共用相同的代码

       假设您向窗体中加入了一个按钮部件 并对这个按钮建立了一个OnClick事件处理过程 再查看Unit 的源程序 会发现TForm 的类型说明部分如下

  type  TForm = class(TForm)  Button : TButton;  procedure Button Click(Sender: TObject);  private{ Private declarations }  public{ Public declarations }  end; 

      现在TForm 对象有了一个名为Button 的域 它是您在窗体中加入的按钮 TButton是一个对象类型 Button 是Tbutton的一个实例 它被TForm 对象所包含 作为它的数据域 每当您在窗体中加入一个部件时 部件的名称就会作为TFom 的域加入到类型说明中来 在Delphi中 您所编写的事件处理过程都是窗体对象的方法 每当您建立一个事件处理过程 就会在窗体的对象类型中说明一个方法

       当您使用Object Inspector来改变对象(部件)的名称时 这个名称的改变会反映到程序中 例如 在Object Inspector中将Form 的Name属性命名为ColorBox 您会发现在类型说明部分 会将前文的TForm 改为  

  TColorBox=class(TForm); 

       并且在变量说明部分 会说明ColorBox为TColorBox类型的变量 由Delphi自动产生的事件处理过程名称会自动改为TColorBox Button Click 但您自行编写的实现部分的代码却不会被自动修改 因此 如果您在改变Name属性前编写了程序 则您必须将事件处理过程中的对象名称进行改变 所以 原先的Form Color要改为ColorBox Color  

   从一个对象中继承数据和方法 

  前面的TForm 类型是很简单的 因为它只含有域Button 和方法Button Click 但是在这个窗体上 您可以改变窗体的大小 加入或删除窗体的最大最小化按钮 或设置这个窗体为MDI界面 对于一个只包含一个域和方法的对象来讲 您并没有看到显式的支持程序 在窗体上单击鼠标或用Object Inspector的上端的Object Selector选中Form 对象 按动F 查阅它的在线帮助 您会在Properties和Method中找到它的继承到的全部属性和方法 这些是在TForm类型中说明的 TForm 是TForm的子类 直接继承了它所有的域 方法 属性和事件 例如窗体的颜色属性Color就是在TForm中说明的 当您在工程中加入一个新窗体时 就等于加入了一个基本模型 通过不断地在窗体中加入部件 您就自行定义了一个新的窗体 要自定义任何对象 您都将从已经存在的对象中继承域和方法 建立一个该种对象的子类 例如对象TForm 就被说明为对象TForm的子类 拥有一个窗体部件的基本属性或方法 只有当您在窗体中加入了部件或编写了事件处理过程时 Form 才成为您自己的类型

       一个比较特殊的对象是从一个范围较广或较一般的对象中继承下来的 它是这个特别对象的祖先 这个对象则称为祖先的后代 一个对象只能有一个直接的祖先 但是它可以有许多后代 TForm是TForm 类型的祖先 所有的窗体对象都是TForm的后代

       用F 查阅窗体的在线帮助时 您会发现TForm被称为ponent(部件) 这是因为所有的部件都是对象

       在这个结构中所有的部件都是对象 部件类型TComponent从TObject类型中继承数据和程序代码 并具有额外的可以用作特殊用途的属性 方法 事件 所以部件可以直接和用户打交道 记录它的状态并存贮到文件中等等 控制类型TControl从TComponent中继承而来 又增加了新的功能 如它可以显示一个对象 在上图中 虽然TCheckBox不是直接由TObject继承来的 但是它仍然有任何对象所拥有的属性 因为在VCL结构中 TCheckBox终究还是从TObject 中继承了所有功能的特殊对象 但它还有些自行定义的独到的功能 如可以选择记录状态等  

   对象的范围 

   关于对象的范围 

       一个对象的范围决定了它的数据域 属性值 方法的活动范围和访问范围 在一个对象的说明部分说明的数据域 属性值 方法都只是在这个对象的范围中 而且只有这个对象和它的后代才能拥有它们 虽然这些方法的实际程序代码可能是在这个对象之外的程序库单元中 但这些方法仍然在这个对象的范围内 因为它们是在这个对象的说明部分中说明的

       当您在一个对象的事件处理过程中编写程序代码来访问这个对象的属性值 方法或域时 您不需要在这些标识符之前加上这个对象变量的名称 例如 如果您在一个新窗体上加入一个按钮和一个编辑框 并为这个按钮编写OnClick事件处理过程  

  procedure TForm Button Click(Sender:Tobject);  begin  Color :=clFuchsia;  Edit Color :=clLime;  end;  

       其中的第一行语句是为整个窗体Form 着色 您也可以编写如下   Form Color :=clFuchsia; 

       但您可以不必加上Form 因为Button Click方法是在TForm 对象的范围里 当您在一个对象的范围中时 您可以省略所有这个对象中的属性值 方法 域之前的对象标识符 但是当您编写第二个语句改变编辑框的底色时 因为此时您想访问的是TEdit 对象的Color属性 而不是TForm 类型的 所以您需要通过在属性前面加上编辑框的名称来指明Color属性值的范围 如果不指明 Delphi会象第一个语句一样 将窗体的颜色变成绿色 因为Edit 部件是在窗体中的 它是窗体的一个数据域 所以您同样不必指明其从属关系

      如果Edit 是在其他窗体中 那么您需要在编辑框之前加上这个船体对象的名称了 例如 如果Edit 是在Form 之中 那它是Form 说明的一个数据域 并位于Form 的范围中 那么您需要将第二句改为  

  Form Edit Color := clLime; 

  而且需要把Unit 加入Unit 的uses子句中

lishixinzhi/Article/program/Delphi/201311/24965

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式