OOPの専門家に質問です。

 

オブジェクトとそのプロパティに対するOOPループはどのように行うのですか?

例えば、次のようなループを実行します。

//Цикл по объектам в поиске нужного значения конкретного свойства.

for(int a1 = 0; a1 < obj_total; a1++)
  {
   if(G_CORE[a1][_X_SIZE] == THIS_SIZE)
     {
      G_CORE[a1][_this_state_color] = clrWhite;
      Redraw(a1);
     } 
  }

//Цикл по свойствам в поиске неверного значения

for(int a1 = 0; a1 < prop_total; a1++)
  {
   if(G_CORE[ELEMENT][a1] > Max_value)
     {
      G_CORE[ELEMENT][a1] = Max_value;
      Redraw(ELEMENT);
     } 
  }
 

もう一つ面白いのは、オブジェクトやグループの階層を作る方法です。例えば、いくつかのカテゴリがあり、各カテゴリにはn個のオブジェクトからなるグループが存在する。OOPのコンセプトが示唆する階層構築の方法とは?

階層の実装は、その部分とループ内のレベル間の遷移を容易にする必要があります。配列の中に階層を作ると、空いたスペースが多くなってしまいます。配列の複合体から構築される場合、リンクを自由にループさせることはできません。OOPは何を示唆しているのか?

 
Реter Konow:

オブジェクトとそのプロパティに対するOOPループはどのように行うのですか?

例えば、次のようなループを実行します。

CObj obj[];
...
for (int i=0;i<ArraySize(obj);obj[i++].CheckSomething(param));
こんな感じです。そして、クラス内部のCheckSomething()メソッドで、すべてのロジックを実装しています。
 
Vladimir Simakov:
こんな感じです。そして、クラス内部のCheckSomething()メソッドで、すべてのロジックを実装しています。

ありがとうございます。まず、オブジェクトから配列obj[]を組み立てて、ループ?

また、ヒエラルキーについてはどうでしょうか?しかも、静的な階層の話です。不変のもの、変えられないもの。

 
Реter Konow:

ありがとうございます。まず、オブジェクトから配列obj[]を組み立てて、ループ?

また、ヒエラルキーについてはどうでしょうか?静的な階層の話をしているのです。不変のもの、変えられないもの。

class Class1{
...
};

class Class2{
...
};

class Class3{
   Class1 class1;
   Class2 class2;
...
};
 
Vladimir Simakov:
つまり、クラスの階層を作り、そのオブジェクトをすべて別のクラスに集めて、ループさせるということですか?
 
Реter Konow:
つまり、クラスの階層を作り、そのオブジェクトをすべて別のクラスに集めて、ループさせるということですか?

必要なものによって異なりますが、原則的にはこのようになります。あなたのアレイよりずっとエレガントだということに、あなたは同意します。また、多次元配列は DLLに渡すことができないので、実際には配列ではないのではないかという私の強い疑念を考えると、関数呼び出しのオーバーヘッドも同じなのかもしれません。

 
Реter Konow:

OOPで オブジェクトとそのプロパティを ループさせる方法は

タグはコノウです
で、それを通して全リンクを ループさせる

一般的な用語を使うことで、自分の質問で相手を誤解させるだけでなく、自分の質問に確実に答えてくれるようになる

OOP Wiki- 用語はこちら。

参考までに、オブジェクト・インスタンスの配列を作成したり(上記参照)、WndContainer.mqh と ArrayObj.mqh というソースを見てください。これらは、CPanelDialog をベースにしたグラフィカル・パネルの作成に使用されていますが (フォルダ ndicatorsExamplesPanelsSimplePanel に既製の例あり) ポインタとリストで動作するようになっています。

 
Vladimir Simakov:

何を求めるかにもよるが、原則的にはそういうことだ。あなたのアレイよりずっとエレガントだということに、あなたは同意します。また、多次元配列は DLLに渡すことができないので、実際には配列ではないのではないかという私の強い疑念を考えると、関数呼び出しのオーバーヘッドも同じなのかもしれません。

まあ、もっとエレガントかもしれませんが、反論はしません。私は、実用性、便宜性、単純性、利便性に非常に関心があり、構文はすべて「人々の敵」と見なします。なぜなら、構文は注意や解析が必要で、エラーを発生させ、知覚の妨げになるからです。だから、なるべくシンプルで原始的なコード構成にするようにしています。見やすく、効果的であることが大きなポイントです。

もちろん、階層にひっかかりがある。もし配列で行うなら、ループはリンク、グループ、サブグループ、サブサブグループなどを解析する機会を増やしてくれるでしょう。しかし、メモリは非効率に使われることになる。クラスを使えば、理想的な解決策になりそうです。しかし、それは「死んだ」階層のためのものです。画像の場合。しかし、もしそれで動くエンジンを作る必要があるとしたら......ここで大混乱に陥るのではないかと心配しています))。

 
Реter Konow:

ありがとうございます。まず、オブジェクトから配列obj[]を組み立てて、ループ?

また、ヒエラルキーについてはどうでしょうか?静的な階層の話をしているのです。不変のもの、変えられないもの。

静的な階層である」というのはどういう意味か説明してください。不変・不易」?
 
Igor Makanu:

一般的な用語を使えば、自分の質問で相手を混乱させるだけでなく、自分の質問に答えてくれたという自信にもつながるでしょう。

OOP Wiki- 用語はこちら。

与えられたテーマについて、オブジェクト・インスタンスの配列を作成することができます(上記の回答を参照)。また、WndContainer.mqh と ArrayObj.mqh は、CPanelDialogに基づくパネルを作成するために使用されますが(フォルダ ndicatorsExamplesPanelsSimplePanel でサンプルを見ることができます), これらはポインタとリストで動作します。

OOPでは、「オブジェクト」は、そのフィールド(プロパティ)が宣言されたクラスへの参照を意味します。オブジェクト」とは、番号付けされたプロパティの集合を意味し、各プロパティは配列のセルである。そこが違うんです。

グラフィカルインターフェースの話題とは関係ない質問です。私はとっくにグラフィカルなライブラリを回避しているので、そこで探すものは何もないのです。しかし、今はAIに興味があり、新たな課題や疑問が湧いてきました。

理由: