Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 为什么ABAP将类分为实现类和定义类?_Oop_Abap - Fatal编程技术网

Oop 为什么ABAP将类分为实现类和定义类?

Oop 为什么ABAP将类分为实现类和定义类?,oop,abap,Oop,Abap,我知道ABAP对象有点旧,但据我所知,您仍然必须使用至少两个“部分”来创建一个完整的类 ABAP: 爪哇: 公共类MyClass{ { } } 如果像大多数现代语言一样将两者结合起来,难道不会使开发更容易/更快吗 这种分离的原因是什么?对人类来说更容易/更快(可能),但对编译器来说代价高昂:它必须筛选整个代码以确定类及其成员的结构,而在当前形式下,它只需要编译定义以确定引用是否有效。ABAP并不是唯一一种将定义和实现分开的语言:它对单元和类都是如此。有人可能会说,C++在不使用内联成员函数声明

我知道ABAP对象有点旧,但据我所知,您仍然必须使用至少两个“部分”来创建一个完整的类

ABAP:

爪哇:

公共类MyClass{
{
}
}
如果像大多数现代语言一样将两者结合起来,难道不会使开发更容易/更快吗


这种分离的原因是什么?

对人类来说更容易/更快(可能),但对编译器来说代价高昂:它必须筛选整个代码以确定类及其成员的结构,而在当前形式下,它只需要编译定义以确定引用是否有效。ABAP并不是唯一一种将定义和实现分开的语言:它对单元和类都是如此。有人可能会说,C++在不使用内联成员函数声明的情况下允许不指定实现部分的相同构造。 可能还有另一个原因:

大多数(?)类不是通过手动编写的代码定义的,而是通过SE24定义的。在这里,您可以在一个dynpro中定义接口,并在另一个dynpro中编写代码


在内部,接口存储在一个源中,代码存储在另一个源中。因此,将接口和实现分开是合理的。

我不认为ABAP符合“现代语言”的条件,我是不是暗示了这一点?我想不是。我只是说大多数现代语言都使用这样的混合体^^^是的,但是除了设计师之外,谁应该能够为你回答这个问题?这只是征求意见,我没有设计ABAP,但我要说的是,他们关注的是C/C++的定义和实现也是分开的:这意味着除了将“类做什么”和“如何做”分开的想法之外,没有什么特别的优势或理由(如果你真的只想重用“类做什么”部分,你可以使用抽象类或接口之类的抽象。@Carsten ABAP Objects:ca.2001.Java:1995。现在哪一个更现代?:-)我认为“对人来说更容易/更快”。对于库本身而言,一个完善的头文件是一个非常有用的文档。例如,使用Java,您需要额外的工具(javadoc)从源代码中提取自文档摘要(如果您有源代码…)。这并不完全准确。每个方法实现都存储在单独的include中,并且根据版本的不同,接口部分分为几个include(公共/受保护/私有部分、宏、类型等)无论如何,由于工具是在指定语言元素之后才引入的,所以这可能不是主要原因。
CLASS CL_MYCLASS DEFINITION.
    PUBLIC SECTION.
        ...
    PROTECTED SECTION.
        ...
    PRIVATE SECTION.
        ...
ENDCLASS.

CLASS CL_MYCLASS IMPLEMENTATION.
    ...
ENDCLASS.
public class MyClass {

    <visibility> <definition> {
        <implementation>
    }

}