AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 15.04.2003, 13:31   #1  
renat is offline
renat
Участник
renat's Avatar
 
142 / 12 (1) ++
Join Date: 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 ???
Old 15.04.2003, 13:43   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Join Date: 15.01.2002
Location: Москва
Blog Entries: 7
Смотрим FormLetter
Обычно так:
В предке создается метод (см. FormLetter)
PHP Code:
void  writeJournal()
{
    throw 
error(Error::missingOverload(funcName()));

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

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

class ABC
{
}


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


а в Х++ так нельзя что-ли? В документации я не нашел такого
Old 15.04.2003, 14:10   #4  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Join Date: 15.01.2002
Location: Москва
Blog Entries: 7
указатель
В X++ нет указателей
Old 15.04.2003, 14:23   #5  
renat is offline
renat
Участник
renat's Avatar
 
142 / 12 (1) ++
Join Date: 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
Old 15.04.2003, 14:31   #6  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
renat, X++ наследник Java, а не С++
Твои вопросы относятся скорее к Java, чем к Аксапте.

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

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

abstract class ABC
{
}

func()
{
ABC array[10];
}

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

Quote:
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 - ни о чем не говорить.
Если и наследник, то наследие его черезвычайно мало. Скорее это самородок из той же рассы(или выродок - это кому как)..
Old 16.04.2003, 09:22   #9  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Join Date: 15.01.2002
Location: Москва
Blog Entries: 7
массив объектов
Для хранения (использования) массивов объектов применяется специальный простенький класс Array
Old 16.04.2003, 09:29   #10  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Join Date: 15.01.2002
Location: Москва
Blog Entries: 7
More
Еще можно посмотреть сюда:
http://technet.navision.com/default....put&NEWSID=108
Attached Files
File Type: zip foundationclasses.zip (135.0 KB, 84 views)
Old 16.04.2003, 10:29   #11  
Антон Солдатов is offline
Антон Солдатов
Соучастник
Антон Солдатов's Avatar
 
386 / 27 (1) +++
Join Date: 29.12.2002
Location: Новосибирск
Да про Array и в руководстве разработчика то же самое написано.. я просто не был уверен, что пройдет следующее:

Quote:
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;
сейчас, конечно, уже точно знаю, что работает.
Old 16.04.2003, 10:51   #12  
renat is offline
renat
Участник
renat's Avatar
 
142 / 12 (1) ++
Join Date: 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;
}
Old 16.04.2003, 11:27   #13  
Uncle Fedor is offline
Uncle Fedor
Участник
 
6 / 10 (1) +
Join Date: 16.04.2003
сам немного программирую на С++ и хочу сказать что есть _принципиальные_ отличия Х++ от языков с ООП.
например определения классов: насколько я понял, (в Х++) нельзя написать определение нового класса "в тексте", хотя бы потому, что нет как таковых текстов программы, есть АОТ и все должно храниться в нем. С одной стороны, это бывает удобно, а с другой - уменьшает степень свободы программиста.
вообще я не совсем поинмаю саму идеологию языка: он слишком низкоуровневый для предметно-ориентированного (как язык 1С) и недостаточно универсален для программирования баз данных (как SQL). вот почему бы не сделать поддержку SQL на уровне стандарта, которому уже более 10 лет?
Old 16.04.2003, 12:04   #14  
Антон Солдатов is offline
Антон Солдатов
Соучастник
Антон Солдатов's Avatar
 
386 / 27 (1) +++
Join Date: 29.12.2002
Location: Новосибирск


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

Quote:
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."

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

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

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

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

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

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

Это уже религиозные войны
В них не бывает победителя.
Old 17.04.2003, 19:08   #20  
macklakov is offline
macklakov
NavAx
macklakov's Avatar
 
2,347 / 996 (38) +++++++
Join Date: 03.04.2002
;) 3 причины моей ненависти
с тех пор как перешел с java и с++ на X++, ко многим вещам, которые по началу раздражали привык, но вот то, к чему я никогда, наверное, не привыкну:
- нет перегрузки операторов, приходится использовать switch
- нет возможности группировать код по пакетам и зонам видимости
- системная часть кода закрыта, это хорошо, но на нее отсутствует описание интерфейса!!!
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 10:21.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.