0

プログラミングにおけるクラスと手続きと静的動作、動的動作

182
0
$$$$

プログラミングにおけるクラスと手続きと静的動作、動的動作

初めに

まさか、プログラミングをずっと前に()めてしまった私がこんな記事を書くとは。

勿論この記事は、競技数学関連です。

ちゃんと数学に関係のある記事です。

手続き

基本的な所から。

変数を用いて演算をします。

しかし、何か外部から受け取るのではなく、使える変数のみを使います。

クラス

「家」

です。変数は道具、式は電子レンジみたいなものです。

家の中で変数を電子レンジに入れると、何か料理が出てくるというわけです。

静的動作

1つの家から変数だけコピーして生成し、手続きは家の中にあるものだけ使います。

動的動作

家の中にある、変数も手続きも、何もかもコピーして家を複製します。

住む家は1つでよくても、それぞれの家を別のものを作る工場にしたり、事務所に変数を置いて特別に保存したい時、

「家が複数あるからと言って、困ることはない」

という理屈もあるから、動的動作さえしていれば静的動作は要りません。

しかし、作った家の中のものを、いつでも自由に取り出せない場合、必要のないコピーを余分にしてしまい、大変なことになります。

しかも、実質同じはずのクラス内の手続きまでコピーするというのはムダですし、エンバグの原因にもなります。

動的動作でも、言語について理解していれば大丈夫!

と本気で主張する人もいますが、
辞書を丸暗記していることを自慢して何がしたいのか判りません。

そもそも、オブジェクト指向って、関数(手続きに、受け渡しする変数の情報が付いたもの。動的に別のメモリにコピーするのを(あたい)渡し、メモリのアドレスを渡すのを参照渡しと言う。)とか手続き、クラスの中身が完全にブラックボックスでも動作することを指向している言語なので、完全にそうでなかったとしても、言語の思想を意識すれば自然と
「辞書の丸暗記」
から遠ざかります。そのはずですし、そうでなくてはなりません。
無限に記憶できるサヴァン症候群の人なら別ですが、プログラミング言語は、そういう人達のために作られたものじゃありません。
PythonやC++、Rust、そしてJava、これらの言語の思想を否定したい人が、わざとデタラメに書く時に動的動作が必要になるのだ。基本的にはこう考えましょう。
と言っても、これらの言語から、動的動作がなくなったわけではないのが頭の痛い所ですが、高速化のために関数や手続きを省いたり、全部の行を極力少ないクラスに放り込むのは、本末転倒です。無論、高速化のためにそうせねばならないのなら、言語の設計者に責任があります。
何事も、初めからやろうとしないのと、理想に近づこうとして努力するのでは、結果は全く違うものになります。
また、基本的に関数や手続きを呼び出す時に変数をスタックに入れ、わざわざ(こういう動作のことを「動的な動作」と言います。一々動いているので。)メモリを確保すると、重たいです。
各言語開発者は、一刻も早く動的動作を仕様の基本に据える、なんて時代遅れなことは止めるべきです。
また、ポインタは言語に実装すべきです。
ハッキングのリスクなんて考えている場合じゃありません。ポインタは必要なものなのです。

値をコピーするが静的動作に分類される動作

$\pi$等の定数を元々値の存在するメモリからコピーしたり、既存のある数式の解を、辞書を引いてコピーしてくる場合は、この動作は静的なものと見なされます。そう分類されることが多いです。
必要なデータは、広大なメモリ(辞書のメモリの)領域にあらかじめ入れておくべきです。

投稿日:20231227
更新日:20231227
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。

投稿者

のんびりしようね。

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中