[1270] >(ぱ)こと管理人さん
投稿者:SE
2009/05/19 16:21:52
>まあ、オセロの例で注記したように、マルチプロセスにはオブジェクト指向と似た面は
>ありますけど。「その論理で行くと」の「その論理」がどういう論理か、教えて
>いただきたいです。
「マルチプルインスタンスがオブジェクト指向」と言う論理です。
マルチプルインスタンスと言うのが何を指すのがよく分かりませんが、
状態(内部の変数の値)の違う複数の処理群(クラス)と解釈しました。
>そこでわざわざ継承してクラスを作ったって、以下のような問題が起きるだけです。
>・Stackが引数かなにかで渡されたとき、本家StackなのかUpperStackなのかわからなくて危険。
引数の型を見れば分かると思います。
>・別の誰かがLowerStackを作ったら、いつかマージするの?
もし別機能として作るなら、Stackを継承してLowerStackを作ります。
例えば大文字にした後に先頭に0を付加するような、UpperStackの処理結果に追加する物なら、
UpperStackを継承して作ります。
すでにLowerStackが出来てしまっているならマージしません。
>「要素をgetする側は、大文字が欲しいとき、そのことを意識しないで済む」
>ということにしたいのでしょうか?
そうです。
>この改修により、プログラムにUpperStackという「異物」が実行時に紛れ込むわけで、
>「Stackにputしたんだから、当然同じものがgetできるだろう」と思い込んでいる
>既存コード(Stackそのものを含む)にはおもいっきり影響を与えます。
既存コードはソースに手を入れないので、影響はないと思いますが。
新たに作るコードはどちらを使うか意識する必要はありますが。
>上のほうで『実のところ「要素を大文字に変換して返すスタック」がどんな時に
>役に立つのか想像できません』と書きましたが、結城浩さんが「例は嘘をつかない」
>と書いておられるように、こういうところで現実のプログラムに即した適切な例が
>出てこないなら、おそらくそれは考え方のほうが間違っています。
もう少し分かりやすい例をあげます。
---------------------------------------------------------------------
Map<String, String> mp = new HashMap<String, String>();
mp.put("aa", "11");
mp.put("cc", "33");
mp.put("bb", "22");
for(String key : mp.keySet()){
System.out.println(key);
}
---------------------------------------------------------------------
入力した順番に表示したい場合
---------------------------------------------------------------------
Map<String, String> mp = new LinkedHashMap<String, String>();
mp.put("aa", "11");
mp.put("cc", "33");
mp.put("bb", "22");
for(String key : mp.keySet()){
System.out.println(key);
}
---------------------------------------------------------------------
ソート表示したい場合
---------------------------------------------------------------------
Map<String, String> mp = new TreeMap<String, String>();
mp.put("aa", "11");
mp.put("cc", "33");
mp.put("bb", "22");
for(String key : mp.keySet()){
System.out.println(key);
}
---------------------------------------------------------------------