【6.面向对象编程】1.类与对象

1.类与对象

从20世纪90年代开始,面向对象编程(Object Oriented Programming,OOP)成为编程语言最主要的特征。在Delphi中,在Pascal语言中添加了面向对象的特性,构成了面向对象的Pascal语言(Object Pascal)。

1.1 OOP基本概念

面向对象程序设计中的概念主要包括:对象、类、抽象、封装、继承、多态等。通过这些概念面向对象的思想得到了具体的体现。 本节主要介绍类与对象的概念。

对象是OOP应用程序的一个重要的组成部件。在该部件中,封装了部分应用程序,应用程序中包含过程、数据或更抽象的实体。对象非常类似于记录类型,与记录类型不同的是:对象不但能够包含数据成员(字段),也可以包含函数和过程(方法),这些数据和方法被称为类的成员。

在Delphi中,对象是从类型中创建的,与变量的声明一样。对象的类型称为类。类和对象的关系类似于类型和变量的关系。

1.2类的基本概念

类是一种用户自定义的数据类型,类中包含数据和过程、函数形式的方法,通常用来描述一些相似对象所共有的特征和行为。

对象是类的实例,由类定义的数据类型的变量。在程序运行时,对象为其内部表达占用一定的内存空间。

1.3对象的基本概念

对象是类的实例,对象中的几个基本概念:

  • 字段

字段就是对象中的数据成员,可以是一组Delphi支持的类型变量的集合。字段一般用来标识对象的状态,与记录类型的变量是一致的。

  • 属性

属性与字段一样,都是对象中包含的数据成员。不同之处:属性不能直接访问,需要通过方法来访问。

  • 方法

方法是表示对象中的过程或函数。与字段和属性是一样的,方法也可以是共有的或私有的,可以根据需要限制外部的访问。

  • 对象的生命周期

对象的生命周期是从使用类定义开始一直到删除它为止。

1.4类的定义与对象声明

在Delphi中,通过关键字Class来定义类,其基本语法格式如下:

Type
    <类名> = Class
        <数据成员1>: <数据类型1>;
        <数据成员1>: <数据类型1>;
        ......
        <数据成员1>: <数据类型1>;
        Procedure <过程名>([参数列表]);
        ......
        Function <函数名>([参数列表]):<返回类型>;
        ......
    end;
    Procedure <类名>.<过程名>([参数列表]);
    ......
    Function <类名>.<函数名>([参数列表]):<返回类型>;
    ......

对象声明与其他变量声明是相同的,格式:

var
    <对象名>: <类名>

Delphi中类库的约定:使用T来作为每个类的前缀。所有类使用同一个前缀有助于代码的理解。

示例代码:

Type
  TStudent = Class
    name: string;
    sex: string;
    chinese: real;
    math: real;
    english: real;
​
    Function sum(): real;
    Function avg(): real;
  End;
​
  Function TStudent.sum;
  begin
    result := chinese + math + english;
  end;
​
  Function TStudent.avg;
  begin
    result := (chinese + math + english) / 3;
  end;
​
var
  student1, student2: TStudent;
begin
  student1 := TStudent.Create;
  student1.name := 'zhaohb';
  student1.sex := 'girl';
  student1.chinese := 98.5;
  student1.math := 97;
  student1.english := 99;
​
  student2 := TStudent.Create;
  student2.name := 'liuq';
  student2.sex := 'boy';
  student2.chinese := 92.5;
  student2.math := 93.5;
  student2.english := 95;
​
  writeln(student1.name, ' ', student1.sex, ' ', student1.sum:5:1, ' ', student1.avg:5:1);
  writeln(student2.name, ' ', student2.sex, ' ', student2.sum:5:1, ' ', student2.avg:5:1);
end.

运行结果:

zhaohb girl 294.5  98.2
liuq boy 281.0  93.7
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Janeb1018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值