使用对象

你可以使用列表将单独的数据项聚合为一个包。例如,你可以将 12 个月的销售值合并为一个名为 Sales 的数据项。这样你就可以将整个销售数据集作为单个项来处理。

Sales=[126,178,154,192,116,137,189,122,136,133,181,182];
Total Sales=sum(Sales);
Next Year Sales=Forecast(Sales);

虽然你可以在单个列表中混合数据类型,但通常使用列表来聚合单一类型的数据。如果你想合并表示单个项不同属性的不同类型数据,则应使用对象。

假设你想将关于单个客户的所有信息合并为一个包。该包可能包含客户姓名、地址、电话号码等信息。你可以将这些信息合并为一个名为 customer 的对象,并使用以下表示法访问各个数据项:

customer.name
customer.address
customer.phonenumber

对象类似于列表,不同之处在于各个元素通过名称而非索引号来访问。对象中的各个数据元素称为属性。

一旦将分散的数据合并为一个对象,你就可以将该对象作为单个数据项来处理。例如,假设你有一个客户对象数据库,你想向每位客户发送一封格式信函。你可以创建一个函数,以每个客户对象作为输入来构建信函:

Write Letter(customer):={
    var c= customer;
    append(dialogtemplate,"letters.txt");
}

// Write Letter form is defined as follows
<%date(1)%><%c.name%><%c.address%><%c.city%> <%c.state%>  <%c.zipcode%>Dear <%c.name%>:

I am writing to you because ...

在 Write Letter 函数内部,你可以访问 customer 对象的特定属性来填充表单字段。

对象不仅仅让你合并不同的数据项。对象还允许你将数据与作用于数据的函数组合在一起。这些函数作为对象中一种特殊类型的属性存储,称为方法。

例如,你可以创建一个名为 mailingaddress 的函数,它只是组合 customer 对象的属性,生成适合用于信函地址的文本块。现在,如果此函数是 customer 对象的一部分,你可以使用如下表达式调用该方法:

customer.mailingaddress()

将处理数据的函数与数据本身打包在一起,使你的代码模块化。这可以极大地简化某些类型应用程序的开发和维护。

假设你的客户数据库包含两种对象(国内客户和国际客户)。由于国际邮寄地址包含与国内地址不同的信息(例如,没有州和邮政编码),这两种对象类型具有不同的属性。这种差异会导致 Write Letter 函数失败。但是,如果两种对象类型都包含适合其特定对象类型的 mailingaddress 方法,你就可以创建一个更通用的 Write Letter 形式。

Write Letter(customer):={
    var c= customer;
    append(dialogtemplate,"letters.txt");
}

// Write Letter form is defined as follows
<%date(1)%><%c.mailingaddress()%>Dear <%c.name%>:

I am writing to you because ...

现在,无论传递给 Write Letter 的是哪种客户对象,都会构建出适当的邮寄地址。这之所以有效,是因为每个对象都知道如何构建自己的邮寄地址。此外,如果你想添加一种新的客户对象类型,你无需担心对象中的新字段会如何影响 Write Letter。你只需要知道新对象必须公开一个 name 属性和一个 mailingaddress 方法。