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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.04.2003, 13:31   #1  
renat is offline
renat
Участник
Аватар для renat
 
142 / 12 (1) ++
Регистрация: 14.10.2002
? X++ как С++ ??
в С++ есть такая замечательная вещь как позднее связывание т.е.
virtual функции. Которые можно использовать примерно так:

////есть класс
/////////////////////////////////////////
class obj
{
object() {};
~object() {};
virtual int intersect( int , int )=0;
};
////////////////////////////////////////
///есть дочерние классы

class ADDublic object
{
/// + свои private переменные и методы
public:
virtual int intersect(int , int);
};

int ADD::intersect(int A, int B)
{
return A+B;
}

//// и еще один

class SUBublic object
{
/// + свои private переменные и методы
public:
virtual int intersect(int , int);
};

int SUB::intersect(int A, int B)
{
return A-B;
}
//// что мы имеем

void func(void)
{
obj *work[2];
ADD *A;
SUB *B;

A =new ADD; //создадим
B=new SUB; // объекты

work[0]=A; // присвоим из в массив
work[1]=B; //

printf("%d",work[0]->intersect(7,5)); // получаем 12 т.к. вызван метод класса ADD
printf("%d",work[1]->intersect(7,5)); // получаем 2 т.к. вызван метод класса SUB
}
//////////////////////////////////////////
как такие вещи реализуются в Axapta ???
Старый 15.04.2003, 13:43   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Смотрим FormLetter
Обычно так:
В предке создается метод (см. FormLetter)
PHP код:
void  writeJournal()
{
    throw 
error(Error::missingOverload(funcName()));

а в потомке он перекрывается и наполняется полезными действиями
(см. SalesFormLetter_PackingSlip, PurchFormLetter_PackingSlip и т.д. и т.п.)
Старый 15.04.2003, 14:02   #3  
renat is offline
renat
Участник
Аватар для renat
 
142 / 12 (1) ++
Регистрация: 14.10.2002
тогда вопрос такой..

В С++ Класс - это класс, а экземпляр класса - объект и я могу объявить массив объектов или массив ссылок на объекты...

class ABC
{
}


func()
{
ABC array[10];
ABC *relat;
ABC *relat_array[10];
}


а в Х++ так нельзя что-ли? В документации я не нашел такого
Старый 15.04.2003, 14:10   #4  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
указатель
В X++ нет указателей
Старый 15.04.2003, 14:23   #5  
renat is offline
renat
Участник
Аватар для renat
 
142 / 12 (1) ++
Регистрация: 14.10.2002
А массив экземпляров классов я могу определить???

///////////////////////
class ABC
{
}
///////////////////////
func()
{
ABC array[10];
}
///////////////////////

как мне быть если мне надо массив экземпляров класса

может мне надо 1000 объектов обработать 300 из которых перекрывают метод "таким образом" а еще 300 "другим" и еще 400 "разными способами"


вот так у меня получилось через

abstract class predmet
{
}

static void test_oot()
{
predmet p;
SUB A;
ADD B;
;

A = new SUB();
B = new ADD();

p=A;
print p.DOIT(5,3); // результат 2

p=B;
print p.DOIT(5,3); // результат 8

pause;
}

// а вот запихать вы все это дело в массив
print p[1].DOIT(5,3); // результат 2
print p[2].DOIT(5,3); // результат 8
Старый 15.04.2003, 14:31   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
renat, X++ наследник Java, а не С++
Твои вопросы относятся скорее к Java, чем к Аксапте.

Соответственно в документации по Аксапте эти вопросы не освещаются, а просто дается отсулка в той же Java.
Старый 16.04.2003, 06:00   #7  
renat is offline
renat
Участник
Аватар для renat
 
142 / 12 (1) ++
Регистрация: 14.10.2002
тогда вопрос к знатокам Java и X++

Можно ли создать массив экземпляров класса?

abstract class ABC
{
}

func()
{
ABC array[10];
}

или что-то подобное
Старый 16.04.2003, 06:08   #8  
Антон Солдатов is offline
Антон Солдатов
Соучастник
Аватар для Антон Солдатов
 
386 / 27 (1) +++
Регистрация: 29.12.2002
Адрес: Новосибирск
В java Обьект являетя обьектом, и поэтому вызывается именно его метод..
т.е. можно сделать так:

Цитата:
abstract class Parent {
void test(){}
}

class Sub1 extends Parent{
void test(){}
}

class Sub2 extends Parent{
void test(){}
}
.....
Parent[] arr;
...
//можно так
arr[i].test();

//а можно так
if(arr[i] instanceof Sub1){/*Do something*/}
else {/*Do something else*/}
Как сделать это сделать в Аксапте - я не знаю, т.к. знакомство с этим чудом совсем недолгое.


2mazzy: говорить, что X++ наследник Java - ни о чем не говорить.
Если и наследник, то наследие его черезвычайно мало. Скорее это самородок из той же рассы(или выродок - это кому как)..
Старый 16.04.2003, 09:22   #9  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
массив объектов
Для хранения (использования) массивов объектов применяется специальный простенький класс Array
Старый 16.04.2003, 09:29   #10  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
More
Еще можно посмотреть сюда:
http://technet.navision.com/default....put&NEWSID=108
Вложения
Тип файла: zip foundationclasses.zip (135.0 Кб, 83 просмотров)
Старый 16.04.2003, 10:29   #11  
Антон Солдатов is offline
Антон Солдатов
Соучастник
Аватар для Антон Солдатов
 
386 / 27 (1) +++
Регистрация: 29.12.2002
Адрес: Новосибирск
Да про Array и в руководстве разработчика то же самое написано.. я просто не был уверен, что пройдет следующее:

Цитата:
Array arr = new Array(Types::Class);
Parent tmp;
;
tmp = new Sub1();
arr.value(1, tmp);
tmp = new Sub2();
arr.value(2, tmp);

tmp = arr.value(1);
tmp.test();

tmp = arr.value(2);
tmp.test();

pause;
сейчас, конечно, уже точно знаю, что работает.
Старый 16.04.2003, 10:51   #12  
renat is offline
renat
Участник
Аватар для renat
 
142 / 12 (1) ++
Регистрация: 14.10.2002
// наконец получилосьто что хотелось
// класс predmet
abstract class predmet
{
}

int DOIT(int a, int b)
{
return 0;
}

// класс ADD
class ADD extends predmet
{
}

int DOIT(int a, int b)
{
return a+b;
}

// класс SUB
class SUB extends predmet
{
}

int DOIT(int a, int b)
{
return a-b;
}

//
static void test_oot()
{
array M;
predmet p;
SUB A;
ADD B;
;

M= new array(types::class);

A = new SUB();
B = new ADD();

M.value(1,A);
M.value(2,B);

p=M.value(1);
print p.DOIT(5,3); // 5-3=2

p=M.value(2);
print p.DOIT(5,3); // 5+3=8

pause;
}
Старый 16.04.2003, 11:27   #13  
Uncle Fedor is offline
Uncle Fedor
Участник
 
6 / 10 (1) +
Регистрация: 16.04.2003
сам немного программирую на С++ и хочу сказать что есть _принципиальные_ отличия Х++ от языков с ООП.
например определения классов: насколько я понял, (в Х++) нельзя написать определение нового класса "в тексте", хотя бы потому, что нет как таковых текстов программы, есть АОТ и все должно храниться в нем. С одной стороны, это бывает удобно, а с другой - уменьшает степень свободы программиста.
вообще я не совсем поинмаю саму идеологию языка: он слишком низкоуровневый для предметно-ориентированного (как язык 1С) и недостаточно универсален для программирования баз данных (как SQL). вот почему бы не сделать поддержку SQL на уровне стандарта, которому уже более 10 лет?
Старый 16.04.2003, 12:04   #14  
Антон Солдатов is offline
Антон Солдатов
Соучастник
Аватар для Антон Солдатов
 
386 / 27 (1) +++
Регистрация: 29.12.2002
Адрес: Новосибирск


1)что такое "языки с ООП"?
2)почему текст кода в AOT не текст?
3)кто Вам сказал что нет поддержки SQL?

Цитата:
Connection Con = new Connection();
Statement Stmt = Con.createStatement();
ResultSet R = Stmt.executeQuery('SELECT VALUE FROM SQLSYSTEMVARIABLES');

while ( R.next() )
{
print R.getString(1);
}
P.S.: это, кстати, для Вас: "Executing SQL directly is a very powerful tool, and should as such be used carefully."

Старый 16.04.2003, 12:47   #15  
Uncle Fedor is offline
Uncle Fedor
Участник
 
6 / 10 (1) +
Регистрация: 16.04.2003
объясняю:
1) любой язык программирования в котором реализован объектно-ориентированный подход к программрованию. четкое определение не могу дать, но для примера: С++ объектно-ориентированный, VB - нет.
2) опять-таки с С++ я могу написать код в отдельном файле и добавить этот файл в проект. и в одном таком файле я могу создать любое количество классов, как выведенных, так и новых. есть такая возможность в аксапте?
3) да, в 1С тоже есть такая "поддержка", правда, внешними компонентами. это не суть. я говорю о конструкциях select и delete которые "SQL-подобны", однако не поддерживают даже функции в запросе (кроме агрегатных), не говоря уж о вложенных запросах, что является основой SQL (вспомните - structured query language однако)
Старый 16.04.2003, 13:09   #16  
Антон Солдатов is offline
Антон Солдатов
Соучастник
Аватар для Антон Солдатов
 
386 / 27 (1) +++
Регистрация: 29.12.2002
Адрес: Новосибирск
Цитата:
Изначально опубликовано Uncle Fedor
объясняю:
1) любой язык программирования в котором реализован объектно-ориентированный подход к программрованию. четкое определение не могу дать, но для примера: С++ объектно-ориентированный, VB - нет.
2) опять-таки с С++ я могу написать код в отдельном файле и добавить этот файл в проект. и в одном таком файле я могу создать любое количество классов, как выведенных, так и новых. есть такая возможность в аксапте?
3) да, в 1С тоже есть такая "поддержка", правда, внешними компонентами. это не суть. я говорю о конструкциях select и delete которые "SQL-подобны", однако не поддерживают даже функции в запросе (кроме агрегатных), не говоря уж о вложенных запросах, что является основой SQL (вспомните - structured query language однако)
1) ОК, в чем Х++ не объектно-ориентированный? с сылками на Страуструпа или Буча, если можно.. хотя, конечно, думаю ответа не будет если нет определения..

2) что есть файл? - это всего лишь условность. некая сущность, объединяющая данные.. и есть текстовые редакторы, которые умеют содержимое файлов отображать в виде простого листинга..

В Аксапте Вы можете создавать классы, как и сколько вам угодно.. только в одном окне будет отображаться один класс.. это всего-лишь свойства редактора АОТ, а не концепция ООП. я считаю это плюсом(защитой от любителей усложнять), а не недостатком.. всем не угодишь..

3)no comments.. прежде чем утверждать - проверьте.
Старый 16.04.2003, 13:34   #17  
Uncle Fedor is offline
Uncle Fedor
Участник
 
6 / 10 (1) +
Регистрация: 16.04.2003
насчет 2) возможно ты прав. просто дело привычки. но это лишь одна из тех условностей, что навязывает среда разработки. вот если я хочу в нотепаде написать несколько функций в 3 строки каждая (ну просто чтобы видеть их рядом) и вставить их одинм махом, я могу это сделать?

насчет 3) мы недопоняли друг друга. я прекрасно понял что есть замечательный объект Connection и с ним я могу общаться как угодно. а мне было бы удобно писать текст запроса в тексте модуля, а не в строке, передаваемой объекту. понимаете разницу? к тому же есть большое отличие в псевдо-запросах Х++ и реальных SQL запросах. в частности, использование переменных типа таблица. в SQL обращение к таблице производится по идентификатору, без определения переменных. я даже догодываюсь, зачем так сделано - просто настоящие таблицы получили "оболочку" в виде объекта с тем же именем. но опять же этот объект получился очень "жестким", сохранив из свойств ООП только инкапсуляцию. разве не так?

в целом приятно было пообщаться, пойду поработаю немного
всем спасибо.
Старый 16.04.2003, 15:50   #18  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
to Uncle Fedor:
Среда разработки конечно накладывает свою специфику, но X++ от этого не становится менее объектно-ориентированным. Да, на объекты таблиц и форм накладываются определенные ограничения. Встроенный SQL конечно убогий, но это лучше чем ничего. Одна из возможных причин этого универсальность обращения к БД (MS SQL, Oracle). Сложные отчеты можно строить и внешними средствами (тот же самый Crystal) и используя желаемый диалект SQL со всеми фитчами. Благо имеется поддержка COM и WinAPI.
Старый 16.04.2003, 21:46   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Антон Солдатов
2mazzy: говорить, что X++ наследник Java - ни о чем не говорить.
Если и наследник, то наследие его черезвычайно мало. Скорее это самородок из той же рассы(или выродок - это кому как)..

Это уже религиозные войны
В них не бывает победителя.
Старый 17.04.2003, 19:08   #20  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,129 / 916 (35) +++++++
Регистрация: 03.04.2002
;) 3 причины моей ненависти
с тех пор как перешел с java и с++ на X++, ко многим вещам, которые по началу раздражали привык, но вот то, к чему я никогда, наверное, не привыкну:
- нет перегрузки операторов, приходится использовать switch
- нет возможности группировать код по пакетам и зонам видимости
- системная часть кода закрыта, это хорошо, но на нее отсутствует описание интерфейса!!!
 

Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:13.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.