2010-01-26 5 views
48

Я не знаю ничего об ABAP, кроме того, у него есть сторона OO, и я хотел бы иметь какое-то вертолетное представление об этом, прежде чем я начну смотреть на нее подробно. Я знаю, что могу найти все это, изучая его, но, как я сказал, для начала мне нравится знать, с чем я имею дело.Helicopterview ABAP

  • Он (всегда) скомпилирован?
  • Typestem: строго ли он напечатан? Использует ли он тип вывода?
  • Наследование: единичные/многослойные, подобные интерфейсу структуры?
  • Коллекции: Есть ли коллекции, кроме массивов? Имеет ли он общие коллекции? Использует ли это понимание List?
  • Как о (con/contra/in) дисперсии в массивах, возвращаемых типах, параметрах, переопределении?
  • Любая обработка исключений?
  • Любая конструкция в конструкции по контракту?
  • Что-нибудь замечательное, как и другие известные языки?
  • ...

Любая общая информация о характеристиках в основном будет приветствоваться!

ответ

73

Это (всегда) скомпилировано?

ABAP «скомпилирован» в виде байтового кода (называемого «загрузка» по историческим причинам), который затем выполняется виртуальной машиной внутри ядра. Вы можете сравнить это с Java, с одной большой разницей: Нагрузка не зависит от машины, а оптимизирована для типа целевой машины. Это означает, что в системном ландшафте с несколькими различными типами серверов приложений у вас может быть несколько предварительно скомпилированных нагрузок для одной программы. Не то чтобы вы когда-либо видели это - весь процесс компиляции обрабатывается автоматически.

Typestem: строго ли он напечатан? Использует ли он тип вывода?

Сильно набрано системой общих типов сверху. Обратите внимание, что есть полный словарь данных, который интегрирован в язык - очень удобно.

Наследование: единичные/множественные, подобные интерфейсу структуры?

Одинокое наследование. Поддерживаются интерфейсы, включая составные интерфейсы и переименование компонентов реализации (два интерфейса IF_FOO и IF_BAR могут определять метод BAZ, а класс, реализующий оба интерфейса, будет иметь два метода: IF_FOO ~ BAZ и IF_BAR ~ BAZ).

Коллекции: Имеет ли он коллекцию, кроме массивов? Имеет ли он общие коллекции? Использует ли это понимание List?

То, что вы знаете как «массив» на других языках программирования, на самом деле не существует в ABAP - вместо этого вы обычно используете так называемые «внутренние таблицы». Подумайте, как структурированные таблицы памяти в виде базы данных.Существуют некоторые идеи классов коллекций, распространяемых через различные модули, но канонический способ сделать это - использовать внутренние таблицы - определить так называемый тип таблицы типов, которые либо представляют ссылки на экземпляры или структуры, содержащие такую ​​ссылку.

Как насчет (con/contra/in) дисперсии в массивах, возвращаемых типах, параметрах, переопределении?

Массивы: см. Выше. Переопределение: вы не можете изменить подпись метода при реализации метода интерфейса или переопределения методов суперкласса. Что касается параметров - это зависит от того, передаете ли вы данные (или ссылки на данные) или ссылки на объекты. В целом, повышение может происходить неявно, в то время как вы должны выполнить downcasting явно.

Любое исключение из обращения?

Да. Более одного пути - опять-таки по историческим причинам (обратная совместимость). Исключения на основе классов поддерживаются.

Любые строительные конструкции по контракту?

Отсутствует, что я знаю.

Что-нибудь замечательное, как и другие известные языки?

Много вещей. Вы можете проверить http://www.volker-wegert.de/en/node/17 и http://www.volker-wegert.de/en/node/21 за заведомо предвзятый обзор :-)

+0

Очень frienly tx! Я также попытался проголосовать за вас, но мне все равно нужно зарегистрироваться. Кажется, я могу вернуться позже. – Marc

+0

Отличный ответ, меня тоже очень просветила. Любопытно, что сторонник http://www.volker-wegert.de/ использует PHP-версию с открытым исходным кодом для Drupal для управления контентом для своего сайта. Любопытно, что в случае наличия интерфейса между SAP и Drupal могут возникнуть некоторые интересные «mash-ups». Сохранение систем в процессе разработки, но когда они объединены, могут возникнуть некоторые интересные возможности, например. мощные веб-интерфейсы/веб-приложения для SAP, предоставляемые Drupal. – therobyouknow

+0

@Rob: Я больше разбираюсь в Java, EMF, XText и ABAP. PHP и ABAP на самом деле не мой фетиш :-) – vwegert

22

Я попытаюсь дать некоторые вещи предыдущего ответа не имеет, в то время как пропуская то, что они делали упоминания:

ли это (всегда) скомпилирован?
Ну, интерфейс для программиста говорит «Активировать», а не компилировать, но это потому, что встроено управление версиями. Когда вы активируете что-то, оно скомпилирует его и делает исходную и двоичную версии «активной» версией. Если кто-то пытается запустить источник, который не скомпилирован, он будет автоматически скомпилирован по мере его запуска.

Typestem: строго ли он напечатан?
В принципе, да. ABAP похож на странный переход между Pascal и COBOL. Есть «Символы полей», которые похожи на указатели. Существуют также общие типы. (И общие указатели поля). Одной из самых крутых вещей является то, что существует без разницы между типами ABAP и типами баз данных. Любая сделанная вами таблица автоматически станет типом структуры. То есть ABAP интегрируется с базой данных таким образом, что практически нет других языков. Вы также можете написать SQL, который на самом деле является частью ABAP, а не просто как строка, как на других языках.

Наследование: единичные/многослойные, подобные интерфейсу структуры?
Существуют интерфейсные структуры, я обычно их не использую. Если бы вы сделали много повторно используемых классов, они были бы хорошей идеей.

Коллекции: Имеет ли он коллекцию, кроме массивов? Имеет ли он общие коллекции? Использует ли это понимание List?
Лучше, у него есть «Внутренние таблицы», которые в основном представляют собой тип динамического массива. Они могут быть объявлены практически из любого типа, в том числе в словаре данных. Они могут быть закодированы, отсортированы и т. Д. Существует несколько типов, включая хэшированные и отсортированные варианты.

Любая обработка исключений?
Оба типа ООП и не-ООП.

Что-нибудь замечательное, как и другие известные языки?
Как сказал другой плакат, много. Это очень хорошо при любых операциях с базой данных и повторном использовании сложных структур и типов данных. Это, естественно, кросс-база данных и кросс-платформенная (ОС и процессор). Он имеет очень хорошую систему управления версиями и транспорта. Вся система SAP имеет очень хорошую многоязычную поддержку. Вы можете получить простые экраны с соответствующими заголовками и полями выбора автоматически, что означает, что вы можете делать меньше программ и больше работать. Вам не нужно отображать между типами БД и типами языков и т. Д.
Вещи это не так хорошо:
1. Номера обычно хранятся как ASCII, что делает его менее быстрым по математике во многих приложениях.
2. Большинство структур данных очень нормализовано, что означает, что ваши данные могут распространяться на 50 таблиц. «Звездные» запросы очень распространены. Встроенные функции для извлечения данных (например, логические базы данных) являются вашим другом в этих случаях.
3. SAP пытался быть всем для всех, поэтому существует множество вариантов конфигурации и т. Д., И иногда функция не делает то, что вы ожидали от нее, основываясь на прошлом поведении.
4. ABAP иногда очень многословный. Попробуйте использовать кнопку «шаблон» на чем-то простом, например GUI_DOWNLOAD.
5.SAP был очень амбициозен с тем, что они взяли на себя, и, таким образом, на ранних этапах столкнулись с ограничениями аппаратного обеспечения, операционных систем и систем RDBM. Таким образом, у них есть старые kludges, чтобы справиться с этим, что не очень красиво. (Таблицы пула, Таблицы кластеров и т. Д.)
6. Когда вы активируете программу, она не выполняет полную проверку совместимости с используемыми функциональными модулями. Бывают ситуации, когда что-то активируется без проблем, но затем вылетает во время выполнения, даже в тех случаях, когда его можно было поймать во время компиляции.

 Смежные вопросы

  • Нет связанных вопросов^_^