[431] Re:クラスメソッドとクラス変数
投稿者:タイガー
2007/02/20 02:13:25
>本質的には同じことですよね。多重度の問題。UMLで「0..*」とか書くやつです。
>先のタイガーさんの「方法1.」だと、コレクションが唯一のイテレータを
>保持していると言えますから、多重度は1です。
>
>コレクションそのものが複数作れますから、イテレータも複数作れるには
>違いないけれど、ひとつのコレクションに対してはひとつだから先に書いたような
>問題が発生します。
>
>インスタンス自体がひとつしかないケースは、なんというか「地面」があって、
>そこからそのオブジェクトに線が引いてあって、地面のところに「多重度1」の
>指定があるようなイメージを持っています。私の場合。
>
>で、その線の根元というのは要するにstaticな変数なのであって、
>私はあまりたくさんのオブジェクトが地面にくくりつけられているモデルは
>好きじゃないので、staticに冷淡だったりするわけです。
概念とかを説明するときに、そういったイメージとかの説明があると
理解しやすくて分かりやすいですね。
今回マルチプルインスタンスとか多重度が重要というのが分かりました。
1つのデータ(オブジェクト)の個数を考えるのは簡単ですが、
2つ以上のデータ、つまりある1つのデータの個数に対して、
それに関連するデータの個数が複数必要なのか、1つで良いのかとか、
それが多重度ということですね。
>ええと、Javaのようにイテレータの生成メソッドをコレクションに付けた上で、
>それぞれオーバーロードというか、別のクロージャを割り当てれば、if文は
>出てこないのでは?
おっしゃる通りだと思います。確かにJavaではそうなっていますし、
Javaのやり方は、うまいやり方だと思います。
Iterator(処理)は、ArrayList(データ)を知らないといけない訳ですし。
ただ、単一責任の原則というのがあって、1つのオブジェクト(クラス)は、
それぞれ1つの役割のみを持つようにするということで、
Iteratorの生成をArrayList自身に持たせるというのは、どうなのでしょうか?
ただ逆に、生成部分を他に分けたからといってメリットがあるわけではないですし、
むしろ、ArrayList自身に持たせてしまった方がすっきりする気がします。
ただ、Javaの設計がベストなのかは分かりません。
あと、「プログラミング言語を作る」が書籍化されることを期待しています。
ありがとうございました。