0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Objects:为对象类提供对象技术

科技绿洲 来源:网络整理 作者:网络整理 2023-09-20 14:14 次阅读

Objects

对象类简介

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

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

图片

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

  • 注册对象是 %RegisteredObject 或其子类的实例。可以创建这些对象,但无法保存它们。另外两个类继承自 %RegisteredObject,因此包含该类的所有参数、方法等。
  • 持久对象是 %Persistent 的实例或子类。可以创建、保存、打开和删除这些对象。

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

  • 串行对象是 %SerialObject 或其子类的实例。串行类旨在用作另一个对象的属性。可以创建这些对象,但不能独立于包含它们的对象来保存或打开它们。

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

对象类的基本特征

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

  • 可以创建一个对象(类的实例)。为此,可以使用该类的 %New() 方法,该方法继承自 %RegisteredObject
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()
  • 可以验证属性值是否符合属性定义中给出的规则
    • 所有对象都继承实例方法 %NormalizeObject(),该方法规范化所有对象的属性值。许多数据类型允许相同值的不同表示。标准化将值转换为其规范或标准化形式。 %NormalizeObject() 根据此操作是否成功返回 truefalse
    • 所有对象都继承实例方法 %ValidateObject(),该方法根据属性值是否符合属性定义返回 truefalse
    • 所有持久对象都继承实例方法%Save()。当使用%Save()实例方法时,系统会首先自动调用%ValidateObject()

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

  • 可以定义回调方法,以在创建、修改对象等时添加其他自定义行为。

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 参数
    +关注

    关注

    11

    文章

    1832

    浏览量

    32204
  • SQL
    SQL
    +关注

    关注

    1

    文章

    763

    浏览量

    44125
  • 应用程序
    +关注

    关注

    37

    文章

    3268

    浏览量

    57698
收藏 人收藏

    评论

    相关推荐

    求教关于“对象”方面编程的问题

    请求各位前辈指点关于“matlab生成对象”的问题。因为我初学matlab,所以按照参考书上的内容,在创建了@polynom的目录后,编写完程序后,执行不出来,总是提示“??? Error
    发表于 05-19 13:37

    关于LabVIEW 及其对象使用的疑问

    各位大神,我一直有个关于LabVIEW中使用的问题。。。。当我建好一个之后,直接将其拖到一个VI的程序框图中,相当于一个对象,在这个VI中我可以随便操作这个
    发表于 11-23 22:20

    如何使用“SR300”找到多个对象

    我想找几个对象。所以我实际上使用“The Metaio工具箱”找到了一个3D对象。但是,找到未被充分识别的多个对象存在问题。如何使用“SR300”找到多个对象?以上来自于谷歌翻译以下为
    发表于 10-12 11:52

    没有Xdm对象Spartan 6与ISE 12.2的组错误

    对象,带引用:INTERNAL_ERROR:Pack:pk***atsdesign.c:1344 :1.42- 没有用于组TNM = Data_Out_Grp的Xdm对象,带有引用
    发表于 05-23 09:03

    重置所有用户对象和用户功能的TitleBackColor

    大家好,我想在我的VEE程序中重置所有用户对象/用户功能的标题背面颜色,因为不同的颜色用于相同类型的对象。如果这不可能,那就好了,如果我可以将程序内所有对象的颜色重置默认设置。我将不
    发表于 06-13 09:32

    LabVIEW面向对象的ActorFramework(1)

    领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。 面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织
    发表于 02-10 14:09

    谈谈面向对象编程

    在工业自动化领域,梯形图逻辑仍然是最常用的编程语言之一,但对于更加复杂的控制对象,面向对象编程不失一种高效率的方式。下面先来谈谈面向对象编程:面向
    发表于 09-08 07:47

    Java对象程序设计基础

    Java对象程序设计基础 一、实验目的:      通过编制一个独立应用程序,使得学生掌握Java的系统所提供的引用方法;通过编制一个
    发表于 12-05 23:55 2805次阅读

    对象_实验2

    c++面向对象课程实验指导书题目_对象
    发表于 01-14 16:24 0次下载

    如何利用Python Remote objects技术实现分布式对象应用系统

    讨论了如何利用Python Remote objects技术来设计与实现分布式对象应用系统!详细阐述了其技术特点及系统架构“并结合实例重点探讨了基于Python Remote
    发表于 01-22 15:54 1次下载
    如何利用Python Remote ob<x>jects<b class='flag-5'>技术</b>实现分布式<b class='flag-5'>对象</b>应用系统

    Chisel(三) Scala语法 对象

    在Scala中,是使用关键字“class”开头的代码定义的,定义完成之后,就可以“new 名”的方式来构造一个对象,而这个对象的类型就
    的头像 发表于 08-19 23:29 2175次阅读

    Java实验:对象的扩展

    Java实验:对象的扩展
    发表于 07-08 15:36 20次下载
    Java实验:<b class='flag-5'>类</b>和<b class='flag-5'>对象</b>的扩展

    什么是不可变对象 不可变对象存储可以抵御哪些威胁

    新建的对象。 基本数据类型的包装以及String对象都是不可变对象。 不可变对象和可变
    的头像 发表于 09-19 11:44 2562次阅读

    对象是什么?

    前面讲的面向过程和面向对象,大家都有了基本的了解,也用struct定义了,那么接下来咱们就用C++提供的另一个关键字class来定义,同样的我们还是使用前面的学生结构,首先直接把s
    的头像 发表于 02-27 15:36 559次阅读
    <b class='flag-5'>类</b>和<b class='flag-5'>对象</b>是什么?

    Python中的对象详解

    Python 是一种面向对象的编程语言,它支持对象是一种用户自定义的数据类型,用于定义对象的属性和方法。
    的头像 发表于 04-20 16:53 1135次阅读