oop - 从 OOP 的角度来看,在接口(interface)中声明类型/属性是否正确?

标签 oop interface abap

在接口(interface)中定义类型是否正确?那么属性呢?

有些编程语言只允许接口(interface)的方法签名,但在 ABAP 中我正在考虑做类似下面的代码,甚至添加更多属性,我不确定该方法是否是正确的 OO 设计:

INTERFACE zif_notif_note.
  TYPES: BEGIN OF ty_note_id,
           notif_num    TYPE qmnum,
           activity_key TYPE aknum,
         END OF ty_note_id.
  DATA: id TYPE ty_note_id READ-ONLY.
  METHODS get_id
    RETURNING VALUE(r_id) TYPE ty_note_id.
 ENDINTERFACE.

如果我需要使用这个类型作为另一个类的输入参数怎么办?那我应该更好地定义 DDIC 结构吗?

最佳答案

关于您的第一个问题:没有什么可以反对在接口(interface)中定义类型。

第二个问题...

您可以在 ABAP OO 中完成许多在其他面向对象语言(如 Java 或 C++)中无法完成的事情。例如,你可以定义一个 FINAL ABSTRACT CLASS 这是无意义的,你可以在一个接口(interface)中定义静态方法 (CLASS-METHODS),在我看来这是对对象的异端面向编程。

我从来没有定义属性,除非它们是接口(interface)中的CONSTANT,因为没有理由这样做。它们将被自动标记为 PUBLIC,这实际上打破了封装原则。

所以答案是:这是可能的,但在这样做之前要三思而后行,因为它可能会破坏实现接口(interface)的类的封装。

关于oop - 从 OOP 的角度来看,在接口(interface)中声明类型/属性是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57395999/

相关文章:

json - 自定义 CL_SXML_STRING_WRITER 创建的 JSON

c++ - 做复合 C++ 时成员函数重载错误

abap - 检查itab2中是否存在itab1行?

python - 当通过组合关联对象时,使用什么模式来促进对象之间的通信

C#:通过显式指定接口(interface)来覆盖属性

interface - Racket:接口(interface)的前向声明

c# - 为包含 void* 参数的函数创建 SWIG C# 包装器

abap - 存储独立于客户端的程序参数的最佳方式是什么?

JavaScript:公共(public)、私有(private)、 protected

java - java OOP 中没有构造函数的后果