广州越秀建网站,短网址源码wordpress,windows同步wordpress,网站建设与规划心得总结第7章 对象
即使你没有面向对象编程#xff08;OOP#xff09;的详细知识#xff0c;本章也将介绍每一个关键概念。如果你已经精通OOP#xff0c;你可以相对快速地浏览材料#xff0c;并将重点放在Object Pascal语言的细节上#xff0c;与你可能已经掌握的其他语言进…第7章 对象
即使你没有面向对象编程OOP的详细知识本章也将介绍每一个关键概念。如果你已经精通OOP你可以相对快速地浏览材料并将重点放在Object Pascal语言的细节上与你可能已经掌握的其他语言进行比较。
Object Pascal中的OOP支持与C#和Java等语言有很多相似之处它也与C和其他静态和强类型语言有一些相似之处。相反动态语言倾向于提供对OOP的不同解释因为它们以更松散和灵活的方式处理类型系统。
C#和Object Pascal之间许多概念有相似之处是由于这两种语言都是同一个设计师Anders Hejlsberg。Anders是Turbo Pascal编译器的原作者也是Delphi的Object Pascal第一版的原作者后来他跳槽到微软并设计了C#以及最近的JavaScript衍生物TypeScript。你可以在附录A中关于Object Pascal语言历史的内容。
7.1 引入类和对象
在Object Pascal和其他面向对象的编程语言中经常使用类和对象这两个术语。 然而由于它们经常被误用让我们确保从一开始就对它们的定义达成共识
类是一个用户定义的数据类型定义了一种状态或表示和一些操作或行为。换句话说一个类有一些内部数据和一些方法以过程或函数的形式存在。类通常描述了许多相似对象的特征和行为尽管也有专门用于单个对象的特殊类。对象是类的一个实例即由类定义的数据类型的变量。对象是实际存在的实体。程序运行时对象占用一些内存来存储其内部表示。对象和类的关系与其他变量与其数据类型之间的关系相同不同之处在于对象变量有一个特殊的名称即实例。 历史 面向对象编程OOP术语可以追溯到最早采用这一模型的几种语言如Smalltalk。然而后来为了使用在过程性语言中的术语最初的面向对象术语很大一部分而被取消。因此尽管诸如类和对象之类的术语仍然常用但您通常更常听到调用方法这一术语而不是原始术语向接收者对象发送消息。关于OOP术语及其如何随时间演变的全面详细指南可能很有趣但在这本书中需要太多篇幅。 7.1.1 类的定义
在Object Pascal中您可以使用以下语法定义新的类数据类型TDate其中包含一些本地数据字段Month、Day、Year和一些方法SetValue、LeapYear
typeTDate classFMonth, FDay, FYear: Integer;procedure SetValue(M, D, Y: Integer);function LeapYear: Boolean;end;注解 我们已经在记录中看到过类似的结构。就定义而言记录与类相当相似。在内存管理和其他方面存在差异本章后面将详细介绍。尽管如此从历史上看在Object Pascal中这个语法首先用于类然后被移植到记录。 Object Pascal 的惯例是使用字母 T 作为你编写的每个类名称的前缀就像其他类型一样事实上T 代表 Type。对编译器来说T 只是一个字母与其他字母无异。——但这是如此常见遵循这个习惯会使您的代码更容易被其他程序员理解。
与其他语言不同Object Pascal 中的类定义不包括方法的实际实现或定义而只包括方法的签名或声明。这使得类代码更加紧凑可读性大大提高。 小贴士 虽然看起来进入方法的实际实现要花费更多时间但编辑器允许你使用 ShiftUp 和 ShiftDown 组合键从方法声明导航到方法实现反之亦然。此外在编写类定义后还可以使用 “类完成”Class Completion光标在类定义中时按 CtrlC 键让编辑器生成方法定义的骨架。 此外除了编写类的定义包括字段和方法外您还可以编写一个声明。声明中只有类名如
typeTMyDate class; 之所以要写这样的声明是因为你可能需要让两个类互相引用。在 Object Pascal 中一个符号只有在定义后才能使用。因此要引用一个尚未定义的类就需要声明。我写下面的代码片段只是为了向你展示语法并不是说它有任何意义
typeTHusband class;TWife classFHusband: THusband;end;THusband classFWife: TWife;end; 您可能在实际代码中遇到类似的交叉引用这就是为什么记住这种语法很重要的原因。 请注意与方法一样在单元中声明的类必须在稍后的同一单元中完全定义。