
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
У как эти коэффициенты извлекаются из класса?
Соответствующими функциями.
Вот мой заголовочный файл класса МНК:
В данном классе - есть все функции для вычисления коэффициентов МНК, и для дальнейшего построения кривой степени от 0 до 3.
А сами данные - отсутствуют, они получаются с помощью виртуальных функций.
Для того, чтобы использовать данный класс - надо пронаследоваться от него, и определить эти функции получения исходных данных.
Вот именно организацию данных внутри класса и нужно знать для процесса отладки и написания кода, так как это постоянно меняется по ходу дела.
Это - пока ты отлаживаешь работу самого класса.
Как только класс отлажен - ты забываешь про его внутреннее содержание.
Я уже приводил свой класс торговой позиции:
Как видишь, в нем все функции виртуальны - ты, получая позицию - даже не знаешь, где ты - то ли в МТ4, то ли в МТ5 (а, может быть, и еще где-то).
Ты просто получаешь указатель на CTradePositionI, и с его помощью - можешь перебрать все компоненты позиции.
Вызываешь у него функцию GetTotalComponents() - узнаешь, сколько их.
Потом можешь вызывать фукнцию GetComponent() - чтобы получать отдельные компоненты позиции.
Вызывая эту функцию - ты опять же, получаешь не данные, а интерфейс:
Можешь получить все данные по любому ордеру МТ4 или хедж-позиции МТ5 (при этом тебе даже неинтересно, что это реально).
Классы с данными - они отлажены, и работают. Пользователь - никакого доступа к ним не имеет. Он может получить только вот эти интерфейсы, и работать с позициями.
Если надо совершить торговое действие - опять же, для этого существует интерфейс торгового процессора:
Заметь, снова - все функции виртуальные, и пользователь никакого доступа к данным торгового процессора не имеет.
Хочешь совершить торговое действие - вызывай соответствующую виртуальную функцию, а лезть во внутренние структуры ты не можешь.
Инкапсуляция - очень полезная штука, позволяющая сосредоточить внимание на конкретном действии, и не думать о внешних объектах, ограничиваясь только лишь интерфейсом взаимодействия.
А сами данные - отсутствуют, они получаются с помощью виртуальных функций.
Для того, чтобы использовать данный класс - надо пронаследоваться от него, и определить эти функции получения исходных данных.
А без наследования напрямую нельзя данные взять?
А без наследования напрямую нельзя данные взять?
Можно.
Можно даже вобще с классами не заморачиваться.
Но только, когда возвратишься к коду спустя некоторое время - любая система, написанная без инкапсуляции - требует куда больше ресурсов на модификацию. Фактически, приходится писать все заново.
Вот этот код с реализацией МНК - годится для любого места, где он нужен. А если бы данные были доступны извне (особенно для модификации) - я не поручусь, что где-то я случайно не изменю их, а в результате - начнут неверно работать и прочие места.
Наследование - это просто эффективный механизм реюза кода. Если код нам нужен только один раз - возиться с ООП-оформлением не имеет смысла. Но, если код нам может понадобиться во многих местах - ООП-оформление с лихвой себя окупает.
Georgiy Merts:
А если бы данные были доступны извне (особенно для модификации) - я не поручусь, что где-то я случайно не изменю их, а в результате - начнут неверно работать и прочие места.
Вот поэтому каждый человек должен для себя решить - насколько его забывчивость прогрессирует, так как если программист может сесть и случайно перепортить все свои коды, даже не обратив на это внимание, то скорее всего ему ООП очень даже подойдет, а в остальных случаях наверно эти страхи не сбудутся и смысла для него в ООП нет.
Как вариант лечения забывчивости и от случайного написания кода там где не надо - можно использовать документирование кода и создание резервных копий.
Также полезно не пить много крепких напитков во время программирования так как это сильно увеличивает забывчивость и количество случайно написанного или стертого кода. ))
Это пожалуй самый ценный совет...
Вообще конечно всем спасибо за разъяснения. Но наверно мне проще в процедурном варианте писать. Тем более что сама логика не самая сложная.
Вот поэтому каждый человек должен для себя решить - насколько его забывчивость прогрессирует, так как если программист может сесть и случайно перепортить все свои коды, даже не обратив на это внимание, то скорее всего ему ООП очень даже подойдет, а в остальных случаях наверно эти страхи не сбудутся и смысла для него в ООП нет.
Как вариант лечения забывчивости и от случайного написания кода там где не надо - можно использовать документирование кода и создание резервных копий.
Также полезно не пить много крепких напитков во время программирования так как это сильно увеличивает забывчивость и количество случайно написанного или стертого кода. ))
Да-да, есть тут такой Peter Konov - гигант запоминания с резко ослабленными способностями к забыванию.
Но я не раз был самому себе благодарен за то, что в любом месте кода у меня доступны исключительно только те данные, которые в этом месте нужны, а к другим - доступ ограничен. Неоднократно я сталкивался с ситуациями, когда смотрю - да какого хрена здесь я не могу получить необходимые данные ? А начинаю разбираться - опа... Не учел (забыл) важные тонкости, эти данные надо получать иначе, через другие интерфейсы, а иначе - я могу их получить с ошибкой, и даже не сразу это обнаружить.
При этом - я вобще не пью, и вроде как память имею вполне надежную. Но, только программы сейчас имеют настолько сложную структуру, что упомнить все - нереально.
Поэтому я очень широко использую ООП.
Но, в простейших случаях, когда надо что-то "проверить на коленке" - я обхожусь почти без ООП.
"Почти" - потому, что все равно, даже когда ООП не надо - мне удобно использовать старые наработки, которые выполнены в ООП-стиле.
Скажем, вот код инициализации LSM-канала:
Объект CDataProviderT - производит все действия по созданию индикатора, возвращает указатель на него, и далее, при своем рефреше - рефрешит и этот индикатор.
По полученному указателю - можно брать нужные данные и нарисовать красивый канал:
https://www.mql5.com/ru/charts/8629095/eurusd-h1-alpari-international-limited