五、类是一种对数据和操作高度的封装机制

1)数据封装

unit Unit2;

interface
type
TEmployee = class;
private
FName: String;
public
Constructor Create;
function GetName: String;
procedure SetName(AName: String);
end; implementation
constructor TEmployee.Create;
begin
FName:= 'Xumenger';
end; function TEmployee.GetName: String;
begin
Result:= FName;
end; procedure TEmployee.SetName(AName: String);
begin
FName:= AName;
end; end.

  如上面的代码,我们就用了一个过程SetName和一个函数GetName对私有变量FName进行完全的封装。我们要对FName进行操作就只要这样:

uses
Unit2; procedure TForm1.Button1Click(Sender: TObject);
var
AEmployee: TEmployee;
begin
AEmployee:= TEmployee.Create;
AEmployee.SetName('Joker');
MessageBox(Handle, PChar(AEmployee.GetName), 'Employee' 0);
AEmployee.Free;
end;

  

2)操作封装

unit Unit2;
interface
type
TDivision = class
public
function GetDiv(Num1, Num2: Double): Double; overload;
function GetDiv(Num1, Num2: Integer): Integer; overload;
end; implementation
function TDivision.GetDiv(Num1, Num2: Double): Double;
begin
try
Result:= Num1/Num2;
except
Resulr:=0; //提供弹性处理机制,处理除数为0的情况
end;
end; function TDivision.GetDiv(Num1, Num2: Integer): Integer;
begin
try
Result:= Num1 div Num2; //注意Double的除法和Integer的除法的操作符的差别
except
Resulr:=0; //提供弹性处理机制,处理除数为0的情况
end;
end;

  如上的代码通过类的多态性机制把除法分别处理成整数型和非整数型,又通过异常处理去处理除数为0的异常,从而保证操作的安全性,在调用的时候,就可以这样

uses
Unit2; procedure TForm1.ButtonClick(Sender: TObject);
var
Division: TDivision;
IValue: Integer;
FValue: Double:
begin
Division:= TDivision.Create;
IValue:= Division.GetDiv(1, 2);
FValue:= Division.GetDiv(1.0, 2);
IValue:= Division.GetDiv(1, 0);
FValue:= Division.GetDiv(1.0, 0);
Division.Free;
end;

  

六、类是一种代码重用机制

  比方在  中我们想对这个类加上一个GetAdd函数来做加法运算就可以用类的继承,如

unit Unit2;

interface
type
TDivision = class
public
function GetDiv(Num1, Num2: Double): Double; overload;
function GetDiv(Num1, Num2: Integer): Integer; overload;
end; type
TOperation = class(TDivision)
public
function GetAdd(Num1, Num2: Double): Double;
end; implementation { Division } function TDivision.GetDiv(Num1, Num2: Double): Double;
begin
try
Result:=Num1/Num2;
except
Result:=0;
end;
end; function TDivision.GetDiv(Num1, Num2: integer): integer;
begin
try
Result:=Num1 div Num2;
except
Result:=0;
end;
end; { TOperation } function TOperation.GetAdd(Num1, Num2: Double): Double;
begin
Result:=Num1+Num2;
end; end.

  这里我们从TDivision继承了一个子类TOperation。TOperation就可以既有TDivision公有方法GetDiv,又可以有自己的独特的方法GetAdd

谈谈Delphi中的类和对象4---类是一种对数据和操作高度的封装机制 && 类是一种代码重用机制的更多相关文章

  1. 谈谈Delphi中的类和对象1---介绍几个概念 && 对象是一个地地道道的指针

    参考:http://blog.163.com/liang_liu99/blog/static/88415216200952123412180/ 以下的介绍主要针对的是Delphi的面向对象的知识,可能 ...

  2. Delphi中比较两个对象是否一致及地址是否相同[转]

    在delphi中,C#也是如此,对象的地址与对象变量(引用)的地址不是同一个概念.要加以区别. procedure TForm1.btn1Click(Sender: TObject); var    ...

  3. Java第7次作业:造人类(用private封装,用static关键字自己造重载输出方法)什么是面向对象程序设计?什么是类和对象?什么是无参有参构造方法 ?什么是封装?

    什么是面向对象程序设计? 我们称为OOP(Object  Oriented  Programming) 就是非结构化的程序设计 要使用类和对象的方法来进行编程 什么是类,什么是对象 类就是封装了属性和 ...

  4. 谈谈Delphi中的类和对象3---抽象类和它的实例

    四.抽象类和它的实例 Delphi中有一个类称为是抽象类,你不能天真的直接为它创建一个实例,如 var StrLst: TString; begin StrLst:= TString.Create; ...

  5. 谈谈javascript中的日期Date对象

    一.日期对象  在javascript中并没有日期型的数据类型,但是提供了一个日期对象可以操作日期和时间.  日期对象的创建:  new Date();二.将日期对象转换为字符串  将日期对象转换为字 ...

  6. 教程-Delphi中比较两个对象是否一致及地址是否相同

    资料说明: 1.http://blog.csdn.net/diligentcatrich/article/details/7077294 说明: 实例代码: procedure TForm1.btn1 ...

  7. nodejs操作mongodb数据库封装DB类

    这个DB类也算是我经历了3个实际项目应用的,现分享出来,有需要的请借鉴批评. 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关 ...

  8. Delphi动态事件深入分析(对象方法在调用的时候会传递一个隐含的Self指针,而该指针的值在EAX中。即左边第一个参数)

    Delphi动态事件深入分析 2009-2-7 作者:不得闲核心提示:本实验证明了在类中方法的调用时候,所有的方法都隐含了一个Self参数,并且该参数作为对象方法的第一个参数传递... 首先做一个空窗 ...

  9. 【JAVA零基础入门系列】Day11 Java中的类和对象

    今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...

随机推荐

  1. respberry pi3 上手随记

    入门篇: raspberry 官网: https://www.raspberrypi.org/ 各个系统镜像下载地址: https://www.raspberrypi.org/downloads/ 树 ...

  2. qt-5.6.0 移植之tslib 配置及编译

    tslib 是qt启动时的一个触屏校正检验程序. 它的配置以及编译比较简单. 第一步, 下载tslib源码包: http://download.csdn.net/detail/MKNDG/329156 ...

  3. The Adapter of ListView: Just adapt data to view, don’t do anything else

    The design of SimpleAdapter is not good in my opinion. An adapter should just adapter the data to vi ...

  4. PHP获取IP地址

    获取客户端IP地址:: function getIp(){ if(!empty($_SERVER['HTTP_CLIENT_IP'])){ return $_SERVER['HTTP_CLIENT_I ...

  5. Spring结合Quartz实现多任务定时调用(转载)

    Quartz框架提供了丰富的任务调度支持,比如,在 何时执行何种任务,它是一个开源的由OpenSymphony维护的项目,开发者能够在Java EE,或单独的Java SE应用中使用它.无论是简单的任 ...

  6. malloc/free与new/delete的区别

    相同点:都可用于申请动态内存和释放内存 不同点:(1)操作对象有所不同.malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符.对于非内部数据类的对象而言,光用m ...

  7. sharepoint2013隐藏左侧导航栏更换新的

    $("#zz16_V4QuickLaunchMenu").hide()//隐藏 更换新的 <script type="text/javascript" s ...

  8. python之errno

    http://www.cnblogs.com/Security-Darren/p/4168392.html errno.EWOULDBLOCK 操作将会阻塞

  9. struts2类型转换器、 类型转换错误 以及INPUT view

    1.1.1    Struts2中的类型转换器 Struts2内置了常见数据类型多种转换器 boolean 和 Boolean char和 Character int 和 Integer long 和 ...

  10. MySQL 通过idb文件恢复Innodb 数据【转】

    昨晚收到一则求助,一个用户的本地数据库的重要数据由于误操作被删除,需要进行紧急恢复,用户的数据库日常并没有进行过任何备份,binlog也没有开启,所以从备份和binlog入手已经成为不可能,咨询了丁奇 ...