您的位置:首页 > 移动开发 > Objective-C

Delphi_09_Delphi_Object_Pascal_面向对象编程

2016-04-24 19:11 507 查看
  今天这里讨论一下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 := 512109051;
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 := 68;
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 := 50;
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.


欢迎转载本系列文章,转载请注明来源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: