网站如何做流量赚钱,学电子商务有前途吗,婚庆公司网站怎么做,网站建设在哪些文章目录 第二十一章 ClassesClasses类名和包类定义的基本内容 第二十一章 Classes
Classes
类定义并不是 ObjectScript 的正式组成部分。相反#xff0c;可以在类定义的特定部分中使用 ObjectScript#xff08;特别是在方法定义中#xff0c;可以在其中使用其他实现语言可以在类定义的特定部分中使用 ObjectScript特别是在方法定义中可以在其中使用其他实现语言。
类名和包
每个 IRIS 类都有一个名称该名称在定义它的命名空间中必须是唯一的。完整的类名是由一个或多个句点分隔的字符串如以下示例所示package.subpackage.subpackage.class。短类名是该字符串中最后一个句点之后的部分最后一个句点之前的部分是包名称。
包名称只是一个字符串但如果它包含句点IRIS 开发工具会将每个句点分隔的部分视为子包。为了方便起见集成开发环境 (IDE) 和其他工具将这些子包显示为文件夹层次结构。
类定义的基本内容
IRIS 类定义可以包括以下项目全部称为类成员
Methods方法——有两种方法实例方法和类方法在其他语言中称为静态方法。在大多数情况下方法是子例程subroutine。Parameters 参数 — 参数定义供此类使用的常量值。该值是在编译时设置的。Properties 属性——属性包含类实例的数据。Class queries 类查询 — 类查询定义可由该类使用的 SQL 查询并指定用作查询容器的类。XData blocks— XData 块是类中格式良好的 XML 文档供类使用。仅与持久类相关的其他类型的类成员。
IRIS 类定义使用类定义语言 (CDL) 来指定类及其成员。可以使用 Python 或 ObjectScript 在方法内部编写可执行代码。
类定义可以包含关键字这些会影响类编译器的行为。可以为整个类指定一些关键字为特定类成员指定其他关键字。这些关键字影响类编译器生成的代码从而控制类的行为。
下面显示了一个简单的 IRIS 类定义其中包含用 ObjectScript 和 Python 编写的方法
Class MyApp.Main.SampleClass Extends %RegisteredObject
{Parameter CONSTANTMESSAGE [Internal] Hello world! ;Property VariableMessage As %String [ InitialExpression How are you?];Property MessageCount As %Numeric [Required];ClassMethod HelloWorld() As %String [ Language objectscript ]{Set x..#CONSTANTMESSAGEReturn x}Method WriteIt() [ Language objectscript, ServerOnly 1]
{Set count..MessageCountFor i1:1:count {Write !,..#CONSTANTMESSAGE, ,..VariableMessage}}}Class MyApp.Main.SampleClass Extends %RegisteredObject
{Parameter CONSTANTMESSAGE [Internal] Hello world! ;Property VariableMessage As %String [ InitialExpression How are you?];Property MessageCount As %Numeric [Required];ClassMethod MessageWrapper() As %String [ Language objectscript ]
{return ..#CONSTANTMESSAGE
}ClassMethod HelloWorld() As %String [ Language python ]{import irisx iris.cls(MyApp.Main.SampleClass).MessageWrapper()return x}Method WriteIt() [ ServerOnly 1, Language python ]
{import irisCONSTANTMESSAGE self.MessageWrapper()count self.MessageCountprint()for i in range(count):print(CONSTANTMESSAGE, self.VariableMessage)
}}
请注意以下几点
第一行给出了类的名称。 MyApp.Main.SampleClass 是完整类名MyApp.Main 是包名SampleClass 是短类名。
IDE 和其他用户界面将每个包视为一个文件夹。
Extends 是编译器关键字。
Extends 关键字指定该类是中 %RegisteredObject 的子类该类是为对象支持提供的系统类。此示例类仅扩展一个类但可以扩展多个其他类。这些类又可以扩展其他类。
CONSTANTMESSAGE 是一个参数。按照惯例IRIS 系统类中的所有参数的名称全部大写。这是一个方便的约定但不需要遵循它。
Internal 关键字是编译器关键字。它将这个参数标记为内部参数从而禁止它在类文档中显示。该参数有一个字符串值。
必须通过 ObjectScript 访问类参数。在此类的 Python 版本中我们使用 ObjectScript 类方法 MessageWrapper() 返回参数的值。
可以从 Python 访问任何类方法。可以在所有上下文中使用 iris.cls(Package.Class).classMethodName() 语法并在 Python 实例方法中使用 self.classMethodName() 语法。该示例显示了两种语法形式。VariableMessage 和 MessageCount 是属性。 As 后面的项目指示这些属性的类型。 InitialExpression 和Required 是编译器关键字。
可以直接从 ObjectScript 或 Python 访问 IRIS 类属性如示例中所示。
HelloWorld() 是一个类方法它返回一个字符串这由 As 后面的项目表示。
此方法使用类参数的值。
WriteIt() 是一个实例方法它不返回值。
此方法使用类参数的值和两个属性的值。
ServerOnly 编译器关键字意味着该方法不会投射到外部客户端。
以下终端会话显示了我们如何使用此类。两个终端 shell 对于该类的 ObjectScript 和 Python 版本均有效。
TESTNAMESPACEwrite ##class(MyApp.Main.SampleClass).HelloWorld()
Hello world!
TESTNAMESPACEset x##class(MyApp.Main.SampleClass).%New()TESTNAMESPACEset x.MessageCount3TESTNAMESPACEdo x.WriteIt()Hello world! How are you?
Hello world! How are you?
Hello world! How are you?print(iris.cls(MyApp.Main.SampleClass).HelloWorld())
Hello world!xiris.cls(MyApp.Main.SampleClass)._New()x.MessageCount3x.WriteIt()Hello world! How are you?
Hello world! How are you?
Hello world! How are you?