Written by

System Analyst at First Line Software
Question Flávio Lúcio Naves Júnior · May 6, 2021

Interface using Caché

Hello everyone,

I have a doubt, its possible to use interface like C# using COS? 
Remember, interface is different from Abstract Class, because a abstract class can implement code in the method, so I don't want this, I want only define the methods from Class, not allowing implement code.

Description of C# interface: An interface defines a contract. Any class or struct that implements that contract must provide an implementation of the members defined in the interface. Beginning with C# 8.0, an interface may define a default implementation for members.  

Link: interface - C# Reference | Microsoft Docs
 

Product version: IRIS 2020.1

Comments

Dmitry Maslennikov · May 7, 2021

ObjectScript does not have such thing as an Interface.  The only way to get something like this is to use Abstract class, with methods that throw an error, while not overridden.

0
Dmitry Maslennikov  Oct 7, 2021 to Rodolfo Moreira dos Santos

Well, there are few ways to do it. Look at the description to methods

Class Abstract.Test [ Abstract ]
{

/// Will return status with error, if the method not implemented
ClassMethod DoAction(pActionName) As %Status
{
  Quit $$$ERROR($$$GeneralError, "DoAction not implemented by " _ ..%ClassName(1))
}

/// Will throw an exception when method called, while not implemented 
ClassMethod DoCall(pActionName)
{
  Throw ##class(%Exception.General).%New("DoCall not implemented by " _ ..%ClassName(1))
}

/// Will not allow to compile descendants without implementing the method
ClassMethod AnotherAction(pActionName) As %Status [ CodeMode = objectgenerator ]
{
  If ('%class.Abstract) {
    Quit $$$ERROR($$$GeneralError, %method.Name _ " not implemented by " _ %classname)
  }
  Quit $$$OK
}

ClassMethod TestCall()
{
  Try {
    Set tSC = ..DoAction()
    If $$$ISERR(tSC) {
      Do $System.OBJ.DisplayError(tSC)
    }
    Do ..DoCall()
  }
  Catch ex {
    Write !,"Caught exception of type: ",ex.%ClassName(1)
    Write !,"Message: ",ex.DisplayString()
  }
}

}
0
Jean Cruz · Nov 17, 2022

I believe it doesn't. The interfaces are used as a palliative for the lack of multiple inheritance that the COS has.

0