绝大多数程序设计语言都预定义了一些基本数据类型,并相应定义了对那些类型的实例执行的操作。比如,对整型、实型等数值类型,有加、减、乘、除等操作,对逻辑类型,有逻辑与、逻辑或、逻辑非等操作。
对于用户自定义的复合数据类型,需要由程序员自已定义一些方法,对该类型的实例进行所需的操作。在早期许多程序设计语言中,复合数据类型及其相关操作的代码之间没有特殊的联系。比如,用户定义日期Date类型.并定义一个方法tomorrow(),它接收一个Date类型的参数,据此推断其后继日是哪一天。程序中定义变量的代码和tomorrow()方法的代码可以是分离的。
有些编程语言改进了这种处理方式,允许数据类型说明和欲对该类型变量进行操作的代码说明之间有较紧密的联系。通常把数据类型和对其进行的操作聚集在一起构成一种抽象数据类型。严格地说,抽象数据类型是指基于一个逻辑类型的数据类型以及这个类型上的一组操作。每一个操作由它的输入、输出定义。一个抽象数据类型的定义并不涉及它的实现细节,这些实现细节对于抽象数据类型的用户是隐藏的。
给出了Date类型和tomorrow操作之间建立的一种联系。
程序:
public ClaSS Date{ private int day,month,year; Date(int i.int j.int k){ day=i: month=j; year=k; } Date(){ day=1; month=m 1; year=1998; }
Date (Date d){ day=d.day; month=d.montht year=d.year; } public Date tomorrow(){ Date d=newDate(this); d.day++l if(d.day>d.daysInMonth()){ //d8yslnMonth()返回每个月中不同的天数 d.day=1; d.month++; if(d.month>12)f d.month=1: d.year++; } } return d; } } |
在中把名为tomorrow的代码段叫做方法,也可以称为成员函数。
在有些程序设计语言中,tomorrow()方法的定义或许会要求带一个参数,例如:
void tomorrow(Date d);
像这种支持抽象数据类型的语言在数据和操作间建立了较严格的联系,即把方法与数据封装在一个类中。在程序中不是把方法描述为对数据的操作,而是把数据看作是它知道如何修改自己,然后要求数据对它自己执行操作。相应的语句如下:
Data d=new Date(20,11,1998);//已初始化的date对象
d.tomorrow();
这种写法表明,数据自己执行操作,tomorrow()方法作用于变量d。要访问Date类的域,可使用点操作符“.”:
d.day
它的意思是“d所指的Date对象中的day域”。类似地,d.tomorrow()是指“d所指的Date对象中的tomorrow()方法调用”,epx,-J"d对象进行tomorrow操作。
把方法看作是数据的特性,而不把数据与方法分开,这种思想是建立面向对象系统过程中的重要步骤。
【责编:Ken】
--------------------next---------------------
阅读(356) | 评论(0) | 转发(0) |