Оверхед для ООП - страница 5

 
fxsaber:

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

По-моему, особо вариантов и не придумаешь... 

Лично мне обертка нужна исключительно для кроссплатформенности - чтобы отделить логику эксперта от специфики той или иной платформы

 
Andrei:

Разумеется за красивости ООП надо платить ресурсами и большими расходами времени по отладке. ООП имеет смысл лишь как удобная обертка текста либо при минимальном использовании при инициализации среды исполнения... По сути ООП это была чисто маркетинговая штука от Микрософота для повышения расходов на рабочие часы программистов и стимулировании покупки более продвинутого оборудования. Причем сами они не дураки и весь софт пишут на Си и ассемблере.

Ну Вы фантазёр однако...

 
govich:

Ну Вы фантазёр однако...

Лыко вяжите что-то осмысленное сказать по теме обсуждения?

 

в очередной раз столкнулся...

в MQL невозможно "не криво" отделить реализацию методов от прототипа и нет возможности предоставить пользователю(покупателю, тестировщику, другу/товарищу) отдельно файл *.mqh и отдельно *.ex4 (по аналогии с *.h и .obj/lib/dll в С++)

 
Maxim Kuznetsov:

в очередной раз столкнулся...

в MQL невозможно "не криво" отделить реализацию методов от прототипа и нет возможности предоставить пользователю(покупателю, тестировщику, другу/товарищу) отдельно файл *.mqh и отдельно *.ex4 (по аналогии с *.h и .obj/lib/dll в С++)

А поконкретнее про задачу можно услышать? Вроде довольно не криво можно предоставлять хедер с импортируемой фабрикой, которая возвращает чистые интерфейсы, а вся реализация зашита внутри ex4.

 
Stanislav Korotky:

А поконкретнее про задачу можно услышать? Вроде довольно не криво можно предоставлять хедер с импортируемой фабрикой, которая возвращает чистые интерфейсы, а вся реализация зашита внутри ex4.

задача - с наименьшими телодвижениями отдать пользователю библиотеку классов в составе: mqh в котором описаны классы и ex4 в котором их реализация.

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

Если вам известен краткий и удобный способ убрать реализацию CFoo в ex4 - поделитесь рецептом.

class CFoo {
public:
   CFoo();                         //default
  CFoo(const CFoo orig); // copy
   ~CFoo();
   bool Set(string key,CFoo & link); 
   CFoo *Get(string key);
   bool Clear(string key);

};

 
Maxim Kuznetsov:

задача - с наименьшими телодвижениями отдать пользователю библиотеку классов в составе: mqh в котором описаны классы и ex4 в котором их реализация.

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

Если вам известен краткий и удобный способ убрать реализацию CFoo в ex4 - поделитесь рецептом.

class CFoo {
public:
   CFoo();                         //default
  CFoo(const CFoo orig); // copy
   ~CFoo();
   bool Set(string key,CFoo & link); 
   CFoo *Get(string key);
   bool Clear(string key);

};

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

Фабричный метод (шаблон проектирования) — Википедия
Фабричный метод (шаблон проектирования) — Википедия
  • ru.wikipedia.org
Шаблон проектирования Тип: Назначение: Структура: Плюсы: Минусы: Описан в Design Patterns Фабричный метод (англ.  также известен как Виртуальный конструктор (англ.  )) — порождающий шаблон проектирования, предоставляющий подклассам интерфейс для создания экземпляров некоторого класса. В момент создания наследники могут определить, какой...
 
Stanislav Korotky:

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

вы исходник попробуйте накидать. А ссылки на вики тут и так все знают
 
Maxim Kuznetsov:
вы исходник попробуйте накидать. А ссылки на вики тут и так все знают

А ссылка не на вики с исходниками не катит? ;-)

 
Stanislav Korotky:

А ссылка не на вики с исходниками не катит? ;-)

а вот не катит :-)

я-же говорю - попробуйте сделать, это лютый lot-of-code. Инстанцируемый класс "СFoo: public InterfaceCFoo" должен содержать поле InterfaceCFoo *privateContext (делать связь 1:1), создавать и удалять его через фабрику, все методы делегировать и при этом переводить CFoo* ссылки this<->privateContext туда сюда. Это "закат солнца вручную", сиречь замена наследования делегированием, причём на ровном месте.

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