给OOP专家的一个问题。 - 页 4

 
Igor Makanu:

访问权限修改器允许在编译时检测错误

一般来说,所有这些都不会使类的工作复杂化,不要使用它,把一切都写在公开的地方。然后就会更容易与他们合作。

SZZY:很多关于OOP、封装和继承的好词好句......。这一切都很好,但与其他编程风格相比,OOP的主要优势在于将所有的数据(类字段)和处理这些数据的功能(类方法)存储在一个地方(类)--在书中,它就是封装。进一步说,OOP的使用 取决于任务,如果任务允许扩展类,就需要层次结构,就会有基类和它们的后代--是否使用它,取决于你。

所有的对象属性也可以被 "封装 "在一个数组中。在那里,你还可以通过特定的指针属性指定对象之间的关系。那里有一个秩序,因为每个属性都有索引,其值被存储在一个特定的单元格中。 对象本身被封装在内核中。访问是最简单的--通过对象编号和属性编号。同一控件的对象之间的转换是通过属性指针进行的。
 
Реter Konow:
你也可以将一个对象的所有属性 "封装 "在一个数组中。你也可以通过特定的指针属性指定对象之间的关系。那里有一个秩序,因为每个属性都有索引,其值被存储在一个特定的单元格中。对象本身被封装在内核中。访问是最简单的--通过对象编号和属性编号。同一控件的对象之间的转换是通过属性指针进行的。

这首先是不方便的!

此外,你已经在上面写到了代码的可读性(以及上面你提到的速度--执行速度,取决于其他东西,而不是编程风格)。

一般来说,就像其他地方一样--你不尝试就不会知道,开始用OOP风格写作,你会得到具体的行动和具体的问题,这个主题中已经有了一个例子

如果我们谈论的是人工智能,你还需要把数据和与它们有关的工作分开,有了OOP,就更容易做到这一点了。

SZZ:在OOP中,什么是更好的呢? 例如,有不同类型的数据,让它成为MQL中的专家顾问设置,这些设置在块中有重复。 我们把一个块的设置和描述类的字段来把这些设置传到一个类中,这更容易创建一个带有参数的构造函数,然后写方法来处理这些EA设置。做完这一切后,我们创建一个类实例的数组,甚至只创建几个类的实例("类类型变量"),就可以了--通过编写一个类,不创建几个数组,创建识别每个数组的方法,创建一组函数,除了对数组进行修改,还不足以破坏不应该在这个call.... 的数据,问题就解决了。

ZZZY:我认为,OOP只是方便,有一种传说,如果没有继承,就没有必要使用OOP......无可奉告,没有我,这将是一场泡沫化的争论。

 
Igor Makanu:

这首先是不方便的!

此外,你已经在上面写到了代码的可读性(以及上面你提到的速度--执行速度,取决于其他东西,而不是编程风格)。

一般来说,就像其他地方一样--你不尝试就不会知道,开始用OOP风格写作,你会得到具体的行动和具体的问题,这个主题中已经有了一个例子

如果我们谈论的是人工智能,你也需要把数据和与它们有关的工作分开,有了OOP,就更容易做到了。

SZZ:在OOP中,什么是更好的呢? 例如,我们有不同类型的数据,让它成为MQL中的专家顾问设置,这些设置在块中有重复。 我们把一个块的设置和描述类字段来把这些设置传到一个类中,创建一个带有参数的构造函数,然后写一些方法来处理这些EA设置,这样会更简单。做完这一切后,我们创建一个类实例的数组,甚至只创建几个类的实例("类类型变量"),就可以了--通过编写一个类,不创建几个数组,创建识别每个数组的方法,创建一组函数,除了对数组进行修改,还不足以破坏不应该在这个call.... 的数据,问题就解决了。

ZZZY:我认为,OOP只是方便,有一种传说,如果没有继承,就没有必要使用OOP......无可奉告,没有我,这将是一场泡沫化的争论。

舒适与否,主观的问题。我更喜欢用表格的方式来排列数据。其他人则喜欢以一串葡萄或一棵树的形式。其他人更喜欢它是一串葡萄或一棵树。但是,我会认真思考你的话,并努力学习OOP中处理数据的基本原则。
 
Реter Konow:
舒适与否,主观的问题。我更喜欢用表格的方式来排列数据。其他人则喜欢以一串葡萄或一棵树的形式。其他人更喜欢它是一串葡萄或一棵树。但是,我会认真思考你的话,努力掌握在OOP中处理数据的基本原则。
我已经告诉过你一次,一个指向数组的数组就是一个二维表。一个列表是行,位于第一个的列表是列。他们可以有自己的名单。就这样,直到太阳下山。这是你正在寻找的等级制度。而且,它只是由一个班级执行。
 
Реter Konow:

在OOP中,"对象 "是对一个类的引用,它的字段(属性)在其中被声明。我把对象理解为一个编号的属性集,每个属性都是数组中的一个单元。这就是区别。

Peter,你需要清楚地了解,当类本身被定义时,没有内存被分配,即使在类里面有其他类的实例作为其属性。因此,不可能有对类的引用,而只是对类对象的引用。 当一个类的实例(对象)被声明(创建)时,内存 被分配。

HH即如果程序中存在一个类,但没有它的实例,编译器将忽略(不注意)这个类。

有一个例外。如果有的话,可以在定义类的静态方法和参数时分配内存。
 
Artyom Trishkin:
我曾经告诉过你,一个指向数组的数组就是一个二维表。一个列表是行,躺在第一个列表中的是列。他们可以有自己的名单。就这样,直到太阳下山。这是你正在寻找的等级制度。而且,它只是由一个班级执行。

在理论上,是的。但有必要以这样的方式来组织,即层次链接之间的过渡(有条件地--归纳和演绎,即从特殊到一般再到一般)作为一个链条来执行。也就是说,指针的顺序应该以一种特殊的方式结构化,以允许在任何(正确的)方向上移动,而不需要在循环中过度 "转弯 "和 "跳跃"。因此,指针的简单表格布局可能不会奏效。

已添加。

但它可能会起作用。我还不知道。

 
Igor Makanu:

我们需要把这些问题付诸实践,否则我们将无法看到什么是方便的,什么是似乎不方便的))))。

这里有一个微不足道的例子,在MQL中使用了一百五十次--确定一个新的酒吧

好的,这是一个可行的代码,但是如果我需要为2个TFs定义一个新的bar怎么办? 如果我想使用终端的所有TFs怎么办?

在OOP中会是这样的。

我现在要做的就是声明CNewbar 类的几个实例--如何 声明?甚至声明到一个数组,甚至声明到几个变量,但我已经用OOP保护数据不被意外改变

我已经公开解决了这个问题。我们的想法是创建一个包含所有符号和所有时间段的表格,并通过它进行循环,固定一个新条的事件。在第一次调用该事件的任何函数后,其标志将从表中删除。我无法判断它比OOP中复杂多少。但是,事实上,相当简单和方便的解决方案。

 
Nikolai Semko:
Peter,你必须清楚地了解,类本身并没有被分配内存,即使在类里面有其他类的实例作为其属性。 因此,不可能有对类的引用,而只是对类对象的引用。 当一个类的实例(对象)被声明(创建)时,内存 被分配。
HH即如果程序中存在一个类,但没有它的实例,编译器将忽略(不注意)这个类。
我不知道这件事。有趣的是。问题是,使用OOP在多大程度上可以轻松处理循环中的所有层次数据。循环才是任何发动机的主要机制。循环工作越好--你能挖掘的数据越多,你能做的工作就越多。
 
当一个类对象被创建时,除了为该类的所有属性(变量)分配内存 外,还会启动一个构造函数(可能不止一个)。构造函数可以是非参数化的(默认),参数化的(当创建一个类的实例时指定了一些参数,或者是一个复制构造函数,当另一个类的实例被指定为一个类的实例的参数。
 
Реter Konow:
在理论上,是的。但有必要以这样的方式来组织,即层次链接之间的过渡(有条件地--归纳和演绎,即从特殊到一般再到一般)作为一个链条来执行。也就是说,指针的顺序应该以一种特殊的方式结构化,以允许在任何(正确的)方向上移动,而不需要在循环中过度 "转弯 "和 "跳跃"。因此,一个简单的指针表布局可能是行不通的。
所有的列表都已经被赋予了二进制搜索 的功能。这意味着按搜索到的属性进行过滤,而不是逐一进行过滤。结果是,我们得到了我们正在寻找的项目的索引。