AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Прочие вопросы
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.08.2004, 09:56   #1  
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).
Старый 22.05.2011, 22:59   #2  
Мартынов Дмитрий is offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Регистрация: 02.02.2004
Адрес: г. Москва
Lightbulb
Цитата:
Сообщение от Alks Посмотреть сообщение
Для аксапты у меня получился такой вот список:
...
Дополню.
В языке X++ есть конструкция инкремента i++;
Она взята из C++, но в оригинале она имеет два варианта: i++, ++i и суть этих вариантов заключается в том, что она может быть использована внутри другого оператора. Если написано i++ то в операторе будет взято значение i, а затем произведен инкримент. Если написано ++i то сперва переменная i будет увеличена и полученное значение будет использовано. В этих возможностях есть очевидные плюсы - в даваться в детали не буду, но если спросите - объясню...

В X++ таких вариаций нет. Конструкция i++; может быть использована только как самостоятельный оператор.
Старый 22.05.2011, 23:14   #3  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Мартынов Дмитрий Посмотреть сообщение
Дополню.
В языке X++ есть конструкция инкремента i++;
Она взята из C++, но ...
В X++ таких вариаций нет. Конструкция i++; может быть использована только как самостоятельный оператор.
а как же оператор for?

X++:
for(i = 1; i <= 10; i++)
{
...
}
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 23.05.2011, 00:00   #4  
Мартынов Дмитрий is offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Регистрация: 02.02.2004
Адрес: г. Москва
;)
Цитата:
Сообщение от lev Посмотреть сообщение
а как же оператор for?
Да, точно, но похоже, что это специфика именно оператора for, в то время как C++ указанная конструкция применима везде где может быть использовано значение переменной.
Старый 23.05.2011, 02:58   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
X++ такой же унылый язык, как и C#, хоть и удобный для своих задач.
Х++ - это во многом Domain Specific Language, а не язык программирования общего назначения, как тот же C#/Java/C++, так что их сравнение в плане "крутизны" или "унылости", по-моему, некорректно. А на счет "унылости" C# - это тема, наверно, не для этого форума.
Цитата:
Сообщение от Мартынов Дмитрий Посмотреть сообщение
В языке X++ есть конструкция инкремента i++; Она взята из C++
Это спорный вопрос, если учесть, что X++ проектировался с ориентиром на Java
Цитата:
Сообщение от Мартынов Дмитрий Посмотреть сообщение
но в оригинале она имеет два варианта: i++, ++i и суть этих вариантов заключается в том, что она может быть использована внутри другого оператора.
Это, строго говоря, два разных оператора, отличающихся приоритетом выполнения; изменения приоритета выполнения в большинстве случаев можно добиться в т.ч. и с помощью круглых скобок.
Цитата:
Сообщение от Мартынов Дмитрий Посмотреть сообщение
В X++ таких вариаций нет. Конструкция i++; может быть использована только как самостоятельный оператор.
И слаба богу. Многие "возможности", перекочевавшие в тот же С++ из С, были, похоже, придуманы людьми, которых больше заботило число нажатий на клавиши, нежели читабельность и сопровождаемость кода. Отсюда же пошли и присваивания, разрешенные везде и всюду, в т.ч. в if, отсюда же потом пошли уродские конструкции вида if (константа == переменная_или_выражение) для обхода возможных опечаток, по которым в том же приложении Аксапты однозначно выделяется код, написанный людьми, далекими от Х++ (они еще после throw пишут ret = false)... В общем, как кто-то метко заметил, в С++ вы запросто "прострелите себе ногу", как только попытаетесь написать что-то сложнее "Hello, world!". По мне, так дополнительные ограничения иногда только на пользу. Эх, был бы еще X++ регистрозависимым (но без возможности создавать объекты, чьи имена отличаются только регистром букв), чтоб как назвали один раз объект приложения/оператор/функцию - так и пиши везде в коде, и НЕ фиГ кОвЕрКаТь регИСТР БуКВ!..
За это сообщение автора поблагодарили: lev (2), S.Kuskov (2), Mileyko (1).
Теги
c++, java, x++, сравнение

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Какие принципиальные отличия, кроме пособий по больничному, в Расчете с персоналом 4.0 по сравнению с 3.0? Игнатьева Ирина DAX: Функционал 2 28.03.2008 10:09
Отличия в строках ReqPO, почему одна строка появляется в форме а другая нет (Master Planning, Planned Orders) rkorchagin DAX: Программирование 8 21.02.2007 16:27
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:25.