第三十二章 Objects

news2024/11/17 11:28:36

[toc]

第三十二章 Objects

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文件来执行日志记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1025597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vite + Vue3 使用cdn引入依赖 vite cdn vue3 cdn vite引入cdn

Vite Vue3 使用cdn引入依赖 vite cdn vue3 cdn vite引入cdn 1、安装插件2、在 vite.config.js 引用3、main.js4、打包测试 1、安装插件 npm install element-plus --save2、在 vite.config.js 引用 import { defineConfig } from vite import vue from vitejs/plugin-vue// …

用开源代码构建机器人需要考虑的问题

导读或许你正在考虑(或正在进行)将机器人使用开源软件推向市场。这个机器人是基于 linux 构建的。也许你正在使用机器人操作系统(ROS)或任务导向操作套件(MOOS),或者是另外一个可以帮助你简化开…

007 数据结构_堆——“C”

前言 本文将会向您介绍关于堆Heap的实现 具体步骤 tips:本文具体步骤的顺序并不是源代码的顺序 typedef int HPDataType; typedef struct Heap {HPDataType* _a;int _size;int _capacity; }Heap;初始化 void HeapCreate(Heap* hp, HPDataType* a, int n) {hp-&…

AT32F407裸机工程创建

1、建立工程文件夹 2、找到AT提供DEMO例程,我们需要复制相关的内核文件出来,到我们创建的这个文件夹 1)将库文件拿过来 2)内核文件 3)启动文件 我把F407相关的内核文件都复制过来,然后具体看自己使用哪个型号,工程自己添加对应的文…

避雷!这9本期刊已被剔除!9月SCI/SSCI目录已更新(附2023年WOS历次更新全目录)

2023年9月20日,科睿唯安更新了Web of Science核心期刊目录。 此次更新后SCIE期刊目录共包含9490本期刊,SSCI期刊目录共包含3552本期刊。此次SCIE & SSCI期刊目录更新,与上次更新(2023年8月)相比,共有9本…

共育电商人才,引领行业发展丨知了汇智与协作时代达成战略合作

随着新一轮科技革命和产业革命的深入发展,数字经济正在成为重塑全球经济结构、改变全球竞争格局的关键力量,数字经济与实体经济的深度融合,也将是未来经济发展的重要动力。数字经济的发展正在催生电子商务模式不断创新,新业态下企…

安防监控系统/视频云存储/视频监控平台EasyCVR无法级联上级平台,该如何解决?

安防视频监控系统EasyCVR平台能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也…

《动手学深度学习》(pytorch版+mxnet版)2023最新

我又来推书了,这次分享的这本书可是重量级,目前已经被55个国家300所大学用于教学,同时受到了学术界与工业界的强烈推荐。 这本书就是李沐、阿斯顿张、立顿、斯莫拉四位大佬联合编写的《动手学深度学习》。本书面向中文读者,能运行…

第二十四章 原理篇:DBB

上班真的好累哦! 理论上应该从RepVGG开始写重参化的,而且上星期就打算写来着! 但是上班真的好累哦完全提不起精神在周末打字看论文! 参考教程: https://arxiv.org/pdf/2103.13425.pdf https://github.com/DingXiaoH/D…

自己实现一个简单的vhost-net

框架 vhost在网络中的位置如图&#xff1a; 要学习具体的框架可以看我之前的文章vhost-net--------深入了解Virtio-networking和vhost-net 接下来&#xff0c;我们自己实现一个vhost. vhost-net代码 在代码中写了详细注释&#xff0c;就直接上代码了 #include <stdio.h…

期权是什么?一分钟带你玩转期权策略!

很多人问我期权是什么&#xff0c;这个问题怎么回答呢&#xff1f;首先期权是一种交易模式&#xff0c;如同股票期货一样&#xff0c;但它又不同于股票和期货&#xff0c;因为它有自己的交易规则和特性&#xff0c;期权更多是一种工具&#xff0c;可以做空大盘对冲下跌风险&…

0018Java程序设计-springboot智慧环卫养管作业平台

文章目录 摘 要目 录系统设计开发环境 摘 要 本智慧环卫养管作业平台就是建立在充分利用现在完善科技技术这个理念基础之上&#xff0c;并使用IT技术进行对环卫养管作业的管理&#xff0c;从而保证环卫养管作业能够高效的进行&#xff0c;可以实现环卫养管作业的在线管理&…

健康云HIS系统源码,满足基层医疗机构业务需求,提供挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等功能

云his系统源码 二级医院HIS系统全套源代码 自主研发&#xff0c;自主版权 一款满足基层医疗机构各类业务需要的健康云HIS系统。该系统能帮助基层医疗机构完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一…

wabp.m 代码注释(便于算法快速理解)

算法效果: 波峰和起点检测效果: function [r,pk] = wabp(Araw, Offset,Scale, Fs) % r = wabp(Araw,Offset,Scale, Fs); % Input: Araw (125Hz sampled) waveform in wfdb-MIT format, % Offset, Scale % Araw = 血压波形 % Offset=偏移(信号减去或者加上偏移恢复成…

启山智软/O2O商城

文章目录 启山智软介绍一、O2O商业模式是什么二、启山智软O2O商城管理系统1.O2O商城系统2.多种商业形态的O2O商城系统1、类似蜜雪冰城的合作加盟模式2、类似优衣库的连锁直营模式3、类似京东到家的同城/本地服务平台 O2O商城开发具备的特色功能&#xff1a;部分源码分享 启山智…

MTBF、MTTR、MTTA 和 MTTF

了解一些最常见的事件指标 在当今永不停机的世界中&#xff0c;中断和技术事件比以往任何时候都更加重要。故障和停机期间会带来现实后果&#xff0c;错过截止时间、付款逾期、项目延迟。 这就是为什么公司必须量化和跟踪有关正常运行时间、停机期间以及团队解决问题的速度和…

改变latex单张页面宽度的正确做法

https://tex.stackexchange.com/questions/6834/change-paper-size-in-mid-document#comment115838_6838 首先注意&#xff0c;网上所有有关newgeometry的说明都是不可行的&#xff0c;因为 画红圈的地方大家自行阅读&#xff0c;这就是原因。 其次&#xff0c;更改页面宽度的…

一、Vuex相关概念和使用

目录 Vuex的概念核心概念Vuex 的使用场景1、组件之间的数据共享2、复杂状态的管理3、异步操作的处理 Vuex的概念 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化…

数据研发“新人”如何快速落地?

作者&#xff1a;肖迪(墨诩) 一、前言 这个季度主推安全月构筑&夯实稳定性底盘&#xff0c;就组织了组里的同学对核心业务链路进行了稳定性的摸排。在摸排过程中&#xff0c;不断有个声音在问你摸排出来的问题就是全部问题么&#xff1f;你加的监控加全了么&#xff1f;你…

【Git】一个完整的git项目之代码管理

1.版本库初始化 1.1 git clone 这是一种较为简单的初始化方式&#xff0c;当项目已经有了一个远程的Git版本库&#xff0c;只需在本地克隆一份代码。如&#xff1a; git clone http://192.168.x.x/github.com/someone/some_project.git some_project 上面的命令是将 htt…