【綺麗】デザインパターンは美しい!【究極の美】

このエントリーをはてなブックマークに追加
186仕様書無しさん:04/09/05 21:44
>>184
そりゃ公開するような独り立ちするクラスならファイルわけるだろうさ。
だがこれは公開しないクラスだぞ?
あるクラスの内部でひっそりと使われるクラスをなんでわざわざ別ファイルに書くよ?

>>185
簡単な、そこだけで使う関数オブジェクトとか普通に定義しまくってるが?
クロージャ感覚だな。関数内で定義したいがそうするとテンプレートに渡せないからムカツクが。
187仕様書無しさん:04/09/05 22:13
・・・デザインパターンって、設計パターンだよな。
188仕様書無しさん:04/09/05 22:33
>186
だからバカ。
どこが?ではなくて全文バカ。
189仕様書無しさん:04/09/05 22:36
>>188
お前は全レスがバカだよなw
190仕様書無しさん:04/09/05 23:02
「あるクラスの内部でひっそりと使われるクラス」や「簡単な、そこだけで使う関数オブジェクト」
の話をしてるのはお前だけだということに気づいたほうがいいぞw
191仕様書無しさん:04/09/06 03:36
クラスが10あったら、そのうちの一個ぐらいは、cppの中に定義されていたり
クラス内クラスだったりすると言いたいのかな?

そういう統計的な話は、全くしていないわけだが
192仕様書無しさん:04/09/06 23:28
内部クラス沢山作る奴って協調性なさそう。
193仕様書無しさん:04/09/06 23:39
インターフェイスとかパッケージングとか知らんのか(-_-;
194仕様書無しさん:04/09/06 23:54
内部クラス=inner class
インターフェイスとかパッケージングとかは別次元の話
195仕様書無しさん:04/09/07 00:41
>>192,194
こういうヤツラが構造化言語いじると
関数全部公開モジュールとか作り込むんだろうな。
196仕様書無しさん:04/09/08 18:10
>>195
うちのプロジェクトでは、hoge.c で static int foo() を定義して、hoge.h で
static int foo(); と宣言している。
197仕様書無しさん:04/09/09 01:06
まともなプロジェクトでhogeとかfooとか使う奴はパターン以前の問題。
あ、>>196じゃなくてウチの先輩ね。
198仕様書無しさん:04/09/09 03:42
ヲイヲイ。そこは実際には別の名前に置き換わってるだろ?普通。

・・・ハッ
釣られたか?
199仕様書無しさん:04/09/09 04:21
>>198

バカだなぁ…。

>・・・ハッ
>釣られたか?

↑これがなかったらお前がツリをしたことになってたのに。
なんか一言、保険のための言葉なんか書いちゃって…、チキンハートだな。(笑)
200仕様書無しさん:04/09/09 11:44
>>196の本質は名前ではなくて static だと思うのだが。
201仕様書無しさん:04/09/09 12:00
>>200
他のソースから呼び出せない関数ね。
これが分かる椰子はC厨。JAVA厨では指摘できないとこだな。
202仕様書無しさん:04/09/09 18:56
>>196
何を自慢したいんだ?
それともツッコミ入れちゃってもいいのかな??

>>200
でわからない人もも一回勉強しなおせ〜
203仕様書無しさん:04/09/09 23:50
>>202
うちのプロジェクトには「プロトタイプ宣言は .h に書く」というコーディング規約が
いにしえよりあって、もうどうしようもなくなっている。

204仕様書無しさん:04/09/11 00:20:37
くだらない規約は廃せ。
英雄になれるぞ。
205仕様書無しさん:04/09/11 02:36:35
定期的に改訂しなければ「規約」の名に値しない
のであるが
206仕様書無しさん:04/09/18 18:48:47
ヴィバ! デザインパターン!
207仕様書無しさん:04/09/18 20:42:16
>>203
プロトタイプ宣言は他のモジュールというかソースから参照するためのものを
書くものではないのか?違うのか?
# あ、〜.h に書くプロトタイプ宣言の事ね。
208仕様書無しさん:04/09/19 00:33:13
>>207
次の現場入る前にstatic関数について調べておけ
209仕様書無しさん:04/09/19 01:43:23
>>208
だーかーらーたとえ規約でプロトタイプ宣言は〜.hに書くことになってても、
staticなんかは普通適用外でしょ?って言いたかったんだが…

なんでstaticについて知らんことになるんだ?
210仕様書無しさん:04/09/19 11:33:48
【GoF】デザインパターン 3@プログラム板
http://pc5.2ch.net/test/read.cgi/tech/1095388499/l50
211仕様書無しさん:04/09/19 12:35:27
とりあえず>>203の会社はバカ会社のひとつということで
212仕様書無しさん:04/09/19 12:36:40
プロトタイプといえば
GoFデザインパターンの一種ProtoTypeパターンのことだな
213仕様書無しさん:04/09/21 01:18:55
デザパタスレっていつも厨ばかりだな。
214仕様書無しさん:04/09/23 13:30:35
じゃあどんなスレが厨が少ないスレだというのだ?
そもそも、お前みたいな厨が邪魔をしてばかりいるから
厨ばかりのすれに見えてしまうのだ。
いい加減にしろ
215仕様書無しさん:04/11/14 01:59:42
C厨ばかりって意味ではマ板は厨ばかりだけどね
216仕様書無しさん:04/11/14 03:17:06
とりあえず下の問題を解いてください(別のスレから拝借)
------------------------------------
次のプログラムは、食事をする人を表現しています。
このプログラムのEatingMan#eat()メソッドは、if〜elseが連続していて長い上に、
新しい種類のFoodクラスを作成する度にコードを付け加える必要があります。
この問題を解決するように、プログラムを書き換えなさい。
なお、すべての食べ物について、その食べ方は1通りしかないものとします。
------------------------------------
class EatingMan{
  void eat(Food food){
    if(food instanceof Rice){
      // お箸を使ってfoodを食べる
    }
    else if(food instanceof Bread){
      // 手づかみでfoodを食べる
    }
    else if(food instanceof Steak){
      // ナイフとフォークを使ってfoodを食べる
    }
  }
}
abstract class Food{}
class Rice extends Food{]
class Bread extends Food{}
class Steak extends Food{}
217仕様書無しさん:04/11/14 05:21:49
>>216
でも、スレ違いですから。
218波田陽区:04/12/08 23:15:13
おれはプログラマー
オブジェクト指向は大得意
パターンだってお手の物
俺が設計すればコードもすっきりだ って言うじゃない?
でもあんたの会社 4層の下請けの最下層ですから! 残念!
規約でインターフェース作れない 斬り!
219仕様書無しさん:04/12/09 10:18:11
ギター侍ネタにはほんとにイライラ
うんざりさせられたここ数ヶ月だったが
218は面白いです。
220仕様書無しさん:04/12/10 17:47:49
そうだね。どうせソースコードの中身なんて

会 社 は 評 価 し て く れ な い
221仕様書無しさん:04/12/11 20:23:45
他人の三倍の速度で作っても、作業を追加されるだけで
給料にはあんまり反映されないしな。
それより上司と喫煙室で仲良くなって、飲み会でお世辞言ってる
方が100倍得になる。
222仕様書無しさん:04/12/26 18:33:19
ぱたーん
223仕様書無しさん:05/02/11 23:03:28
>>216の様に解くのって、実に自然だよな。
「食べ方」って言うのは、「食べ物」毎にあるんじゃない。
食べ物と、食べる人の「狭間」に存在するんだ。

そして、その狭間に存在する「食べ方」の内、どれを選択するのかは、
完全に食べる人にのみ、依存するのだ。
224過疎なので貼ってみる:05/02/12 00:48:04
interface EatingMethod {
    void perform(EatingMan man, Food food);
}
class ChopstickMethod implements EatingMethod {
    public void perform(EatingMan man, Food food) {
        System.out.println(man + " はお箸を使って " + food + " を食べる");
    }
}
class HandMethod implements EatingMethod {
    public void perform(EatingMan man, Food food) {
        System.out.println(man + " は手づかみで " + food + " を食べる");
    }
}
class KnifeForkMethod implements EatingMethod {
    public void perform(EatingMan man, Food food) {
        System.out.println(man + " はナイフとフォークを使って " + food + " を食べる");
    }
}
class MethodUnknown implements EatingMethod {
    public void perform(EatingMan man, Food food) {
        System.out.println(man + " は " + food + " の食べ方が分からない");
    }
}
class EatingMan {
    Map eatingMethods = new HashMap();
    MethodUnknown unknownMethod = new MethodUnknown();
    void eat(Food food) {
        if (food == null) {
            unknownMethod.perform(this, food);
            return;
        }
        Object o = eatingMethods.get(food.getClass());
225過疎なので貼ってみる:05/02/12 00:48:46
        EatingMethod method;
        if (o instanceof EatingMethod) {
            method = (EatingMethod) o;
        } else {
            method = unknownMethod;
        }
        method.perform(this, food);
    }
    void teachHowToEat(Class foodClass, EatingMethod method) {
        eatingMethods.put(foodClass, method);
    }
}
public class Main {
    public static void main(String[] args) {
        //誕生
        EatingMan man = new EatingMan();
        //教育
        man.teachHowToEat(Rice.class, new ChopstickMethod());
        man.teachHowToEat(Bread.class, new HandMethod());
        //man.teachHowToEat(Steak.class, new KnifeForkMethod());
        //料理
        Food rice = new Rice();
        Food bread = new Bread();
        Food steak = new Steak();
        //食事
      man.eat(rice);
      man.eat(bread);
      man.eat(steak);
      man.eat((Food) null);
  }
226仕様書無しさん:05/02/17 23:57:37
>>216
RatingManに以下のメソッドを追加。
void eat(Map foodMap){
 Iterator iterator = foodMap.iterator();
 Food food;
 while(iterator.hasNext()){
  food = (Food)iterator.next();
  food.eat();
 }
}

Foodクラスにabstract void eat()メソッドを追加。
それに従ってFoodのすべてのサブクラスにeat()メソッドを実装させる。
食べ方はif文内書いたものを書く。
これで、クラスを追加するたびにEatingManクラスにif文を追加する必要がなくなる。

必要に応じてwhileステートメント内にif文とbreakを付け加えよ。
227仕様書無しさん:05/02/18 16:44:37
Mapにはiterator()メソッドはない。
ここでは、Iterator iterator = foodMap.values().iterator() かな。

と書いてから、そもそもがMapじゃなくてCollectionが来るべきところのような気がしてきた。
228仕様書無しさん:05/02/18 20:06:16
STLみたいにキーと値のペアが取り出せるイテレータがあっても
いいのにね。
229仕様書無しさん:05/02/18 20:27:11
map.entrySet()
でMap.Entry (KeyとValueのペア)の集合が取れる。
230仕様書無しさん:05/02/23 08:30:35
>>223
>>216
>なお、すべての食べ物について、その食べ方は1通りしかないものとします。
っていうのは、言い換えると
「食べ方は、食べ物の種類ごとに決められていると考えてください」
っていうことを言いたいんだと思う。
231仕様書無しさん:05/02/23 22:44:28
>>230
てことは、>>224-225はオーバースペック?
232仕様書無しさん:05/03/13 00:11:45
>>228-229
> STLみたいにキーと値のペアが取り出せるイテレータがあっても
> いいのにね。
Jakarta Commons Collectionsにあるコレクションクラスを使うってのもありかもね
233仕様書無しさん:2005/06/03(金) 21:58:47
デザインパターンを首尾よく使えない言語は糞
234仕様書無しさん:2005/06/06(月) 19:15:25
いい本がない
235仕様書無しさん
age