Вопрос знатокам ООП.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Реter Konow
7471
Реter Konow  

Как в ООП делают цикл по объектам и их свойствам?

Например, я выполняю цикл след.образом:

//Цикл по объектам в поиске нужного значения конкретного свойства.

for(int a1 = 0; a1 < obj_total; a1++)
  {
   if(G_CORE[a1][_X_SIZE] == THIS_SIZE)
     {
      G_CORE[a1][_this_state_color] = clrWhite;
      Redraw(a1);
     } 
  }

//Цикл по свойствам в поиске неверного значения

for(int a1 = 0; a1 < prop_total; a1++)
  {
   if(G_CORE[ELEMENT][a1] > Max_value)
     {
      G_CORE[ELEMENT][a1] = Max_value;
      Redraw(ELEMENT);
     } 
  }
Реter Konow
7471
Реter Konow  

Еще интересно, как создают иерархию объектов или групп. Например, есть несколько категорий, каждая из которых содержит группу с n-ым кол-вом объектов. Какие методы построения иерархий предлагает концепция ООП?

Реализация иерархии должна обеспечивать легкие переходы в цикле между ее звениями и уровнями. Если иерархию строить внутри массива, останеться много пустого места. Если строить ее из комплекса массивов - нельзя осуществить свободный цикл по звеньям. Что предлагает ООП?

Vladimir Simakov
5352
Vladimir Simakov  
Реter Konow:

Как в ООП делают цикл по объектам и их свойствам?

Например, я выполняю цикл след.образом:

CObj obj[];
...
for (int i=0;i<ArraySize(obj);obj[i++].CheckSomething(param));
Как-то так. А уже внутри класса, в методе CheckSomething() вся логика реализуется.
Реter Konow
7471
Реter Konow  
Vladimir Simakov:
Как-то так. А уже внутри класса, в методе CheckSomething() вся логика реализуется.

Спасибо. Сначала собираем массив obj[] из объектов, а потом делаем цикл?

А насчет иерархии? Причем речь о статичной иерархии. Постоянной и неизменной.

Vladimir Simakov
5352
Vladimir Simakov  
Реter Konow:

Спасибо. Сначала собираем массив obj[] из объектов, а потом делаем цикл?

А насчет иерархии? Причем речь о статичной иерархии. Постоянной и неизменной.

class Class1{
...
};

class Class2{
...
};

class Class3{
   Class1 class1;
   Class2 class2;
...
};
Реter Konow
7471
Реter Konow  
Vladimir Simakov:
То есть, создаем иерархию из классов, а потом в отдельном классе собираем все их объекты и через них делаем цикл по всем звеньям?
Vladimir Simakov
5352
Vladimir Simakov  
Реter Konow:
То есть, создаем иерархию из классов, а потом в отдельном классе собираем все их объекты и через них делаем цикл по всем звеньям?

Смотря что вам надо, но в принципе так. Согласитесь, что гораздо элегантней, чем ваши массивы. А учитывая мои стойкие подозрения, что многомерные массивы у них по факту и не массивы вовсе, так как их в dll передать нельзя, то и накладные расходы на вызов функций вполне могут и одинаковые быть.

Igor Makanu
8563
Igor Makanu  
Реter Konow:

Как в ООП делают цикл по объектам и их свойствам?

Реter Konow:
 и через них делаем цикл по всем звеньям?

используйте общепринятую терминологию, Вы мало того, что можете собеседника ввести в заблуждение своим вопросом, но и сами будете уверенны, что получили ответ на свой вопрос

ООП Вики - тут термины

по сабжу, можно массивы экземпляров объектов (ответы выше) или посмотрите исходники СБ WndContainer.mqh и ArrayObj.mqh , они используются для создания графических панелей на основе CPanelDialog (готовый пример в папке ndicators\Examples\Panels\SimplePanel ), но там работа с указателями и списками

Реter Konow
7471
Реter Konow  
Vladimir Simakov:

Смотря что вам надо, но в принципе так. Согласитесь, что гораздо элегантней, чем ваши массивы. А учитывая мои стойкие подозрения, что многомерные массивы у них по факту и не массивы вовсе, так как их в dll передать нельзя, то и накладные расходы на вызов функций вполне могут и одинаковые быть.

Ну, возможно и элегантней, не буду спорить. Меня очень занимает вопрос практичности, целесообразности, простоты и удобства и на всякий синтаксис я смотрю как "на врага народа", потому как он требует внимания, разбора, порождает ошибки и затрудняет восприятие. Поэтому, стараюсь использовать максимально простые и даже примитивные кодовые конструции. Главное, чтобы легко читались и были эффективны.

С иерархией, конечно, затык. Если все таки сделать в массиве, то циклы обеспечат большие возможности парсинга звеньев, групп, подгрупп, подподгрупп и т.д... Но, память будет использоваться неэффективно. Если делать через классы, на первый взгляд - идеальное решение. Но, это для "мертвой" иерархии. Для картинки. А вот если понадобится создавать движок с ней работающий, - боюсь тут то и начнется синтаксический ад.))

Artyom Trishkin
Модератор
125643
Artyom Trishkin  
Реter Konow:

Спасибо. Сначала собираем массив obj[] из объектов, а потом делаем цикл?

А насчет иерархии? Причем речь о статичной иерархии. Постоянной и неизменной.

Поясните что имеете в виду под "...Причем речь о статичной иерархии. Постоянной и неизменной" ?
Реter Konow
7471
Реter Konow  
Igor Makanu:

используйте общепринятую терминологию, Вы мало того, что можете собеседника ввести в заблуждение своим вопросом, но и сами будете уверенны, что получили ответ на свой вопрос

ООП Вики - тут термины

по сабжу, можно массивы экземпляров объектов (ответы выше) или посмотрите исходники СБ WndContainer.mqh и ArrayObj.mqh , они используются для создания графических панелей на основе CPanelDialog (готовый пример в папке ndicators\Examples\Panels\SimplePanel ), но там работа с указателями и списками

В ООП под "объектом" понимается ссылка на класс, в котором объявлены его поля (свойства). Я под объектом понимаю нумерованный комплекс свойств, каждое из которых - ячейка в массиве. В этом разница.

Вопросы не относятся к теме графических интерфейсов. Я давно обошел графические библиотеки и искать мне там нечего. Но, сейчас интересуюсь тематикой ИИ, а это ставит новые задачи и вопросы.