![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это правда. Точно также как и правда то, что сам процедурный стиль программирования дает чудовищный оверхед по памяти и быстродействию ЦП. Если используешь процедурный стиль программирования - значит твоя программа тормознутая по определению, т.к.:
В параллельном окне сижу в метаэдите. Тут на сайте меня убеждают, что ну просто везде одни объекты. Открываю страничку под названием "Справочник MQL4" - одни функции! Была последняя надежда на "Графические объекты", ан нет - функция ObjectCreate".
Во дурят тут, а если бы я, по обыкновению, не читал справочники по языкам? Так бы жил оболваненный ООПовцами!
Это правда. Точно также как и правда то, что сам процедурный стиль программирования дает чудовищный оверхед по памяти и быстродействию ЦП. Если используешь процедурный стиль программирования - значит твоя программа тормознутая по определению, т.к.:
Ого, а меня еще Dmitriy Skub пожурил за наличие эмоций )) Вот где кроется настоящий ураган! Василий, я свой, буржуинский, я люблю ООП и пишу на нем, я , собственно, этот опрос-то и затеял. И все, что вы написали, совершенно верно.
Но, говоря об оверхеде, я говорил о embeded программировании на пределе возможностей проца, когда важен каждый такт и каждый байт. А в программировании на MQL этот оверхед - капля в море, можно о нем и не думать.
Сейчас попробую сделать консольный проектик С++ в студии, посмотрим на ассемблерном листинге, как происходит обращение к членам класса и обычным глобальным переменным. Ну хотя бы это.
В параллельном окне сижу в метаэдите. Тут на сайте меня убеждают, что ну просто везде одни объекты. Открываю страничку под названием "Справочник MQL4" - одни функции! Была последняя надежда на "Графические объекты", ан нет - функция ObjectCreate".
Во дурят тут, а если бы я, по обыкновению, не читал справочники по языкам? Так бы жил оболваненный ООПовцами!
Смотрите стандартную библиотеку, в справке МТ4 она не описана, надо смотреть в справке пятерки или на сайте.
А нижний слой MQL4/5 действительно построен на обычных функциях. Этот уже обсуждали, пришли к выводу, что метаквоты не захотели отпугивать старичков - процедурников.
Смотрите стандартную библиотеку, в справке МТ4 она не описана, надо смотреть в справке пятерки или на сайте.
А нижний слой MQL4/5 действительно построен на обычных функциях. Этот уже обсуждали, пришли к выводу, что метаквоты не захотели отпугивать старичков - процедурников.
R содержит около 8 тысяч пакетов, в которых имеется около 130 000 ФУНКЦИЙ. В этом языке понятие "объект" доведено до своего логического завершения - всё объекты, включая компьютер, на котором исполняется программа R. Каждая из этих 130 000 функций выдает результат в виде объекта, который может быть как вектором длиной 1 (скаляров нет) или матрицей, так и весьма замысловатым объектом, имеющем по несколько листов наименований других объектов, входящих в этот объект. Объект имеет свойства, над которым можно совершать операции. Так вектор может иметь длину ноль (не содержать элементов), но этот вектор обязательно имеет свойства, которые можно присвоить другому вектору.
Ну и что? Может быть кто-то использует, может нет...
Все это некие возможности языка, имеющие крайне слабое отношение к его достоинствам, так как можно всю жизнь писать на языке, а потребность в некоторых его возможностях банально может и не возникнуть.
А теперь, как автор опроса, ответьте мне на простой и по идее первоначальный вопрос, только конкретно, без люблю-не люблю: что такое "хорошо", и каковы критерии достижения этого хорошо. Вот начну я использовать ООП, чем лучше, в смысле "хорошо" станет мой код и как я смогу измерить степень достижения до этого "хорошо"?
ПС
Чем дальше, тем больше горжусь своим возрастом - не помещается в голове разного рода новомодная хрень.
Чем дальше, тем больше горжусь своим возрастом - не помещается в голове разного рода новомодная хрень.
Не надо путать и обманывать людей Function Call есть в любом процедурном языке. И вы можете использовать любые заданные функции любое количество раз с любыми параметрами.
Еще напиши, что ассемблер медленнее С++.
Кажется я знаю, в чем дело, ООПшники просто не в курсе, что можно программировать по другому и это персонажи, которые активно занимаются собирательством классов.
Видимо, это какая-то разновидность филателии или нумизматики. Они считают, что если ты не копишь классы и библиотеки, то ты не программист.
Лично меня они начали раздражать, когда стали использовать ООП в JavaScript содержимом обычных вэб сайтов.
Ерунда, я в 2000-2010 г. на 90% занимался embedded programming, а это чистый Си+ASM. Тем не менее, пишу на MQL с использованием ООП, прилично знаю и люблю C#.
Ну да бог с ним, с MQL, кроме него куча различных областей программирования.
Как вы будете писать программу с интерфейсом под Windows без использования ООП? А под Андроид, под iOS?
Фактически, если не брать MQL, программист, который не знает ООП, обрекает себя сейчас на программирование контролеров, там до сих пор в ходу pure C. И будет ковыряться еще 2-3 года с железом типа 4 Кб ОЗУ, 128 КБ ПЗУ. Очень увлекательно. А больше он нафик никому не нужен. Почему я написал 2-3- года? Потому что и там уже в ходу С++ компиляторы и с развитием железа чистый Си уйдет со сцены.
Ого, а меня еще Dmitriy Skub пожурил за наличие эмоций )) Вот где кроется настоящий ураган! Василий, я свой, буржуинский, я люблю ООП и пишу на нем, я , собственно, этот опрос-то и затеял. И все, что вы написали, совершенно верно.
Но, говоря об оверхеде, я говорил о embeded программировании на пределе возможностей проца, когда важен каждый такт и каждый байт. А в программировании на MQL этот оверхед - капля в море, можно о нем и не думать.
Сейчас попробую сделать консольный проектик С++ в студии, посмотрим на ассемблерном листинге, как происходит обращение к членам класса и обычным глобальным переменным. Ну хотя бы это.
Сделал, посмотрел, на современных процах и компиляторах в простейшем случае доступа к членам класса или структуры оверхеда нет, набор инструкций позволяет обойтись без вычисления смещений. Ну, я современный ассемблер плохо знаю, ибо не нужен.
Но с виртуальными функциями некоторый оверхед точно будет, т.к. реальная функция в наследниках будет искаться в этой таблице. Но, как я уже говорил, это капля в море, можно не обращать внимания.
Вот asm листинг простейшей программки
asm listing
Но это все для переменных, которые создаются на стеке, в том числе и экземпляры структуры и класса. Сейчас попробуем посмотреть доступ к классу, созданному через new
Но это все для переменных, которые создаются на стеке, в том числе и экземпляры структуры и класса. Сейчас попробуем посмотреть доступ к классу, созданному через newНемного изменил программку
Будет выглядеть немного длиннее. Но не из за ООП, а из-за необходимости доставать данные из кучи. Если бы в MQL были нативные указатели на простые типы данных вроде int, результат
был бы точно такой же, как ниже
1. Принципиально влияет. Если изобретаете велосипед, то Вы не будете сидеть с профилировщиком и биться за каждый процент ускорения кода. Ведь функций очень много и Вы постоянно как бы пишете их заново, поэтому если каждую будете оттачивать - просто ничего не допишете до конца.
2. Сортировка была указана лишь как пример. В большинстве случаев требуется сортировать сложные типы данных по нескольким критериям сортировки и без ООП это все превращается в ад.
3. Ну давайте ради интереса, напишите универсальный список List без использования классов и структур. Только функции и базовые типы. А это простейший из алгоритмов. Словарь Вы вообще адекватно без ООП не сделаете, а это один из наиболее часто используемых алгоритмов. Почитайте Кнута - узнаете много нового. Он хотя и использует в качестве примера низкоуровневый вымышленный язык, описание самих алгоритмов идет в виде манипуляций над классическими ООП объектами.
4. Человеческое мышление оперирует композитными объектами и действиями над ними. Например понятие "дверь" включает в себя дверное полотно, ручку/замок, фурнитуру, откосы и прочие мелочи. "Открыть дверь" означает совершить операцию сразу над множеством этих объектов. В ООП парадигме это действие будет таким же как и в жизни: получить объект типа "дверь". Вызвать метод "Открыть" этого объекта. В процедурном программировании все будет иначе: необходимо будет проделать специфические операции для каждого объекта, образующего множество дверь (повернуть ручку, сместить положение дверного полотна, переместить угол открытия петель и т.д.)