質問

読んだばかりです ジョエルの記事の1つ 彼が言う:

一般的に、私はそれを認めなければなりません 私は物事を隠す言語の特徴が少し怖いです. 。コードが表示されたとき

i = j * 5;

…Cでは、少なくとも、jに5を掛け、結果にiに保存されていることがわかります。

しかし、C ++で同じコードのスニペットを見ると、何も知りません。何もない。 C ++で実際に何が起こっているのかを知る唯一の方法は、IとJがどのタイプであるかを知ることです。それは、jが持っているタイプのものかもしれないからです operator* 過負荷で、それを掛けようとすると、それはひどく機知に富んだことをします。

(私の強調。)物を隠す言語の特徴が怖いですか?どうすればそれを怖がらせることができますか?物事を隠すのではありません(とも呼ばれます 抽象化)オブジェクト指向プログラミングの重要なアイデアの1つは?メソッドを呼び出すたびに a.foo(b), 、あなたはそれが何をするかもしれないか分かりません。どのタイプを見つけなければなりません ab 他の場所でどこかで宣言されるかもしれないものです。それでは、プログラマーからあまりにも多くのものを隠しているので、オブジェクト指向のプログラミングを廃止する必要がありますか?

そしてどうですか j * 5 とは異なります j.multiply(5), 、オペレーターの過負荷をサポートしていない言語で書かなければならないかもしれませんか?繰り返しますが、あなたは j 内側を覗きます multiply 方法、loと見よ、 j を持っているタイプの可能性があります multiply ひどく機知に富んだことをする方法。

「ムアハハ、私は方法に名前を付ける邪悪なプログラマーです multiply, 、しかし、それが実際に行うことは完全にあいまいで直感的ではなく、倍増することで何もすることはまったくありません。」それは、プログラミング言語を設計する際に私たちが考慮しなければならないシナリオですか?彼らが誤解を招くかもしれないという理由!

方法が何をするかを知りたい場合は、ドキュメントを一目見たり、実装内を覗いたりすることができます。オペレーターのオーバーロードは単なる構文砂糖であり、ゲームがどのように変化するかはわかりません。

啓発してください。

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません softwareengineering.stackexchange
scroll top