Показать сообщение отдельно
Старый 09.08.2004, 09:56   #18  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
А вот я уже давно завел практику ведения списков коренных отличий одного языка от другого - сам для себя. Потом гораздо легче вспоминать язык, если вдруг вернулся к нему после долгого перерыва. Беру "за базу" какой нибудь язык, который знаю хорошо (типа C++, Pascal или Java) и составляю список из наиболее сильных отличий, данного языка от этого базового. Массу времени экономит.

Для аксапты у меня получился такой вот список (за базовый язык взята Java, но C++ мне ближе, поэтому многие пункты хотя и есть в Java почти в таком же исполнении как и в X++, но я их всё равно упоминаю):

Цитата:
1. объекты создаются через new ObjectType( ... )
2. доступа к полям класса извне невозможен (т.е. они как бы всегда некая смесь private и protected (см. 5)
3. конструктор - метод void new( ... )
4. метод Finalize явно уничтожает объект (но автоматически системой не вызывается!). В нём может располагаться нужный код.
5. нестатические методы вызываются ВСЕГДА с использованием идентификатора объекта. Даже локальные методы должны
вызываться как this.MethodName( ... )! Но в то же время через this нет доступа к полям класса (см. 2)
6. наследование определяется как: class Наследник extends Суперкласс. Множественное наследование не поддерживается.
7. агрегатные типы (массивы, контейнеры) не могут содержать ссылок на объекты (!)
для исправления ситуации существуют Axapta Foundation Classes (lists, maps, sets, arrays, and structs)
8. методы всегда виртуальны. ключ слово final запрещает переопределение метода. весь класс может быть объявлен как final
9. к методам применимы ограничители видимости: private, protected, public (public по умолчанию)
10. внутри методов можно вставлять "внедренные функции" (наподобие паскаля)
11. пераметры трактуются как локальные переменные (передаются по значению)
12. существуют параметры по умолчанию: void new( boolean isFemale, date birth = today() )
13. статические методы могут быть вызваны только через :: например MyClass::MyMethod();
14. типы данных:
- boolean (false, true)
- int (32-битное со знаком)
- real (BCD числа с 16-ю значащими разрядами (64-бита))
- date (литералы записываются как day\month\year, может быть null)
- str (может быть ограничена по длине (str 10 a) в таком случае можно указывать выравнивание (str 10 left a)
- enum - определяются в дизайнере, а не в коде
- массивы задаются квадратными скобками после определения переменной (как обычно)
индексы начинаются с 1! присвоение любого значения элементу с индексом 0 обнуляет весь массив!!!
могут быть статическими: int a[ 10 ]
динамическими: int a[]
частично сохраняемыми на диск: int a[1000, 10] или int a[, 10]- второе число - число элементов хранимых в памяти
могут быть только одномерными! при этом синтаксис не поддерживает массив массивов, так что обламываемся
- container - может содержать всё, кроме объектов (даже таблицы, или расширенные типы)
литерал контейнера - список значений разделенных запятыми в квадратых скобках: [ 1, "abc", ... ]
работа с контейнером (очистка, добавление значений, поиск и т.д.) ведется через набор ф-й con*( ... )
плюс: поддерживается множественное присвоение: container c = [1,3.14,"Hello"];
[i,r,s] = c; // Extracts 1 into i, 3.14 into r and "Hello" into s
оператор += добавляет значение в конец контейнера: c += "строка";
- Расширенные (Дополнительные) Типы Данных объявляются в конфигураторе в ветке дерева Extended Data Types
по сути - typedef-ы за мелкими ограничениями. например завести тип name, как str 100 left
- Классы (Объекты) - по сути лишь указатели (как в Delphi, Java). Действует автоматический сборщик мусора.
общий (базовый) для всех класс - object.
- Таблицы - внешне для программиста выглядат, как объекты. Отличия:
- не нужно выделять память через для таблиц - она выделяется автоматически (?)
- нельзя наследовать от таблиц
- поля в таблицах всегда public и к них можно обращаться отовсюду!
- на поля в таблице можно ссылаться используя выражения: tableName.( expression ) вместо tableName.fieldName
общая для всех таблица (как object для объектов) - common
15. арифметические операции в отличие от клонов C/C++ имеют операции div и mod, в остальном похожи
16. переменные надо объявлять ДО первых операторов
16.5. т.к. имена переменных могут совпадать с именами типов в языке введена избыточная ; для отделения блока деклараций от тела ф-ии для разрешения конфликтов имен. в других местах лишние ; запрещены
17. Есть abstract классы и методы
18. Есть методы с модификаторами display и edit (отдельная тема)
19. Комментарии в стиле C/C++ , т.е. // и /* */
20. Основные управляющие операторы (if, for и т.д.) содраны с Java/C/C++
21. select как оператор языка (выполняется над Таблицами)
22. while select { операторы } выполняет операторы над всеми строками запроса
23. delete_from как быстрая альтернатива while select ... { r.delete() }; и другие DML-операторы
24. ttsbegin/ttscommit/ttsabort - работа с транзакциями
25. try/catch/throw/retry - работа с исключениями - retry - возвращает в начало блока try
На какое либо описание языка список не претендует, но для новичков, знакомых с Java или C++ может обозначить спорные моменты.
За это сообщение автора поблагодарили: alex55 (1).