MQL5培训 - 页 19

 
papaklass:
让我问你一个问题。程序化编程和OOP之间的根本区别是什么?寥寥数语,即是本质的区别。

首先,即使是程序性方法也意味着结构,因为没有结构就很难。这至少是某种形式的数据组织。

OOP允许我们在设计阶段 轻松地识别抽象实体和它们之间的关系。然后你可以简单地对它们进行编码,甚至是单独编码,而不必特别关注实现的特殊性。

而且这一切看起来更有逻辑性和可读性。而且,它往往工作得更快。而最主要的是,它的实施速度更快。尽管我们可能有更多的代码。

 
papaklass:

我希望你能表达你对这个问题的理解,而不是给我一个书本上的表述。不就是不。我告诉你我的情况。

好吧,我没有 "给你配书":)我根本没有制定任何东西--有解释。我只是假设这个问题是一道考试题,由于吃了药,答案你已经知道了。结果是这样的 :)我没有拒绝回答关于个人经验的问题。

有时只需 "感受 "一下这个现象,不问诸如 "怎么会这样 "和 "它的深层含义是什么 "等哲学问题,只需通过实例了解它是如何运作的。参考手册》中对俄罗斯方块的引用对我来说已经足够了,这个例子对最开始的时候也足够了。

根据哪一个类对象被创建,一个或另一个派生类的虚拟函数被调用

void CTetrisField::NewShape()
  {
//--- случайным образом создаём одну из 7 возможных фигур
   int nshape=rand()%7;
   switch(nshape)
     {
      case 0: m_shape=new CTetrisShape1; break;
      case 1: m_shape=new CTetrisShape2; break;
      case 2: m_shape=new CTetrisShape3; break;
      case 3: m_shape=new CTetrisShape4; break;
      case 4: m_shape=new CTetrisShape5; break;
      case 5: m_shape=new CTetrisShape6; break;
      case 6: m_shape=new CTetrisShape7; break;
     }
//--- отрисовываем
   m_shape.Draw();
//---
  }

直观地创建对象,其行为因初始数据的不同而不同,足以见得。接下来--我从论坛上申请了整个俄罗斯方块的文件,加上手记材料、库等。然后它就开始运行了。论坛上有很多关于这个主题的问题。

纸杯

在阅读了网站上的一堆信息后,我仍然不明白什么是OOP。

我们只是有一个完全不同的方法。我还没有特别想知道从科学的角度来看 "什么是OOP"。- 以免在新的和不可理解的术语的外表下失去本质。

我直截了当地去研究现有的例子。

纸杯

在阅读了网站上的大量信息后,我仍然不明白什么是OOP。

TheMQL5 Reference/Fundamentals / Object-Oriented Programming.就读这一页。显然,这对我来说已经足够了--无需在第三方材料中寻找其他定义。

 
papaklass:

我的问题的答案。

生产性编程侧重于行动(动词),而面向对象的编程侧重于对象,或实体(名词)。这是最主要的区别。


在理论和实践中都是如此。

程序性编程回答的是做什么(动词) 的问题。
面向对象的编程动词描述(形容词) 的对象(名词)

也就是说,OOP是将代码的上层结构概括为具有许多语篇的有意义的句子。


只用动词说话的人被允许生活在程序中。

谁想叙述他的代码,就让他用OOP写吧。


PS。

我们对所有这些程序员理论家是多么的厌倦,该死的。

很快,我将无情地扼杀 "OOP与程序 "这个话题。
 
sergeev:

PS。

我已经厌倦了所有这些程序员理论家,该死的。

很快我就会毫不留情地扼杀 "OOP与程序 "的话题。
为什么你必须一次 "杀死 "他们?大多数MQL5的初学者都熟悉 "程序性编程"。而如果他们对OOP的必要性和意义有疑问--就需要耐心地解释/理解。就像学校里的老师--年复一年地做同样的事情。耐心解释,--不要因为老师厌倦了重复这个话题就叫他们滚开。
 
sergeev:

PS。

我们对所有这些编程理论家是多么的厌烦,该死的。

很快,"OOP与程序 "的主题将被无情地杀死。

"与其随意安排标点符号,不如写一份词汇表,就不会有人 "无情地杀 "了。

但是,如果你读到OOP的 "从业者"--它就像一个OOP的高级专家的 "种姓"。

MQL5是一种适用于所有理解和能力水平的语言,而不仅仅是适用于逃亡者--指标和专家顾问的标准例子证明了这一点。

一种编程语言不是目标,而是手段。如果PP足以达到目的--就让它这样吧。如果对某人来说,使用OOP更容易、更清晰--就让它这样吧。而为了实现这一目标--没有根本的区别--特别是在90%的低代码微功能指标和专家顾问中,主要是写的。

 

papaklass:

当你在一门课程的开头遇到这样一句话时,就会立即明白整本书的内容。不知何故,一切都水到渠成。你明白属性是对象的属性,实现和方法是同一回事(函数),最后,类是由对象组成的。对象不仅有属性(属性)和方法(功能),而且还可以相互作用。同时,它们(对象)也不需要知道其他对象的属性和方法。这就是类是如何从这些构件中创建的,这些构件也是相互作用的。

你把所有的东西都堆在一起,甚至不能用它来做粥)))。不可能是写在书上的。
 
abolk:

一种编程语言不是目的,而是一种手段。如果PP足以实现目标,那就这样吧。如果OOP对某人来说更清晰、更简单,那就这样吧。

睿智。根据我自己的经验判断:单一货币指标是写在PP上的。而多货币专家顾问是用OOP 编写的(因为如果没有OOP--在我的情况下,它根本就不会出现)。
 

Как уже надоели все эти программистские теоретики, блин. 

很快,"OOP与程序 "的主题将被无情地扼杀。

这是因为人们不了解两者的优点、缺点、使用地点和方式。一篇有这样简单例子的文章:PP会给这个任务_1带来这样那样的好处,OOP会给这个任务_1带来这样那样的坏处;PP会给这个任务_2带来这样那样的好处,OOP会给这个任务_2带来这样那样的坏处。我认为,如果类和接口出现在五个中,那么多注意类和接口的比较是很关键的,因为对于那些刚接触OOP的人来说,细微的差别会很复杂。而且都是偏向于解决简单的问题,这就是困难所在--解释和例子需要尽可能的简单和简短,但要使用PP和OOP的原则。

那么就有可能使一个线程崩溃,把它送到一个地方,那里所有的东西都被安排在架子上,有简单的应用实例,根据一些主题系统化。

耶德尔金
睿智。根据我自己的经验判断:单币种指标是写在PP上的。而多货币专家顾问是用OOP编写的(如果没有OOP,它根本不会出现)。
亲爱的耶德尔金!如果你有兴趣,我可以把程序化设计的多币种内核发给你(它的工作原理是开放的)。这段代码是为4编写的,但在5上也能工作--你可以在上面比较两种变体的性能。
 
-Alexey-: 亲爱的耶德尔金!如果你有兴趣,我可以给你发送一个程序化设计的多币种内核(在开放条上工作)。该代码是为4编写的。
我赞成大家尽可能地生活在和平与和谐之中。至于我的帖子,我只是在描述我对OOP的理解。它(理解)可能是三次错误的--但它是 "我的 "理解。我完全不排除我在OOP的帮助下能够解决的一部分问题也能在PP的框架内得到解决。abolk 声明的智慧恰恰在于:"如果PP足以实现目标--那就这样吧如果有人使用OOP会更清楚、更简单--那就这样吧"。我在我的帖子中补充了一个内容。
 
Yedelkin:
我赞成大家在可能的情况下相互理解,共同生活。至于我的留言,我专门描述了我对OOP的理解。它(理解)可能是三次错误的--但它是 "我的 "理解。我完全不排除我在OOP的帮助下能够解决的一部分问题也能在PP的框架内得到解决。abolk 声明的智慧恰恰在于:"如果PP足以实现目标--那就这样吧如果对某人来说,使用OOP更容易、更清楚--那就这样吧"。
我同意。而为了争取这种或那种偏好的情绪,最好在论坛用户之间组织竞赛--竞争。有这样一项任务......:在性能、内存消耗、代码大小、可移植性等方面,究竟哪种方法会胜出?