MQL5中的OOP问题 - 页 33

 
Alexey Viktorov:

经济日历 事件样本是CalendarValueHistory(),这已不是什么秘密。在一个案例中,一个时间范围内的所有新闻。在另一个按国家和另一个时间范围。在第三个由一个符号。但是,是否有根本的区别?编程讲座是否按照任务的类型来划分解决方案?

我最近遇到一个没有通过驾驶考试的人,他愤愤不平地说,他们在驾驶课上没有在这个十字路口开车,他就是不知道如何在这个十字路口开车。

当你创建一个类时,你是在引入一种新的数据类型。

你的班级具体做什么并不那么重要。

重要的是你打算用类对象作为数据做什么?

(放入数组,传入函数,从函数返回,......)。

在这一点上,我不太确定这门课是否有必要。

如果是这样,就一定是一个班而不是三个班吗?

也许在你的任务中,你可以与一个(或三个)功能相处?

 
Alexey Viktorov:

厌倦了...也有带接口的模板,可用于主?

在MQL中不存在这样的接口,几页前的抽象类也是如此,对我来说,事后直接阅读代码更容易。

接口方便用不同的构造函数来初始化

https://www.mql5.com/ru/docs/basis/types/classes 关键词界面中的例子与我的模板是一样的,试着在你自己的地方复制这个例子,也许这就是你要找的。

 
Igor Makanu:

在MQL中不存在这样的接口,几页前的抽象类也是如此,对我来说,事后直接阅读代码更容易。

接口方便用不同的构造函数来初始化

帮助中的例子https://www.mql5.com/ru/docs/basis/types/classes,关键词是界面 - 这正是我的模板,试着在你自己的环境中重现这个例子,也许这就是你要找的东西。

伊戈尔,你还记得沙皇给斯特莱尔茨的费多特的任务吗?

     试着把那个 "To-Can't-Be "弄到手!把名字记下来,免得你在匆忙中忘记了它。

那两个年轻人的回答是什么呢?

     如果我们有一个原理图或蓝图就好了,如果没有,我们就会去寻找它,找到魔鬼!"。

如果你不知道规则或要获得的最终结果,你怎么能尝试复制一些东西呢......。

 
Alexey Viktorov:

无聊...也有模板和界面需要掌握?

好吧,如果它很无聊,那就不是你的事。
 
Koldun Zloy:

当你创建一个类时,你是在引入一个新的数据类型。

目前还不清楚是否需要这个类别。

如果是这样,是否必须是一个而不是三个?

也许在你的任务中,你可以用一个(或三个)功能来完成?

这也许是可能的,而且很可能是可能的,但我想写一个可以同时连接到指标和专家顾问的类。而且,从我的角度来看,这个指标的设计是为了让函数在不同的变体中被调用。

 
Alexey Viktorov:

这可能是,而且很有可能是,但我想写一个可以从指标和专家顾问中调用的类。而在我看来,该指标的设计方式是,应该以不同的变体来调用该函数。

该函数也可以从指标和专家顾问中调用。

 
Alexey Viktorov:

我想我已经开始理解OOP的必要性和实用性了,但我在实现它时遇到了困难。

我有一个类,要和三组不同的变量一起使用。但它执行的是一项任务。简单地说,我们可以插入3个构造函数,声明3个变量并引用它们。但在我看来,这并不完全正确。除此之外,在两个变体中都有一个字符串类型的变量,但它的名称不同,而且在代码的不同部分使用。当然,你可以改变变量的顺序,但我认为这也不太正确。

我读了关于新操作员 的文件,但不明白它可能有什么帮助。我看不出三个不同的对象变量和三个指向相同对象的指针之间有什么区别。也许当你创建一次指针,使用这个对象并在不需要它的时候删除它是有利可图的。但是,如果你经常需要这个对象,每次都为它创建一个指针并删除它是绝对愚蠢的。

所以,请帮我一把。我读过一些关于C++中OOP的解释,但那里的描述比mql5上的文档更糟糕。请不要让没有耐心的人加入我,我会问太多的问题。我对没有解释的现成代码也不感兴趣,我想了解它,而不是愚蠢地重复 "和我们一起做,像我们一样做..."。

与 "类 "的概念最接近的实体是结构。而一个结构是一个链接的数据集。也就是说,它是一组以有意义的方式联系在一起的异质变量。一个类也会增加一些方法,这些方法可以用来操作这些数据。与 "方法 "最接近的类似物是一个函数。也就是说,一个类是一个结构,其中内置了一系列的功能,可以用来控制和形成里面的数据。在类对象内部形成数据的不同情况和变体,可以有多种方法。在你的案例中,你将需要三个方法,它们将在类内形成数据,相应地用于每种情况。
类中必须有一个 "默认构造函数"。当使用new操作符创建一个新的类的对象时,这个东西被调用。我想把默认的构造函数与MQL程序中的OnInit函数进行比较。
为了继续类比,析构器是OnDeinit函数的类似物。
你不必在对象被创建并完成其工作后立即 "杀死 "它。在MQL-程序完成后,你可以在OnDeinit函数中 "杀死 "创建的对象,当程序运行时,所有对象都可以在内存中,你可以引用它们。
 
Koldun Zloy:

该函数也可以从指标和EA中调用。

我并不怀疑这一点。我想加入编程的潮流方式,而你给我这样的建议))))。你不妨从OOP中拒绝。我本来就不理解这些噱头的必要性,现在你又劝我不要这样做:)))

 
Alexey Viktorov:

我并不怀疑这一点。我想加入时髦的编程方式,而你却给我这样的建议)。你还不如拒绝使用OOP。我本来就不理解这些噱头的必要性,现在你又劝我不要这样做:)))

如果你用类来做你不了解的事情,那就不是OOP。

是的,我建议你,在你理解这些噱头的必要性之前,不要使用它们。

 
BlackTomcat:
与 "类 "的概念最接近的实体是结构。而一个结构是一个链接的数据集。也就是说,它是一组以有意义的方式联系在一起的异质变量。 一个类也会增加一些方法,这些方法可以用来操作这些数据。与 "方法 "最接近的类似物是一个函数。也就是说,一个类是一个结构,其中内置了一系列的功能,可以用来控制和形成里面的数据。在类对象内部形成数据的不同情况和变体,可以有多种方法。 在你的案例中,你将需要三个方法,为每种情况在类内生成相应的数据。
类中必须有一个 "默认构造函数"。当使用new操作符创建一个新的类的对象时,这个东西被调用。我想把默认的构造函数与MQL程序中的OnInit函数进行比较。
为了继续类比,析构器是OnDeinit函数的类似物。
你不必在对象被创建并完成其工作后立即 "杀死 "它。在MQL-程序完成后,你可以在OnDeinit函数中 "杀死 "创建的对象,当程序运行时,所有对象都可以在内存中,你可以引用它们。

所以,我在努力避免使用三种类似的方法。毕竟,它们几乎是一样的。他们得到一个日历事件的数组,并筛选出不必要的记录,提供一个数组供进一步处理。