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

 

我通过我的新棱镜,一个OOP和Kernel的混合体,看着程序中描述的对象系统,几乎要把我的大脑撑爆了。首先,我重新审视了我的GUI系统。通过所有这些对象-参数、对象-状态、对象-事件和处理程序。 由于GUI和它的技术对我来说很熟悉,一切似乎都很清楚,但是,这个系统非常复杂。大量的参数、映射和处理程序。我得出的结论是,这种系统不可能自己产生。而自然选择在这里没有力量。

原因就在这里。

每个参数可以有n个派生参数。比方说:X的变化可以在任何时候从该X的值中产生无限多的衍生参数。

每个派生参数必须有一个处理程序和一个与其他参数的链接。没有参数本身存在。该链接是强制性的。

耦合可以是不同的,因此会出现各种处理程序--过滤器、矫正器、转换器。

对系统来说,可以被认为是重要的事件是不确定的很多。每个人都有自己的属性、链接和处理程序。变化是无数的。

因此,没有一个概念,就不可能产生任何系统。(最有可能)。

只是目前还不清楚地球上的生命是如何起源的...

 

下面是另一个例子。

考虑一个在图形上移动带有控件的窗口的系统。

  • 我们从 "光标 "对象中获取两个参数--x和y。从它们中,创建两个派生参数对象,它们将存储x和y的当前值与过去值之间的差异。(参数对象不只是变量,它们是有自己属性的对象)。
  • 我们为参数对象创建一个处理程序对象,它将(1)处理x和y值,在窗口处理事件中检索它们在当前值和过去值之间的差异,这将被写入处理程序属性中,(2)在同一事件中把差异写入派生参数中。
  • 在派生参数对象和每个窗口对象的x,y参数对象之间创建一个链接对象,这将被用来向它们传递数值。
  • 在Object-binder之后,我们再创建一个Handler对象,它应该从每个窗口对象的对象参数x和y中取值,并向其添加一个在binder上的值。

因此,通过这个系统,我们可以在一个窗口的手柄被光标抓住的情况下,改变该窗口及其对象的坐标。为了移动这一切,我们需要将其与改变MT对象在图表上的位置的ObjectSetInteger 处理函数联系起来。

这是通过连接特殊的系统块--对象参数、对象处理程序等,只实现一个GUI功能。

在内核中建立这样一个系统,并不比写正常的代码容易(甚至可能更难),而不需要把所有东西都变成一个对象。但是,我将继续挖掘...


ZS.我忘了补充,为了移动窗口,我们还需要 "制作 "一个事件对象,它可以锁定窗口手柄和光标移动。这个事件对象,连接到游标x,y值的对象处理程序(在派生参数中写入差异),它将只在这个事件的信号下工作。

而对于每一个事件对象,你需要创建一个对象处理程序,并将其与之绑定。

每个对象处理程序都有自己的属性,当它与参数或事件一起工作时,它的值会被它使用。因此,必须有一个模板,否则你会在创建这一切时陷入困境)。

 
Реter Konow:

下面是另一个例子。

考虑一个在图形上移动带有控件的窗口的系统。

  • 我们从 "光标 "对象中获取两个参数--x和y。从它们中,创建两个派生参数对象,它们将存储x和y的当前值与过去值之间的差异。(参数对象不只是变量,它们是有自己属性的对象)。
  • 我们为参数对象创建一个处理程序对象,它将(1)处理x和y值,在窗口处理事件中检索它们在当前值和过去值之间的差异,这将被写入处理程序属性中,(2)在同一事件中把差异写入派生参数中。
  • 在派生参数对象和每个窗口对象的x,y参数对象之间创建一个链接对象,这将被用来向它们传递数值。
  • 在Object-binder之后,我们再创建一个Handler对象,它应该从每个窗口对象的对象参数x和y中取值,并向其添加一个在binder上的值。

因此,通过这个系统,我们可以在一个窗口的手柄被光标抓住的情况下,改变该窗口及其对象的坐标。为了移动这一切,我们需要将其与改变MT对象在图表上的位置的ObjectSetInteger处理函数联系起来。

这是通过连接特殊的系统块--对象参数、对象处理程序等,只实现一个GUI功能。

在内核中建立这样一个系统,并不比写正常的代码容易(甚至可能更难),而不需要把所有东西都变成一个对象。但是,我将继续挖掘...


ZS. 我忘了补充,为了移动窗口,我们还需要 "制作 "一个事件对象,它可以锁定窗口手柄和光标的移动。这个事件对象,连接到游标x,y值的对象处理程序(在派生参数中写入差异),它将只在这个事件的信号下工作。

而对于每一个事件对象,你需要创建一个对象处理程序,并将其与之绑定。

每个对象处理程序都有自己的属性,当它与参数或事件一起工作时,它的值会被它使用。 因此,必须有一个模板,否则你会在创建这些东西时陷入困境)。

困难的。不合理的困难。
一个窗体的主要对象,该窗体的其他对象位于其内部,是唯一接受坐标的对象。改变任何坐标都会改变表单主对象的位置。该表格中的其他对象只是被传递了相对坐标,以确定它们在表格中的位置。所有对象在表格中都有自己的顺序,并按照这个顺序重新排列。每个对象都有一个它所包含的内容的列表。引用内容列表允许每个内容被指令到一个偏移量。因此,通过给表单对象下达移位的命令,链条会自动传递给表单的所有内容移位。也就是说,只有表格是偏移的,其他都是自动偏移。我们不必自己给每个表单对象一个偏移命令。
我们只为一个对象做这件事。所有其他的人都会重复它。不管一个表单对象有多复杂,一条偏移命令就会以雪崩的方式传递给该表单的所有内容。
一切都只做一次。然后一切都将以连锁方式完成。
 
Artyom Trishkin:
复杂的。不合理的复杂。
一个表格的主要对象,该表格的其他对象位于其中,是唯一接受坐标的对象。改变任何坐标都会改变表单主对象的位置。表单中的其他对象只是被传递了相对坐标,以确定它们在表单中的位置。所有对象在表格中都有自己的顺序,并按照这个顺序重新排列。每个对象都有一个它所包含的内容的列表。引用内容列表允许每个内容被指令到一个偏移量。因此,通过给表单对象下达移位的命令,链条会自动传递给表单的所有内容移位。也就是说,只有表格是偏移的,其他都是自动偏移。我们不需要自己给每个表单对象一个偏移指令。
我们只为一个对象做这件事。所有其他的人都会重复它。不管一个表单对象有多复杂,一条偏移命令就会以雪崩的方式传递给该表单的全部内容。
一切都只做一次。然后一切都将以连锁方式完成。

这就对了。

在包含光标的x,y差的派生参数和表单对象(处于链中)之间的绑定,在中心有一个处理程序,可以执行与每个表单对象的x,y参数的串行连接。也就是说,通过串行连接处理程序绑定参数,可以用传递差值x,y的派生参数取代每个表单对象的绑定。我也在思考这个问题。

在我的GUI中,窗口的移动是在函数中实现的,做了以下工作。

(1) 窗口手柄点击事件的事件检查器

(2) 移动光标事件

(3) 计算当前光标坐标与过去光标坐标之间的差异

(4) 循环浏览窗口对象,通过调整光标位置的差异来改变其坐标。

(5)调用ObjectSetInteger,将窗口形式(canvas)的МТ-对象沿图表移动给定距离。


因此,该函数内部的实现是正确的。在这种背景下,通过对象处理程序、对象参数和对象绑定的实现显得很突兀。但是,让我们深入了解一下...

 
Реter Konow:

这一点是正确的。

包含光标的x,y差值的派生参数和表单对象(处于链中)之间的映射在中间有一个处理程序,它可以对每个表单对象的x,y参数进行串行连接。也就是说,通过串行连接处理程序绑定参数,可以用传递差值x,y的派生参数取代每个表单对象的绑定。我也在思考这个问题。

在我的GUI中,窗口的移动是在函数中实现的,做了以下工作。

(1) 窗口手柄点击事件的事件检查器

(2) 移动光标事件

(3) 计算当前光标坐标与过去光标坐标之间的差异

(4) 循环浏览窗口对象,通过调整光标位置的差异来改变其坐标。

(5)调用ObjectSetInteger,将窗口形式(canvas)的МТ-对象沿图表移动给定距离。


因此,该函数内部的实现是正确的。通过对象处理程序、对象参数和对象绑定来实现,在这种背景下显得 很突兀。但是,让我们深入了解一下...

是的,因为你不需要把这些处理程序与对象分开。返回光标坐标的类可以做成静态的--它对程序中的任何类都是可用的,获得坐标和对它们的响应应该在每个对象中实现。但只有主表单对象应该调用这些处理程序。那么对于所有其他的表格对象,只需指定新的坐标并重新绘制即可。在表单对象内部有一个其所有对象的列表。表单对象已经定义了它的坐标变化--为它的坐标设置新的值,穿过它的对象列表并调用方法来设置它列表中每个对象的坐标。同时,每一个后续的对象在其坐标发生变化时都会做同样的事情--它通过其对象列表查看并命令它们改变其坐标。列表中的对象是按照它们被绘制的顺序排列的(Z-sequence)。换句话说,每个对象都有自己的改变坐标的方法,但它的实现方式是相同的--它查看所有 "友好 "对象的列表,为每个对象调用相同的方法。因此,通过为主表单对象调用一次这个方法,我们就会自动为表单中的所有对象启动坐标变化。 当表单对象的 "友好 "对象列表被处理后,它就会调用它的图表重绘方法,这对所有被修改的对象都是一样的。

 
Artyom Trishkin:

...

这是窗口移动机制的标准OOP观点。我给你看一个不同的。要做到这一点,先理清思路,跟着我的思路走就可以了。

  1. 想象一下,一个数组矩阵。尺寸是未定义的。也许它是无限的,也许它不是。这并不重要。
  2. 矩阵被初始化为零。零代表空虚。也就是说,该矩阵是空的。
  3. 在矩阵的空虚中,出现了空虚以外的东西。这是用一个值代替的零。是什么并不重要。
  4. 我们在空矩阵中看到这个值,就说 "这是一个参数"。也就是说,不是数值本身--而是它出现在哪个单元格。 该单元格被尊称为参数--即包含数值的 "容量"。
  5. 该参数立即要求我们对其进行定义。它仿佛在说:"我是一个参数,而且我有个性!"。我的财产在哪里?"。而我们别无选择,只能把它的属性添加到参数中,这些属性也是有自己数值的参数。我们把它们放在旁边,我们就有了一个链条--一个参数和它的属性。我们说 "我们创建了一个Object-parameter!"。
  6. 接下来,该参数 "说","其他参数在哪里?为什么我是唯一的一个?"然后我们在矩阵的空隙中再创造一些参数,这样 "长子 "就不会感到无聊了。当然,每一个新参数都宣布了它的个性,并要求属性作为它的承载者。因此,参数链增长,其中有 "长子 "和他们的属性。我们说 "我们已经创造了参数对象!"。
  7. 现在在矩阵的虚空中,我们有几个参数,有它们的属性链。但他们每个人都在 "呐喊 "自己存在的无意义性。他们每个人都是孤独的。然后,我们决定将这些参数联系起来,使它们不会 "无聊"。为了做到这一点,我们创建了特殊的参数,作为其他参数之间的绑定。它们也是由属性链组成的。现在,长子参数通过参数链相互连接。大家都很高兴!我们说,"我们已经创建了参数连接的对象!"。
  8. 但是,后来发现,参数主体想通过绑定来相互交流和传递数值,但绑定提供了传递数值(参数语言),却没有提供翻译。而由于是孤独的,参数只理解它们的语言,这意味着参数之间存在着 "语言障碍",它们需要我们来解决这个问题。
  9. 为了解决 "参数通信 "的问题,我们没有足够的映射,我们需要一个翻译。这意味着需要对参数之间传递的数值进行转换,同时考虑到每个参数的属性。他们中的一些人理解1-10范围内的数值;另一些人理解(-5)-(-105)。有些人用小数操作,有些人用幂数操作。因此,我们得出结论,我们需要 "翻译器",即考虑到参数属性的值处理程序。我们创建特殊的处理程序对象并将其插入参数映射中。值处理程序对象使用它们传递和接收的参数的属性以及它们自己的属性,在参数之间 "翻译 "传递的值。我们说--"我们创建了处理者对象!"。 现在参数可以自由交流!"。
  10. 长子的参数在交流和沟通,他们厌倦了。厌倦了。然后他们决定,他们只在特殊场合进行交流--好吧,当他们中的一个人得到一个难以置信的价值时。但是,事实证明,我们需要像孩子一样,不遗余力地盯着价值。长子的参数要求我们想出一个 "监测系统",对不正常的变化发出信号,这样他们就不会担心了。因此,我们把我们应该做出反应的值做成一个模子,并给它添加一个特殊的处理程序,这样就形成了一个 "事件对象"。我们把它连接到每个参数上,它们开始使用来自事件对象的信号相互通信。因此,我们创建了 "Object-events"。

这就是故事的结局......

我们从外面看了看这个矩阵,惊呼一声!这就是我们的工作。"我们已经创建了一个对象系统!")

注意,所有的东西都可以在一个数组矩阵中创建。而阵列矩阵就是核心。而其中的实体--真实的物体。还有参数,还有事件,还有绑定,还有属性,还有处理程序。在 "内核 "中,有不可计数的系统可以从这些基础事物中构建。

 

一个模拟的延续...

11.不知何故,长子的参数决定跟随一种时尚。他们发现,在矩阵中的某个地方有一个属性公平,而在新奇的地方有一定的空间。 他们说它有三种特性。"尺寸 "被称为。这些属性有一个所谓的无限范围的值,作为奖励,它们会送出另一个 "参数时间"。参数来到集市上,采取了x,y,x_size,y_size的属性。他们说他们想在太空中制作一个外壳。他们也采取了颜色。他们回来后开始装扮新的财产。他们对一些空间包络进行了建模,直到他们厌倦了。然后他们给自己涂上颜色,放松了下来。他们开始思考下一步该怎么做。 然后他们看了看时间属性框。让我们看看它是什么...他们打开它,把它附在自己身上,但他们没有计算价值,一瞬间它就蒸发成了空洞。毕竟,时间是一个参数,人们必须非常小心......。

[删除]  
Реter Konow:

一个模拟的延续...

11.不知何故,长子的参数决定跟随一种时尚。他们发现,在矩阵中的某个地方有一个属性公平,而在新奇的地方有一定的空间。他们说它有三种特性。"尺寸 "被称为。这些属性有一个所谓的无限范围的值,作为奖励,它们会送出另一个 "参数时间"。参数来到集市上,采取了x,y,x_size,y_size的属性。他们说他们想在太空中制作一个外壳。而且他们采取了颜色。他们回来后开始装扮新的财产。他们对一些空间包络进行了建模,直到他们厌倦了。然后他们给自己涂上颜色,放松了下来。 他们开始思考下一步该怎么做。然后他们看了看时间属性框。让我们看看它是什么...他们打开它,把它附在自己身上,但他们没有计算价值,一瞬间它就蒸发成了空洞。毕竟,时间是一个你必须非常谨慎对待的参数......。

而前十名并不严重?

我,读到这里,不由得大笑起来。

 
Artyom Trishkin:

...

所有这些 "客观性 "是非常令人困惑的,你不同意吗...你必须小心对待它。尼古拉-森科关于天才和精神分裂症的接近程度是正确的。有可能会 "疯掉"。有些事情最好不要理解。有些门,必须永远对我们的意识关闭。正如一部电影所说,--"最危险的寄生虫是一种想法。一旦进入大脑,就不可能把它弄出来。" 我所说的矩阵对心灵来说是危险的。这很容易让人迷失在其中,并永远迷失。我们要小心。)

 
系统在矩阵中的表现给了人们一个关于其结构的新视角,但我没有看到任何关于促进系统创建的暗示。更不用说什么 "自我发展 "了。以这种方式看系统是非常有趣的,但也不过如此了。我没有看到任何自我发展,甚至是一丝一毫的自我发展。因此,让我们把神圣的事情留给上帝吧。无论是标准的OOP方法,还是我的方法,都无法实现系统的自我开发。