Delphi_09_Delphi_Object_Pascal_面向对象编程
今天这里讨论一下Delphi中的面向对象编程,这里不做过多过细的讨论,主要做提纲挈领的描述,帮助自己抓做重点。
本随笔分为两部分:
一、面向对象编程
二、面向对象编程详细描述
------------------------------------------
一、面向对象编程
下面是工程文件的:
- { 面向对象编程基础
- 1、class的定义/类的定义
- 2、构造函数
- 3、析构函数
- 4、封装
- 5、继承
- }
- program oop;
- {$APPTYPE CONSOLE}
- uses
- SysUtils,
- Unit1 in 'Unit1.pas';
- var
- //定义一个类实例,或者说定义一个类对象
- admin:TPersonMan;
- begin
- { 对象的使用
- 1、 使用对象之前必须用构造函数创建对象
- 2、 对象的构造函数是为Create方法
- 3、 对象构造的时候,必须用类型名,因为这个时候对象还没有,所以不能
- 用对象实例的名字
- 4、 对象的析构,必须用 对象的实例名称
- }
- //实例化对象,访问对象前必须实例化对象
- admin := TPersonMan.Create();
- //访问对象的域
- admin.id := ;
- admin.strName := 'volcanol';
- //访问对象的方法,可以省略(), 最好不要省略,因为不省略的话可以明确的表示
- //访问的是对象的方法
- admin.playFootball();
- //Delphi的Object Pascal和 Java 、C#这样具有自动垃圾回收机制的语言不一样
- //Object Pascal需要自己回收垃圾, 即在对象不再需要使用的时候,需要将对象
- //的空间进行回收, 通过 Free() 方法和 Destroy() 方法实现,通常Free()方法
- //更加的安全。
- admin.Free();
- //admin.FreeInstance();
- ReadLn;
- end.
下面是单元文件unit1:
- { class类的定义
- 1、class关键字
- 2、封装
- 3、继承
- 4、构造函数
- 5、析构函数
- }
- unit Unit1;
- interface
- uses
- SysUtils;
- type
- { 定义一个类
- 1、下面三种方式一样
- // 1、方式1
- TPerson=class(TObject)
- end;
- //方式2:
- TPerson=class
- end;
- //方式3
- TPerson=class;
- 方式1、
- 明确的类的父类, 通过在关键字class后面利用 (父类名称)来完成
- 方式2、
- 在Delphi的Object Pascal中所有的类都一个共同的祖先类 TObject,
- 这个 TObject 类,相当于盘古或者女蜗一样。
- 方式3、
- 方式3和方式2一样,只是省略了关键字 end,注意只有在定义的类型
- 的时候 end 关键字可以省略,其他的时候不能省略。
- 要点:
- 1、如果用方式2定义则必须定义至少一个域,否则编译报错,
- 报错类容为: TPerson 未完全定义。
- 2、如果用方式3定义,则必须显式的指出类的父类型
- Type
- TxxxObject=class(TObject); //正确的定义方法
- }
- {
- Type
- TxxxObject=class; //编译报错,类型没有定义完全。
- }
- TPerson=class
- //类的域定义, 注意Delphi中Object Pascal的域
- id:integer; //对象的封装,但是这里没有完全体现封装的真正“意义”。
- end;
- TPersonMan=class(TPerson) //演示继承类的定义方法
- strName:shortString;
- //下面的两种声明方法的方式需要注意都可以,一般推荐使用第一种方式
- //因为这样更能表示这是一个方法。
- procedure playFootball();
- //procedure playFootBall;
- end;
- implementation
- { 类方法的实现
- 1、 和普通的方法一样,类的方法也需要在实现中进行定义,否则将不能调用
- 2、 注意定义类的方法的时候,需要指定方法属于哪一个类," . " 域操作符
- 来实现。
- 类名.方法名
- }
- procedure TPersonMan.playFootball;
- begin
- WriteLn('I can play football :) !!!');
- end;
- end.
二 面向对象编程
下面的工程对面向对象编程进行了更多的描述。
下面是工程文件:
- { 面向对象详细
- 1、方法特性 static、virtual、dynamic、message
- 2、访问特性控制: private、public、
- 3、域的 "属性" 特性
- }
- program OopDetail;
- {$APPTYPE CONSOLE}
- uses
- SysUtils,
- Unit1 in 'Unit1.pas';
- var
- //定义两个对象
- person:TPerson;
- teachar1:TTeachar;
- begin
- //实例化变量
- person :=TPerson.Create();
- //初始化域
- person.gender := Male;
- person.name := 'volcanol';
- person.height := 1.75;
- person.weight := ;
- person.nationality := China;
- person.education := Primary;
- person.profession := Unemployment;
- //方法
- person.eat();
- person.language();
- person.playBall();
- WriteLn('');
- //实例化对象
- teachar1 := TTeachar.Create();
- //初始化域
- teachar1.gender := Female;
- teachar1.name := 'Lily';
- teachar1.height := 1.65;
- teachar1.weight := ;
- teachar1.nationality := England;
- teachar1.education := University;
- teachar1.profession :=Teachar;
- { 方法
- 1、注意调用 override 的方法的输出
- }
- teachar1.language();
- teachar1.playBall();
- teachar1.teaching();
- teachar1.prepareLesson();
- teachar1.testLesson();
- ReadLn;
- end.
下面是单元文件:
- { class man 的定义
- 1、定义一个人的基类
- 2、基类的方法具有static、virtual、dynamic、message
- }
- unit Unit1;
- interface
- uses
- SysUtils;
- type
- //定义一个表示性别的枚举类型
- TGender=(Male,Female);
- //定义一个表示国籍的枚举类型
- TNation=(China,England,American);
- //定义一个表示学历的枚举类型
- TEducation=(Primary,Junior,Senior,University);
- //定义一个职业的枚举类型
- TProfession=(Unemployment,Teachar,Docotor,Lawyer,Firefight);
- //****************************************************
- // 定义一个人的类
- // 1、人的属性 --- 域
- // 性别、姓名、身高、体重、国籍、学历等
- // 2、人的能力 --- 方法
- // 外语、吃饭、打球等
- //*****************************************************
- TPerson=class
- // 域
- gender : TGender;
- name : shortstring;
- height : single;
- weight : single;
- nationality : TNation;
- education : TEducation;
- profession: TProfession;
- // 方法
- //静态方法 静态方法不能被覆盖
- procedure eat();
- //虚方法 父类的虚方法可以在子类中被覆盖
- procedure language(); virtual;
- procedure playBall(); virtual;
- end;
- TTeachar=class(TPerson)
- //域
- // 方法
- { 方法的覆盖:
- 1、 通过 override 关键字表示
- 2、方法的覆盖就是屏蔽父类的同名方法,注意与方法的重载 overload 的
- 区别
- 3、
- }
- procedure language(); override;
- procedure playBall(); override;
- procedure teaching();
- procedure prepareLesson();
- procedure testLesson();
- end;
- implementation
- //***********************************************************
- // 实现 TPerson类的方法
- procedure TPerson.eat();
- begin
- WriteLn('I can eating.');
- end;
- procedure TPerson.playBall();
- begin
- WriteLn('I can play ball.');
- end;
- procedure TPerson.language();
- begin
- WriteLn('I can only speak one languave.');
- end;
- //***********************************************************
- // 实现 TTeacher 类的方法
- procedure TTeachar.language();
- begin
- WriteLn('I can speak lot of languave.');
- end;
- procedure TTeachar.playBall();
- begin
- WriteLn('I can not play ball.');
- end;
- procedure TTeachar.teaching();
- begin
- WriteLn('I am a Chinese teachar.');
- end;
- procedure TTeachar.prepareLesson();
- begin
- WriteLn('I am prepare math lesson.');
- end;
- procedure TTeachar.testLesson();
- begin
- WriteLn('I am testing English.');
- end;
- end.
欢迎转载本系列文章,转载请注明来源。
Delphi_09_Delphi_Object_Pascal_面向对象编程的更多相关文章
- angular2系列教程(六)两种pipe:函数式编程与面向对象编程
今天,我们要讲的是angualr2的pipe这个知识点. 例子
- 带你一分钟理解闭包--js面向对象编程
上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...
- PHP 面向对象编程和设计模式 (1/5) - 抽象类、对象接口、instanceof 和契约式编程
PHP高级程序设计 学习笔记 2014.06.09 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构.OOP 的一条基本原则是计算 ...
- python基础-面向对象编程
一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...
- 面向对象编程(OOP)
什么是面向对象编程,对于面向对象编程与面向过程编程的解释随处可见,个人认为对面向对象编程解释最好的一个定义是:依赖倒转原则是面向对象编程的标志,面向对象编程是一种思想,无论使用哪一种编程语言,如果在编 ...
- python 学习笔记7 面向对象编程
一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...
- 进击的Python【第七章】:Python的高级应用(四)面向对象编程进阶
Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...
- 进击的Python【第六章】:Python的高级应用(三)面向对象编程
Python的高级应用(三)面向对象编程 本章学习要点: 面向对象编程介绍 面向对象与面向过程编程的区别 为什么要用面向对象编程思想 面向对象的相关概念 一.面向对象编程介绍 面向对象程序设计(英语: ...
- 第二章 Matlab面向对象编程基础
DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...
随机推荐
- Axure 8.0.0.3312可用注册码
用户名:aaa 注册码:2GQrt5XHYY7SBK/4b22Gm4Dh8alaR0/0k3gEN5h7FkVPIn8oG3uphlOeytIajxGU 用户名:axureuser 序列号:8wFfI ...
- VICA 架构设计(1)
本文记录最近完成的一个通用实时通信客户端的架构. 背景 我们公司是做税务相关的软件,有针对大客户 MIS 系统,也有针对中小客户的 SaaS 平台.这些系统虽然都是 B/S 的,但是也需要使用 A ...
- CSS margin详解
以下的分享是本人最近几天学习了margin知识后,大有启发,感觉以前对margin的了解简直太浅薄.所以写成以下文章,一是供自己整理思路:二是把知识分享出来,避免各位对margin属性的误解.内容可能 ...
- git命令行操作
从本地上传代码到仓库(假设已经建好仓库): 1.初始化: git init 2.将所有文件加入缓存区: git add * 3.提交当前工作空间的修改内容: git commit -m 'commit ...
- MySQL 优化之 ICP (index condition pushdown:索引条件下推)
ICP技术是在MySQL5.6中引入的一种索引优化技术.它能减少在使用 二级索引 过滤where条件时的回表次数 和 减少MySQL server层和引擎层的交互次数.在索引组织表中,使用二级索引进行 ...
- iOS7 NavigationController 手势问题
在iOS7中,如果使用了UINavigationController,那么系统自带的附加了一个从屏幕左边缘开始滑动可以实现pop的手势.但是,如果自定义了navigationItem的leftBarB ...
- 08讲browse命令的使用技巧
.浏览所有parts ,使用技巧 .浏览所有 nets,使用技巧 在上图中选择nets .浏览所有 offpage connector,使用技巧 如上 .浏览所有 DRC makers,使用技巧 5. ...
- ASP.NET Core 在 JSON 文件中配置依赖注入
前言 在上一篇文章中写了如何在MVC中配置全局路由前缀,今天给大家介绍一下如何在在 json 文件中配置依赖注入. 在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等 ...
- [PHP源码阅读]empty和isset函数
近日被问到PHP中empty和isset函数时怎么判断变量的,刚开始我是一脸懵逼的,因为我自己也只是一知半解,为了弄懂其真正的原理,赶紧翻开源码研究研究.经过分析可发现两个函数调用的都是同一个函数,因 ...
- NodeJs 开发微信公众号(四)微信网页授权
微信的网页授权指的是在微信公众号中访问第三方网页时获取用户地理.个人等信息的权限.对于开发了自己的网页app应用时,获取个人的信息非常重要.上篇博客讲到了注册时可以获取用户的信息,很多人会问为什么还需 ...