OOP与程序化编程 - 页 39

 
Andrei:

该类只有内部变量,没有输入或输出...你在哪里看到过这样的物体在编程中的应用,它与外界没有任何联系,在自己的汁液中沸腾?


你为什么要为你没有看到的东西争论呢?一个类的构造函数 被创建,它可以获得任何数量的参数。不同的子类在其构造函数中可以有完全不同的参数集。你可以只写方法来设置参数。

 
СанСаныч Фоменко:

1.这是对OOP需求的主要回答。

2、这是一个团队的经验问题。我写了我需要的一切。几年前,我决定再写一些--一切都能读,没有问题。


从你的回答中,我明白了一件事:OOP是某种标准,它引入了编程的纪律,引入了统一性,在此基础上,最初的错误较少,最重要的也是最重要的是,修改过程中的问题基本减少。但在认真遵守GOST、发展阶段、文件规定的情况下,也得到了同样的结果。


我必须告诉你多少次同样的事情?OOP不仅是一种代码结构化 的手段,它还包含了你的程序化编程中所没有的机制。

这也许是指如果一个人没有见过山,即使你告诉他,他也不会明白这是什么情况。

 
Реter Konow:

我个人努力追求解决方案的多功能性。这需要在不增加代码量的情况下 将类似的功能 "拼接 "到一个单一的块中。它提高了机制的效率,没有必要进行超载和分割。你只需要用点脑子--就这样)。

也就是说,有两个函数,每个函数有20行。两者都执行类似的行动或解决类似的任务。我的目标是做一个函数,用不超过20行的代码完成它们的工作。这就是我创建区块的方式。


你翻阅你的这个图书馆有多久了?

 

为了高兴--R是以绝对令人厌恶的 "全部在一个垃圾桶里,没有区别对待的访问 "模式写的。二十年前的老式方法,没有可见性、保护性或多会话的领域。我写的东西就像我是唯一的人一样。就这样,这个项目 在一个人手下由不专业的开发者诞生了。它必须从头开始重写。至少有一次。

我有一个想法,想在R中用MQL5做一个正常的界面,但在深入研究后,我立即决定不整合它。该系统断然无法保护数据和会话。

除非一个程序员在有严格要求的正常开发团队中工作(至少敲打他的手几年),否则他不会成为正常意义上的开发者。我们在考虑候选人时,90%的时间都是抓着脑袋看测试工作。整个开发行业的全面恐怖。

因此,OOP的反对者又一次在这里表现出某种愚蠢的行为。

再次抱歉。

 
СанСаныч Фоменко:

哇哦!

我在想:在今天的编程中,还有没有其他方法可以用更酷的方式来混淆一个蛋级问题?

走到一辆站在交通堵塞中的汽车前,看看它是如何设置的,然后告诉司机 "有没有什么办法可以更好地混淆问题,在这里走一百米"。

根据我的经验,这种 "混乱的问题 "比从一个带有所有全局变量 的单一模板中复制出来的 "没有问题 "的EA要容易理解得多。

 
Dmitry Fedoseev:

而你为什么要在这里猜测你没有看到的东西?一个类的构造函数 被创建,它可以获得任何数量的参数。

仔细阅读,它是关于类的,而不是关于类的构造函数。

此外,你又建议做猴子的工作--当我们可以在不做任何事情的情况下访问外部变量的参数,或者直接传递参数,而不用为构造函数-分解函数和所有随之而来的内存泄漏感到不必要的头痛时,就在一块地皮上种上花园。

 
СанСаныч Фоменко:

我的OnInit()看起来也差不多--有十几行...

那么?

就理由而言,在我所有的EA中,有10行(如果不计算内含物和评论)。

#include <MyLib\DebugOrRelease\DebugSupport.mqh>
#include <MyLib\Factories\ForTrade\EURGBP\B1H2C20T2_0001_EPF.mq5>
#include <MyLib\Factories\ForTrade\EURGBP\B2H2C20T4_0001_EPF.mq5>
#include <MyLib\Factories\ForTrade\EURGBP\B3H2C20T2_0001_EPF.mq5>

// Объявляем фабрики частей эксперта.
CB1H2C20T2_0001_EPF epfFact_0;
CB2H2C20T4_0001_EPF epfFact_1;
CB3H2C20T2_0001_EPF epfFact_2;

// Объявляем функцию получения указателя на фабрику.
CEAPartsFactoryT* CEAPartsFactoryT::GetAdvisorsPartsFactory(uint uiFactIdx = 0)
{
   if(uiFactIdx == 0) return(GetPointer(epfFact_0)); 
   if(uiFactIdx == 1) return(GetPointer(epfFact_1)); 
   if(uiFactIdx == 2) return(GetPointer(epfFact_2)); 
   return(NULL); 
};

#include <MyLib\TSTemplate\ExpertAdvisorT.mq5>

在我们的案例中,一个EA中存在三个完全不同的TS。它们都同时工作,互不干扰。

额外的TC可以通过声明适当的工厂,并在一个函数中加入返回它的代码来添加。

但真正的问题不是代码行数是否太少或太多。问题是它们是否容易维护和在必要时修改。

桑桑尼茨,你能轻易弄清彼得提供的表格文件吗?并且很容易修改它?那么,你就像彼得一样--不需要OOP。

 
Реter Konow:
OOP是一种分离、包裹和隐藏机制部分的方法。这是否是必要的,由开发商决定。这与提高机制的效率完全没有关系。它构建了思考的方式,是的。它的结构是否正确还不得而知。是否有必要取决于特定的人,我认为。

正是如此。这就是封装的本质。

还有继承和多态性

 
Реter Konow:
OOP是一种分离、包装和隐藏机制部分的方法。这是否有必要,取决于个人。

正是如此,这取决于个人。为什么一个没有精神分裂症的程序员会极力隐藏对他自己正在调试的某部分代码的访问?难道你不愿意绑住自己的手吗?:)

 
Renat Fatkhullin:

在一个程序员在有严格要求的正常开发团队中工作之前(至少在几年的时间里亲手打过),他/她不会成为一个正常意义上的开发者。我们在考虑候选人时,90%的时间都是抓着脑袋看测试工作。整个开发行业的全面恐怖。

我想知道这种 "恐怖 "表现在哪里。

我想这与OOP的使用 有关,因为在程序化编程中,主要关注的是算法的工作逻辑,而不是各种外部的OOP式的附加物,这些附加物可以很容易地建立起一个任何愚昧的森林。