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

 
Andrei:

У класса есть только внутренние переменные и нет входных и выходных... Где вы видели применение в программировании такого объекта, который никак не контактирует с внешним миром и варится в собственном соку?


+100

 

Обсуждение напомнило одно видео, ребята показывали недавно :)


 
Andrei:

У класса есть только внутренние переменные и нет входных и выходных... Где вы видели применение в программировании такого объекта, который никак не контактирует с внешним миром и варится в собственном соку?

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

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

Тоже самое с торговой позицией - части ТС -  не имеют прямого доступа к торговой позиции. Они могут получить только виртуальный интерфейс, который позволяет подсчитать число открытых торговых компонент, и данные каждой компоненты. Но при этом ТС даже не знает, с чем имеет дело - то ли с ордером МТ4, то ли с позицией МТ5. Все это - от нее скрыто. ТС не должна иметь доступа к переменным, используемым для работы с ордерами в МТ4 или позициями МТ5, она и не имеет.

 
George Merts:

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

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


Давайте конкретно и очень понятный пример.

1. на входе котир

2. на выходе команда купить/продать.

3. Вход преобразовывается в выход по пересечению двух машек.

Какие между ними ООПы и зачем?

 
СанСаныч Фоменко:

Метаквотам объясните это: зачем это они написали огромные руководства по терминалу, по языку и вообще откуда это горы документации на программные продукты например на Срр.. И вообще, бывают ли программные продукты без документации? Очень странно, что этого Вы не замечаете.


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

 
Ihor Herasko:

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

Документацию вели в прошлом веке, соблюдали ГОСТы и пр. Сейчас это все не нужно.

Здесь абсолютно с Вами согласен, так как ничего серьезного не пишут.

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

Какие там это "тест-кейсы и интерфейсы классов" при разработке компиляторов? при программировании математических алгоритмов? 



ПС.

Раньше была рубрика для перлов.

Это в нее

Руководство программы не есть документация.

 
СанСаныч Фоменко:

Давайте конкретно и очень понятный пример.

1. на входе котир

2. на выходе команда купить/продать.

3. Вход преобразовывается в выход по пересечению двух машек.

Какие между ними ООПы и зачем?

Все достаточно просто.

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

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

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

 
СанСаныч Фоменко:

Давайте конкретно и очень понятный пример.

1. на входе котир

2. на выходе команда купить/продать.

3. Вход преобразовывается в выход по пересечению двух машек.

Какие между ними ООПы и зачем?

/// применение  ООП для элементарных задач (фактически весь код)

OnInit(){

Series FAST_MA=MA(...);

Series SLOW_MA=MA(...);

OnCrossUp(FAST_MA,SLOW_MA,Buy);

OnCrossDn(FAST_MA,SLOW_MA,Sell);

}

но сам по себе ООП он внутри наработанных библиотек - он делается чтобы писать легко и просто и при этом всё было отлажено. Там и интерфесы "источник котиров" и "исполнятор ордеров", "таймсерии","индикаторы" и уйма всего..Зато вот такой вот короткий код, готов к жёстким условиям реального рынка, со всеми сбоями и пакостями

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

 
George Merts:

Все достаточно просто.

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

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

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


Обалдеть!

Мне вот стало интересно: есть ли еще какая-либо возможность в совремнном программировании  круче запутать проблему уровня выеденного яйца?

 
Maxim Kuznetsov:

/// применение  ООП для элементарных задач (фактически весь код)

OnInit(){

Series FAST_MA=MA(...);

Series SLOW_MA=MA(...);

OnCrossUp(FAST_MA,SLOW_MA,Buy);

OnCrossDn(FAST_MA,SLOW_MA,Sell);

}

но сам по себе ООП он внутри наработанных библиотек - он делается чтобы писать легко и просто и при этом всё было отлажено. Там и интерфесы "источник котиров" и "исполнятор ордеров", "таймсерии","индикаторы" и уйма всего..Зато вот такой вот короткий код, готов к жёстким условиям реального рынка, со всеми сбоями и пакостями

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


У меня OnInit() выглядит примерно также - десяток строчек...

И что?