第二十一章 Classes

文章目录

  • 第二十一章 Classes
  • Classes
  • 类名和包
  • 类定义的基本内容

第二十一章 Classes

Classes

类定义并不是 ObjectScript 的正式组成部分。相反,可以在类定义的特定部分中使用 ObjectScript(特别是在方法定义中,可以在其中使用其他实现语言)。

类名和包

每个 IRIS 类都有一个名称,该名称在定义它的命名空间中必须是唯一的。完整的类名是由一个或多个句点分隔的字符串,如以下示例所示:package.subpackage.subpackage.class。短类名是该字符串中最后一个句点之后的部分;最后一个句点之前的部分是包名称。

包名称只是一个字符串,但如果它包含句点,IRIS 开发工具会将每个句点分隔的部分视为子包。为了方便起见,集成开发环境 (IDE) 和其他工具将这些子包显示为文件夹层次结构。

类定义的基本内容

IRIS 类定义可以包括以下项目,全部称为类成员:

  • Methods方法——有两种方法:实例方法和类方法(在其他语言中称为静态方法)。在大多数情况下,方法是子例程subroutine
  • Parameters 参数 — 参数定义供此类使用的常量值。该值是在编译时设置的。
  • Properties 属性——属性包含类实例的数据。
  • Class queries 类查询 — 类查询定义可由该类使用的 SQL 查询,并指定用作查询容器的类。
  • XData blocksXData 块是类中格式良好的 XML 文档,供类使用。
  • 仅与持久类相关的其他类型的类成员。

IRIS 类定义使用类定义语言 (CDL) 来指定类及其成员。可以使用 PythonObjectScript 在方法内部编写可执行代码。

类定义可以包含关键字;这些会影响类编译器的行为。可以为整个类指定一些关键字,为特定类成员指定其他关键字。这些关键字影响类编译器生成的代码,从而控制类的行为。

下面显示了一个简单的 IRIS 类定义,其中包含用 ObjectScriptPython 编写的方法:

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 i=1: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() 语法。该示例显示了两种语法形式。
  • VariableMessageMessageCount 是属性。 As 后面的项目指示这些属性的类型。 InitialExpressionRequired 是编译器关键字。

可以直接从 ObjectScriptPython 访问 IRIS 类属性,如示例中所示。

  • HelloWorld() 是一个类方法,它返回一个字符串;这由 As 后面的项目表示。

此方法使用类参数的值。

  • WriteIt() 是一个实例方法,它不返回值。

此方法使用类参数的值和两个属性的值。

ServerOnly 编译器关键字意味着该方法不会投射到外部客户端。

以下终端会话显示了我们如何使用此类。两个终端 shell 对于该类的 ObjectScriptPython 版本均有效。

TESTNAMESPACE>write ##class(MyApp.Main.SampleClass).HelloWorld()
Hello world!
TESTNAMESPACE>set x=##class(MyApp.Main.SampleClass).%New()TESTNAMESPACE>set x.MessageCount=3TESTNAMESPACE>do 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!
>>> x=iris.cls("MyApp.Main.SampleClass")._New()
>>> x.MessageCount=3
>>> x.WriteIt()Hello world! How are you?
Hello world! How are you?
Hello world! How are you?

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

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

相关文章

vue 项目代码混淆配置(自定义插件适用)带配置项注释

文章目录 vue 项目代码混淆配置(自定义插件适用)带配置项注释一、概要二、混淆步骤1. 引入混淆插件2. 添加混淆配置3. 执行代码混淆 vue 项目代码混淆配置(自定义插件适用)带配置项注释 一、概要 本文章适用 vue-cli3/webpack4 …

企业架构LNMP学习笔记41

企业架构缓存中间件分布式memcached: 学习目标和内容: 能够理解描述网站业务访问流程 能够理解网站业务的优化方向 能够描述内存缓存软件Memcached的作用 能够通过命令操作Memcached 能够安装php的memcached扩展extension 能够实现session存储到m…

拥有十亿美元的财富,靠外汇交易发家,还与查尔斯王子是知交

Urs Schwarzenbach(乌尔斯施瓦岑巴赫)是英国上流社会最有钱的亿万富豪之一。他曾经轰动一时的专业交易员这个身份,已经越来越少被提起。如今你问很多外汇交易者,他们可能都会摇头称不知道这个人吧。 如果提到瑞士最大的传统货币兑…

时序分解 | MATLAB实现基于SSA奇异谱分析的信号分解分量可视化

时序分解 | MATLAB实现基于LMD局部均值分解的信号分解分量可视化 目录 时序分解 | MATLAB实现基于LMD局部均值分解的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 奇异谱分解奇异谱分析SSA 可直接替换txt数据运行 Matlab 1.包含3D分解效果图 频谱图等…

Linux UDP编程流程

文章目录 UDP编程流程UDP协议无连接的特点UDP协议数据报的特点 UDP编程流程 UDP 提供的是无连接、不可靠的、数据报服务。服务器端和客户端没有什么本质上的区别。编程流程如下: socket()用来创建套接字,使用 udp 协议时,选择数据报服务 SOC…

Spring基础(2w字---学习总结版)

目录 一、Spirng概括 1、什么是Spring 2、什么是容器 3、什么是IoC 4、模拟实现IoC 4.1、传统的对象创建开发 5、理解IoC容器 6、DI概括 二、创建Spring项目 1、创建spring项目 2、Bean对象 2.1、创建Bean对象 2.2、存储Bean对象(将Bean对象注册到容器…

IMU+摄像头实现无标记运动捕捉

惯性传感和计算机视觉的进步为在临床和自然环境中获得精准数据带来了新可能。然而在临床应用时需要仔细地将传感器与身体对齐,这减慢了数据收集过程。 随着无标记运动捕捉的发展,研究者们提出了一个新的深度学习模型,利用来自视觉、惯性传感…

金和OA GetSqlData.aspx 远程命令执行漏洞

一、漏洞简介 金和OA协同办公管理系统C6软件共有20多个应用模块,160多个应用子模块,涉及的企业管理业务包括协同办公管理、人力资源管理、项目管理、客户关系管理、企业目标管理、费用管理等多个业务范围,从功能型的协同办公平台上升到管理型协同管理平台,并不断的更新完善…

每日刷题-5

目录 一、选择题 二、算法题 1、不要二 2、把字符串转换成整数 一、选择题 1、 解析:printf(格式化串,参数1,参数2,.….),格式化串: printf第一个参数之后的参数要按照什么格式打印,比如%d--->按照整形方式打印&am…

2023备战秋招Java面试八股文合集

Java就业大环境仍然根基稳定,市场上有很多机会,技术好的人前景就好,就看你有多大本事了。小编得到了一份很不错的资源,建议大家可以认真地来看看以下的资料,来提升一下自己的核心竞争力,在面试中轻松应对面…

HTTPS协议

文章目录 HTTPS协议1. HTTPS协议介绍2. 概念准备2.1 什么是"加密"2.2 为什么要加密2.3 常见的加密方式(1) 对称加密(2) 非对称加密 2.4 数据摘要 && 数据指纹(1) 应用场景 3. HTTPS理解链3.1 方案 1 - 只使用对称加密3.2 方案 2 - 只使用非对称加密3.3 方案 …

(详解)Vue自定义指令

一、背景 在我们日常开发中,会遇到特殊的操作例如,图片懒加载,和类似v-model等等这样的自定义指令 二、提前预习(必看) 自定义指令跟组件一样,也是有生命周期的,我们的操作都是定义在对应的生命…

SeaArt.ai: 海艺AI绘画艺术图片模型创作平台

【产品介绍】 • 名称 SeaArt.ai • 具体描述 SeaArt.ai是一个基于人工智能技术的AI绘画工具,它可以根据你的描述或者关键词来生成符合你想象的图片。你可以选择不同的模式来创建不同类型的图片,比如人物、风景、建筑、神话、自…

投稿指南【NO.12_8】【极易投中】核心期刊投稿(组合机床与自动化加工技术)

近期有不少同学咨询投稿期刊的问题,大部分院校的研究生都有发学术论文的要求,少部分要求高的甚至需要SCI或者多篇核心期刊论文才可以毕业,但是核心期刊要求论文质量高且审稿周期长,所以本博客梳理一些计算机特别是人工智能相关的期…

Swift 新并发模型中 isolated 和 nonisolated 关键字的含义看这篇就懂了!

概览 在 Swift 新 async/await 并发模型中,我们可以利用 Actor 来避免并发同步时的数据竞争,并从语义上简化代码。 Actor 伴随着两个独特关键字:isolated 和 nonisolated,弄懂它们的含义、合理合规的使用它们是完美实现同步的必…

SpringMVC文件的上传下载JRebel的使用

目录 前言 一、JRebel的使用 1.IDea内安装插件 2.激活 3.离线使用 使用JRebel的优势 二、文件上传与下载 1 .导入pom依赖 2.配置文件上传解析器 3.数据表 4.配置文件 5.前端jsp页面 6.controller层 7.测试结果 前言 当涉及到Web应用程序的开发时&…

只依赖OPENCV的工作服安全帽检测YOLOV8S

工地安全帽工作服检测Y8S,采用YOLOV8S训练模型,然后使用OPENCV的DNN调用,彻底拜托PYTORCH依赖,可以在C,PYTHON,ANDROID上跑。附件是C生成的效果测试(只需解压将图片或者视频放入VIDEOS文件夹,文件夹没图片或…

【UE 材质】制作飘动的旗帜

效果 步骤 1. 首先在建模软件中创建一个平面,注意分段数一定要多 2. 在UE中创建一个材质,这里命名为“Mat_Flag” 打开“Mat_Flag”,先将旗帜纹理连接到基础颜色 先选中导入的模型然后点击根据选中的模型预览材质 创建如下节点可以看到此时模…

如何让报表会说话?学会这一招就可以了

Smartbi电子表格软件进化到全新阶段,这轮更新最能吸引人的地方是什么呢?跟随小麦一起来感受下。 1、新增语音播放特性,让报表会说话 Smartbi电子表格软件最新上线超级实用的新特性——语音播报,即让报表自己开口说话~ 设想你打开…

matplotlib绘图

🐳 我正在和鲸社区参加“商业数据分析训练营活动” https://www.heywhale.com/home/competition/6487de6649463ee38dbaf58b ,以下是我的学习笔记: 学习主题:matplotlib绘图 日期:2023.9.13 关键概念/知识点&#xf…