没有合适的资源?快使用搜索试试~ 我知道了~
给程序员的现代ObjectPascal介绍.pdf
需积分: 17 12 下载量 27 浏览量
2021-06-19
14:28:40
上传
评论
收藏 1.09MB PDF 举报
温馨提示
在这里外有很多关于 Pascal 的书和资源,但是太多的它们讨论老式的(old) Pascal,没有 classes(类), units(单元)或者 generics(泛型)。 所以我写这个快速介绍,什么是我称为 modern Object Pascal(现代 Object Pascal) 。大多数的程序员使用不真正称为"modern Object Pascal"的 Pascal,我们仅仅是称它为"our Pascal".。但是当介绍语言时,我感觉强调它是一个现代的,面向对象的语言是重要的。自从很久以前很多人在学校学习的老式的 (Turbo) Pascal 以来,它发展了很多。充满智慧的-特征(Featurewise),它非常类似于 C++或 Java 或 C#。
资源推荐
资源详情
资源评论
robsean@126.com QQ 群:192903718
2 / 79
目录
给程序员的 Modern Object Pascal 介绍 .............................................................................................. 1
1. 为什么 ........................................................................................................................................ 4
2. 基础 ............................................................................................................................................ 5
2.1. "Hello world"程序 .......................................................................................................... 5
2.2. 函数,procedures(过程),primitive(原始)类型 ................................................ 5
2.3. 测试(if) ........................................................................................................................... 7
2.4. Logical(逻辑),relational(关系式)和 bit-wise(位-判断)运算符 .................. 8
2.5. 对多个值(case)测试单个表达式 .............................................................................. 8
2.6. Enumerated(枚举)和 ordinal types(有序类型)和 sets(集合)和 constant-
length arrays(定长数组) ................................................................................................... 9
2.7. 循环(for, while, repeat, for .. in) ................................................................................... 10
2.8. 输出,记录 ................................................................................................................... 12
2.9. 转换为字符串 ............................................................................................................... 13
3. 单元 .......................................................................................................................................... 14
3.1. 单元相互使用 ............................................................................................................... 14
3.2. 使用单元名称限定(Qualifying)标识符 ....................................................................... 15
3.3. 从另一个单元接触(expose)一个单元标识符 ............................................................. 18
4. 类 .............................................................................................................................................. 19
4.1. 基础 ............................................................................................................................... 19
4.2. 继承(Inheritance),is,as ....................................................................................... 19
4.3. 属性 ............................................................................................................................... 21
4.4. 异常 ............................................................................................................................... 23
4.5. Visibility specifiers(可视化说明符/分类符) .......................................................... 24
4.6. 默认 原型(ancestor) ...................................................................................................... 24
4.7. Self ................................................................................................................................ 24
4.8. 调用继承的方法( inherited method) ............................................................................ 25
4.9. 虚拟(Virtual)方法,override(重写)和 reintroduce(再引入) ....................... 27
5. 释放类 ...................................................................................................................................... 31
5.1. 记住释放类实例 ........................................................................................................... 31
5.2. 如何释放 ....................................................................................................................... 31
5.3. 手动和自动释放 ........................................................................................................... 31
5.4. 虚拟析构函数(destructor)被称为 Destroy(销毁) ........................................................ 34
5.5. 释放 notification(通知) ................................................................................................ 35
6. 运行时库 .................................................................................................................................. 38
6.1. 使用 streams(流)输入/输出 .................................................................................... 38
6.2. 容器 (lists(列表), dictionaries(词典))使用泛型(generics) .......................................... 38
6.3. Cloning(克隆): TPersistent.Assign ......................................................................... 44
7. 各种各样的语言特征 .............................................................................................................. 48
7.1. 局部(嵌套)例行程序(routines) ............................................................................... 48
7.2. Callbacks(回调)(亦称 events(事件),亦称 pointers to functions(指针到函
数),亦称 procedural variables(过程变量)) ............................................................... 49
7.3. 泛型(Generics) .............................................................................................................. 51
7.4. Overloading(重载) ................................................................................................... 53
robsean@126.com QQ 群:192903718
3 / 79
7.5. 预处理程序 ................................................................................................................... 53
7.6.记录 ................................................................................................................................ 55
7.7. 旧样式对象 ................................................................................................................... 56
7.8. 指针 ............................................................................................................................... 56
7.9.运算符(Operator)重载 ................................................................................................... 57
8. 高级的类特征 .......................................................................................................................... 60
8.1. private(私有的)和 strict private(绝对的私有的) .............................................. 60
8.2. 在类和嵌套的(nested)类的内部更多原料(stuff) ........................................................ 60
8.3. 类方法 ........................................................................................................................... 61
8.4. 类引用(Class reference
)
.......................................................................................... 61
8.5. 静态类方法 ................................................................................................................... 64
8.6. 类属性和变量 ............................................................................................................... 65
8.7. 类助手(helpers) ....................................................................................................... 66
8.8.虚拟构造函数,析构函数 ............................................................................................ 67
8.9. 在构造函数中的一个异常 ........................................................................................... 67
9. 接口 .......................................................................................................................................... 69
9.1. Bare (CORBA) 接口 ..................................................................................................... 69
9.2. CORBA 和接口的 COM 类型 ..................................................................................... 70
9.3.接口 GUIDs(全球唯一的标志符) ........................................................................... 72
9.4. 引用计数(COM)接口 ................................................................................................... 73
9.5. 禁用引用计数使用 COM 接口 .................................................................................... 75
9.6.不带有"as"操作符类型强制转换接口 ......................................................................... 77
10. 关于这个文档 ........................................................................................................................ 78
robsean@126.com QQ 群:192903718
4 / 79
1. 为什么
在这里外有很多关于 Pascal 的书和资源,但是太多的它们讨论老式的(old) Pascal,没有
classes(类),units(单元)或者 generics(泛型)。
所以我写这个快速介绍,什么是我称为 modern Object Pascal(现代 Object Pascal)。大多
数的程序员使用不真正称为"modern Object Pascal"的 Pascal,我们仅仅是称它为"our Pascal".。
但是当介绍语言时,我感觉强调它是一个现代的,面向对象的语言是重要的。自从很久以前
很多人在学校学习的老式的 (Turbo) Pascal 以来,它发展了很多。充满智慧的-特征(Feature-
wise),它非常类似于 C++或 Java 或 C#。
它有你要求的所有现代的特征 —classes(类),units(单元),interfaces(接口),
generics(泛型)…,
它编译到快速的,原生的代码,
它非常类型(type)安全,
高级,但是如果你需要也能是低级。
它也有极好的,便携式的和开放-源文件的编译器,被称为 Free Pascal Compiler,
http://freepascal.org/ 。和一个附随的 IDE (编译器,调试器,一个可视化组件的库,窗体设计
器),被称为 Lazarus http://lazarus.freepascal.org/ 。我自己,我是 Castle Game Engine 的创建者,
https://castle-engine.io/ ,它是一个绝妙的便携式的 3D 和 2D 游戏引擎,使用这个语言来在很
多平台(Windows,Linux,MacOSX,Android,iOS,web 插件.上创建游戏。
这个介绍是主要针对已经在其他语言中有经验的程序员。我们将不在这里涉及一般的概
念,像“
什么是一个类
”,我们将仅展示如何在 Pascal 中完成它们。
robsean@126.com QQ 群:192903718
5 / 79
2. 基础
2.1. "Hello world"程序
{$mode objfpc}{$H+}{$J-} // Just use this line in all modern sources
program MyProgram; // Save this file as myprogram.lpr
begin
Writeln('Hello world!');
end.
这是一个完整的程序,你可以编译和运行。
如果你使用命令行 FPC,只创建一个新的文件 myprogram.lpr,并执行 fpc
myprogram.lpr。
如果你使用 Lazarus,创建一个新的工程(菜单 工程→新建工程→简单程序)。保持
它为 myprogram 并粘贴这些源文件代码为主文件(main file)。 使用菜单项目编译 运
行→编译。
这是一个命令行程序,所以在任何一种情况下 — 只从命令行运行编译的命令。
这篇文章的剩余部分讨论对象 Pascal 语言,所以不要期望看到比命令行资料更有趣的任何事。
如果你想看到绝妙的一些事,在 Lazarus(
工程
→
新建工程
→
应用程序
)中,创建一个 新的
GUI 工程。 Voila — 一个工作的 GUI 应用程序,跨平台,带有任何地方的原生外观 ,使用一
个合适的可视化组件库。Lazarus 和 Free Pascal Compiler 带来很多准备的用于网络,GUI,数
据库,文件格式(XML,json,images…),线程和你可能需要的其他每种事的单元。我也
提及我的绝妙的 Castle Game Engine :)
2.2. 函数,procedures(过程),primitive(原始)类型
{$mode objfpc}{$H+}{$J-}
program MyProgram;
procedure MyProcedure(const A: Integer);
begin
Writeln('A + 10 is: ', A + 10);
end;
function MyFunction(const S: string): string;
begin
Result := S + 'strings are automatically managed';
end;
var
X: Single;
begin
剩余78页未读,继续阅读
资源评论
adu00
- 粉丝: 0
- 资源: 33
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于OPENMV的视觉智能小车(车可自己动,实现方块,颜色识别)
- C# usb hid 设备控制
- MYSQL window安装包,版本8.0
- 三菱PLC药片自动装瓶机控制系统设计自动药片装瓶机电气控制
- 图形用户界面(GUI)应用程序
- 企业商户自动发卡运营版带WAP手机端【多种主题+亲测可用】
- Unity程序开发:创建一个2D平台游戏
- 矩形三维随机裂隙网络 使用COMSOL with Matlab接口编程 可以直接导入COMSOL中,无需CAD,无需提取数据,方便快捷可以直接计算 裂隙由matlab编程生成,能够生成两组不同产
- python+celery+AWVS 实现的漏洞扫描器
- 1.3M宽干式拉丝机(双道砂带)sw16可编辑全套技术资料100%好用.zip
- C# USB HID 读卡器 (CPU卡和IC卡的读和写)上位机源码
- EWSA中文版使用教程.doc
- 罗技鼠标接收器与罗技鼠标相连的软件
- 履带车底盘sw16全套技术资料100%好用.zip
- h2database 2.2.224 版本 Jar包
- 基于Springboot的梦宇飞行培训管理系统
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功