OOP与程序化编程 - 页 34

 
Andrei:

这就是问题的关键--如果你把所有的东西都与所有的东西隔离开来,处理这样的代码就会困难很多倍,更不用说当你需要知道所有必要变量的当前值时,不可能对代码进行充分的调试......。

如果你写了一个类,它使用了交易处理器的接口--你不应该知道这个接口内的当前变量。 调试REMOTE部分。

如果你需要调试交易处理器本身--同样,你应该调试它,在这个类里面,你不应该知道任何变量,例如,来自输入信号发生器的变量。

这就是封装的本质--在每个地方,我们只用我们需要的东西来工作,不干扰其他地方。

 
Andrei:
这不是关于低级别的问题,而是关于在那里流动的逻辑,以及在每个可能的时间点上变成什么,包括知道所有的内部变量......如果不理解所有这些多余的逻辑,对一个非作者使用这个代码的意义就完全消失了......

你好...

你对Metatrader的工作原理了解很多吗?你知道MT的任何变量吗?但这并不妨碍你使用它。

这是你应该在你的程序里面做的事情。有一些区块--它们使用预定义的接口进行互动,并且不会相互干扰。

 
George Merts:

如果你写了一个类,它使用了交易处理器的接口--你不应该知道这个接口内的当前变量。 调试REMOTE部分。

如果你需要调试交易处理器本身--同样,你应该调试它,而且是在这个类里面--你不应该知道任何变量,比如说,来自输入信号发生器。

这就是封装的本质--在每个特定的地方,我们只用我们需要的东西来工作,不干扰其他地方。

如果你曾经写过一个稍微复杂的计算算法,你一定注意到总是有很多变量,这些变量需要在不同的地方进行多次处理,并且能够在程序的不同部分随时控制其数值...你如何能在这种情况下增加对对象的所有内部内容的封装,使其远离外部世界是不清楚的....。
 
George Merts:

你好...

你对Metatrader的工作原理了解很多吗?你知道MT的任何变量吗?但这并不妨碍你使用它。

你应该在你的程序中这样做。有一些区块--它们使用预定义的接口进行互动,并且不相互干扰。

小心,我们说的不是内部的MT变量,我们说的是内部的对象变量,你已经将其隔离,防止在调试和编写代码时读取其数值的可能性......
 
Andrei:
小心,我们说的不是内部MT变量,我们说的是你已经隔离的内部对象变量,防止在调试和编写代码时读取其值的可能性......

如果其他地方需要内部对象变量,那就不再是内部对象变量了,你必须考虑构建该对象的逻辑(很可能又要把它分成小对象)。作为最后的手段,如果真的有必要,而且没有其他方法,就在接口中做一个公共访问的Get-方法。

 
George Merts:
安德烈甚至比彼得或桑桑尼茨更有临床经验,你是在浪费你的时间
 
Andrei:
如果你曾经写过一个稍微复杂的计算算法,你一定看到总是有很多变量,你需要在不同的地方多次处理这些变量,并且能够随时控制它们在程序的不同部分的值...你如何能在这种情况下增加对对象的所有内部内容的封装,使其远离外部世界是不清楚的....。

这样的事情表明,是你,不幸的是,几乎什么都没写 :-(

系统中如此混乱!

 
Ihor Herasko:

如果内部对象变量在其他地方被需要,它们就不再是内部对象变量。作为最后的手段,如果真的需要,而且没有其他办法,就在接口中做一个公开访问的Get-方法。

是的......你不禁要问,这里面到底有什么呢 :)我们的想法是要有一个足够的编程语言,以最小的手势方便调试和编写代码,而这里我们有一个完全相反的情况......

 
Maxim Kuznetsov:

这样的事情表明,是你,不幸的是,几乎什么都没写 :-(

系统中如此混乱!

如果你能在讨论中少一些情绪化和反思,多一些具体的东西,你就不会有什么价值。:)
 
Andrei:
如果你曾经写过一个稍微复杂的计算算法,你一定注意到,总有许多变量必须在不同的地方进行多次处理,而且你必须能够随时控制它们在程序不同部分的值...在这种情况下,你如何将对象的所有内部内容从外部世界添加到封装中,目前尚不清楚....。

你好。

如果一个区块需要另一个区块的数据--就会声明一个适当的虚拟接口来提供这种能力。在这里,交易处理器的功能--在程序的不同部分都需要,在输入的发生器中,在跟踪和退出的控制器中,在停止交易的控制器中。这些程序块中的每一个--都可以引用专家顾问对象,并获得交易处理器接口。同时--没有人可以直接访问这个处理器--只能通过一个预定义的接口。

在其他地方也是如此--如果需要一些数据--那么这个块必须提供适当的接口。

问题是,程序中的任何一点都只能访问它所需要的变量,而不能访问任何其他变量。

原因: