OOPの専門家に質問です。 - ページ 16

 
Georgiy Merts:

そうなんです、この機能の詳細です。1つの巨大なスイッチで、十数種類の機能の中から必要なものを選択するのです。このようなスイッチでは、誤ってどちらかのブランチに関連するコードを間違った場所に書いてしまうというミスが起こりやすいのです。

オーバーロードでは、物事はもっとシンプルになります。10種類の子孫があり、毎回ONEクラスで作業し、ONEオーバーロード可能な関数を持っています。そのために全く別のファイルを開かなければならないので、誤って別のクラスに書き込むことはできないのです。

さらに - この非常に巨大なスイッチにおけるパースそのものは、必要な1つのクラスを開いて、1つの関数だけをパースするよりも、ずっとストレスがかかると私は考えています。

実は、アセンブラコードでは、このポインタによって、とにかくこのスイッチの処理はすべて同じスイッチに集約されるのです。しかし、OOPの場合、これらはすべてプログラマーから隠されており、プログラマーの仕事を邪魔することはありません。OOPがなければ-対処する必要があります。

大雑把に言うと、歩くと--結局、筋肉に一定の順序で信号を送って動かしているわけです。しかし、意識のレベルでは、どの動きをすればいいかを覚えているだけなのです。ここで、OOPとはまさにそのような「どのような動きをするかという記憶」のことです。 あなたは「筋肉がたくさんあって、そこに神経が配線されているのに、なぜ動きを記憶する必要があるのか理解できない」のですが、さて......。何度も言いますが、暗記力のある人は、どの筋肉をどの順番で緊張させればいいかを覚えていれば十分なんです。ムーブメントを全部覚えても意味がない。それほど記憶できない他の人にとっては、動作全体を記憶し、筋肉に何が起こっているのか、どの順番でどの程度緊張しているのか--それを頭から隠してしまう方がよほど合理的なのです。

はい、ジョージ、あなたの主張は合理的で論理的です。確かに、私のアプローチでは、プログラムのすべてを記憶し、知る必要があります。これは良いことでもあり、悪いことでもあります。 良い点は、知ることでコードとソリューションの迅速な開発、少ないシンタックスと多くの機能を保証できること、悪い点は、すべてのブロックがグローバルに相互接続されているため、コードの一部を他のプログラムに移植するための規定がないことである。

私たちの話し言葉も、結局のところグローバルメモリーを使っているのです。私たちは、今話題になっている単語だけでなく、すべての単語を知り、覚えています。すべてが頭の中でごちゃごちゃになっているのです。それがマインドの働きであり、私のやり方なのです。機能ブロックの最も重要な結果は、すべて普遍的に利用可能です。そして、その中には、ほとんど人間の用語が含まれているわけです。私は普通の言語のように暗号で話します。とても便利です。でも、忘れてはいけないことがたくさんあります。本当なんです。


ZS.ちなみに、巨大スイッチは、ファイルに分解して中身を隠すことができます。全体を見渡せるので便利なんです。

 
Vict:

すずちゃん、従来のやり方をちゃんと勉強しないで、自転車作りみたいなことをしてるんだね。Peterさん、良い本を探してください、おそらくStroustrupさんでしょう、何かの本で彼はテキストエディタを書いていました、実際の問題から何かを学ぶでしょう、内容は覚えていませんが、悪いことを教えることはまずないでしょう。

もちろん、ありがとうございます。しかし、この6年間で無数の課題を解決してきたのだから、特定の課題によって何かが開眼することはないだろう。まさに無数。だから、私にはわかるんです。
 
次は効率化です。Switchって結局なんなの?パラメータと定数を逐次比較するものです。アテンション・ピーター、シーケンシャルつまり、求められた定数が100500であれば、プロセッサ上でのこれらの比較はすべて行われることになる。オーバーロードされた関数/メソッドとは - これらはコンパイル後の機械語では全く別のコードブロックであり、独自のエントリポイントを持つ。では、どちらが効率的なのでしょうか?
 
Реter Konow:
もちろん、ありがとうございます。しかし、具体的なタスクは、この6年間で無数に解決してきたため、何も開眼することはないだろう。まさに無数。だから、私にはわかるんです。

タスクがたくさんあって、オーバーロードの有用性がまだ理解できていないのですね。テンプレート関数の引数がint型、double型、user型であるとして、abs()で絶対値を 求めるとしたら、オーバーロードせずにどうすればいいでしょうか。

車のホイール→4台のバギーを積んだ車→100台の車が走る道路をシミュレートする、というプロジェクトが大きくなったら、このアレイを中心に皆さんの松葉杖を拝見したいです。

 
Vladimir Simakov:
そして、次は効率化です。 Switchは結局何なのか?パラメータと定数を逐次比較するものです。アテンション・ピーター、シーケンシャル

いや、スイッチの仕組みが違うんです。これは、スイッチが目的の定数に直接向かう表です。ここがifブロックとの本質的な違いです。

 
Vladimir Simakov:
そして、次は効率化です。Switchは結局何なのか?パラメータと定数を逐次比較するものです。アテンション・ピーター、シーケンシャルつまり、求められた定数が100500であれば、プロセッサ上でのこれらの比較はすべて行われることになる。オーバーロードされた関数/メソッドとは - これらはコンパイル後の機械語では全く別のコードブロックであり、独自のエントリポイントを持つ。では、どちらが効率的なのでしょうか?

残念なことに、やりすぎは避けられない。これで私は負け、もうひとつで私は勝ちです。

例えば、巨大なスイッチを持つ機能では、アイテム内のオブジェクトやウィンドウ内のアイテムの位置決めを行うことができます。そのサイズを計算するのです。一度呼び出すと、すべての要素とすべてのオブジェクトが、アンカーポイントに応じた位置に配置されるんだ。 各要素のサイズと相対的な位置を計算し、どの要素を隠すか、必要なキャンバスの大きさなどを決定します...電話一本が大仕事です。同じブロックが、何千もあるウィンドウ要素の中から1つのウィンドウ要素のサイズや位置を計算することができます。1ブロックです。呼び出しはObject()です。

このような数のタスクを解決するために、OOPでどれだけのクラスや関数を書かなければならないのだろうか?想像するのが怖いです。

 
Реter Konow:

残念なことに、やりすぎは避けられない。これで私は負け、もうひとつで私は勝ちです。

例:巨大なスイッチを持つ同じ機能で、エレメント内のオブジェクトとウィンドウ内のエレメントの位置決めを行うことができます。一度呼び出すと、すべての要素とすべてのオブジェクトが、バインディングに従ってそれぞれの位置に配置されるんだ。そのサイズと位置が計算されます。 どの要素を隠すか、必要なカンヴァスサイズは何か、などを決定します。電話一本が大仕事です。同じブロックが、何千ものウィンドウ要素の中から1つのウィンドウ要素のサイズや位置を計算することができます。1ブロックです。

このような数のタスクを解決するために、OOPでどれだけのクラスや関数を書かなければならないのでしょうか?想像するのが怖いです。

ざっと見積もって5~10人くらい。完全に分かりやすいインターフェイスで。
 
授業数のことです。それぞれ200行の長さです。
 
Ihor Herasko:

いや、スイッチの仕組みが違うんです。スイッチが目的の定数に直接向かう表です。ここがifブロックとの本質的な違いです。

ですから、スピードという点では、明らかにMQLの中で最速の選択肢と 言えます。しかし、マネージド環境でのクラスオブジェクトへの アクセスは間接的なものです。
 
Реter Konow:

パラメータを持たない関数を作り、その中にすべてのオーバーロードされた関数の計算を書き、変数をグローバルにし、他のどの関数からの結果にもアクセスできるようにするのです。いやぁ、美しいですねぇ。

ええ、ちょうどいいんです・・・「ユーモア」ブランチに入れましょう。)