MQL5中的OOP问题 - 页 50

 
Aleksey Mavrin:

迪米特里,在这种情况下,你可能有点混淆了模式保持者和原型的目标,以及它们所有可能的组合和表现形式。 首先--Snapshot不一定要复制整个对象,不像Prototype那样。

是的,封装的需求主要表现在有很多人的大型项目上。对于像大多数这样的玩具来说,这有点儿多余。

它归结为--坐在一起认真辩论,一个值可以分配 给一个变量,然后就可以使用。哦,是的--在对任何东西进行编程时,很多时候都会给不同的变量分配不同的值,然后再使用它们。但现在它的叫法不同了,现在讨论它时,你必须皱起眉头,摆出一副严肃的样子。

而且重要的是不要犯错,如果所有的字段都保存了,那就是原型,如果不是全部,那就是保持者,否则那些人就会笑。

 
Sergey Dzyublik:

你不是 "他们在安装互联网,我们不需要,我们也不需要你的互联网...... "派别的成员,对吗????


1.保管人,从设计上看,类似于他们在用可改变的内容打字时用来存储状态的模式,以便在这些改变不是一个而是几百个时回滚改变。例如,照片编辑器,文本编辑器...
写完后发现 -https://refactoring.guru/ru/design-patterns/memento
2.基本上,不知道和不了解这个主题来批评那里的东西是不好的做法...
3.你已经不理解的东西怎么会变得更加混乱和难以理解?
4.剩下的就看你自己了...


国民党与此有什么关系?

 
Sergey Dzyublik:

你是不是 "他们安装了intinet,我们不需要它,你来安装 "的成员????


1.保管人,从设计上看,类似于他们在用可改变的内容打字时用来存储状态的模式,以便在这些改变不是一个而是几百个时回滚改变。例如,照片编辑器,文本编辑器...
写完后发现 -https://refactoring.guru/ru/design-patterns/memento
2.基本上,不知道和不了解这个主题来批评那里的东西是不好的做法...
3.你已经不理解的东西怎么会变得更加混乱和难以理解?
4.剩下的就看你自己了...


我一直支持你!谢谢你对我的观点进行论证...我很懒))。

我只想在第1点中补充一点,快照不一定存储了对象的所有数据,同一个对象可以有几个分支,有数百个快照,"来自不同方面的快照"。在这种情况下,存储数百份未使用的数据确实是最糟糕的做法。

 
Dmitry Fedoseev:

已经到了这个地步了--坐在那里,一本正经地谈论一个变量如何被赋值,然后被使用。哦,对了--在任何东西的编程中,很多时候都会给不同的变量分配不同的值,然后再使用它们。但现在它的叫法不同了,现在讨论它时,你必须皱起眉头,摆出一副严肃的样子。

重要的是不要犯错,如果所有的字段都被保存,那就是原型,如果不是全部,那就是守护者,否则男孩们会笑的

德米特里,我向你保证,我很乐意嘲笑你,嗯,我喜欢)但在这种情况下,你已经夸大了,甚至特别好地笑了。

你只是真的糊涂了--拍摄不等于物体复制,我已经向你指出了。

如果不清楚,让我举个例子为你解释--你有1000字节的对象,你需要200个快照,那么为什么要复制800个,特别是如果你有数百万个保存的快照。

p/s/ 而在一般情况下。难道人们没有意识到,模式只是解决一个基本的典型问题的初级例子。而事实上,这些任务并不简单,而是更加复杂。为了解决实际问题,这些模式是必要的,但往往不是纯粹的书本形式,而是适应特定的任务,可能相互结合,可能增加一些即兴创作,如果任务允许,有时表现为简化,反之则是实现 "加权"。

再说一遍,为什么需要封装和接口--如果你的智商低于Wasserman,或者你没有参加过真正的项目,可能就无法理解,因为项目的不同部分是由不同的人同时改变的,不遵循OOPD的基本原则就会在捕捉bug上付出巨大的代价。真的,为什么要为市场盖上EA的印章而做这一切?)

 
鉴于。
1.一个有限状态机(FSA)
2.KA的数量不详。
3.航天器的状态:成功/失败/工作
4.CA是在几个线程中执行的,线程的数量是未知的

一个模式必须允许。
1.为每个进程发布一个唯一的ID--计数器不起作用
2.用线均匀地 加入温泉水
3.获取航天器的状态
4.如果 KA 状态与之前发布的任务相同,则重新启动 KA
5.将AC保存到数据库,如果状态成功,将其从流程中删除
6.恢复AC的状态(保存的ID)并将其添加到流程中。
7.要有一个交换EA消息的公共池,这个池不是橡胶的,被删除的EA不会收到消息,但新创建的EA应该收到新的消息,而不是被杀死的EA留下的消息,线程和EA之间没有同步。
8.保存和恢复整个模式和信息库的状态

* KA不执行相同的任务
**消息池是主要问题,但也可能是CA或DB或?
***也许这都是数据库的工作,这里根本不需要模式?
 
?
 
Igor Makanu:
鉴于。
1.一个有限状态机(FSA)
2.KA的数量不详。
3.航天器的状态:成功/失败/工作
4.CA是在几个线程中执行的,线程的数量是未知的

一个模式必须允许。
1.为每个进程发布一个唯一的ID--计数器不起作用
2.用线均匀地加入温泉水
3.获取航天器的状态
4.如果 KA 状态与之前发布的任务相同,则重新启动 KA
5.将AC保存到数据库,如果状态成功,将其从流程中删除
6.恢复AC的状态(保存的ID)并将其添加到流程中。
7.要有一个交换EA消息的公共池,这个池不是橡胶的,被删除的EA不会收到消息,但新创建的EA应该收到新的消息,而不是被杀死的EA留下的消息,线程和EA之间没有同步。
8.保存和恢复整个模式和信息库的状态

* CA不执行相同的任务
**消息池是主要问题,但也可能是CA或DB或?
***也许这都是数据库的工作,这里根本不需要模式?
1.你有一个复杂的任务,所以模式这个词在你的问题中只能用复数,如果有的话 :)
2.你需要在各线程中均匀地 添加CA。一个用单子idemaker和线程管理器实现的工厂有什么问题?为什么一个简单的计数器不适合,这还不清楚?没有办法控制CA的产生还是什么?那么,你是在为别人的项目制作插件还是自己的项目?
7.观察者,按航天器创建时间进行过滤。针对MT的所有实施方案。
所有保存在数据库中 - 数据库层并不复杂。
将工厂与从数据库中恢复联系起来没有困难。
而一般来说--对你的问题的正确回答--你至少需要所有的模式。认真地说。掌握了它们之后,你就需要承担这样的任务。因为在这个过程中,你可能同时需要装饰器和facade(用于DB)以及访问者来实现端到端的事件和其他。

 

Sergey Dzyublik:

1.一个保持者,在设计上类似于用可改变的内容 打字时用来存储状态的模式,当这些改变不是一个而是几百个时,可以回滚改变。例如,一个照片编辑器,一个文本编辑器...

2.事实上,不知道和不了解这个主题来批评那里的东西是一种不好的做法......

关键的一点已经被强调了。 可修改的内容才是许多滥用OOP的问题的根源。 我也曾在很长时间内陷入这种情况,但随着经验的积累,逐渐明白了。在代码中,如果对象(指针)之间存在大量的相互关系,同时这些对象又是可改变的--那就是一根可怕的面条,不会改变。 因此,我们应该努力使引用 对象不可改变。 只有值对象必须是可改变的,即结构和简单类型,以及指针也是。

在这种情况下,最好将初始对象声明为一个结构,而不是一个类。 然后你可以改变它的内容。 在这种情况下,当然不会像所讨论的模式中那样获取和保存它的指针,这是正确的。 要改变对象,你必须明确地引用它们的方法,或将它们作为参数传递给一个函数,即

memento.restoreState(myObject);

myObject.restoreState(memento);

不是这样的。

memento.restoreState();

看起来我们在改变一个纪念品对象,但实际上我们在改变其他的对象,这些对象可能位于程序的其他地方。这就产生了一个副作用。 这与在一个地方改变一个全局变量 而在另一个地方使用其值是一样的。

也就是说,一个纪念品不应该存储对原始对象的引用。它应该只存储内容。这是我的观点,但我认为我离真相不远了 )

 
Aleksey Mavrin:
一般来说--对你的问题的正确回答是,你至少需要所有模式。认真地说。

我不是在宣称我自己的观点,可能是在什么地方读到的,但我认为,在编程中只有两个问题:正确的程序结构和快速地为一个变量找到一个好的名字,其他的事情都很容易完成。

我也是认真的。

谢谢,我将阅读你的模式

我将等待,万一有其他人出现,但只有在初学者和培训者的问题上,akademevelopers才会扑过来 ))))

 
Alexey Navoykov:

1)代码中,有很多对象(指针)之间的相互关系,同时对象是可以改变的,这是一个荒谬的面条,在这个面条中,魔鬼以后也无法理解。因此,有必要努力 使引用对象不可改变。
2)
只有值对象,即结构和简单类型,以及指针应该是可改变的
3)
在这种情况下,最好将初始对象声明为一个结构,而不是一个类。 然后你可以改变它的内容。 当然,你不能像所讨论的模式那样,对它采取任何指针并保存它,这是对的
4)必须通过明确地调用对象的方法或将其作为参数传入函数来改变对象。
看起来好像我们在改变memento对象,但实际上它是其他对象,可能位于程序的其他地方。这就产生了一个副作用。

1.事实证明,数据结构 Tree都是来自邪恶的...
2.可怜的C++,class == private struct,怎么办,我们也许应该放弃结构和类。
3.这就对了:没有模式,没有通过指针排序,没有节省内存,特别是对大对象而言...
4.我们不应该忘记禁止使用接口和模板函数,否则你将不明白你正在处理的是什么对象--这是多么可怕的事情......