为什么ABAP要把类分成实现和定义?
Why does ABAP divide classes into implementation and definition?
我知道 ABAP 对象有点旧,但据我所知,您仍然必须至少使用两个 "sections" 才能创建完整的 class。
ABAP:
CLASS CL_MYCLASS DEFINITION.
PUBLIC SECTION.
...
PROTECTED SECTION.
...
PRIVATE SECTION.
...
ENDCLASS.
CLASS CL_MYCLASS IMPLEMENTATION.
...
ENDCLASS.
Java:
public class MyClass {
<visibility> <definition> {
<implementation>
}
}
它不会像大多数现代语言那样通过将两者结合来促进发展easier/faster吗?
这次分开的原因是什么?
Easier/faster 对于人类(可能),但对于编译器来说代价高昂:它必须筛选整个代码以确定 class 及其成员的结构,而在当前形式,它只需要编译定义来确定引用是否有效。 ABAP 不是唯一将定义与实现分开的语言:Pascal did so for units, and Object Pascal for classes。有人可能会争辩说,当您不使用内联成员函数声明时,C++ 允许在不指定实现部分的情况下使用相同的构造。
可能还有其他原因:
大多数 (?) 类 不是用手动编写的代码定义的,而是通过 SE24 定义的。在一个 dynpro 中定义接口并在另一个 dynpro 中编写代码。
在内部,接口存储在一个源中,代码存储在另一个源中。所以分离接口和实现是合理的。
我知道 ABAP 对象有点旧,但据我所知,您仍然必须至少使用两个 "sections" 才能创建完整的 class。
ABAP:
CLASS CL_MYCLASS DEFINITION.
PUBLIC SECTION.
...
PROTECTED SECTION.
...
PRIVATE SECTION.
...
ENDCLASS.
CLASS CL_MYCLASS IMPLEMENTATION.
...
ENDCLASS.
Java:
public class MyClass {
<visibility> <definition> {
<implementation>
}
}
它不会像大多数现代语言那样通过将两者结合来促进发展easier/faster吗?
这次分开的原因是什么?
Easier/faster 对于人类(可能),但对于编译器来说代价高昂:它必须筛选整个代码以确定 class 及其成员的结构,而在当前形式,它只需要编译定义来确定引用是否有效。 ABAP 不是唯一将定义与实现分开的语言:Pascal did so for units, and Object Pascal for classes。有人可能会争辩说,当您不使用内联成员函数声明时,C++ 允许在不指定实现部分的情况下使用相同的构造。
可能还有其他原因:
大多数 (?) 类 不是用手动编写的代码定义的,而是通过 SE24 定义的。在一个 dynpro 中定义接口并在另一个 dynpro 中编写代码。
在内部,接口存储在一个源中,代码存储在另一个源中。所以分离接口和实现是合理的。