Вопрос знатокам ООП. - страница 16

 
Georgiy Merts:

Вот-вот, про эту функцию поподробнее. У тебя она одна имеет чудовищных размеров switch, который выбирает одну из десятка нужных функций. В таком переключателе - очень легко ошибиться, случайно написав код, относящийся к одной из ветви не там.

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

Плюс - само разбирательство в этом самом огромном switch'e - на мой взгляд, куда напряжнее, чем открытие одного нужного класса, и потом разбирательство только с одной функций.

На самом деле, в ассемблерном коде вся эта пергрузка в любом случае сводится к такому же swich'у, в зависимости от указателя this. Но в случае ООП - все это скрыто от программиста, и не мешает ему в работе. Без ООП - тебе придется с ним иметь дело.

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

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

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


ЗЫ. Кстати, гигантский switch можно разбить на файлы и скрыть содержимое. Мне просто удобно видеть все целиком.

 
Vict:

Жесть, занимаетесь каким-то велосипедостроительством без должного изучения общепринятого подхода. Пётр, найдите каку-нибудь хорошую книгу, возможно Страуструпа, в какой-то книге он писал текстовый редактор, на реальной задаче чего-нибудь подчерпнёте, я содержание уже не помню, но вряд ли он плохому научит.

Спасибо, конечно. Но вряд ли конкретные задачи откроют мне на что то глаза, так как я их решил несметное количество за последние 6 лет. Реально несметное. Поэтому, знаю о чем говорю.
 
А теперь к эффективности. Switch - это что в конечном итоге? Это последовательное сравнение параметра с константами. Внимание Петр, последовательное. То есть, если искомая константа 100500-ая, то все эти сравнения на процессоре будут выполнены. Что такое перегруженные функции/методы - это, в машинном коде, после компиляци, абсолютно разные блоки кода, со своими точками входа. Так что эффективнее?
 
Реter Konow:
Спасибо, конечно. Но вряд ли конкретные задачи откроют мне на что то глаза, так как я их решил несметное количество за последние 6 лет. Реально несметное. Поэтому, знаю о чем говорю.

Задач много, а так и не поняли полезность перегрузки. Представьте, что функция шаблонная, через аргументы может пройти инт, дабл или пользовательский тип, а мы хотим найти абсолютное значение через abs(), как без перегрузки?

Посмотрел бы я на ваши костыли вокруг этих массивов при росте проекта: моделируем авто колесо -> автомобиль с 4мя колясам -> дорога с сотней автомобилей.

 
Vladimir Simakov:
А теперь к эффективности. Switch - это что в конечном итоге? Это последовательное сравнение параметра с константами. Внимание Петр, последовательное. 

Нет, switch работает по-другому. Это таблица, в которой переход осуществляется сразу к нужной константе. В этом его существенное отличие от блока if.

 
Vladimir Simakov:
А теперь к эффективности. Switch - это что в конечном итоге? Это последовательное сравнение параметра с константами. Внимание Петр, последовательное. То есть, если искомая константа 100500-ая, то все эти сравнения на процессоре будут выполнены. Что такое перегруженные функции/методы - это, в машинном коде, после компиляци, абсолютно разные блоки кода, со своими точками входа. Так что эффективнее?

Увы, неизбежный оверхед. В этом проигрываю, в другом - выигрываю.

Например: Та самая функция с гигантским switch-ем осуществляет расстановку позиций объектов в элементах и элементах в окнах. Рассчитывает их размеры. Вызываю один раз и все элементы и все объекты располагаются на своих позициях в соответствии со своими привязками. Рассчитываются их размеры и положение относительно друг друга.  Определяется, какие элементы нужно скрыть, какой требуемый размер канваса и прочее... Один вызов - огромная работа. Этот же блок может рассчитывать размеры или позиции одного элемента окна из тысячи. Один блок. Вызов  - Объект();

Сколько классов и функций мне бы потребовалось написать в ООП, для решения такого количества задач? Боюсь представить.

 
Реter Konow:

Увы, неизбежный оверхед. В этом проигрываю, в другом - выигрываю.

Например: Та самая функция с гигантским switch-ем осуществляет расстановку позиций объектов в элементах и элементах в окнах. Вызываю один раз и все элементы и все объекты располагаются на своих позициях в соответствии со своими привязками. Рассчитываются их размеры и положения. Определяется, какие элементы нужно скрыть, какой требуемый размер канваса и прочее... Один вызов - огромная работа. Этот же блок может рассчитывать размеры или позиции одного элемента окна из тысячи. Один блок.

Сколько классов и функций мне бы потребовалось написать в ООП, для решения такого количества задач? Боюсь представить.

Штук 5-10, так, на вскидку. С абсолютно понятным интерфейсом.
 
Я про количество классов. Каждый строк на 200.
 
Ihor Herasko:

Нет, switch работает по-другому. Это таблица, в которой переход осуществляется сразу к нужной константе. В этом его существенное отличие от блока if.

Да, именно так.  Так что по скорости, очевидно, это самый быстрый в MQL вариант. А вот доступ к объектам класса в управляемой среде происходит опосредованно.
 
Реter Konow:

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

Ага, прям ляпота…  Такое нужно в ветку "Юмор" )
Причина обращения: