ABAP的直升机视图

我不知道有关ABAP的一些事情,除了它有一个面向对象的方面之外,在我开始仔细观察之前,我想对它有某种直观的看法。 我知道在学习时我可以find所有这些,但就像我对初学者所说的,我想知道我在处理什么。

  • 它(总是)编译?
  • Typestem:是否强types? 它使用types推断吗?
  • inheritance:single / muliple,接口类结构?
  • 集合:除了数组吗? 有它的通用集合? 它使用List理解吗?
  • 怎么样(con / contra / in)差异在数组中,returntypes,parametertypes,覆盖?
  • 任何exception处理?
  • 通过合同支持来devise任何devise?
  • 任何与其他众所周知的语言相反的显着内容?

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

它(总是)编译?

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

Typestem:是否强types? 它使用types推断吗?

强types顶部的通用types的系统。 请注意,有一个完整的数据字典集成到语言中 – 非常方便。

inheritance:单一/多重,类似接口的结构?

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

集合:除了数组吗? 有它的通用集合? 它使用List理解吗?

在其他编程语言中,您所知的“数组”在ABAP中并不存在,您通常会使用所谓的“内部表”。 考虑类似数据库的结构化内存表。 对于通过不同模块传播的集合类有一些想法,但是执行此操作的规范方法是使用内部表 – 定义所谓的表types的行,表示对包含此类引用的实例或结构的引用。

怎么样(con / contra / in)差异在数组中,returntypes,parametertypes,覆盖?

数组:见上。 重写:在实现接口方法或覆盖超类方法时,不能更改方法签名。 至于参数 – 取决于你是否传输数据(或数据引用)或对象引用。 一般而言,上传可能会隐式发生,而您必须明确执行向下转换。

任何exception处理?

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

通过合同支持来devise任何devise?

没有我知道的。

任何与其他众所周知的语言相反的显着内容?

很多东西。 您可能想要查看http://www.volker-wegert.de/en/node/17和http://www.volker-wegert.de/en/node/21 ,以确定有偏见的概述:-)

我会尽量提供一些以前的答复没有,而跳过他们提到的:

它(总是)编译?
那么,程序员的界面是“激活”,而不是编译,但这是因为内置了版本pipe理。 当你激活一些东西的时候,它会编译它,并且使源代码和二进制代码成为“活动”版本。 如果有人试图运行未编译的源代码,它将在运行时自动编译。

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

inheritance:single / muliple,接口类结构?
有接口结构,我通常不使用它们。 如果你做了很多可重用的课程,他们会是个好主意。

集合:除了数组吗? 有它的通用集合? 它使用List理解吗?
更好的是,它有“内部表”,这基本上是一种dynamic数组。 它们可以从几乎任何types声明,包括数据字典中的声明。 他们可以循环,sorting等。有几种types,包括哈希和sorting变体。

任何exception处理?
OOP和非OOPtypes。

任何与其他众所周知的语言相反的显着内容?
另一个海报说了很多。 数据库操作和重复使用复杂的结构和数据types是非常好的。 自然是跨数据库和跨平台(OS和处理器)。 它有一个非常好的版本pipe理和传输系统。 整个SAP系统有非常好的多语言支持。 您可以自动获得适当的标题和select框的简单屏幕,这意味着您可以做更less的编程和更多的工作。 您不必在数据库types和语言types之间进行映射
事情不如人意:
1.数字通常以ASCII码forms存储,这使得它在许多应用程序中的math运算速度要快得多。
2.大部分数据结构都非常规范化,这意味着您的数据有时可能分布在50个表中。 “星”查询是非常普遍的。 在这些情况下,内置函数来检索数据(非逻辑数据库)是你的朋友。
3. SAP试图成为所有人的一切,所以有很多configuration选项等等,有时候一个函数根据过去的行为没有达到预期的效果。
4. ABAP有时非常冗长。 尝试使用GUI_DOWNLOAD等简单的“模式”button。
5. SAP非常雄心勃勃,因此早早地陷入了硬件,操作系统和RDBM系统的局限之中。 因此,他们有遗留问题来处理它,这是不美观的。 (池表,聚类表等)
6.激活程序时,不会对所使用的function模块进行全面兼容性检查。 有些情况下,没有问题就会激活,但是在运行时即使在编译时可能被捕获的情况下也会崩溃。

    Interesting Posts