-OOP限定-プログラム設計相談室
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/09/24(土) 16:35:590038デフォルトの名無しさん
2005/12/02(金) 22:16:430039デフォルトの名無しさん
2005/12/03(土) 00:56:100040デフォルトの名無しさん
2005/12/03(土) 01:05:30アルベルト・プロモーテッド・プラゲラメ
0041デフォルトの名無しさん
2005/12/03(土) 01:10:270042デフォルトの名無しさん
2005/12/03(土) 01:19:540043デフォルトの名無しさん
2005/12/03(土) 21:15:04public abstract class AbstractStrategyFactory {
public abstract MessageStrategy createStrategy(MessageBody mb);
}
public class MessageBody {
Object payload;
public Object getPayload() { return payload; }
public void configure(Object obj) { payload = obj; }
public void send(MessageStrategy ms) { ms.sendMessage(); }
}
public class DefaultFactory extends AbstractStrategyFactory {
private DefaultFactory() {;}
static DefaultFactory instance = new DefaultFactory();
public static AbstractStrategyFactory getInstance() { return instance; }
public MessageStrategy createStrategy(final MessageBody mb) {
return new MessageStrategy() {
MessageBody body = mb;
public void sendMessage() { Object obj = body.getPayload(); System.out.println((String)obj); }
};
}
}
public class HelloWorld {
public static void main(String[] args) {
MessageBody mb = new MessageBody();
mb.configure("Hello World!");
AbstractStrategyFactory asf = DefaultFactory.getInstance();
MessageStrategy strategy = asf.createStrategy(mb);
mb.send(strategy);
}
}
0044デフォルトの名無しさん
2005/12/03(土) 22:02:47./のパクリはいりません
0045デフォルトの名無しさん
2005/12/03(土) 22:07:590046デフォルトの名無しさん
2005/12/03(土) 22:36:16GRASPやJ2EEパターンが有名どころか?
0047デフォルトの名無しさん
2005/12/03(土) 23:31:490048デフォルトの名無しさん
2005/12/03(土) 23:36:28エー!!!
本家本はC++のはずだが。
0049デフォルトの名無しさん
2005/12/03(土) 23:38:490050デフォルトの名無しさん
2005/12/03(土) 23:42:47はいってちゃまずいのか?
0051デフォルトの名無しさん
2005/12/03(土) 23:43:570052デフォルトの名無しさん
2005/12/03(土) 23:54:19でもC++が多いから>>48みたいな反応でもあながち間違えではないと思う。
そんなわけで、Smalltalkに特化したThe Design Patterns Smalltalk Companionがわけだし。
0053デフォルトの名無しさん
2005/12/03(土) 23:55:100054デフォルトの名無しさん
2005/12/03(土) 23:55:21本家本=GoFデザパタ本だよね?
0055デフォルトの名無しさん
2005/12/03(土) 23:58:30何でもオブジェクトって言う思想はRubyと同じ思想?
0056デフォルトの名無しさん
2005/12/04(日) 00:19:08ワロス
確かに臭うね
>>55
何でもオブジェクトって考えは近いとは思うよ。
ただ、Smalltalkは徹底的に何でもオブジェクト。
いわゆる制御文(if、whileやforのようなもの)も
各種オブジェクトのメッセージとして定義されてる。
Rubyもそうなのかな?(じぶんはRubyってそれほどしらない)
0057デフォルトの名無しさん
2005/12/04(日) 00:28:54っていうのは順序がおかしいと思う
0058デフォルトの名無しさん
2005/12/04(日) 00:31:540059デフォルトの名無しさん
2005/12/04(日) 00:34:34> いわゆる制御文(if、whileやforのようなもの)も
> 各種オブジェクトのメッセージとして定義されてる。
Rubyもそうだよ
ttp://ruby.mirror.easynet.be/ja/column/v0004.html
RubyはSmalltalkとPerlのハーフってことかな?
0060デフォルトの名無しさん
2005/12/04(日) 01:46:02違う。Rubyは制御文はメッセージ送信ではない。
ifやwhileなどの制御文はCやPerlと同じモデル。
そのページは間違い。ifメッセージをなんのオブジェクトに送信しとるっちゅーねん。
0061デフォルトの名無しさん
2005/12/04(日) 02:25:190062デフォルトの名無しさん
2005/12/04(日) 02:27:014. 制御構造までオブジェクト
私はこれで乗り換えました。(ついに!)
ってのはかなり痛いんだけど、Rubyに詳しい人解説お願い。
0063デフォルトの名無しさん
2005/12/04(日) 02:29:25>>62 どこらへんが?痛さの解説お願い。
0064デフォルトの名無しさん
2005/12/04(日) 02:45:170065デフォルトの名無しさん
2005/12/04(日) 02:47:32void型メソッドをあえて自分への参照を返すようにしているコードって結構好きだし、痛さは感じないが。
0066デフォルトの名無しさん
2005/12/04(日) 02:51:47しかも間違えた解説付きときている
言語構造云々について痛いとかは思わない
0067デフォルトの名無しさん
2005/12/04(日) 02:53:550068デフォルトの名無しさん
2005/12/04(日) 11:18:19これはオブジェクトではなく”式”の勘違いですね。
>if 〜 end.tr("a-z", "A-Z")
この記述が勘違いを助長させた原因でしょう。
ifの結果としてオブジェクトが返却され、.tr〜はそのオブジェクトに
対しての操作だということをこの人は誤解しています。
Rubyの構文規則は柔軟に見えますが、こういった誤解を受ける問題があります。
0069デフォルトの名無しさん
2005/12/04(日) 11:27:510070デフォルトの名無しさん
2005/12/04(日) 11:28:130071デフォルトの名無しさん
2005/12/04(日) 11:36:14ありゃあ関数オブジェクトとかクロージャといった類のモノだよ。
起源はLISPのインライン関数とかSmalltalkのブロックだな。
Rubyは動的時にメソッド選択してるからトンデモ構文に見える。
0072デフォルトの名無しさん
2005/12/04(日) 11:36:38な
0073デフォルトの名無しさん
2005/12/04(日) 13:11:050074デフォルトの名無しさん
2005/12/11(日) 15:08:430075デフォルトの名無しさん
2005/12/11(日) 15:21:18プログラムシラナイお偉いさんにシーケンス図見せる時点で間違ってないか?
ユースケースとか配備図とかコラボレーション図とか…
0076デフォルトの名無しさん
2005/12/11(日) 15:24:200077デフォルトの名無しさん
2005/12/11(日) 15:26:46えーと、UMLって単に開発で使う図に統一規格を持ち込んだだけの
話で、それ以上のものじゃないですよ。
0078デフォルトの名無しさん
2005/12/11(日) 15:27:290079デフォルトの名無しさん
2005/12/11(日) 15:34:43厳密な設計書として書いているなら細かすぎて読めないかも
0080デフォルトの名無しさん
2005/12/12(月) 00:14:39曖昧なまま書き起こされたUMLは、一見する分には完全な仕様書に見えるため問題が分かりにくい。
UMLが客が読める仕様書としてしまうのはある意味とても危険。
0081デフォルトの名無しさん
2005/12/12(月) 20:59:11あくまでコミュニケーションツールの一つ。
処理の流れはこんな感じですよ〜みたいに。
0082デフォルトの名無しさん
2005/12/13(火) 00:53:54・・・はっ!!
0083デフォルトの名無しさん
2005/12/17(土) 02:12:043級レベルで会計ソフトって作れるのかいな?まあそっちも勉強しながらやってきます
0084デフォルトの名無しさん
2005/12/17(土) 13:08:090085デフォルトの名無しさん
2005/12/17(土) 14:39:32そういうレスはこのスレの役を果たさないな
0086デフォルトの名無しさん
2005/12/17(土) 15:51:23これってやっぱ良くないの?
0087デフォルトの名無しさん
2005/12/17(土) 15:59:24ここがちょっとわからないが、まぁpublic全開になるのは仕方ないんじゃないかな。
コンポーネント郡はそのまま使わず、派生させてから使えば上手くカプセルにできるかもしれん。
0088デフォルトの名無しさん
2005/12/17(土) 16:00:18関連というか、メッセージ送信が双方向になるなら、そのメッセージを一度整理して、分類して、
クラス内のメッセージ受信部分をインタフェースに分離するという観点で構築しなおしたらいいんじゃないの?
0089デフォルトの名無しさん
2005/12/17(土) 16:12:250090デフォルトの名無しさん
2005/12/17(土) 16:53:09サンクスコ
そうです、メッセージ送信が双方向ってことでした。
そういえばインターフェースも抽象クラスも全く使ってない。
というか使いどころもわかんね。
とりあえずそれらの勉強してみます。
ありがとうございました
0091デフォルトの名無しさん
2005/12/19(月) 12:54:31漏れは何も考えずにとりあえずメソッドはpublicにしてるんだけど…
内部からしか呼ばれないのはprotectedにしてる
まずいのか?
0092デフォルトの名無しさん
2005/12/19(月) 16:18:57いつの間にかぐちゃぐちゃなソースになるのが弊害かな。
0093デフォルトの名無しさん
2005/12/20(火) 00:10:39public:外から呼ぶ必要がある
protected:外から呼ぶ必要はないが派生クラスから呼ぶ必要がある
private:デフォルト
0094デフォルトの名無しさん
2005/12/20(火) 00:17:270095デフォルトの名無しさん
2005/12/20(火) 01:25:220096デフォルトの名無しさん
2005/12/21(水) 16:07:20その本は読んでないが、そこだけ聞いたら焚書モノだな。
0097デフォルトの名無しさん
2005/12/22(木) 00:45:27その判断を誤るとややこしいことになるからすべてpublicにしておけ
って程度なんだろうね、その本>>95
0098デフォルトの名無しさん
2005/12/23(金) 02:03:45javaのprotectedって全然プロテクトじゃないんだね
最初はprivateで作ってて派生クラスからメンバ変数へのアクセスが必要になる度に
アクセサメソッド追加してるんだけど、まずいですか?
まともなjava技術者ならどうしてます?
0099デフォルトの名無しさん
2005/12/23(金) 09:34:12全然プロテクトじゃないってどういうこと?
0100デフォルトの名無しさん
2005/12/23(金) 10:50:460101デフォルトの名無しさん
2005/12/23(金) 11:18:140102デフォルトの名無しさん
2005/12/23(金) 12:01:36早くプロテクトじゃない理由を教えてくれよう。ワクワク
0103デフォルトの名無しさん
2005/12/23(金) 12:20:31>アクセサメソッド追加してるんだけど、まずいですか?
C++もそうだし、オブジェクト指向もわかってないんじゃないかな
なんか、Cプログラマーみたい
グローバル変数使うなっていわれたから、プライベートにしてみました
みんなが必要とするから悪切磋つけました
そんなところでしょ
0104デフォルトの名無しさん
2005/12/23(金) 12:45:220105デフォルトの名無しさん
2005/12/23(金) 13:14:14まともなC++技術者ならそんなことやらない
まともなJava技術者もそんなことやらない
まともなSmalltalkerもそんなことやらない
まともなオブジェクト指向言語使用者ならそんなことやらない
0106デフォルトの名無しさん
2005/12/23(金) 14:10:15010798
2005/12/23(金) 14:10:15プロテクトじゃない云々は、javaのprotectedメンバは派生クラスだけでなく
同じパッケージにいるクラスでもアクセスできるのでC++のより緩いって意味です。
親クラス作るときにはメンバ変数全部に対してprotectedのアクセサ用意しとくものなのかな、と。
で、こういう設計はおかしいですか?
0108デフォルトの名無しさん
2005/12/23(金) 14:12:55そういうときにpribvateだと、困るから、protectedにしておいたほうが、いいのかなぁ〜。
なんっていう、下らんこと気にしているようでは、そもそもクラス抽出がうまくできているとは思えない。
0109デフォルトの名無しさん
2005/12/23(金) 14:15:50サブクラスのためにその都度スーパークラスを改変する ってのがナンセンス。
継承前提で設計されたスーパークラスはそんな改変しょっちゅうしない。
0110デフォルトの名無しさん
2005/12/23(金) 14:17:48?
派生からアクセスが必要になる度にアクセッサを追加してるんじゃないの?
そもそも日本語もだめだったり?
0111デフォルトの名無しさん
2005/12/23(金) 14:25:09メンバ変数全部に対してprotectedのアクセサ用意って
これはカプセル化の意味ないと思うんだが…
多分そのスーパークラスの設計から見直したほうがいいんじゃ
0112デフォルトの名無しさん
2005/12/23(金) 14:32:59工数削減の関係で仕方なく、継承させるつもりがまったくなかったクラスに
スーパークラスとして、アクセサを追加してました。
まったく継承させるつもりがなくても、あとあとのことを考えて
protectedアクセサを…ってダメダメですよね。
設計が悪かったのが理解できました。みなさんありがとう
0113デフォルトの名無しさん
2005/12/24(土) 00:00:27デフォコンだけでしょ
0114デフォルトの名無しさん
2005/12/24(土) 00:30:10?
0115デフォルトの名無しさん
2005/12/31(土) 04:53:35∧_∧ / ̄ ̄ ̄ ̄ ̄
(ω・ )ゝ < なんだって?
ノ/ / \_____
ノ ̄ゝ
0116デフォルトの名無しさん
2005/12/31(土) 10:26:20オーバーロードとは違う
0117デフォルトの名無しさん
2005/12/31(土) 13:39:08Aという共通抽象クラスがあって、業務Bと業務Cがあり、BとCは機能がほとんど同じ
この場合、どっちがよい?
1)A<Bと継承して、更にB<Cと継承して違うところだけは追加・オーバーライドする
2)A<B, A<Cと別々に継承する
1だと違う部分だけ書けばそれだけでいいけど、もしBの共通部分が変更になるとCにも影響する恐れがある
2だとBの共通部分が変更になってもCには影響しないが、多少かぶってしまう箇所が出てくる
個人的には2かなと思ってるけど、今の現場では1が多い
2は共通化できそうな部分だけは別クラスに作るってので対処できるし
0118デフォルトの名無しさん
2005/12/31(土) 13:54:44早い話がラッピングするパターン。
http://www.techscore.com/tech/DesignPattern/Decorator.html
0119デフォルトの名無しさん
2005/12/31(土) 18:49:30もし俺なら、(共通部分の内容と量にもよるが)もう1層括りだせないか?
と、考えてみる。
AbstractA<抽象クラス
│
AImpl<共通実装部分
├SubclassB<差異
└SubclassC<差異
0120デフォルトの名無しさん
2005/12/31(土) 19:11:480121117
2005/12/31(土) 20:13:31>>118
Decoratorパターンでやったことないから今度実験してみよう
>>119
2の拡張みたいな感じかな
それも検討してみたことがあるけど、サブシステム全体で共通ならいいような気がするけど
サブシステム内のある2機能だけ特別にクラスを作るってのはどうか悩んだ
0122デフォルトの名無しさん
2005/12/31(土) 22:41:21BとCの差異をTraitsクラスにして選択できるようにするだろう。
119のように継承するのと大して差異はないけど。
0123デフォルトの名無しさん
2005/12/31(土) 22:54:14C++な人?
0125デフォルトの名無しさん
2006/01/03(火) 13:35:23冗談半分でSmalltalkならこうするよ
といったら怒られたw
Javaでやろうとするとひどく煩雑になるんだもん・・・
0126デフォルトの名無しさん
2006/01/05(木) 08:46:21実装する言語によって良い設計が変わってしまうしね。
0127デフォルトの名無しさん
2006/01/06(金) 00:19:47言語で左右されるような実装レベルまで設計するなよ
0128デフォルトの名無しさん
2006/01/07(土) 00:38:38どんなにすばらしい設計をしたとしても、
それを実現する手段がなければ
意味のない物になってしまうと思うんだけど
0129デフォルトの名無しさん
2006/01/07(土) 01:23:02Javaでやるならクラスで動的解決になるし。
しかも静的動的って言葉すらも言語によって意味違うし。
>>127の思想だと最大公約数的な設計になりそう。
まぁ別にそれでも問題無いことも多い気もするけど。
0130デフォルトの名無しさん
2006/01/07(土) 11:47:080131デフォルトの名無しさん
2006/01/07(土) 22:39:23詳細設計
0132デフォルトの名無しさん
2006/02/12(日) 12:27:560133デフォルトの名無しさん
2006/02/12(日) 15:23:020134デフォルトの名無しさん
2006/02/13(月) 03:39:020135デフォルトの名無しさん
2006/05/18(木) 07:22:23しなかったかなぁ、と思った事はあるね。
Perlとかを意識して妙な仕様にしたんだと思うが。
0136デフォルトの名無しさん
2006/05/18(木) 07:24:290137デフォルトの名無しさん
2006/07/01(土) 21:50:017割がたそうなってしまうのが人の世だと思う
■ このスレッドは過去ログ倉庫に格納されています