Мой подход. Ядро - Движок. - страница 138

 

"Расширение творческого потенциала сторонников ООП", Верещагин, Холст, Масло


 

Всем спасибо за содержательные посты.

Сегодня протестируем связь между советником и движком через ресурсы. Только что завершил. Должно работать и в тестере.

 
Реter Konow:

Ты работаешь с классом CCanvas. Он один в твоей разработке. 

Класс, это часть системы. Если он ОДИН, то системы нет.

Тогда зачем создавать объекты класса и обращаться к его функциям по правилам ООП?

Тебе ПРАКТИЧЕСКИ не нужен ООП в работе с ОДНИМ классом.

Но, ты используешь ООП в работе с ОДНИМ классом. Хотя это НОНСЕНС.

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

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

Даже ты, в своем ядре используешь ООП. Хотя делаешь это неявно:

Реter Konow:

Чтобы не быть голословным, приведу наконец пример того самого "Ядра". Точнее, это загрузочный файл. Там несколько ядер.

Напомню, что он печатается автоматически, на основе KIB-кода. Потом помещается в движок. Далее, движок работает с ним.

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

 

Что, народ, все убеждаете Петера в преимуществах ООП ?

Да не убедите вы его ! Причем, если бы у вас была такая память, как у него - вы бы сами удивлялись - нахрена лишние ООП-телодвижения, если все можно сделать намного проще ? Все переменные делаем глобальными, прямой доступ отовсюду, никаких запретов и ограничений - красота !

Это тем, кто по своему скудоумию может забыть, что он писал десять лет назад - необходимо, чтобы компилятор и язык его всемерно ограничивал. А когда ты точно помнишь, зачем и почему у тебя написана та или иная конструкция в твоем коде, которому уже много лет - ООП - это только пятое колесо в телеге.

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

 
Реter Konow:

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

2. Да. Конструктор создает ядро для движка, основанное на том коде, который ты привел. + печатает файлы подключения. Потом, Ядро помещаю в движок (DRIVE). После этого, движок может воспроизводить нужный GUI. Файлы сопряжения подключаются к советнику и начинают с ним взаимодействовать.

Получается, что каждый раз для нового гуи ты должен вносить изменения в движок (снабжать его соответствующим GUI ядром). Считаю это принципиально неверным решением. Представь что пользователей твоего движка сотни. Но движок размещенный в Маркете или где-то еще всего один. Как ты будешь поступать в этом случае? Под каждого пользователя размещать конкретный движок, который он должен скачать для себя? А как будешь подгатавливать gui-ядро для движка? Будешь снабжать каждого пользователя индивидуальным ядром? - Это быстро превратиться в сущий кошмар. Получается что твое решение не масштабированное.

 
Vasiliy Sokolov:

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

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

Даже ты, в своем ядре используешь ООП. Хотя делаешь это неявно:

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

Василий, я понимаю зачем функции рисования оформлены в класс. Потому что, кроме них существуют и другие наборы функций.

Но вопрос был немного в другом. Зачем конкретно Николаю, использовать обращение к функциям рисования через класс, если он не использует другие классы. Он только рисует.

Смысл вопроса был именно в этом.

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

Я подчеркнул, что использование ООП зачастую необосновано масшатбами решаемых задач. Ведь для ООП нужна развесистая классификация, а если ее нет, то стоит ли ее специально создавать?

Смысл в том, чтобы разработчик руководствовался требованиями механизмов, а не инструментов. 

 
Vasiliy Sokolov:

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

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

Даже ты, в своем ядре используешь ООП. Хотя делаешь это неявно:

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

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

ЗЫ. Может я и резко высказался, но я очень не терплю непроходимую глупость.

 
Vasiliy Sokolov:
 

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

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

Так что здесь - лишь "элементы ООП".

Но, и обратное - боюсь, народу не больно-то понравится - уверен, Василий, что когда я выкачу свой ООП-проект, то там наоборот, народ заверещит, что "с этим интерфейсом ничего не сделаешь, кроме того, для чего он непосредственно предназначен".  :)

 
Vasiliy Sokolov:

Получается, что каждый раз для нового гуи ты должен вносить изменения в движок (снабжать его соответствующим GUI ядром). Считаю это принципиально неверным решением. Представь что пользователей твоего движка сотни. Но движок размещенный в Маркете или где-то еще всего один. Как ты будешь поступать в этом случае? Под каждого пользователя размещать конкретный движок, который он должен скачать для себя? А как будешь подгатавливать gui-ядро для движка? Будешь снабжать каждого пользователя индивидуальным ядром? - Это быстро превратиться в сущий кошмар. Получается что твое решение не масштабированное.

Нет, Василий, ты склонен все драматизировать.)) 

В конструкторе есть кнопка, при нажатии на которую печатаются все файлы.

А движок будет загружать ядра из текстового файла. Это не сложно сделать.

 
Nikolai Semko:
Петр, ты реально что то неправильно понял в части применения ООП.  
Прости, но отдает шизофренией.

Это особая форма сознания, не мешайте ей эволюционировать

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