49

我对ABAP一无所知,除了它有一个OO方面,我想在开始详细研究它之前先对它进行一些直升机视图。我知道我可以在学习时找到所有这些,但就像我对初学者所说的那样,我想知道我在处理什么。

  • 它(总是)编译吗?
  • Typestem:它是强类型的吗?它使用类型推断吗?
  • 继承:单/多,类似接口的结构?
  • 集合:除了数组之外还有集合吗?它有通用集合吗?它使用列表理解吗?
  • 数组,返回类型,参数类型,覆盖中的(con/contra/in)方差如何?
  • 任何异常处理?
  • 合同支持的任何内置设计?
  • 与其他知名语言相比,有什么特别之处吗?
  • ...

任何有关特征的一般信息基本上都会受到欢迎!

4

2 回答 2

79

它(总是)编译吗?

ABAP 被“编译”成一种字节码(由于历史原因称为“加载”),然后由内核中的虚拟机执行。您可以将其与 Java 进行比较,有一个很大的不同:负载不是机器独立的,而是针对目标机器类型进行了优化。这意味着在具有多种不同类型的应用程序服务器的系统环境中,您可能对单个程序有多个预编译负载。并不是说您会看到任何这些 - 整个编译过程都是自动处理的。

Typestem:它是强类型的吗?它使用类型推断吗?

强类型,顶部有泛型类型系统。请注意,有一个完整的数据字典集成到语言中 - 非常方便。

继承:单个/多个,类似接口的结构?

单继承。支持接口,包括复合接口和实现组件重命名(两个接口IF_FOO和IF_BAR都可以定义一个方法BAZ,实现这两个接口的类将有两个方法IF_FOO~BAZ和IF_BAR~BAZ)。

集合:除了数组之外还有集合吗?它有通用集合吗?它使用列表理解吗?

您在其他编程语言中称为“数组”的东西在 ABAP 中并不真正存在——您通常会使用所谓的“内部表”来代替。想想类似数据库的结构化内存表。集合类的一些想法通过不同的模块展开,但规范的方法是使用内部表 - 定义所谓的表类型的行,表示对实例的引用或包含此类引用的结构。

数组,返回类型,参数类型,覆盖中的(con/contra/in)方差如何?

数组:见上文。覆盖:实现接口方法或覆盖超类方法时,不能更改方法签名。至于参数 - 这取决于您是传输数据(或数据引用)还是对象引用。通常,当您必须显式执行向下转换时,向上转换可能会隐式发生。

任何异常处理?

是的。不止一种方式 - 再次出于历史原因(向后兼容性)。支持基于类的异常。

合同支持的任何内置设计?

没有我知道的。

与其他知名语言相比,有什么特别之处吗?

很多东西。您可能想查看http://www.volker-wegert.de/en/node/17http://www.volker-wegert.de/en/node/21以获得公认的有偏见的概述:-)

于 2010-01-26T09:24:44.777 回答
24

我将尝试提供一些以前的回复没有提供的东西,同时跳过他们提到的内容:

它(总是)编译吗?
好吧,程序员的界面说“激活”,而不是编译,但那是因为有内置的版本管理。当您激活某些东西时,它会对其进行编译,并使源代码和二进制版本成为“活动”版本。如果有人试图运行未编译的源代码,它将在他们运行时自动编译。

Typestem:它是强类型的吗?
基本上,是的。ABAP 就像是 Pascal 和 COBOL 之间的奇怪交叉。有“字段符号”,就像指针一样。现在也有泛型类型。(和通用字段指针)。最酷的事情之一是ABAP 类型和数据库类型之间没有区别。您创建的任何表格都将自动成为结构类型。也就是说,ABAP 与数据库的集成方式几乎是其他语言所没有的。您还可以编写 SQL,它实际上是 ABAP 的一部分,而不是像其他语言那样只是一个字符串。

继承:单/多,类似接口的结构?
有接口结构,我一般不用。但是,如果您制作了很多可重用的类,那将是一个好主意。

集合:除了数组之外还有集合吗?它有通用集合吗?它使用列表理解吗?
更好的是,它有“内部表”,基本上是一种动态数组。它们几乎可以从任何类型声明,包括数据字典中的类型。它们可以循环、排序等。有几种类型,包括散列和排序变体。

任何异常处理?
OOP 和非 OOP 类型。

与其他知名语言相比,有什么特别之处吗?
正如另一张海报所说,很多。它非常擅长与数据库操作有关的任何事情,以及重用复杂的结构和数据类型。它自然是跨数据库和跨平台(操作系统和处理器)。它有一个非常好的版本管理和传输系统。整个SAP系统有很好的多语言支持。您可以自动获得带有适当标题和选择框的简单屏幕,这意味着您可以做更少的编程和更多的工作。您不必在数据库类型和语言类型等之间进行映射。
它不太擅长的事情:
1. 数字通常存储为 ASCII,这使得它在许多应用程序中的数学运算速度不够快。
2. 大部分数据结构都非常标准化,这意味着您的数据有时可能分布在 50 个表中。“星号”查询很常见。在这些情况下,用于检索数据的内置函数(fe 逻辑数据库)是您的朋友。
3. SAP 试图成为每个人的一切,所以有很多配置选项等,有时一个功能不会按照你过去的行为来做你所期望的。
4. ABAP 有时非常冗长。尝试在 GUI_DOWNLOAD 等简单的东西上使用“模式”按钮。
5.SAP 非常雄心勃勃,因此在早期就遇到了硬件、操作系统和 RDBM 系统的限制。因此,他们有遗留问题来处理它并不漂亮。(池表、集群表等)
6、当你激活一个程序时,它并没有对所使用的功能模块进行全面的兼容性检查。在某些情况下,某些东西会毫无问题地激活,但随后会在运行时崩溃,即使它可能在编译时被捕获。

于 2010-02-08T13:49:40.423 回答