第三十二章 Objects

2023-09-19  本文已影响0人  Cache技术分享

第三十二章 Objects

Objects

对象类简介

IRIS 通过以下对象类提供对象技术: %Library.RegisteredObject%Library.Persistent %Library.SerialObject

下图展示了这些类之间的继承关系,以及它们的一些参数和方法。 %Library 包的类名称可以缩写,因此(例如) %Persistent%Library.Persistent 的缩写。这里,全部大写的项目是参数,以百分号开头的项目是方法。

image.png

在典型的基于类的应用程序中,可以根据这些类(以及专门的系统子类)定义类。所有对象都直接或间接继承自这些类之一,并且每个对象都是以下类型之一:

持久类会自动映射到可以通过 SQL 访问的表。

注意:通过类 %DynamicObject%DynamicArrayIRIS 还提供了处理没有模式的对象和数组的能力。

对象类的基本特征

通过对象类,可以执行以下任务:

 set myobj=##class(Sample.Person).%New()
myobj = iris.cls("Sample.Person")._New()

Python 方法名称不能包含百分号 (%)。可以通过将 Python 中的 % 字符替换为下划线 (_) 来调用任何包含 % 字符的 ObjectScript 方法,如示例中所示。

可以在任何类中定义属性,但它们仅在对象类中有用,因为只有这些类允许创建实例。

任何属性都包含单个文字值、对象(可能是集合对象)或多维数组(罕见)。以下示例显示了对象值属性的定义:

Property Home As Sample.Address;

Sample.Address 是另一个类。下面显示了设置 Home 属性值的一种方法:

 Set myaddress=##class(Sample.Address).%New()
 Set myaddress.City="Louisville"
 Set myaddress.Street="15 Winding Way"
 Set myaddress.State="Georgia"

 Set myperson=##class(Sample.Person).%New()
 Set myperson.Home=myaddress
import iris
myaddress=iris.cls("Sample.Address")._New()
myaddress.City="Louisville"
myaddress.Street="15 Winding Way"
myaddress.State="Georgia"

myperson=iris.cls("Sample.Person")._New()
myperson.Home=myaddress
Method PrintPerson() [ Language = objectscript ]
{
 Write !, "Name: ", ..Name
}
Method PrintPerson() [ Language = objectscript ]
{
 Write !, "Name: ", ..Name
}

如果 myobj 是定义此方法的类的实例,则可以按如下方式调用此方法:

 Do myobj.PrintPerson()
myobj.PrintPerson()

相反,当在例程级别工作并且不使用类时,代码必须包含用于检查类型和其他输入要求的逻辑。

例如,要创建类的实例,可以调用该类的 %New() 方法。如果该类定义了 %OnNew() 方法(回调方法),则 IRIS 也会自动调用该方法。下面展示了一个简单的例子:

Method %OnNew() As %Status 
{
    Write "hi there"
    Return $$$OK
}
Method %OnNew() As %Status [ Language = python ]
{
    print("hi there")
    return True
}

在实际场景中,此回调可能会执行一些所需的初始化。它还可以通过写入文件或global文件来执行日志记录。

上一篇下一篇

猜你喜欢

热点阅读