Vue d’hélicoptère d’ABAP

Je ne sais rien à propos de l’ABAP, mis à part le côté OO, et j’aimerais avoir un aperçu de l’hélicoptère avant de commencer à l’examiner en détail. Je sais que je peux trouver tout cela en l’étudiant, mais comme je l’ai dit pour commencer, j’aime bien savoir à quoi je dois faire face.

  • Est-il (toujours) compilé?
  • Typestem: Est-il fortement typé? Utilise-t-il l’inférence de type?
  • Héritage: single / muliple, structures de type interface?
  • Collections: A-t-il des collections en dehors des tableaux? A-t-il des collections génériques? Utilise-t-il la compréhension de liste?
  • Qu’en est-il de la différence (con / contra / in) dans les tableaux, les types de retour, les types de parameters, la substitution?
  • Toute manipulation d’exception?
  • Une conception intégrée par support contractuel?
  • Quelque chose de remarquable comme oposé à d’autres langues bien connues?

Toute information générale sur les caractéristiques serait la bienvenue!

    Est-il (toujours) compilé?

    ABAP est “compilé” en une sorte de code octet (appelé “load” pour des raisons historiques) qui est ensuite exécuté par une machine virtuelle à l’intérieur du kernel. Vous pouvez comparer cela avec Java, avec une grande différence: la charge n’est pas indépendante de la machine, mais optimisée pour le type de machine cible. Cela signifie que dans un environnement système comportant plusieurs types de serveurs d’applications différents, vous pouvez avoir plusieurs charges pré-compilées pour un seul programme. Ce n’est pas ce que vous verrez jamais – tout le processus de compilation est géré automatiquement.

    Typestem: Est-il fortement typé? Utilise-t-il l’inférence de type?

    Fortement typé avec un système de types génériques au dessus. Notez qu’il existe un dictionnaire de données complet intégré dans la langue – très pratique.

    Héritage: structures simples ou multiples, de type interface?

    Un inheritance unique Les interfaces sont supscopes, y compris les interfaces composites et le renommage du composant implémentation (deux interfaces IF_FOO et IF_BAR peuvent toutes deux définir une méthode BAZ, et une classe implémentant les deux interfaces aura alors deux méthodes IF_FOO ~ BAZ et IF_BAR ~ BAZ).

    Collections: A-t-il des collections en dehors des tableaux? A-t-il des collections génériques? Utilise-t-il la compréhension de liste?

    Ce que vous connaissez comme “tableau” dans les autres langages de programmation n’existe pas vraiment dans ABAP – vous utiliserez généralement des “tables internes” à la place. Pensez aux tables en mémoire structurées de type firebase database. Certaines idées de classes de collection sont réparties dans différents modules, mais la méthode canonique consiste à utiliser des tables internes – définissez un type de ligne de type tableau représentant des références à des instances ou à des structures contenant une telle référence.

    Qu’en est-il de la différence (con / contra / in) dans les tableaux, les types de retour, les types de parameters, la substitution?

    Tableaux: voir ci-dessus. Remplacement: Vous ne pouvez pas modifier la signature de la méthode lors de l’implémentation de la méthode d’interface ou du remplacement des méthodes de la super-classe. En ce qui concerne les parameters, cela dépend si vous transférez des données (ou des références de données) ou des références d’objects. En général, la mise à jour peut avoir lieu de manière implicite, alors que vous devez procéder à la réduction explicite.

    Toute manipulation d’exception?

    Oui. Plus d’une façon – encore une fois pour des raisons historiques (compatibilité descendante). Les exceptions basées sur les classes sont sockets en charge.

    Une conception intégrée par support contractuel?

    Aucun que je connaisse.

    Quelque chose de remarquable comme oposé à d’autres langues bien connues?

    Beaucoup de choses. Vous voudrez peut-être consulter http://www.volker-wegert.de/en/node/17 et http://www.volker-wegert.de/en/node/21 pour un aperçu certes partial 🙂

    Je vais essayer de fournir certaines choses que la réponse précédente n’a pas, tout en ignorant ce qu’ils ont mentionné:

    Est-il (toujours) compilé?
    Eh bien, l’interface pour le programmeur dit “Activer”, pas comstackr, mais c’est parce qu’il y a une gestion de version intégrée. Lorsque vous activez quelque chose, il le comstack et rend la version source et la version binary la version “active”. Si quelqu’un essaie d’exécuter le code source non compilé, il sera automatiquement compilé au fur et à mesure qu’il l’exécutera.

    Typestem: Est-il fortement typé?
    Fondamentalement, oui. ABAP est comme un étrange croisement entre Pascal et COBOL. Il y a des “symboles de champ”, qui sont comme des pointeurs. Il y a aussi maintenant des types génériques. (Et des pointeurs de champs génériques). L’une des choses les plus intéressantes est qu’il n’y a pas de différence entre les types ABAP et les types de firebase database. Toute table que vous créez deviendra automatiquement un type de structure. Autrement dit, ABAP est intégré à la firebase database de manière à ce qu’il n’existe pratiquement pas d’autres langues. Vous pouvez également écrire du code SQL, qui fait en réalité partie de l’ABAP, au lieu d’être simplement une chaîne, comme dans les autres langages.

    Héritage: single / muliple, structures de type interface?
    Il y a des structures d’interface, je ne les utilise généralement pas. Si vous faisiez beaucoup de classes réutilisables, ce serait une bonne idée.

    Collections: A-t-il des collections en dehors des tableaux? A-t-il des collections génériques? Utilise-t-il la compréhension de liste?
    Mieux, il a “tables internes”, qui sont essentiellement un type de tableau dynamic. Ils peuvent être déclarés à partir de presque n’importe quel type, y compris ceux du dictionnaire de données. Ils peuvent être bouclés, sortingés, etc. Il existe plusieurs types, y compris les variantes hachées et sortingées.

    Une gestion des exceptions?
    Les types OOP et non-OOP.

    Quelque chose de remarquable comme oposé à d’autres langues bien connues?
    Comme l’a dit l’autre affiche, beaucoup. Il est très utile pour tout ce qui concerne les opérations de firebase database et la réutilisation de structures et de types de données complexes. C’est naturellement une firebase database croisée et multi-plateforme (OS et processeur). Il a un très bon système de gestion de version et de transport. L’ensemble du système SAP bénéficie d’un très bon support multilingue. Vous pouvez obtenir des écrans simples avec des titres et des zones de sélection appropriés automatiquement, ce qui signifie que vous pouvez faire moins de programmation et plus de travail. Vous n’avez pas besoin de mapper entre les types de firebase database et les types de langue, etc.
    Les choses ne sont pas bonnes à:
    1. Les nombres sont généralement stockés au format ASCII, ce qui les rend moins rapides en mathématiques dans de nombreuses applications.
    2. La plupart des structures de données sont très normalisées, ce qui signifie que vos données peuvent parfois être réparties sur 50 tables. Les requêtes “Star” sont très courantes. Des fonctions intégrées pour récupérer des données (par exemple des bases de données logiques) sont vos amis dans ces cas.
    3. SAP a essayé de tout faire pour tout le monde, il y a donc beaucoup d’options de configuration, etc.
    4. ABAP est parfois très verbeux. Essayez d’utiliser le bouton “pattern” sur quelque chose de simple comme GUI_DOWNLOAD.
    5.SAP était très ambitieux avec ce qu’ils ont pris, et a donc rapidement rencontré des limitations en termes de matériel, de systèmes d’exploitation et de systèmes RDBM. Ainsi, ils ont hérité de kludges pour y faire face qui ne sont pas beaux. (Tables de billard, tables de cluster, etc.)
    6. Lorsque vous activez un programme, il ne vérifie pas complètement la compatibilité avec les modules de fonction utilisés. Il y a des situations où quelque chose s’active sans problème, mais qui se bloque au moment de l’exécution, même dans les cas où il aurait pu être détecté lors de la compilation.