> 最初から特定のメモリアドレスにいてはまずいのでしょうか?
ということは静的/動的とはアドレスが変わるかどうかをいっているの?
とすると、επιστημη さんの
> 関数/変数が クラスに属するか/インスタンスに属するか です
は話が難しすぎるでしょうね。
変数が「最初から特定のメモリアドレス」にいるということはプログラムが動作して
いる間ずっと必要な変数であり、その変数の寿命がプログラムと同じであるというこ
とです。
しかし、変数が「そのプログラムで必要で且つ、サイズがあらかじめ、予測できる
もの」であってもプログラムが動作している間ずっと必要ではないのであれば、
つまり変数の寿命とプログラムの寿命が異なっているのであれば、必要になったとき
に実体化したほうがメモリを有効に使用できます。そして、ほとんどの場合、プログ
ラムの寿命と変数の寿命は異なっているんのです。
あっちゃー!
文章を考えている間に、επιστημηさんの別の回答がでてた。
まあ、補足ということで。
質問が
>C++ およびjava において、クラス、メンバー関数、メソッド、メンバ
と
>ststic とは、プログラムが開始され終了するまで、常に同じアドレスに存在するもの
ってなっているから
回答が難しいな。
メンバー関数はプログラムコードであってデータじゃないから
アドレス変わるとかnewするとかヒープに置くとか無いから。
それとJavaってクラスのインスタンスはnewするものでしょ。
-------------------------------------------------------
ところでインスタンスシエードって何?
instantiate ぢゃないの?まあどうみてもシエードとは発音せんけど。
http://ejje.weblio.jp/content/instantiate
一般的でない俺俺独自用語が使われているので本題に対しては返信保留中
もう解決になっちゃってますけれど、
メモリ上の配置の話とクラスとかオブジェクト指向の概念をごっちゃにしているから
話がややこしくなっていると思います。
オブジェクト指向の概念的な話をする時は一旦メモリ上の話は置いておいて良いと思います。
メモリ上のどう配置されるかはコンパイラの実装に任せて概念的な部分の理解に集中した
方が良いかなと。
クラスとの関連でstaticの話をするのであれば、メモリ上の配置に関しては結果的な話何
じゃないですかねぇ。
クラスとしてどう扱うのかとかそっちを理解されたほうが良いと思います。
クラスとしてどれだけ自然なモデルにできるか、
無理なく対象を表現できるかが問題になると思うので
メモリ上に配置しておくとかはコンパイラを通した結果でしかない
という気がしますね。この辺を気にしすぎると概念的な部分を
理解することを目的にしているのであれば、本来の目的から反れて
しまう事になります。概念は概念として理解して結果的に
それがメモリ上ではこうなっていると言う理解の方が良いのではないかなぁ。
犬と言うクラスに体色というメンバーがあったとして
犬それぞれで体色は違う可能性があるわけですから
アプリケーションでひとつのメンバーではアプリ内に存在する犬の
体色を犬毎に持てませんよね。
何匹の犬を扱うかが最初から分かっていれば固定で持つ事も出来ますが、
それってリーズナブルな実装と言えるでしょうか?
必要な分だけ犬クラスのインスタンスを作成した時にセットで管理できた方が
分かりやすいし、扱い安くないでしょうか。
そういう概念の方に目を向けて理解された方が良いと思います。
> 何匹の犬を扱うかが最初から分かっていれば固定で持つ事も出来ますが、
> それってリーズナブルな実装と言えるでしょうか?
最大101匹のわんちゃんが扱えるようにと最初っから101匹分の
わんちゃん用意しても、おかあさんが「1匹しかダメ!」って言うたら
残る100匹はみんな目が死んでることになるわけでぇ。