Вопросы по ООП в MQL5 - страница 2

 
Yuriy Asaulenko:
Ну, эт вы хватили. Человек уже изначально только ООП и занимается. Хотя-бы просто заваривая чашку кофе. Откуда разрывы каких-то шаблонов? ИМХО, бред неумных учителей, перекладывающих свои проблемы на учащихся.
Читайте внимательно. Я об этом и говорю, что человек изначально ставит и решает свои задачи в стиле приближенном к ООП. Но затем его учат процедурному программированию. После него и происходит разрыв шаблонов, т.к. именно процедурное программировании (не ООП) сильно отличается от человеческого мышления.
 
Vasiliy Sokolov:

ООП нужно объяснять вообще без кода и всякой этой заумной номенклотуры типа классов, объектов, указателей и пр. пр. пр. 

Как происходит классическое обучение программированию? Сначала ученик мучительно пытается перейти от человеческого мышления к программированию основ (циклы там всякие, функции, переменные и прочая хрень прочий такой нужный "багаж знаний"). Затем, когда каша в голове из функций, переменных и if'ов формирует какую-то более менее упорядоченную структуру, ученику говорят: "Смотри: есть такая вещь ООП. Забудь, чему тебя учили до этого, и снова начни мыслить по-человечески". Далее следует разрыв шаблонов, только что полученный с таким трудом "багаж знаний" выбрасывается на помойку и человек попадает куда-то между небом и землей. Естественно, что это "ООП" потом еще вспоминается несколько лет как страшный сон с содроганием и болью в оставшихся извилинах мозга (остальные ведь были выжжены новыми знаниями).

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

Написали бы статью
 
pako:
Написали бы статью
Не надо
 
pako:
Написали бы статью

Может быть. Но Алексей может быть даже лучше ООП способен объяснить. 

 
Комбинатор:
Не надо
Вы уже пишите?
 
нет )
 
Комбинатор:
нет )
И не пишите :)
 
Vasiliy Sokolov:
Читайте внимательно. Я об этом и говорю, что человек изначально ставит и решает свои задачи в стиле приближенном к ООП. Но затем его учат процедурному программированию. После него и происходит разрыв шаблонов, т.к. именно процедурное программировании (не ООП) сильно отличается от человеческого мышления.

Не вижу ничего плохого в предварительном изучении процедурного программирования. Для того, чтобы научиться писать романы, для начала неплохо бы изучить обычный алфавит, синтаксис  и научиться просто читать и писать.

Вообще-то, даже программируя на просто С/Паскаль и пр. мы уже занимаемся манипуляцией объектами не зная об их внутренней структуре и функционировании. Остается объяснить, что это объект, а далее научить строить эти объекты.

 
Alexey Volchanskiy:
 

....

Вопрос:

Подскажите темы по ООП на MQL5 на 10 минут, я выложу на ютуб, то есть для всех будет полезно 

------------------

Пишите все, что интересно, я отсортирую, постараюсь в рамках свободного времени удовлетворить ваши запросы

Успехов )) 

Осветите работу с объектами.
 

Помогите решить задачу. Есть две кнопки и линия. Одна кнопка при нажатии выводит линию в режиме редактирования, при отжатии удаляет линию. Вторая кнопка при нажатии закрепляет ее, при отжатии снова переводит в режим редактирования. Каждая кнопка может поменять цвет и некоторые другие свойства объекта "Линия". Объект "Линия" задается на глобальном уровне. Можно ли сразу после создания кнопок передать в каждую кнопку ссылку на объект "Линия" таким образом, чтобы при манипуляциях со ссылочной переменной внутри объектов "Кнопка" все изменения запоминались в глобальном объекте "Линия".

Ниже я набросал упрощенный скрипт, вместо нажатия кнопки - функция addition(), которая увеличивает счетчик объекта "Линия". Я понимаю, что можно передавать объект "Линия" как аргумент функции по ссылке, но просто в рабочем варианте, таких функций несколько, поэтому хотелось бы передать ссылку в самом начале один раз. Т.е. как-то можно сделать, чтобы при вызове Btn1.addition() или Btn2.addition() происходило увеличение счетчика gLine.count ?

class CLine
{
    public:
          int   count;
                CLine(void){count=0;};
               ~CLine(void){};
};


class CMyButton
{
    private:   
    public:
                CLine m_Line;
                CMyButton(void){};
               ~CMyButton(void){};
              
                void bind(CLine &aLine) {m_Line = aLine;}
                void addition() {++m_Line.count;}
};




CMyButton  Btn1;
CMyButton  Btn2;

CLine gLine;

void OnStart()
{
   Btn1.bind(gLine);
   Btn2.bind(gLine);
   
   Print("Line.count=", gLine.count);
   Btn1.addition();
   Print("Line.count=", gLine.count, "  Btn1.m_Line.count=", Btn1.m_Line.count);
   Btn2.addition();
   Print("Line.count=", gLine.count, "  Btn2.m_Line.count=", Btn2.m_Line.count);
   Btn1.addition();
   Print("Line.count=", gLine.count, "  Btn1.m_Line.count=", Btn1.m_Line.count);
   Btn2.addition();
   Print("Line.count=", gLine.count, "  Btn2.m_Line.count=", Btn2.m_Line.count);
}

У меня сейчас так происходит: