ООП vs процедурное программирование - страница 34

 
Andrei:

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

Если вы пишете класс, который пользуется интерфейсом торгового процессора - вам не следует знать текущие переменные внутри полученного интерфейса.  Отлаживайте ТЕКУЩУЮ часть.

Если надо отлаживать сам торговый процессор - опять же, надо отлаживать именно его, и внутри этого класса - вам не следует знать никакие переменные, скажем, из генератора сигнала входа.

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

 
Andrei:
Не идет речь о низком уровне, а о логике того что там куда перетекает и во что превращается в каждый возможный момент времени, включая знание всех внутренних переменных... Без понимания всей этой избыточной логики смысл использования данного кода для не автора пропадает начисто...

Здрааасте...

Вы раве много понимаете в работе Метатрейдера ? Вы разве знаете хоть одну из переменных МТ ? Но это - вам не мешает его использовать.

Так и следует делать внутри своей программы. Есть ряд блоков - они взаимодействуют с помощью заранее определенных интерфейсов, и друг внутрь друга не лезут.

 
George Merts:

Если вы пишете класс, который пользуется интерфейсом торгового процессора - вам не следует знать текущие переменные внутри полученного интерфейса.  Отлаживайте ТЕКУЩУЮ часть.

Если надо отлаживать сам торговый процессор - опять же, надо отлаживать именно его, и внутри этого класса - вам не следует знать никакие переменные, скажем, из генератора сигнала входа.

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

Если вы хоть раз писали хоть один мало мальски сложный вычислительный алгоритм, то наверно могли бы заметить, что всегда есть множество переменных, которые нужны обрабатывать несколько раз в разных местах и иметь возможность контролировать их значения в разных частях программы в любой момент времени... Как к этой ситуации вы сможете присобачить инкапсуляцию всего внутреннего содержания объекта от внешнего мира непонятно....
 
George Merts:

Здрааасте...

Вы раве много понимаете в работе Метатрейдера ? Вы разве знаете хоть одну из переменных МТ ? Но это - вам не мешает его использовать.

Так и следует делать внутри своей программы. Есть ряд блоков - они взаимодействуют с помощью заранее определенных интерфейсов, и друг внутрь друга не лезут.

Будьте внимательней, не идет речь о внутренних переменных МТ, а о внутренних переменных объекта, которые вы изолировали, предотвратив возможность считывания их значений во время отладки и написания кода...
 
Andrei:
Будьте внимательней, не идет речь о внутренних переменных МТ, а о внутренних переменных объекта, которые вы изолировали, предотвратив возможность считывания их значений во время отладки и написания кода...

Если внутренние переменные объекта нужны где-то еще, то это уже не внутренние переменные объекта, нужно задуматься о логике построения этого объекта (скорее всего, еще раз поделить его на более мелкие объекты). В крайнем случае, если это действительно необходимо и других путей нет, в интерфейсе делается Get-метод с public доступом.

 
George Merts:
Андрей еще более клиничный чем Петер или Сансаныч, зря время тратите
 
Andrei:
Если вы хоть раз писали хоть один мало мальски сложный вычислительный алгоритм, то наверно могли бы заметить, что всегда есть множество переменных, которые нужны обрабатывать несколько раз в разных местах и иметь возможность контролировать их значения в разных частях программы в любой момент времени... Как к этой ситуации вы сможете присобачить инкапсуляцию всего внутреннего содержания объекта от внешнего мира непонятно....

подобное как раз говорит о том что это вы, к сожалению, практически ничего не писали :-(

такой кавардак в системе !

 
Ihor Herasko:

Если внутренние переменные объекта нужны где-то еще, то это уже не внутренние переменные объекта. В крайнем случае, если это действительно необходимо и других путей нет, в интерфейсе делается Get-метод с public доступом.

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

 
Maxim Kuznetsov:

подобное как раз говорит о том что это вы, к сожалению, практически ничего не писали :-(

такой кавардак в системе !

По меньше бы эмоций и рефлексии и побольше бы конкретики по сути обсуждения - вам бы цены бы не было. :)
 
Andrei:
Если вы хоть раз писали хоть один мало мальски сложный вычислительный алгоритм, то наверно могли бы заметить, что всегда есть множество переменных, которые нужны обрабатывать несколько раз в разных местах и иметь возможность контролировать их значения в разных частях программы в любой момент времени... Как к этой ситуации вы сможете присобачить инкапсуляцию всего внутреннего содержания объекта от внешнего мира непонятно....

Здрасте.

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

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

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

Причина обращения: