オブジェクト設計&デザパタ
レス数が1000を超えています。これ以上書き込みはできません。
0001オブジェ・デザパタ
2010/05/02(日) 22:28:28優秀な集団だけなんだよね。
オブジェクト設計がどうした? デザインパターンがどうした? とアホ面してStrutsなど使って
たやつって何なのさ。StrutsのActionにスパゲッティソース書いていたので、Strutsが泣いていたよ。
大手の上位層の連中しか使わないのが、オブジェクト設計、デザインパターンなんだろうな。
と、上司に皮肉られた私である。
実際に、自作の、または参画しているプロジェクトで作成しているPGにオブジェクト設計、デザインパターン
を使っている天才諸君、どうやったら使えるようになるの?
0002デフォルトの名無しさん
2010/05/02(日) 22:37:59デザパタとかの知識だけ増やしてもあまり意味無い様な…
0003デフォルトの名無しさん
2010/05/02(日) 22:50:45とくにデザインパターンなんて単なる「あるある」のマトメなんだから、
天才とかどうとかじゃなくてプログラム書いてりゃ普通に身に付くし、よく考えたら当たり前のことだろ。
ジャカルタがどういう体制で開発してるかしらんが、ぬわんじゃこりゃってAPIのライブラリも結構ある。ぬわーファクトリふぬーファクトリクラスとかな(笑)馬鹿かテメェって感じだわ。
0004デフォルトの名無しさん
2010/05/02(日) 22:57:52騙される方も悪いわな
私怨はマ板で
0005デフォルトの名無しさん
2010/05/02(日) 23:49:42言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0006オブジェ・デザパタ
2010/05/03(月) 00:11:16寝ることにするわ。
0007デフォルトの名無しさん
2010/05/03(月) 01:58:49頼むから、いちいちアイちゃんの言語訓練に2chを使うなよ。
人の迷惑とか考えないの?
京都大学霊長類研究所って無能の集まりなの?
0008デフォルトの名無しさん
2010/05/03(月) 02:01:38許してやって下さい
0009デフォルトの名無しさん
2010/05/03(月) 03:03:49何をしようがよい設計をする人はよい設計をするし、
ダメな人はダメなんだから、良くも悪くもならないものだと考えておくべき
0010デフォルトの名無しさん
2010/05/03(月) 06:52:41デザパタがわかるからといって、うまい設計ができるわけではない。
もちろんデザパタもわからんカスは設計なんてやるべきじゃない。
0011デフォルトの名無しさん
2010/05/03(月) 08:46:49PC使わせるなよ、荒らし報告すんぞ
0012デフォルトの名無しさん
2010/05/03(月) 10:38:400013デフォルトの名無しさん
2010/05/03(月) 11:09:000014デフォルトの名無しさん
2010/05/03(月) 11:17:070015デフォルトの名無しさん
2010/05/03(月) 11:21:230016デフォルトの名無しさん
2010/05/04(火) 13:45:44>大手の上位層の連中しか使わないのが、オブジェクト設計、デザインパターンなんだろうな。
たしかに上司の言う通り。いろんな会社にいったけど、まともなフレームワークを作れるは大
手のR&D部署ぐらい(製品開発をやっている所ではない)だったな。そういう所は、勉強す
るの好きだったり、経費でコンサルを雇っていたりする。
少なくとも派遣主体でころころ人が変わる所、休憩時間にゲームや漫画とか読むのが好きな
人が多い所で、そういう開発を実践できているところはいないなあ。
0017デフォルトの名無しさん
2010/05/08(土) 00:59:12デザパタとかwww
オブジェクト指向なんて不自由な環境にいるから余計なものを有難がってるって早く気づけよwww
0018デフォルトの名無しさん
2010/05/09(日) 22:19:16大手のSE,プログラマと接触してみる機会をもったら目から鱗です、よwo.
0019デフォルトの名無しさん
2010/05/09(日) 23:14:340020デフォルトの名無しさん
2010/05/10(月) 07:07:08そこそこの建物になったら使うべき。ちなみにデザパタは適用なのね。適用≠使用ではない。
レベルの低すぎる人は勉強しよう。という私も低いんだが。。。。
0021デフォルトの名無しさん
2010/05/10(月) 16:47:030022デフォルトの名無しさん
2010/08/29(日) 17:50:48heigh ass hole ! happy?
0023デフォルトの名無しさん
2010/09/05(日) 13:54:24それはおかしくね?
デザパタは別に、規模の大小に関わらず、
あるよくある問題に対する 伝統的解決法やテクニック的な解答の識別子 であって、
規模が小さいから使えないとか、大きいから有効とかって物じゃない。
オブジェクト指向についてなら、まぁ分からなくもないけど、
小さいからこそ、しっかりオブジェクト指向で設計しとくと
他への流動性が上がりやすいんだけどな。
あと、やたらと一からオブジェクト指向で設計せねば!みたいな印象をうけるけど、
リファクタリングの際についでに、とか、ひとまず最低限の要求仕様を満たしたから
次のステップの前に。とかでスクラップアンドビルド的にやる方がマトモだと思う。
つか、人間に一から完全を求めるのはいい加減やめるべき。
0024デフォルトの名無しさん
2010/10/14(木) 02:17:360025デフォルトの名無しさん
2010/10/15(金) 14:25:38まずは、Smalltalk-80のMVCのどこに問題があるのか、そこから語ってもらおうか。
0026デフォルトの名無しさん
2010/10/16(土) 00:40:52Smalltalkはいいけど、JavaのMVCとか糞じゃん。
MVCで作りましたってコードは大抵ModelとControlerが破綻してるし。
0027デフォルトの名無しさん
2010/10/16(土) 06:25:380028デフォルトの名無しさん
2010/10/21(木) 22:39:160029デフォルトの名無しさん
2011/04/10(日) 17:06:14.600030デフォルトの名無しさん
2011/04/10(日) 17:18:16.54kwsk
0031デフォルトの名無しさん
2011/04/10(日) 17:30:50.94オブジェクト指向の進歩を妨げているのだが、怖くで誰も言えない罠w
0032デフォルトの名無しさん
2011/04/10(日) 17:35:59.380033デフォルトの名無しさん
2011/04/10(日) 17:59:23.450034デフォルトの名無しさん
2011/04/10(日) 19:01:33.830035デフォルトの名無しさん
2011/05/04(水) 23:19:45.18TextModel text = new TextModel();
Menu copyMenu = new Menu();
TextArea textView = new TextArea();
copyMenu.addAction(new TextCopy(textModel,textView));
例えばこのコードなら、TextCopy Controlerは、ViewとModelが変わっても使いまわしし続けられるけど、
MVVMモデルだと組み合わせごとにTextCopyを毎度ViewModelやらに書くわけだろバカバカしい。
0036デフォルトの名無しさん
2011/05/05(木) 00:09:12.850037デフォルトの名無しさん
2011/05/07(土) 17:55:55.82Presenterって、Viewを構成するコントロールの具体的(物理的)な種類に
依存すべきでないでない認識だけど、あってる?
たとえば、View上の数値入力欄が ただのテキストフィールドなのか、スピンコントロールなのか、
はたまた スライダーコントロールなのかを、Presenterは知らなくていいよね?
0038デフォルトの名無しさん
2011/05/13(金) 19:38:05.08ただeventから取れる場合はともかく、selfから取る場合には、
実装(というか処理系というか)により適切なコントロールの具象にキャストしないとダメかも知れません。
0039デフォルトの名無しさん
2011/10/02(日) 20:07:07.00リーナスのお言葉(青い部分がリーナスの言葉)
http://tabesugi.net/memo/2009/1a.html#152154
0040デフォルトの名無しさん
2011/10/05(水) 04:08:26.730041デフォルトの名無しさん
2011/10/08(土) 19:20:18.35前あったOOPスレも3スレで終わったし
0042デフォルトの名無しさん
2011/10/08(土) 23:28:11.32ちょうど むだなOOPゴミスレも掃除できたし良かったんだよ。
次はここを消費してOOPが消えればいいかも 爆
0043デフォルトの名無しさん
2011/10/12(水) 20:29:02.44クロージャとか関数オブジェクトを採用すると不要になったりしないかね?
0044デフォルトの名無しさん
2011/10/12(水) 20:33:43.47「forループ」にわざわざパターン名を付けないように、
言語レベルで概念が用意されてれば、その世界では
パターン名は不要だね。
0045デフォルトの名無しさん
2011/10/12(水) 20:34:04.980046デフォルトの名無しさん
2011/10/12(水) 23:04:40.99名前は忘れ去られるかもしれないが、考え方自体はなくなるのではなく、新たな言語パラダイムが作用して、別のパターンがうみだされるんじゃないかな。
0047デフォルトの名無しさん
2011/10/13(木) 15:19:06.77オブジェクト指向設計とデザパタは大手企業はガンガン使いこんでいるが、
一般的には使われていないのではなかろうか? と最近思い始めています。
使えなくて使わないのか、短納期で設計の時間がなくて使わないのか、
いまいち、その辺の事情がわからんです。
まさか必要がないと判断されているのぉ???
情報通の方、この点について教えてください。
必要がないならこんな糞難しいものを勉強するのはやめます。
0048デフォルトの名無しさん
2011/10/13(木) 16:12:04.510049デフォルトの名無しさん
2011/10/13(木) 17:15:07.54うまいこと言うね
デザパタは特定の頻出問題についての上手な実装方法だから
局所的に使われる傾向がある(シングルトンにする必要があれば使うし、なければ使わない)
オブジェクト指向設計ってのは「設計方針」なんで広く浅く普及してると思うよ
今時のフレームワーク使ってたら自然と(とはいえ漠然と)身についてると思う
0050デフォルトの名無しさん
2011/10/13(木) 18:54:19.070051デフォルトの名無しさん
2011/10/13(木) 22:33:30.95あれはデザインパターンの練習問題みたいなもの。
シングルトンにしたければフレームワーク側で
制御してくれる。
0052デフォルトの名無しさん
2011/10/13(木) 22:44:15.72どんな問題があって、それをどのように解決してるのかだけ、ざっくり頭に入れとくといいよ
じっくり学ぶのは必要になってからでいいじゃん
0053デフォルトの名無しさん
2011/10/13(木) 22:48:33.15> 一般的には使われていないのではなかろうか? と最近思い始めています。
逆じゃね?w
大手ほど安い外注に出し、安い外注は安いだけが売り物。
技術は低い。大手だからそんなんでもやっていける。
中小のほうがよっぽどデザパタ使ってるだろ
自分の技術力が即会社の存続にかかってくるんだから。
0054デフォルトの名無しさん
2011/10/13(木) 22:59:57.30柔軟さをもっと持たせようとしたら悩むっしょ?
糞設計を山ほど繰り返し、日々悩むっしょ?
そこで手に取るもののひとつがデザパタにすぎない。
設計道の一歩目にすぎない。
0055デフォルトの名無しさん
2011/10/13(木) 23:02:08.95ラムダを自然に使えるようになっても、commandだのobserverだの
名前は使われるんじゃね。
0056デフォルトの名無しさん
2011/10/14(金) 15:12:01.84取引相手から金貰うやり方にもよるんだと思うよ。
大企業を相手にソースをリリースしていると「何か変更を加えたときに混入するバグ」を恐れて硬直化する。
修正するのに一々マニュアルまであったりしてオーバーヘッドがすごくなる。
俺が前居た会社だと、一案件変更しようとする毎に
・見積もり書
・外部仕様書
・内部仕様書
・単体試験仕様書
・組み合わせ試験仕様書
をかっちり書かされて大変だった。更に各ドキュメントのページ数やらも管理する。
そのドキュメントでも金貰えてたんだけど。
んなことやってるからリファクタリングなんて夢のまた夢って感じだった。
0057デフォルトの名無しさん
2011/10/14(金) 15:32:28.38コメントアウトされた修正前のコードがどっさり
0058デフォルトの名無しさん
2011/10/15(土) 08:04:33.82なにかバージョン管理システムを使えばいいのにね。
0059デフォルトの名無しさん
2011/10/23(日) 22:44:02.16実際に設計しながら覚えたいんだけど,良い例題(と模範解答)はないでしょうか。
入門サイトを見ると,「1+2*3」みたいなのを計算するプログラムが挙げられたりするけど,
その程度だったら再起関数で済むと思う。
わざわざ演算子のInterface定義して,Plus型MINUS型のcalc()を実行!
みたいなサンプルを見かけるけど全然参考にならない。
0060デフォルトの名無しさん
2011/10/23(日) 23:21:26.98優れた設計を学ぶには優れた設計に触れるしか無いが、何が優れた設計なのかは実は誰もわかってない。
オプソにしても何を見て学べばいいのかわからないし。
0061デフォルトの名無しさん
2011/10/24(月) 00:09:47.57ひとまずデザパタ見れ。
関数型の考え方などから見ると古かったり必要のないものもあるけど、未だにオブジェクト指向のエッセンス詰まってると思う。
0062デフォルトの名無しさん
2011/10/24(月) 03:03:55.97デザパタとリファクタリングは車の両輪
リファクタリングがうまくなったら自然とうまい設計がわかってくる
0063デフォルトの名無しさん
2011/10/24(月) 12:43:31.08実例はフレームワークのソース見るといいよ。手始めには辛いかもだけど、javaのcollection frameworkなんてどう?
0064デフォルトの名無しさん
2011/10/24(月) 13:31:22.98同意。OOPの理解を深めようとするのなら、その二つはまさに両輪。
ただ、悲しいかな、それをつきつめた先に設計の極意があるか、
自分の設計力を高みに持っていけるかというとそれはまた別。
どこまで行ってもクソ設計を繰り返すことになるだろう。
それは、個人の設計力、設計センスよりもいつだって、
プログラミングすべき問題のほうがややこしいから。
0065デフォルトの名無しさん
2011/10/24(月) 22:10:17.46デザパタなんてコロンブスの卵にしか思えんけど。
恐らく散々言い尽くされたことだと思うけど、デザパタには確かに意義があるが、
それは技術サンプルとしての意義じゃなくて、コミュニケーションツールとしての意義だよ。
「ここは○○パターン的な発送で作ってあるよ」と言う事で、意思疎通のコストを縮減できる、
それがデザパタの意義であって、それ以上でも以下でもない。
0066デフォルトの名無しさん
2011/10/24(月) 22:29:47.86騙されたと思ってパターン指向リファクタリング入門読んでみ?
0067デフォルトの名無しさん
2011/10/24(月) 22:32:34.22今のご時世、プログラミングを始めたときにはすでにデザパタが常識になってたって奴もいっぱいいて、
実際そいつらは、デザパタを通して設計を学んでるわけで
ていうか「意義」をひとつに決めようとする必要ないし
0068デフォルトの名無しさん
2011/10/24(月) 23:46:51.92より上位の設計があって、その設計を実現させるための手段としてデザパタがあるという印象
で、>>59が求めているのはそういう上位の設計なんじゃないか?
0069デフォルトの名無しさん
2011/10/25(火) 00:00:49.98なぜなら、多くの人にとってのパターンの理解度が単に疑わしい。
その定義やメリットについてMLなどでわりと揉めちゃってるのを見る。
例えば、JavaHouseのログを見るといい。Factory Methodパターンなど。
ほかにも、実際2ちゃんでもAbstruct Factoryパターンを、
単なるファクトリメソッドのオーバーライドとして理解している人を見た。
これらは、カタログとしてデザパタが失敗しているというよりは、
やっぱデザパタそのものの理解が難しい、
さらにやっぱり、そもそもスカッとした設計自体が難しいってことと思う。
でなもんで、おとなしく学習のツールとして使うのもどんどん推奨されるべき。
0070デフォルトの名無しさん
2011/10/25(火) 00:02:35.14選択肢を増やす意見ならともかく、出た案を否定することに意味はあるのか?
0071デフォルトの名無しさん
2011/10/25(火) 00:08:41.30またよろこばしからずや
0072デフォルトの名無しさん
2011/10/25(火) 00:22:48.10デザパタを学んだことで設計を学んだと勘違いしてしまうと、むしろ害があると思っているから
否定しておきたかったってのはある。
害っていうのは、本来はパターンを使わない方が自然であったり、使うべきでないところに無理やり
パターンを当てはめてしまうようなことがあること。
たぶんデザパタを学んだ多くの人は経験していると思うんだけど。
それを踏まえた上で勉強する分には構わないと思う。
代案を出せればいいんだけど、良い方法を自分も知らないから…。
0073デフォルトの名無しさん
2011/10/25(火) 00:30:01.63> 害っていうのは、本来はパターンを使わない方が自然であったり、
> 使うべきでないところに無理やりパターンを当てはめてしまうようなことがあること。
結局ね、実害がない限りそういうのもドンドンやってみるべきなんだよ。
そんでもって、学ぶ。どうまずいのか、どう不自由になっていったのか学ぶ。
そもそも、デザパタ単体で学ぼうとして挫折したやつ多く見た。
小さいサンプル書いてみたところで何が学べようか。
個々のデザパタが何をそれぞれ解決してくれるのかを学ぶには、
デザパタ適応以前の苦痛をしっておきたいところ。納得度が違う。
設計&デザパタ&リファクタでもんどりうちながら学ぶ。
いつでも学ぶ。いつでも臭い設計になっちゃうのでまた学ぶ。
悪い設計を目の前にして、右手にデザパタ本、左手にリファクタ本で学ぶ。
0074デフォルトの名無しさん
2011/10/25(火) 00:30:51.53単純に if 分岐で関数切り出しでもされてた方がよっぽど見やすいわ。
テンプレートパターンがうまくいくのは
「具体的には違う処理だが抽象的には同一の処理」の塊が
長く続いてるコードだと思うんだがそんな都合のいいシチュエーションって
そうそうないだろ。
0075デフォルトの名無しさん
2011/10/25(火) 00:40:15.32「俺は綺麗に実装されたテンプレートパターン見たことあるぞ」と言う奴がいれば根拠崩れるぞ
>>73
自分も同趣旨の事書きかけてたけどそっちの方が文章うまいね
0076デフォルトの名無しさん
2011/10/25(火) 00:50:30.21少なくともif分岐はないわ-
テンプレートパターンは、今は具象インスタンスから可変ポイントになるもののラムダを渡して実行って感じになってるがやってることは一緒。
0077デフォルトの名無しさん
2011/10/25(火) 02:53:17.39「この部分は○○パターンでここのこの部分は…」みたいな
使える所があれば使えばいいし、出番が無いこともある
そういうものなんで、リファクタリングしながら適用するのはいいと思う
0078デフォルトの名無しさん
2011/10/25(火) 07:45:12.50デザパタについては,浅く理解していると思う。
ただ,デザパタを実際の設計に結びつけれるほどは理解していない。
結びつけられるようになればレベルアップのような気がして,
まずはデザパタも含めて「良い設計」の実例を見てみたかった。
JavaのCollectionFramework参考にしたいと思う!
他にも何か良い例があれば教えて下さい。
0079デフォルトの名無しさん
2011/10/25(火) 08:16:12.77Template Method(の事だよな?)は、Straregyのように同一インターフェースだが、多くの実装のバリエーションがある場合に、骨格抽象実装(スケルトンクラス)として、よく利用している。
(つづく)
0080デフォルトの名無しさん
2011/10/25(火) 08:18:00.91全ての末端のクラスでnullチェックして、実行って記述すると冗長なので、共通部分をスケルトンクラスに移管させ、
バリエーション記述のためにprotectedなabstractメソッドを用意しておく。
末端のクラスはこの抽象メソッドを実装するといった感じで。
これに限らず、「インターフェース ー スケルトンクラス ー 実クラス」という形は結構でてくるものよ。
0081デフォルトの名無しさん
2011/10/25(火) 09:48:44.85>そもそもデザパタは局所的に使う物でしょ
デザパタに出てくるものってソフト全体に絡むと思うぞ。大きいものから小さいものまで。
その意見をとやかくいうのではないけど、そういう捉え方をする人がいる人にビクーリした
0082デフォルトの名無しさん
2011/10/25(火) 09:57:35.71アーキテクチャパターンとか聞いたことない?
0083デフォルトの名無しさん
2011/10/25(火) 10:23:46.45両者を明確に区別すべき理由はないでしょ。
0084デフォルトの名無しさん
2011/10/25(火) 10:32:18.95コード書かずに図を弄ぶのがアキパタ
0085デフォルトの名無しさん
2011/10/25(火) 11:26:09.36拡大解釈
やな予感
0086デフォルトの名無しさん
2011/10/25(火) 20:09:48.47あまりレベルの高くないプロジェクトメンバーでも長期に渡って保守可能な設計
これらは両立しなくてどっちも大事だと思うんだけど,両方上達する方法ない?
0087デフォルトの名無しさん
2011/10/25(火) 20:32:03.03まずお目にかかったことが無いw
0088デフォルトの名無しさん
2011/10/25(火) 21:02:02.72長期に渡って保守しておいてレベルの低いままのメンバーなんて切ればいい
下手糞が保守できるからいいソースとは限らない
→どっちも大事じゃない
0089デフォルトの名無しさん
2011/10/25(火) 21:08:22.36ココロに響くお言葉
0090デフォルトの名無しさん
2011/10/26(水) 15:29:24.80それがわかんない人はどういう変更してくるかマジわからんし。
前の会社で、俺が設計・コーディングして、手を離れたやつに機能追加しようとした先輩がいてさ。
うまくいかないってソース持ってこられて(!)見てみたらコレが酷いのなんの。
俺「そこはサブクラス追加だけで良いですよ、そういう風に変えたら広範囲に悪影響あります、…(しばらく駄目出し)」
先輩「…全然駄目ですか」
俺「駄目駄目です」
0091デフォルトの名無しさん
2011/10/26(水) 15:58:40.97それは先輩もあれだが、正しくドキュメントとか残したん?
0092デフォルトの名無しさん
2011/10/26(水) 16:36:25.670093デフォルトの名無しさん
2011/10/26(水) 16:54:45.34と思ってた時期が以下略
0094デフォルトの名無しさん
2011/10/26(水) 17:11:32.92(ヾノ・∀・`)ムリムリ
0095デフォルトの名無しさん
2011/10/26(水) 21:16:31.08>92-94が正にそん時の状況を表してるw
一応、設計中に作成したメモ書きよりは上等程度のんは残してたけど。
まさか数キロステップ程度のプログラムで悩まれるとは思わんかったし、
彼もOCPとLSPが分かってたらやっちゃいけない事くらい分かったろうし…。
他にやる事あったのにそこまで面倒見切れんかった。
0096デフォルトの名無しさん
2011/10/27(木) 00:40:23.24その先輩のようにOOに疎い人は確かに多いんだけど
自信ありげに語ってる側もまた酷いコードを書いてることが多い
0097デフォルトの名無しさん
2011/10/27(木) 01:20:27.660098デフォルトの名無しさん
2011/10/27(木) 05:51:20.24しかも変数名や関数名は母音抜き
0099デフォルトの名無しさん
2011/10/27(木) 06:31:09.36コメントはちょっと扱いが難しい。コメントが嘘をつくことがあるから。
つまり、コードの改変にコメントが追いつかないことがある。
コメント書かないほうがまし、と思うことが最近多くなってきた。
0100デフォルトの名無しさん
2011/10/27(木) 07:32:32.83下に合わせてもキリがないのはすごく分かる。
設計思想を理解してもらう部分にコストが掛かるから難しい。
作り手は工数かけてドキュメント作成しなきゃいけないし,
その後も更新に合わせて整備しないとぐだぐだになる。
かといってドキュメント残さないで設計思想を安定して読み解ける人は
安定供給されないw
シンプルに作った時の問題点が多くなかったり別の解決が出来るならシンプルに
作った方が良い時もあると思う。シンプルってなんだ?っていうのは置いといて。
例えば,使われる側のクラス設計的に問題があって,使う側に少し制約が付くとしても
変に複雑にクラス設計するよりシンプルにつくって何らかの台帳で制約を共有するとかね。
>>99
それ凄く多い。
あと少し違うかもしれないけど,
顔合わせない派遣さんとかが付けたSVNのコメントも混乱の要因になったりする。
0101デフォルトの名無しさん
2011/10/27(木) 08:57:01.35オブジェクト指向原則ってプログラムをシンプルに保つためのもんだよね。
LSPに沿っていれば、あるインターフェースでオブジェクトを扱う使用側は個々の具象クラスの事に気を使う必要はない、とか。
シングルタスクで記憶容量の少ない、低クロックCPUの俺のような奴にこそオブジェクト指向原則は必要だと思う。
それに沿って作られてるだけで頭に掛かる負担が全然違うし。
0102デフォルトの名無しさん
2011/10/27(木) 08:57:10.40// メインループ
// テンポラリ変数
// イテレータ
// 文字列をコピー
↑こーいうw
0103デフォルトの名無しさん
2011/10/27(木) 13:31:26.33コード直すときにコメントも直すだろ
コードと一緒にコメントも直す習慣が無いやつが書いた
ワードやエクセルのドキュメントなんて信用できるのか?
010499 ◆QZaw55cn4c
2011/10/27(木) 20:53:18.37根本的解決になっていない。
コメントがコーダに及ぼす影響を考慮すると、コードの内容に即したコメントになっているかどうかをコンパイラがチェックできなければならない。
それができないのならばコメントはいらない。
コード直すときにコメントも直すだろ、という精神論は竹槍でB29を落とし、バケツリレーで焼夷弾を消火せんばかりの旧日本軍的思考となんらかわりない。
0105デフォルトの名無しさん
2011/10/27(木) 21:16:08.44心情的に同意したくはあるんだけど、もうちょい穏やかな言い方にならん?
プログラム書いてるときとドキュメント書いてるときって脳の使うとこが違うよね
「なんかの作業してて調子が出てくるのに2時間くらいかかる」ってどっかで聞いたことある(気がする)けど、
それでいくとプログラム・ドキュメント並行作業ってあまり良くない気がする。
と言って、交互にすると抜けはどうしても出てくるだろうし。
…ってオブジェクト指向もデザパタも関係ない話になってきてね?
010699 ◆QZaw55cn4c
2011/10/27(木) 21:33:37.10失礼しました。ただ >>103 にあわせるとこうなってしまいました。(私の本音は >>99 を参照ください。)
0107デフォルトの名無しさん
2011/10/27(木) 21:43:40.97コメントなんて書かなくてもいいんじゃね
レベルの低い奴が修正する可能性があるってわかってるのにコメントを書かないのなら、
設計思想を無視した修正をされても黙ってろってかんじ
0108デフォルトの名無しさん
2011/10/27(木) 21:54:55.95宿題スレで金儲けはもうやらんの?
0109デフォルトの名無しさん
2011/10/27(木) 22:16:28.03そもそも設計思想なんてコメントで残すものでもない。
0110デフォルトの名無しさん
2011/10/27(木) 23:21:45.710111デフォルトの名無しさん
2011/10/27(木) 23:24:58.23結構ダイナミックに変わると思うけど
0112デフォルトの名無しさん
2011/10/28(金) 00:11:54.250113デフォルトの名無しさん
2011/10/28(金) 00:24:18.81i += 3; // iに5を足す
0114デフォルトの名無しさん
2011/10/28(金) 00:34:37.01誰でも読める様なソースはプログラムじゃなくて、だだのマクロだよ。
0115デフォルトの名無しさん
2011/10/28(金) 02:30:42.77そのほうがトータルコストは低くなる。ソースの頭に色々と関連した前提を長々と文章で書いてる。
あとはややこしいところに一目でわかるように意図を書いてる。
0116デフォルトの名無しさん
2011/10/28(金) 07:45:26.37必ず書くとか絶対書かないとか、ただの思考停止
0117デフォルトの名無しさん
2011/10/28(金) 07:46:15.80職人的発想だね。
商業漫画家の中にアマチュアだけど物凄い技術ある漫画家が混じってくるような感じ。
商業的な観点で保守性考えたときに,果たして最良のコードかどうかをよく考えた方が良いと思う。
考えた上で最良と判断したならそれでいいだろうけど。
>>115
それで上手くいくかは何人でコード書いてるのかによると思う。
「自分のためのコメントだから!」とか言って15人ぐらいがそれぞれ我流のヘッダ付けて
我流のコメント入れてたら嫌だね。
0118デフォルトの名無しさん
2011/10/28(金) 14:56:12.47コーディング規約にコメントルールもある…よな?
0119デフォルトの名無しさん
2011/10/28(金) 16:00:05.09少人数で開発できて幸せだわ。
軍曹みたいな現場に放り込まれたら一日で切れそうだw
0120デフォルトの名無しさん
2011/10/28(金) 21:39:27.42どのクラスも単独で使えなくて、CppUnitとか全然入れられないの。
単体も組み合わせも全てIDEでステップ実行のホワイトボックステスト(それしか出来ない)で、
自動化?なにそれ?みたいな感じ。
0121デフォルトの名無しさん
2011/10/29(土) 18:52:41.790122デフォルトの名無しさん
2011/10/29(土) 23:09:03.35「あ!止まった!」
とか思ってもだいたい自動化プログラムのエラーだったりねw
0123デフォルトの名無しさん
2011/10/30(日) 08:04:36.83へー、ユニットテストっていつ自動生成できるようになったの?
0124デフォルトの名無しさん
2011/10/30(日) 09:36:47.46ttp://www.techmatrix.co.jp/quality/ctest/index.htm
ttp://www.aicp.co.jp/products/cantata.shtml
とか。
使った事ないから適当言うけど、まぁソースから生成するんだろうから
生成されたテストケースが要件に沿っているかから検証し直さんといかんのだろうけど。
でも、そんなツールをどこの職場でも導入しているかつーと話は別だよね。
前んとこは結構大企業だったが、そんなツール導入はしてなかった。
0125デフォルトの名無しさん
2011/10/30(日) 09:45:52.75UWSCとかbot御用達の技術
企業だとユニットテストに使われてる
0126デフォルトの名無しさん
2011/10/30(日) 09:48:44.01ttp://www.techmatrix.co.jp/quality/ctest/index.html
0127デフォルトの名無しさん
2011/10/30(日) 09:52:04.88なんかどこおしてほしいのかわかんない
わざわざh抜く必要もないんじゃない
それかGoogleで先頭に出るキーワード貼ってよ
0128デフォルトの名無しさん
2011/10/30(日) 09:58:02.60http://www.techmatrix.co.jp/quality/ctest/index.html
でした。
それぞれ
C++test
Cantata++
でググレば出てきます。
0129デフォルトの名無しさん
2011/10/30(日) 10:39:33.84自動生成のことじゃないだろ
0130デフォルトの名無しさん
2011/10/30(日) 10:56:45.44自動生成じゃない
金儲けじゃありませんモリタポ儲けです(棒)
0132デフォルトの名無しさん
2011/10/31(月) 23:12:36.75あー、うん。用意した一連の単体試験をガーッと実行させてOK/NG出させるのを自動化って言ってた。
ソースコードの1ステップずつの動作を日本語で書き直した、
関数XXXX
期待動作 確認結果
aaa = getXXX(); を実行する OK
aaaがNのとき
o->setInfo(aaa); を実行する OK
aaaがそれ以外のとき
retが0であることを確認する OK
:
:
みたいな試験仕様書を延々とVC++のステップ実行&ウォッチで目視確認してたもんで。
0133デフォルトの名無しさん
2011/11/01(火) 22:44:42.890134デフォルトの名無しさん
2011/11/02(水) 08:56:32.89テストを自動化するときって元プログラムの方にもある程度の良設計求められるし、
テストしやすくするためには多少詳細を弄らなければならなくなることもあるでしょ。
ところが元プログラム弄るのは仕様追加・変更・修正などの案件があるときのみ、
みたいな縛りがあって、それもままならなかった。
リ フ ァ ク タ リ ン グ 、 さ せ て く れ
と思ってたら、そのうち冗談みたいな一大プロジェクトが出てきた。
リファクタリングしましょう!
スケジュールに「リファクタリング」の文字が組み込まれ、
そのための打ち合わせが増えた。
0135デフォルトの名無しさん
2011/11/03(木) 01:11:46.70もう十年以上PGやってるけど業務のソースみるとなにが「いい」のかまったく基準がわからない
俺の個人的な基準だとwin32レベルの知名度のあるライブラリでもないのに
グローバル変数や関数使った時点でアウトだけど
平均レベルただよってるレベルのひっくいPGじゃ俺のいってることさっぱりわかんねーだろーな
0136デフォルトの名無しさん
2011/11/03(木) 01:52:47.80そのレスでわかれっつー方が無理
エスパーしてみるけど、
・135は知名度の低いライブラリの開発に従事している
・そのライブラリはグローバル変数や関数を使っている
でおk?
0137デフォルトの名無しさん
2011/11/03(木) 02:16:14.66アホくせ
わからないなら黙ってろよ
わからないんだろ?
0138デフォルトの名無しさん
2011/11/03(木) 10:25:28.48文章から知性の低さが滲み出てる上に
俺のエスパーによるとオブジェクト指向とは関係ないから
0139デフォルトの名無しさん
2011/11/03(木) 12:41:57.540140デフォルトの名無しさん
2011/11/03(木) 12:44:01.640141デフォルトの名無しさん
2011/11/05(土) 08:16:43.72よくわからん・・・
コンパイラが必要だな
0142デフォルトの名無しさん
2011/11/06(日) 00:51:07.47おう、いいぜ
仕様も挙動もみんなが把握している場合に限りなんでもオッケーだと思う
ただし、マイナー・・・特に自分ライブラリなんてそんなもん誰もしらんから自重してほしい
0143デフォルトの名無しさん
2011/11/06(日) 09:20:08.66いないような気がするのですが。
0144デフォルトの名無しさん
2011/11/06(日) 10:11:17.72シーケンス図は客から要求されない限り書かないですね。
実装レベルでは、素直にコールグラフをスケッチする方が分かり易いと思ってます。
シーケンス図はその名のとおり呼び出しの時系列を追えるところがよいのだと思いますが、
ごく普通に構造化されたコードなら、ほとんどの場合「シーケンス」は一目瞭然。
図を描かなければ理解しにくいのは、むしろ深い呼び出しの階層構造だと思います。
0145デフォルトの名無しさん
2011/11/06(日) 11:48:19.80サンクスです。
クラス図をリバースで出力します、にはクラス図重要視派の私には、ショックです。
0146デフォルトの名無しさん
2011/11/06(日) 13:29:11.560147デフォルトの名無しさん
2011/11/06(日) 16:25:13.86クラス図はわりとどうでもいいと感じるようになるね
シーケンス図は真面目にやると大変だけど重要だと思う
0148デフォルトの名無しさん
2011/11/06(日) 21:11:38.87横レスするが、WinAPIも一応OO標榜してたんだぞ。
HWND
window = CreateWindowEx(・・・略・・・),
button = CreateWindowEx(・・・略・・・):
SendMessage( window, WM_GETTEXT, ・・・略・・・ );
SendMessage( window, WM_SETTEXT, ・・・略・・・ );
SendMessage( button, WM_GETTEXT, ・・・略・・・ );
SendMessage( button, WM_SETTEXT, ・・・略・・・ );
SendMessage( button WM_GETTEXT, ・・・略・・・ );
SendMessage( windown, WM_SETTEXT, ・・・略・・・ );
0149デフォルトの名無しさん
2011/11/06(日) 21:18:02.54打ち合わせに使う。
0150デフォルトの名無しさん
2011/11/07(月) 01:03:35.48Cell { int a; float b; char c; }でCell[][] table;とするか、
int[][] atable; float[][] btable; char[][] ctableとするか。
後者の方が変数が複数になってしまっているが、
実際は簡潔な分類を施した結果であり、
より変数の再利用性が高まってると思う。
妙なモッチャリ固まりクラスの使用を、
ライブラリ利用者に強いるのって結局のところ濁らせてるだけ。
0151デフォルトの名無しさん
2011/11/07(月) 02:34:17.79高速検索様に、こういうのならあるが。
ま、違うか。
List<Cell>
columnA = new LinkedList<Cell>(),
columnB = new LinkedList<Cell>(),
columnC = new LinkedList<Cell>();
Cell
row;
row = new Cell();
columnA.add( row );
columnB.add( row );
columnC.add( row );
row = new Cell();
columnA.add( row );
columnB.add( row );
columnC.add( row );
0152デフォルトの名無しさん
2011/11/07(月) 10:56:11.58「a、b、cが常に一塊で無いとマズい」と言うデータ構造を表現するなら前者だな
コードの最適化はデータ構造を破壊しがちだよ
0153デフォルトの名無しさん
2011/11/09(水) 12:56:53.490154デフォルトの名無しさん
2011/11/10(木) 00:59:52.83本体アプリから呼ばれる部分のパッケージ(Base)は一番安定している筈。
で、プラグイン固有機能を実装するパッケージ(Derived)はBaseに依存している。
ここまではいい。
困ってるのは、
「Base内にあるDLLのエントリポイントでDerivedに属するクラスを生成するのはADP違反じゃないの?」
という点。(ADPってパッケージの依存関係を循環させんなってやつね)
Base内のEntryPoint.cpp(仮名)でonLoadが最初に呼ばれるとして、擬似コードがこんな感じ。
BOOL __cdecl onLoad( char *path )
{
gPlugin = new DerivedPlugin( path );
return gPlugin->onLoad();
}
別のプラグイン作成でBaseを流用したとき、毎回この関数を修正するのは変な気がするんだけど…。
上手く説明出来てなかったらすんません。
0155デフォルトの名無しさん
2011/11/10(木) 01:21:33.15今の設計はBaseがDerivedを知ってる時点で間違ってる。
0156デフォルトの名無しさん
2011/11/10(木) 01:46:17.45上の例で、DerivedPluginとして“やむを得ず”使ってしまってるのが唯一のADP違反部分で、
他の部分にはそういうところはなし。
問題は例のところで生成すべきクラスをどう指定すべきだったのかというところ。
解決法を>155で書いてくれてるんだろうけど、
「リフレクション的に登録」とか「インジェクトされた〜」とかが良く分からん。
0157デフォルトの名無しさん
2011/11/10(木) 12:06:57.02new DerivedPluginとしてるところは、DerivedPlugin自体を知ってる必要はなく、IPlugin的なインターフェースを持つ何かだよね?
だとしたらその場で作成するIPluginである何か(DerivedPlugin)についてどこからか登録すればいい。
それは設定ファイルなり、プラグインが登録されている指定されたフォルダを全部舐めることで動的に登録するなりやり方は色々。
登録する・・・がインジェクトと言ってたものであり、リフレクション・・・と言ってたのはフォルダを舐めて・・・の部分。
DependencyInjectionとかでしらべたまい。
0158デフォルトの名無しさん
2011/11/10(木) 12:57:50.68> IPlugin的なインターフェースを持つ何かだよね?
そうです。実際の操作はインターフェースによってのみ行うようにしてる。
> それは設定ファイルなり、〜
ああ、なるほど。
依存性をソースファイル外に追い出すってことか。ありがと!
0159デフォルトの名無しさん
2011/11/11(金) 08:21:25.93どうでもいいが、フレームワークをどういう意味で使ってる?
ただのオレオレクラスライブラリじゃないのか。
0160デフォルトの名無しさん
2011/11/11(金) 08:34:17.70主:フレームワーク、従:拡張部分
作ろうとしている段階なので現状そこまで行ってなくて、
オレオレクラスライブラリであるのは間違いないけど。
機能拡張が一定のやり方で出来ないようなら
それはそれでクラスライブラリとして完成させてもいいし。
0161デフォルトの名無しさん
2011/11/11(金) 09:47:51.430162デフォルトの名無しさん
2011/11/11(金) 11:03:36.00「本にそう書かれてるから正しい」なんて言うような原理主義者でもないけど
異議を唱える程の自己主張も無いし。
0163デフォルトの名無しさん
2011/11/12(土) 15:16:36.36そもそもエントリーポイントを何でBaseに入れる必要があるんだ?
エントリーポイント用意して毎回吐かせりゃいいじゃねぇの?
//ヘッダに固定
namespace Plug
{
void Export( Registry &);
}
//DLLにリンクするライブラリに固定
extern"C" __declspec(export) void RealEntry( Registry& registry ) { Plug::Export(registry);}
// DLL毎に記述
void Plug::Export( Register ®ister )
{
registry.Register( "Alpha", new Plugin() );
}
0164デフォルトの名無しさん
2011/11/23(水) 12:07:51.020165デフォルトの名無しさん
2011/11/23(水) 13:02:47.920166デフォルトの名無しさん
2011/11/23(水) 14:17:45.35それって、どの本にも書いてあることだの。その先が知りたいのに。ムカッ。
0167デフォルトの名無しさん
2011/11/23(水) 16:07:10.500168デフォルトの名無しさん
2011/11/23(水) 16:47:11.93外部から実行出来る(依頼とか操作とか)ようにするものは何か? = インターフェースだよね
必要なものだけにしときます
まぁポリモーフするからってインターフェースを考える場合もあるけど
0169デフォルトの名無しさん
2011/11/23(水) 16:51:34.57必要に迫られて自分でやらなきゃ分からんよ
伝聞はすぐ忘れる
0170デフォルトの名無しさん
2011/11/23(水) 17:53:24.78既存のライブラリ群を見て、 「どういう物がインターフェースとして実装されているか」 を考えれば解るんでない?
例えば、C#の IComparable とか。
0171デフォルトの名無しさん
2011/11/23(水) 19:13:08.94しょっぱなからインタフェース書くんじゃなくて、例えば、下みたいな
呼び出しコードを書いてみてから、どうすればキレイにできるか考える。
RuleSet rule = new Required( new Number( new Min( 0 ), new Max( 100 ) ) );
rule.validate( textbox, "透明度" );
0172デフォルトの名無しさん
2011/11/24(木) 21:26:20.01さっぱり、わからん。
ちなみに、本などに書かれているのだが、「設計段階でインターフェースの抽出を行いましょう。」
っていうのは、>>171と真逆な感じがする。
0173デフォルトの名無しさん
2011/11/24(木) 21:37:46.47最初は、インターフェースとか全く考えずにプロトタイプを作る。
んで、プロトタイプを捨てて再設計する段階で
インターフェース化出来る部分が有るか、ついでに検討する。
0174デフォルトの名無しさん
2011/11/25(金) 02:25:57.56最初から個々はインターフェースにナイスにまとめられるよねって分かる部分と、作ってるうちにここをインターフェースにまとめたらナイスにまとまるんじゃね?ってのと。
だんだん前者が多くなってくると思われ。
0175デフォルトの名無しさん
2011/11/25(金) 14:47:02.03プロトタイプを製作してみて、その傾向から設計を引き直してインターフェースを導出するって事なんかね?>>171のはさ。
0176デフォルトの名無しさん
2011/11/25(金) 15:44:52.10作成まではしなくてもいいんじゃないかな
「他のクラスからどう呼ばれると自然か?」って方向の
思考実験してみるだけでも良いかと
0177171
2011/11/25(金) 23:13:05.29強調したいのはコードそのものじゃなくて、
呼び出し方、使い方を最初に考える事だよ。
コードを書くと言ったのは、大雑把でもコードに落として考えると
イメージしやすいというだけ。
例えば、>>171を見ると
RuleSet rule = (RuleSet)new Required( (Rule)(RuleSet)new Number( (NumericRule)new Min( 0 ), (NumericRule)new Max( 100 ) ) );
rule.validate( textbox, "透明度" );
みたいな感じで、必要なインターフェースが浮かぶ。図とかだけで思い浮かべるのはややメンドイ。
ちなみにコード自体意味が解からない人がいるかもしれないから補足すると、
このコードは[必須である[数値である[0以上である, 100以下である]]]という検査条件をオブジェクトで表現し、
textboxをチェックしてる。
0178デフォルトの名無しさん
2011/11/25(金) 23:24:14.50結局、使う側がいっぱい学習しないといけなさそうなインタフェースだよなそれ。
0179デフォルトの名無しさん
2011/11/25(金) 23:44:40.37TextBoxの入力チェックの方が解りやすいかと思ってtextboxとは書いたけど。
0180デフォルトの名無しさん
2011/11/25(金) 23:49:24.000181デフォルトの名無しさん
2011/11/26(土) 01:10:33.19smalltalkerに足を向けて寝るんじゃねーぞ。
0182デフォルトの名無しさん
2011/11/26(土) 01:24:04.850183デフォルトの名無しさん
2011/11/26(土) 09:33:08.95やったことがない者ばかりじゃないだろうか?
インターフェースは、設計の段階でほぼきっちりと把握できる。
リファクタリングは、納期に迫られて設計不十分で見切り発車したプログラムを
あとから見直す場合に行うと考えたほうがよい。
ああ、やはり大手IT企業の中央部署の人しかオブジェクト指向設計をやっていないことがわかった。
っで、このスレに来る椰子は末端のプログラマだけだね。まあ、テクニックだけは高い人もいるようだが。
0184デフォルトの名無しさん
2011/11/26(土) 09:36:50.63末端のプログラマがオブジェクト設計しなきゃいけないプロジェクトはその時点で終わってる。
0185デフォルトの名無しさん
2011/11/26(土) 09:39:54.860186デフォルトの名無しさん
2011/11/26(土) 09:41:13.320187デフォルトの名無しさん
2011/11/26(土) 09:45:08.44Javaなんてdeprecatedなメソッドが盛り沢山。
0188デフォルトの名無しさん
2011/11/26(土) 09:49:05.51っ[ アジャイル ]
っ[ スパイラルモデル ]
っ[ プロトタイピング ]
っ[ TDD ]
0189デフォルトの名無しさん
2011/11/26(土) 11:57:02.800190デフォルトの名無しさん
2011/11/26(土) 12:14:21.53オブジェクト指向設計やったことある?
ドメインモデルとトランザクションスクリプト
どちらの設計を使ってる?
トランザクションスクリプトはオブジェクト指向設計風ではないけれど
よく使われてるよね。俺も完全なオブジェクト指向設計よりも
トランザクションスクリプトの方が開発しやすいと思うんだけど。
ドメインモデルはなんか設計がガチガチで柔軟性がないか
柔軟性を保つために何度も再設計をすることになりそう。
0191デフォルトの名無しさん
2011/11/26(土) 12:23:08.40クラス図設計とシーケンス図設計のみ。
ドメインモデルとトランザクションスクリプト。ふん、なんか言葉では見たか、聞いたかかもしれないが
あまり気にしてない。
クラス図を作成するのが大変だった。特に、インターフェースを抽出するのがね。
0192デフォルトの名無しさん
2011/11/26(土) 12:27:00.57話にならんな。
シーケンス図はオブジェクト指向と全く関係ないし、
クラス図はUMLの中で一番使えないものとされてる。
クラス図はコードのクラス定義そのものだからね。
0193デフォルトの名無しさん
2011/11/26(土) 12:31:05.13言い過ぎだろう。
0194デフォルトの名無しさん
2011/11/26(土) 12:38:39.14これは手抜きではなく、試行錯誤だ。
適切な言語を選べば、インターフェースを抽出するなんて
ほんの少しコマンドを実行すれば終わる。
メソッドを親クラスに移動したり、反対に子クラスに移動したり、
コードをまとめたりといった作業のコストは低い。(言語と開発環境によるが)
0195デフォルトの名無しさん
2011/11/26(土) 12:44:09.05ソースコードから生成できるから意味が無いってこと。
マウスでポチポチやって図を書くよりもコードを書くほうがはるかに楽。
一時期はクラス図からソースコードを生成するってのが流行ったが、
逆にソースコードを書いてそこからクラス図を生成したほうが良い。
どうせクラス図は完璧には書かないんだから。(最初にすべてのメソッドかけますか?)
ソースコードからクラス図を生成するようにしておけば
クラス図とソースコードに違いが出ることもない。
0196デフォルトの名無しさん
2011/11/26(土) 12:59:53.64横レスであれだが、決して言い過ぎじゃないと思うぜ…
0197デフォルトの名無しさん
2011/11/26(土) 13:06:45.290198デフォルトの名無しさん
2011/11/26(土) 13:31:29.13クラス図の役割って殆どIDEでカバー出来ると思う
0199デフォルトの名無しさん
2011/11/26(土) 13:42:57.53実装の前に設計が必要だと思ってしまうんだよ。
メソッドの中身までは書かなくてもいいが、
設計をコードでクラス定義として書くほうが
柔軟で書きやすい。
0200デフォルトの名無しさん
2011/11/26(土) 14:26:18.01クラス図に中身空っぽのクラス並べて構造を俯瞰できるようにして、
シーケンス図書きながらクラス図にpublicなメソッドを足してく訳だよ。
だから俯瞰する能力が高くてシーケンス図なんざ書かなくても
協調が把握できる人なら、クラス図は要らない、というか
まぁそもそもそんな仕事で良ければアーキ設計書もUMLも要らないという話だが、
世の中の開発者はそんなスーパーマンばかりではない。
0201デフォルトの名無しさん
2011/11/26(土) 14:33:11.22誰も、シーケンス図が無駄とは言ってない。
シーケンス図はオブジェクト指向と無関係だということ。
あと、シーケンス図はクラス図と関連はない。
0202デフォルトの名無しさん
2011/11/26(土) 14:43:11.21シーケンス図があるとないとで全然違う
0203デフォルトの名無しさん
2011/11/26(土) 14:44:44.040204デフォルトの名無しさん
2011/11/26(土) 14:49:42.510205デフォルトの名無しさん
2011/11/26(土) 14:51:32.15オブジェクト図で叩き台作って、クラス図を作ってチームで打ち合わせしとくと、
コード書き始めるより遥かに出戻りが少なくなるぞ。
0206デフォルトの名無しさん
2011/11/26(土) 14:52:42.47何をかじっているのだろう。
0207デフォルトの名無しさん
2011/11/26(土) 14:59:08.670208デフォルトの名無しさん
2011/11/26(土) 15:04:41.92> クラス図はUMLの中で一番使えないものとされてる。
されてないし、されてる訳がない。通常、最も多く使われるのがクラス図。
いったいどこの誰がこんな馬鹿げたことを言っているのか…
>>195
根本的に間違えてる。
設計段階のクラス図は、自分の考えを整理したり他人とのコミュニケションの
道具として使うために、紙とペンを使って素早く書くもの。
(もちろんホワイトボードでもいいし、ツールを使った方が早ければそれでも)
ソースコードから生成するのは、主に最終的なドキュメントとして必要な場合。
ていうかドメインモデルとトランザクションスクリプトを持ち出すならせめて
DDDくらいは読んでおけよ。いろいろと酷過ぎる。
0209デフォルトの名無しさん
2011/11/26(土) 15:05:39.390210デフォルトの名無しさん
2011/11/26(土) 15:10:08.440211デフォルトの名無しさん
2011/11/26(土) 15:10:45.240212デフォルトの名無しさん
2011/11/26(土) 15:19:41.950213デフォルトの名無しさん
2011/11/26(土) 15:27:05.16クラス図は結構好きだけどな
ってかPGのレベルが低くてまったく関連のない処理を
他のクラスにぶち込もうとしてる奴に歯止めをかけることができる
まあ、詳しい処理の話になったらクラス図の出番はないけどねw
0214デフォルトの名無しさん
2011/11/26(土) 15:29:08.27あくまで説明用に対象のクラスがざっと書いてあるレベルで役に立つ
0215デフォルトの名無しさん
2011/11/26(土) 15:37:29.40図の下に行くに連れて他への依存性の高いクラスを書くとか
お前等はしないのか?
キレイに上下依存関係が別れないクラスは、インターフェースに分割したり、
機能的に類似性が高いクラスはインターフェースを統一したりとか、
打ち合わせで図を見ながら考える事はあるだろうに。
やっぱ派遣だとそんな打ち合わせする暇はないのかね。
0216デフォルトの名無しさん
2011/11/26(土) 15:49:27.47そもそも仕様書に出てくる用語以外のクラスを作成しちまうとやたら詳しく説明を求められるから
そういう変なクラス作らないし
0217デフォルトの名無しさん
2011/11/26(土) 15:49:44.26必須というだけの話。
アジャイルなら変化しながら開発が進む
0218デフォルトの名無しさん
2011/11/26(土) 15:50:18.34仕様書が完璧ならそれでいいんだけどねw
0219デフォルトの名無しさん
2011/11/26(土) 15:51:05.71じゃないと、下位工程でバグが見つかって上位工程に戻すと工数がかかり過ぎる。
0220デフォルトの名無しさん
2011/11/26(土) 15:51:54.16その場合は仕様変更だからちゃんと工数もらえるから時間とっていいんだ
そこを吸収してやるようには作らなくていい
0221デフォルトの名無しさん
2011/11/26(土) 15:52:23.77そりゃUML使えないと言ってても仕方ないか。
0222デフォルトの名無しさん
2011/11/26(土) 15:58:40.69自社でライブラリすら持ってなくて、スクラップアンドビルド
ばっかしてる仕事は、穴埋め囚人みたいで辛いだろ。
0223デフォルトの名無しさん
2011/11/26(土) 16:01:48.46わざわざ開発手法にまで手を入れてこない
仕様決めとかそっちのが時間かかるからなぁ
0224デフォルトの名無しさん
2011/11/26(土) 16:13:30.36営業から納品までやってんのは大概中小企業じゃね?
0225デフォルトの名無しさん
2011/11/26(土) 16:14:41.710226デフォルトの名無しさん
2011/11/26(土) 16:18:42.92自社パッケージ持ってるのが、一括受注できる原因だろうけどね。
0227デフォルトの名無しさん
2011/11/26(土) 16:20:40.47せっかく作ったシステムの権利をあげたら自分になにも残らないだろ。
0228デフォルトの名無しさん
2011/11/26(土) 16:21:20.04大手からすると無駄が多いって考えだろうな
基本的に設計やる人間と実装やる人間の単価が違うってとこまでコストカットしてないと
設計と実装の人間を変えることないべ?
だから自社パッケなんてのは無駄ばかりだから成り立つもんなんだよ
そのうち開発メンバーが年取ってくれば給料とかコストが増えるから自社パッケはなくなるだろうな
0229デフォルトの名無しさん
2011/11/26(土) 16:24:46.68作ったソースやドキュメントは自社のもんじゃん。
ライブラリなんてシステム見積もるときにライセンス買わせてるし。
0230デフォルトの名無しさん
2011/11/26(土) 16:30:38.30開発者が歳をとろうと自社パッケージをなくすことは無理だよ。少なくともウチでは。
こんな不況下でも黒字をたたき出す。受注に比べほっといても売れるから
圧倒的に採算がいいらしい。ただ、それでも情報収集が必要だからって理由で
受注開発はしてる。
0231デフォルトの名無しさん
2011/11/26(土) 16:37:30.500232デフォルトの名無しさん
2011/11/26(土) 16:38:56.440233デフォルトの名無しさん
2011/11/26(土) 18:46:35.67したらどうして大手は自社で開発をもたないの?
って疑問はお前の理論じゃ成り立たないべ?
0234デフォルトの名無しさん
2011/11/26(土) 19:51:02.29230じゃないが。
車輪の再発明するより枯れた他社パッケージを買う方が利ザヤがデカいからだろ。
大手の方が販路デカいし、売ることが出来る会社ならパッケージ作ってソフトを売るより
パッケージ買ってソリューションを売る方が金になる。
まぁ一般論であって、その大手って具体的にどこなのか分からないから、
そういう話でも無いのかも知れないけど、どこの会社のこと?
言ってもソコソコ売れてるパッケージは金になるよ。
作ってしまえばあとは保守にゃあんまり金掛からないのに、
サポートで金取れるし、機能追加で金取れるし。
そんかわり軌道に乗るまでは赤字吹きまくる。
0235デフォルトの名無しさん
2011/11/26(土) 21:04:56.20少ないページでどう利用するのかがすぐにイメージできる
クラス図議論は>>208に同意
理解できないやつはUMLモデリングのエッセンスを読め
1〜5,9章読めばOK 他は余裕があれば読めばいい
シーケンス図も抽象的な物は設計段階で書いておくと自分の考えを整理しやすい
これは実際のコードに対応していちいち修正する必要はない
自分の考えがまとまらないなら修正して考えれてみればいい
クラス図からのコード生成はMDAというものがあるし実際やったことあるけど糞
結局脳内でコーディングして、それを無理矢理図に落として(ここに無駄にく苦労する)、コードが自動生成されるだけ
メリットとして、設計図とコードが一貫性を保てるという話があるけど、そもそもそこまで設計図に拘る意味がわからん
もしドキュメントが後々必要ならそのとき初めて作成すればいいだけ 今流行の遅延評価w
あとオブジェクト指向語るならリファクタリング本も必須
0236デフォルトの名無しさん
2011/11/26(土) 21:09:09.26http://blogs.msdn.com/b/nakama/archive/2011/11/25/skill-roadmap-part-1.aspx
0237デフォルトの名無しさん
2011/11/26(土) 21:12:26.72Javaの独壇場か。
0238デフォルトの名無しさん
2011/11/26(土) 21:18:17.95ちゃんと熟考して作るという開発ができる。
他の言語、特に動的型付け言語なんか、適当に考えて
問題出たらパッチ当てる感覚で修正するから、
その時はすぐに問題を解決できても、すぐにボロが出てしまう。
0239デフォルトの名無しさん
2011/11/26(土) 21:46:06.84いや、単にウチの事情を書いただけだし。
理論は成り立たないと言われてもねぇ。
0240デフォルトの名無しさん
2011/11/26(土) 21:57:28.40いや、純粋なOOで言えばCOMやCORBA、COCOAの方がマシなぐらいだが。
0241デフォルトの名無しさん
2011/11/26(土) 22:06:23.440242デフォルトの名無しさん
2011/11/26(土) 22:08:45.64オブジェクト指向の基礎を学ぶならJavaは適してると思う
アクセス修飾子、静的型、抽象クラス、抽象メソッド、インターフェース、継承をしっかりと機能が用意されているので学びやすい
C++は継承を学ぶために余計なことを色々意識しないといけないし、型推論ついたし微妙
最近のブームだと
Rubyは動的型付けだけど上に書いた項目を理解していないと、そのメリットすら意識できない
Scalaの型推論も同様 あとはJava+関数型言語のようなものなので、Javaを学んだ後+αとして関数型を学ぶときに使えばいい
っということでとりあえずはやっぱりJava
OOの重鎮達が推奨するsmalltalkも1度学びたいとは思ってるが知らない
0243デフォルトの名無しさん
2011/11/26(土) 22:18:18.50スタック、ヒープや
参照渡し、ポインタ渡し、値渡し、Javaの参照渡しなど
メモリ関連を理解するためには1度学んでもいいかもしれない
0244デフォルトの名無しさん
2011/11/26(土) 22:23:33.89smalltalkやC++の用に引数で受け取ったオブジェクトに再度メッセージを送るほうが、
OOとしては理に叶ってるのにな。
0245デフォルトの名無しさん
2011/11/26(土) 23:01:24.72意味不明
0246デフォルトの名無しさん
2011/11/26(土) 23:04:55.400247デフォルトの名無しさん
2011/11/26(土) 23:06:34.41勉強してきた。それで?
0248デフォルトの名無しさん
2011/11/26(土) 23:08:34.62送ればいいだけだと思うけど、俺も>>244がなにを言いたいのかわからんな。
0249デフォルトの名無しさん
2011/11/26(土) 23:14:00.13java.beans.XMLDecoder decoder = new java.beans.XMLDecoder( new java.io.FileInputStream( "Test.xml" ) );
// ダウンキャストが必要な今の実装
RootBean bean = (RootBean)decoder.readObject();
// Java以外だとよく見る素直な実装
RootBean bean = new RootBean();
decoder.readTo( bean );
0250デフォルトの名無しさん
2011/11/26(土) 23:18:02.50じゃメッセージフォワーディングのメリットぐらい解るだろ。
0251デフォルトの名無しさん
2011/11/26(土) 23:20:12.140252デフォルトの名無しさん
2011/11/26(土) 23:21:45.55したいならすればいいんじゃないですかぁ?
0253デフォルトの名無しさん
2011/11/26(土) 23:26:13.93ダウンキャストの使用頻度が高くて、OOPLとしてはデザインが汚いですよね。
他の言語のほうがマシに見えるぐらい。
おわり。
0254デフォルトの名無しさん
2011/11/26(土) 23:32:55.08>decoder.readTo( bean );
確かにこれができると便利だけどね
こういう風に読み込み前にオブジェクト弄れるし
decoder.readTo(new Adapter(bean, param));
0255デフォルトの名無しさん
2011/11/26(土) 23:40:13.91グローバル変数便利だよ引数省略できるし並みに痛い気がするんだが
0256デフォルトの名無しさん
2011/11/26(土) 23:41:56.25戻り値多用するOOPLは少数派だべ
0257デフォルトの名無しさん
2011/11/26(土) 23:43:02.89オブジェクトトポロジーを理解してないお前のほうが痛い
0258デフォルトの名無しさん
2011/11/26(土) 23:44:53.480259デフォルトの名無しさん
2011/11/26(土) 23:49:43.700260デフォルトの名無しさん
2011/11/26(土) 23:57:14.800261デフォルトの名無しさん
2011/11/27(日) 00:08:51.200262デフォルトの名無しさん
2011/11/27(日) 00:33:35.14どんなふうにするのがいいんですかね
こんな感じとかかしら
RootBean bean = decoder.readTo( RootBean.class );
0263デフォルトの名無しさん
2011/11/27(日) 00:45:15.16で
0264デフォルトの名無しさん
2011/11/27(日) 00:49:48.12ポカーン とした意見だった。
0265デフォルトの名無しさん
2011/11/27(日) 00:52:55.29>>263と同じ見かけが変わっただけじゃん
0266デフォルトの名無しさん
2011/11/27(日) 00:55:37.750267デフォルトの名無しさん
2011/11/27(日) 00:59:42.03お前にとってのアカデミックって
ドカタだろw
0268デフォルトの名無しさん
2011/11/27(日) 01:06:11.380269デフォルトの名無しさん
2011/11/27(日) 01:26:32.33型推論使うんなら型指定そのものも無くなってほしいけど
C++とかだとそこまでは無理なんだっけ
0270デフォルトの名無しさん
2011/11/27(日) 01:29:10.660271デフォルトの名無しさん
2011/11/27(日) 03:46:33.17アルゴリズム以外の要素が邪魔すぎて。アルゴリズムなんて
どうでもよくて、ただ、ライブラリを持ってきて並べるだけの仕事
ならばJavaは向いてると思うが。。。
0272デフォルトの名無しさん
2011/11/27(日) 03:48:59.06オブジェクト指向言語の代表選手として、Javaを扱ってるのもある。
デザパタの出処はsmalltalkみたいだし。
0273デフォルトの名無しさん
2011/11/27(日) 05:16:59.81言語の研究分野でしか聞いたことがないなぁ
Smalltalkは啓蒙してる人が濃ゆいけどw新参ではお金にならん
非商用版なら無料だから眺めたい人はご自由に
市井のプログラマとしてはJavaでウェブっていう案件は多い
VB.net、VC++より多いんじゃないかな
0274デフォルトの名無しさん
2011/11/27(日) 05:20:16.36ユースケース記述とシーケンス図がしっかりしてるのは
設計先行のいいプロジェクトの傾向だと思う
0275デフォルトの名無しさん
2011/11/27(日) 08:00:36.710276デフォルトの名無しさん
2011/11/27(日) 09:11:09.43型推論は型宣言を省略するための仕組みじゃないよ
0277デフォルトの名無しさん
2011/11/27(日) 09:41:11.460278デフォルトの名無しさん
2011/11/27(日) 09:58:49.67馬鹿丸出しw
0279デフォルトの名無しさん
2011/11/27(日) 10:19:24.550280デフォルトの名無しさん
2011/11/27(日) 10:33:22.100281デフォルトの名無しさん
2011/11/27(日) 11:04:59.500282デフォルトの名無しさん
2011/11/27(日) 12:37:48.04え、ちがうの?
参考までにご高説を賜りたく( ^ω^)・・・
0283デフォルトの名無しさん
2011/11/27(日) 12:45:41.550284デフォルトの名無しさん
2011/11/27(日) 13:02:03.39返り値の型しか違わないオーバーロードが可能な言語って、どんな変態文法だよ
0285デフォルトの名無しさん
2011/11/27(日) 13:13:46.63Scala
0286デフォルトの名無しさん
2011/11/27(日) 14:11:32.97へえ、Scalaだと
hoge(read())
で、hoge(x:Int)かhoge(x:String)かどちらが呼ばれるかわかるの。へえ
0287デフォルトの名無しさん
2011/11/27(日) 14:30:22.90処理を分岐させるコードを書かないといけないから面倒臭い。
0288デフォルトの名無しさん
2011/11/27(日) 14:47:25.62型推論は型検査をするためのものだろwwwww
0289デフォルトの名無しさん
2011/11/27(日) 14:51:29.49型推論(かたすいろん)とはプログラミング言語の機能の1つで、
静的な型付けを持つ言語において、変数や関数の型を宣言しなくても
それを導くのに使われた関数の型シグネチャなどから自動的に型を決定する機構のこと。
0290デフォルトの名無しさん
2011/11/27(日) 14:52:15.540291デフォルトの名無しさん
2011/11/27(日) 14:53:03.56> JavaやC++0xでも導入が検討されている。静的型付け関数型言語のほとんどが型推論の機能を持っている。
Rubyには型推論搭載されんの?
0292デフォルトの名無しさん
2011/11/27(日) 14:53:44.690293デフォルトの名無しさん
2011/11/27(日) 14:55:47.39「型検査 型推論 違い」でぐぐってみ。
この2つは明らかに別もの。
0294デフォルトの名無しさん
2011/11/27(日) 15:07:44.66静的型検査を型を記述しなくても可能にするためのものだろ。
バカすぐるwwwww
0295デフォルトの名無しさん
2011/11/27(日) 15:15:51.69いや、逐一型指定しても型推論(型単一化)は行われるよ。
キミさ、型推論の仕組みがわかった上で言ってるの?
型推論を実装したことある?
0296デフォルトの名無しさん
2011/11/27(日) 15:17:25.50実装したことがあるから言ってる。
似てるだけで概念的には別物。
あんたは実装した奴が陥る罠に落ちいてるだけだよ。
実装が似ているものを同じだと思ってしまう。
概念は別物。
0297デフォルトの名無しさん
2011/11/27(日) 15:21:31.48そして型推論での単一化は型検査にほかならない。
ということを承知の上で別物だとか言うわけ?
0298デフォルトの名無しさん
2011/11/27(日) 15:22:40.87この2つを区別して書いてることから、
お前も別物として扱ってるだろ。
0299デフォルトの名無しさん
2011/11/27(日) 15:23:59.79○ 特定の条件の言語の、型検査には型推論は必須。 そうでない言語では必須ではない。
0300デフォルトの名無しさん
2011/11/27(日) 15:25:55.78型検査するけど型推論実装してない言語がある以上、別物だろ。
0301デフォルトの名無しさん
2011/11/27(日) 16:34:21.06Rubyは動的型付け
実行するまで型は関係なし
型推論は静的型付けで型を省略すること
だけどちゃんと型は認識されてる
0302デフォルトの名無しさん
2011/11/27(日) 16:57:26.010303デフォルトの名無しさん
2011/11/27(日) 17:08:18.650304デフォルトの名無しさん
2011/11/27(日) 17:28:50.13オブジェクト指向は型(インターフェース)でプログラミングしておくっていうことで
俺なんかは満足している。いかにメインのプログラムを型(インターフェース)でプロ
グラミングできるかが重要だといつも思っている。
これを実現するためには何度も何度もクラス図を書いて、適切な型(インターフェース)
を取り出す。この辺がなかなか時間がかかりPMに「何をやっているんだ。仕事が遅い」
と怒鳴られる。泣きてえーーー。
0305デフォルトの名無しさん
2011/11/27(日) 17:36:58.120306デフォルトの名無しさん
2011/11/27(日) 17:43:52.36しかし型検査ぬきの型推論は原理上ありえない
0307デフォルトの名無しさん
2011/11/27(日) 17:45:29.32コーディング前の紙の上(設計書)での設計はどのくらいやっておくのがベストプラクティスなの?
0308デフォルトの名無しさん
2011/11/27(日) 17:47:51.66>いかにメインのプログラムを型(インターフェース)でプロ
>グラミングできるかが重要だといつも思っている。
自分もそう考えている
極論を言えば、「オブジェクト指向設計とは型定義である」と
後半は、まぁ愚痴だねw
0309デフォルトの名無しさん
2011/11/27(日) 17:51:42.97非機能要件で全然変わってくるから、ベストって無いんじゃないの?
0310デフォルトの名無しさん
2011/11/27(日) 18:08:53.44出来損ないをアセンブラでカバーしてください。
アセンブラ使えばなんでもできますから。
0311デフォルトの名無しさん
2011/11/27(日) 18:20:23.56http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html
http://d.hatena.ne.jp/kazu-yamamoto/20080722/1216734420/
0312デフォルトの名無しさん
2011/11/27(日) 18:21:25.85嫉妬心丸出しで見ていて恥ずかしくなったw
そうか、そんなにJavaに嫉妬してるのか
0313デフォルトの名無しさん
2011/11/27(日) 18:26:48.650314デフォルトの名無しさん
2011/11/27(日) 18:37:15.01業種や何やらの条件で色々違うだろうね
・ユースケース記述が出尽くす
・概念レベルでクラス分けができる
・メソッドを適したクラスに割り当てられる
・ユースケース記述にそってシーケンス図が描ける
実装前にこれくらい設計できればなぁ…
デザインパターンの適応もコーディング前の段階で検討できるし
コーディングは楽になると思う
0315デフォルトの名無しさん
2011/11/27(日) 18:39:06.55補助輪付きの自転車みたいなものだw
0316デフォルトの名無しさん
2011/11/27(日) 18:47:04.720317デフォルトの名無しさん
2011/11/27(日) 18:55:50.33だれも型検査抜きの型推論のことは話してないと思うが。
上であがってるのは
・型推論!=型検査
・型推論は静的型検査を行う言語で型の記述を省く仕組み
かどうかの話だろ。
型推論をする時にコンパイラが型を認識してるのは当たり前で、それは型検査じゃないよ?
0318デフォルトの名無しさん
2011/11/27(日) 19:54:28.55型推論を実装したのにわからないなんて、おかしいなあw
0319デフォルトの名無しさん
2011/11/27(日) 20:12:06.56>・型推論!=型検査
を主張してる奴らは、その是非が
>・型推論は静的型検査を行う言語で型の記述を省く仕組み
かどうかに帰結するわけじゃないことに
気づいてなさそうな話の展開のさせ方してるよな。
ほんと謎の思考だ
0320デフォルトの名無しさん
2011/11/27(日) 20:50:27.40整合性の検証は型検査でしょ
これは型推論が実装されているいないに関わらず静的片付けなら実装されてる
だから・型推論!=型検査
ということじゃないの?
0321デフォルトの名無しさん
2011/11/27(日) 20:53:37.13納豆と大豆とは別物として扱われているのと同じだ。
0322デフォルトの名無しさん
2011/11/27(日) 21:04:48.740323デフォルトの名無しさん
2011/11/27(日) 21:06:25.53コーディングの話題に設計の話が出てくるのは。
デザパタとかDIとかドメインモデルとか
そういう用語が他言語ででることは極端に少ない。
0324デフォルトの名無しさん
2011/11/27(日) 21:09:00.940325デフォルトの名無しさん
2011/11/27(日) 21:09:41.49設計でやってるから
0326デフォルトの名無しさん
2011/11/27(日) 21:10:04.37それってその場ののりでなにも考えずにやってるだけでしょ?
それはDIじゃなくて、ただのパッチ
0327デフォルトの名無しさん
2011/11/27(日) 21:10:25.520328デフォルトの名無しさん
2011/11/27(日) 21:13:26.74システムではSingletonでも、テスト時には多数作りたいことがあったりで
コードで書くのは良くないパターンとされている。
0329デフォルトの名無しさん
2011/11/27(日) 21:17:24.20volatileで解決できるようになってたと思うけど
0330デフォルトの名無しさん
2011/11/27(日) 21:26:25.10え?そうだっけ??
ダブル…の延長線上ではどうあがいで駄目だったような
0331デフォルトの名無しさん
2011/11/27(日) 21:29:47.21違うな。
型推論は型検査じゃない派の論旨
・1+2と3は表現式として違うから1+2は3じゃない。
・3だからといって、1+2から求まったとは限らない。4-1かもしれないじゃないか。
型推論は型検査だ派の論旨
・1+2と3は表現が異なるだけで、どちらも3という値であり、同じことだ
・4-1も3だね。で、だからといって、1+2と3が異なる値にはならないけど、何か?
0332デフォルトの名無しさん
2011/11/27(日) 21:31:16.39違うな。
>>321が正しい
0333デフォルトの名無しさん
2011/11/27(日) 21:32:16.550334デフォルトの名無しさん
2011/11/27(日) 21:34:34.27>>321みたいに間違った理解をしてしまうんだね。
オブジェクト指向やってる人は視野が狭くて、
関数型のちゃんとした型推論を知らないんだ。
0335デフォルトの名無しさん
2011/11/27(日) 21:35:34.03盲目的に使って動くものができると思えんが
0336デフォルトの名無しさん
2011/11/27(日) 21:38:48.80いやいや、>>321が正しいって言ってるだけ。お前は間違ってる。
0337デフォルトの名無しさん
2011/11/27(日) 21:39:22.92ttp://www.ibm.com/developerworks/jp/java/library/j-dcl/
0338デフォルトの名無しさん
2011/11/27(日) 21:42:00.86そう思えるのは、あんたが命令型のショボい型推論しか知らないからww
井の中の蛙だねえwww
0339デフォルトの名無しさん
2011/11/27(日) 21:48:03.430340デフォルトの名無しさん
2011/11/27(日) 21:50:12.91納豆を指して「これは大豆だから」と言った人に
「これは大豆じゃないよ、納豆だよ」と言い出してるのが
型推論は型検査じゃない派のドカチン君ですねwww
0341デフォルトの名無しさん
2011/11/27(日) 21:51:36.73まさにその通り!
0342デフォルトの名無しさん
2011/11/27(日) 22:03:39.73自分の設計思想を信じ相手は馬鹿であると見下し
よくわからないしょぼいものしかつくれない
0343デフォルトの名無しさん
2011/11/27(日) 22:12:23.86・型推論は型検査じゃない派 --> 目的と結果を分けて考えよう
・型推論は型検査じゃない派 --> 目的と結果をを混同してもええやないけ
ここで、
・型推論の目的:型の整合性の検証(型が無矛盾であることの証明), >>318から引用
・型推論の結果:型検査および型宣言の省略化
自分は型推論は型検査じゃない派だな
0344デフォルトの名無しさん
2011/11/27(日) 22:16:23.06型推論の目的>>318は微妙だなあ。その目的を満たすなら型推論しないほうが合目的的だし。
0345デフォルトの名無しさん
2011/11/27(日) 22:30:10.98型推論の目的は、型検査をするための記述を少なくすることですよ。
0346デフォルトの名無しさん
2011/11/27(日) 22:35:34.92型推論は型検査じゃない派しかいないぞw
0347デフォルトの名無しさん
2011/11/27(日) 22:36:30.25型検査じゃない?派
0348デフォルトの名無しさん
2011/11/27(日) 22:46:14.77おっと、ミスッたぜ。>>343を以下のように訂正する。
>・型推論は型検査じゃない派 --> 目的と結果を分けて考えよう
>・型推論は型検査だ派 --> 目的と結果をを混同してもええやないけ
0349デフォルトの名無しさん
2011/11/27(日) 22:48:56.560350デフォルトの名無しさん
2011/11/27(日) 22:53:00.61型検査だけできるってことが理解できる。
0351デフォルトの名無しさん
2011/11/27(日) 23:06:51.07ならJavaとかは型検査してるけど型推論しないから初めから結論でてるんじゃないの
0352デフォルトの名無しさん
2011/11/27(日) 23:07:56.39その目的に前提を含めて書けば、
・暗黙の(=省略された)型宣言があっても検証(=証明)できること
になるね
これを実現するために推論が必要になった、という話だと思う
0353デフォルトの名無しさん
2011/11/27(日) 23:13:13.31言語を利用する立場であれば、会話の中で両者を一緒にしても推定できるから、
たぶん支障は無いと思う。多くがこのケースだから、一般的には一緒でかまわない。
ただし、言語を実装する立場であれば、両者を明確に区別して定義/理解できないと
苦労するはめになる(過去の自分)
0354デフォルトの名無しさん
2011/11/27(日) 23:58:55.68C++でも出来るぞ
オーバーロードが曖昧な場合はキャストが居る。
0355デフォルトの名無しさん
2011/11/28(月) 00:01:22.46>>288みたいな馬鹿をぷげら出来る
0356デフォルトの名無しさん
2011/11/28(月) 00:04:59.69が
auto x = Function( 1, 2 );
って書けるだけだろ。
何下らないことでひきずってんの?
0357デフォルトの名無しさん
2011/11/28(月) 05:44:12.34Javaは型検査してるけど、型推論できない
完全に使い分けできるじゃん
0358デフォルトの名無しさん
2011/11/28(月) 11:18:59.450359デフォルトの名無しさん
2011/11/28(月) 11:19:43.560360デフォルトの名無しさん
2011/11/28(月) 18:25:31.70いや、客観的に言って、バカはおまえ
0361デフォルトの名無しさん
2011/11/28(月) 18:33:01.05例えば、
double x = "abc";
は型エラーだが、これはxの型について
- double xという宣言からxはdouble型である
- x = "abc"からxはString型である
の2つの推論結果をunifyできないことからエラーを検出する。
全ての型推論は必ず型検査を伴う。
これは、表現式の型を1つ1つ確定していくプロセスにおいて
必ず矛盾がないかを検証するから。
全ての型検査は型推論を伴い、全ての型推論は型検査を伴うのであれば、
型検査と型推論は同じものの別名にすぎない。Q.E.D.
0362デフォルトの名無しさん
2011/11/28(月) 18:42:27.690363デフォルトの名無しさん
2011/11/28(月) 19:09:56.75設計と称して四角形と直線をひくしか脳がない
底辺SEの巣だからなw
0364デフォルトの名無しさん
2011/11/28(月) 19:12:06.15多分お前が言ってる型推論と皆が考えている型推論は別のものだと思うよ?
其れすらわからないで俺スゲー垂れ流してるのがあわれすぐるwww
0365デフォルトの名無しさん
2011/11/28(月) 19:13:58.94こっちに引き戻そうとしたって無駄なだけだろ。
0366デフォルトの名無しさん
2011/11/28(月) 19:17:57.90少なくとも20年前には既に型推論と型検査は同一技術だというのが
関数型言語界隈での常識だったが?
自分の無知を自慢するのって、楽しい?
0367デフォルトの名無しさん
2011/11/28(月) 19:36:54.88わかったからJAVAで型検査と型推論の分離ができている訳を教えてくれ
0368デフォルトの名無しさん
2011/11/28(月) 19:38:32.560369デフォルトの名無しさん
2011/11/28(月) 19:39:46.32言うことがメチャクチャで笑えるw
0370デフォルトの名無しさん
2011/11/28(月) 19:58:16.81UML自体はOOサポートしてるだけで、OOを志向してる訳じゃないから
オブジェクト指向型システム設計とはあんまり関係ないよな。
UML全体としてみれば飽くまでラショナルプロセスを支えるツール。
0371デフォルトの名無しさん
2011/11/28(月) 20:13:20.150372デフォルトの名無しさん
2011/11/28(月) 21:18:22.770373デフォルトの名無しさん
2011/11/28(月) 21:25:26.890374デフォルトの名無しさん
2011/11/28(月) 21:37:57.470375デフォルトの名無しさん
2011/11/28(月) 22:05:22.480376デフォルトの名無しさん
2011/11/28(月) 22:05:56.66読み方:ブルーブック
Blue Bookとは、CD-EXTRAの仕様書のことである。
ソニーとオランダのPhilips社によって開発されたものである。
マルチセッションでデータを記録できるようになっており、
第一セッションには、音声データが、第二セッションには、
パソコン用のデータが保存される。このCD-Extraの仕様書の
表紙が青かったことから、Blue Bookという名称が付いた。
0377デフォルトの名無しさん
2011/11/28(月) 22:21:28.91ないんだな、それが
0378デフォルトの名無しさん
2011/11/28(月) 22:58:23.56赤青緑
0379デフォルトの名無しさん
2011/11/29(火) 04:53:37.900380デフォルトの名無しさん
2011/11/29(火) 06:03:09.370381デフォルトの名無しさん
2011/11/29(火) 19:00:57.600382デフォルトの名無しさん
2011/11/29(火) 23:04:23.520383デフォルトの名無しさん
2011/11/30(水) 22:01:58.18本気で使ってる奴いる?
0384デフォルトの名無しさん
2011/11/30(水) 22:08:43.060385デフォルトの名無しさん
2011/11/30(水) 22:42:09.750386デフォルトの名無しさん
2011/12/01(木) 01:50:25.19ちょっとがっかりしたんだぜ
0387デフォルトの名無しさん
2011/12/01(木) 07:03:36.97Strategyすら使わないとなると逆に難しいだろ
0388デフォルトの名無しさん
2011/12/01(木) 08:32:49.790389デフォルトの名無しさん
2011/12/01(木) 09:18:36.190390デフォルトの名無しさん
2011/12/01(木) 09:55:31.050391デフォルトの名無しさん
2011/12/01(木) 10:05:18.940392デフォルトの名無しさん
2011/12/01(木) 10:18:33.660393デフォルトの名無しさん
2011/12/01(木) 10:28:43.88クラスライブラリ等を作るためにデザパタを使うのと、どっち?
後者のことだけ話題にしてると思ったが?
0394デフォルトの名無しさん
2011/12/01(木) 10:42:12.22オブジェクト指向言語を使って普通に開発を進めてれば、
自然に当てはまる構造がコードのあっちこっちに見つかるようになると思うんだけど。
0395デフォルトの名無しさん
2011/12/01(木) 11:37:58.89むしろデザパタのほとんどがインターフェース的なもので抽象化されたものだとも言えるが。
0396デフォルトの名無しさん
2011/12/01(木) 19:41:14.730397デフォルトの名無しさん
2011/12/01(木) 21:10:45.59入れても良いなら毎回必ずと言っていいほど使ってる
0398デフォルトの名無しさん
2011/12/01(木) 21:46:07.84デザパタを組み合わせた、分子的なパターンを含め始めたらきりがない。
0399デフォルトの名無しさん
2011/12/01(木) 23:03:02.81> Singleton
役に立ったためしがない
つか、どんなときに使ってるんだよ
0400デフォルトの名無しさん
2011/12/01(木) 23:11:55.370401デフォルトの名無しさん
2011/12/01(木) 23:24:29.89デザインパターンは静的型付け言語が不便だからできた
バッドノウハウ。
0402デフォルトの名無しさん
2011/12/01(木) 23:49:15.390403デフォルトの名無しさん
2011/12/02(金) 00:12:49.58まったくその通りだと思う
少なくともGoF本の著者陣はそれを認識しているし、たとえそうであっても
それらをパターンとして命名しカタログ化した点にGoF本の意義があると述べている
ところが、なぜか「デザインパターンに沿ってなければOOPにあらず」という
不思議な風潮を(特にジャバラから)よく耳にするのが笑えるところ
0404デフォルトの名無しさん
2011/12/02(金) 00:14:20.66デザインパターンってSmalltalkの世界から生まれたものなんだけどwwww
0405デフォルトの名無しさん
2011/12/02(金) 06:14:14.390406デフォルトの名無しさん
2011/12/02(金) 06:21:25.41Cライブラリをラッパーしたユーティリティクラスみたいなもの
イミュータブルで値を保持させておきたいクラス
どちらも複数生成する必要がないしどこから参照されても問題ないからSingletonにしたんだけど何か問題あるかな?
Singletonは使いどころが難しい…
0407デフォルトの名無しさん
2011/12/02(金) 06:28:54.25Smalltalkではパターンとして整理しなくても普通に使えていたイディオムを
Javaではいちいち形を決めて名前を付けて整理しないとうまく使えない、
ってことでしょw
0408デフォルトの名無しさん
2011/12/02(金) 08:42:14.90Smalltalk時代なんだってばw
0409デフォルトの名無しさん
2011/12/02(金) 10:55:35.75>動的型付け言語にはデザインパターンは不要。
これってどういうこと?デザパタと型付けは関係無いと思うが.
>バッドノウハウ
これは同意だが.
0410デフォルトの名無しさん
2011/12/02(金) 11:00:04.800411デフォルトの名無しさん
2011/12/02(金) 12:34:06.30のが多い気がする
0412デフォルトの名無しさん
2011/12/02(金) 13:06:29.55得意かどうかという、ステータス的捉え方が恐ろしい。
0413デフォルトの名無しさん
2011/12/02(金) 13:27:32.200414デフォルトの名無しさん
2011/12/02(金) 17:46:47.540415デフォルトの名無しさん
2011/12/02(金) 17:52:39.69例えばStrategyなんかは共通のインターフェースを用意することにより、戦略を使い回すけど動的型付け言語ならそもそもインターフェースを用意する必要なく使い回せるということじゃないかな
0416デフォルトの名無しさん
2011/12/02(金) 17:57:55.36しかし適材適所というのは別にデザインパターンに限らない一般的な話
だから変な使い方をする奴がいるからといってデザインパターンを否定するのは間違い
あと デザインパターンはオブジェクト指向の感覚を掴むきっかけとしては良いものだと思う
0417デフォルトの名無しさん
2011/12/02(金) 18:52:47.96それらしい名前つけただけの、なんちゃって技術だろ?
縛られ過ぎる方がおかしいw
0418デフォルトの名無しさん
2011/12/02(金) 20:06:28.43動的型付けは、インターフェースを書かなくて済むだけで、
最低限のインターフェースを持ってないとどのみちエラーになるだろ。(nullや転送できるものを除く)
デザパタと動的型付けかどうかは関係ない。
0419デフォルトの名無しさん
2011/12/02(金) 20:13:26.76そういう使い方をするものをシングルトンとはいわんだろ。
シングルトンってのは、デバイスの書き込み制御を独占管理したり、
アプリケーションに送られてくるメッセージを独占管理する時に使うもん。
あと、C++系固有の話だが、グローバル変数と違い、
初期化順序を制御できるという点がある。
0420デフォルトの名無しさん
2011/12/02(金) 21:08:27.720421デフォルトの名無しさん
2011/12/02(金) 21:17:30.86そもそもオブジェクト指向&デザパタ自身がそのニオイがするのだが
0422デフォルトの名無しさん
2011/12/02(金) 21:22:15.53デザパタ=輪切り
こんな感じかえ?
0423デフォルトの名無しさん
2011/12/02(金) 21:30:37.66あなたはオブジェクト指向とは何か、デザインパターンのそれぞれが
何であるかをきちんと言えますか?感覚ではなく。
0424デフォルトの名無しさん
2011/12/02(金) 21:35:31.42デザインパターン = 書籍『オブジェクト指向における再利用のためのデザインパターン』で紹介されたパターンの事
0425デフォルトの名無しさん
2011/12/02(金) 22:08:04.54double Function( double ) function = Math.abs;
function( 100 );
実際にメモリにオブジェクトとしての実体は持たなくてもいいから、
参照に引き渡されたら自動的にオブジェクトを生成してくれりゃ良かったんだけど。
FunctionDoubleDouble function = MathLibrary.abs;
function.call( 100 );
まぁ、現状でも同等のものを作れないわけじゃ無いんだけれども。
0426デフォルトの名無しさん
2011/12/02(金) 22:11:20.08> まったく不要かはともかく、ちまたによくあるJava前提のデザインパターンは動的型付けの言語じゃ不要なものは多い。
いや、全くわかってないw
デザインパターンは実装ではなくて考え方。
Java前提のデザインパターンとか
動的型付け言語で不要とか言うのは、
デザインパターンの本質をわかってない。
お前が言ってるのは実装が不要ってだけの話だろ。
いや、全くわかってないw
0427デフォルトの名無しさん
2011/12/02(金) 22:27:56.33>デザインパターンは実装ではなくて考え方。
各デザインパターンの”考え方””本質”をきちんと言ってみてくれるかい?
0428デフォルトの名無しさん
2011/12/02(金) 22:30:18.12クラスを変更せず、オブジェクト構造により拡張していく疎結合主義だろ。
0429デフォルトの名無しさん
2011/12/02(金) 22:44:58.89Singletonって使い方限定されているものなの?
クラスのインスタンスを1つしか生成できないようなものをSingletonというのかと思っていたけど
0430デフォルトの名無しさん
2011/12/02(金) 22:47:20.18結城本から
デザインパターンはクラスライブラリそのものではない
デザインパターンはクラスライブラリよりも一般的な概念です。
具体的なプログラム例を読むことも理解の助けにはなりますが、その特定の
プログラムだけがAbstract Factoryパターンなのではありません。肝心なのは
どういう種類のクラスやインターフェースが出てきて、、それらが
お互いにどういう関係にあるか、なのです。
0431デフォルトの名無しさん
2011/12/02(金) 22:51:15.85状態が1つでいいなら、モノステートでいいだろ。
実体が一つである理由を考えてみ。
0432デフォルトの名無しさん
2011/12/02(金) 22:52:40.25「え?じゃあRubyだとどうするの?」
「こうするだけで実装できる!」
「なにが実装できるの?」
「○○パターンだけど」
「そうだね、それがRubyにおける○○パターンの実装だよ」
将来>426が経験することになる実話w
0433デフォルトの名無しさん
2011/12/02(金) 22:52:59.960434デフォルトの名無しさん
2011/12/02(金) 22:55:50.34デザパタは>>424の通り
オブジェクト指向プログラミングは、対象物を中心に置いたプログラミング
100円を両替するをプログラムで表すと、Moneyクラスのexchangeメソッドを引数100を与えて実行する、money.exchange(100) つまりI exchange money 100
SVOのOでObject目的語つまり対象を意味する
これを中心に置いている
OOPではないC言語はで同じことをするとexchange(money,100)moneyも100も引数として同列に扱う
ここが大きな違い
0435デフォルトの名無しさん
2011/12/02(金) 23:04:04.45状態が1つならSingletonにせずにstaticクラスにしてしまえばいい
状態を複数許して実体を1つにしたいときにSingletonを使うということであってる?
何故実体を1つにしたいかは、複数から操作されてしまうと困るから?
いまいちわかってないや
0436デフォルトの名無しさん
2011/12/02(金) 23:04:26.21状態が連続していることを期待した使い方をするとグローバル変数と同じハメになる。
例えば、メソッド間の値の受け渡しに使えば、無限ループが発生することもある。
分岐の予想も困難になる。
まず、そういう用途に使っちゃいけないという点で限定される。
基本的に、どこからどう操作しようと他に影響が無いものじゃないといけない。
それから、シングルトンは、オブジェクトとしての実体をもっている事が一番重要。
CharDevice.Instance().Write(""); のような直接メソッドを呼ぶ用途じゃなく、
Device device = CharDevice.Instance(); のようにインスタンスを突っ込む用途に使用する。
0437デフォルトの名無しさん
2011/12/02(金) 23:19:53.04などとつぶやいてみる
0438デフォルトの名無しさん
2011/12/02(金) 23:21:11.41あんまりOOらしくないな。あと、Cで書くとじゃなく手続きで書くとじゃね。
金銭の例で言うと、レートのほうが解りやすい。
const Rate jp_yen_to_us_dollar( 75 );
const Rate us_dollar_to_jp_yen = jp_yen_to_us_dollar.Inverse();
jp_yen_to_us_dollar.Conversion( 100 ); // 100円をドルに換算
jus_dollar_to_jp_yen.Conversion( 100 ); // 100ドルを円に換算
クラスだけじゃなく、オブジェクトとして考えることが重要ね。
0439デフォルトの名無しさん
2011/12/02(金) 23:23:40.670440デフォルトの名無しさん
2011/12/02(金) 23:27:53.72答えてくれてありがとう。
でもそれが答えになっていないことはあなた自身が分かっていますよね。
>>434
まじめに答えてくれてありがとう。
そうですね。最初はそういう説明をしたりされたりするね。
”オブジェクト指向”を”対象中心”と言い換えてくれたんですね。
では”対象中心”とは何かと聞きたくなりますが。
例がついているのはありがたいですね。SVOのOっていうのはほんとですか?
Sは中心にはならないのですね?
0441デフォルトの名無しさん
2011/12/02(金) 23:29:51.28冗談のつもりなのかもしれないが、>>420のように騙される人も出てくるからさ
0442デフォルトの名無しさん
2011/12/02(金) 23:31:56.690443デフォルトの名無しさん
2011/12/02(金) 23:32:20.33具体的な正しい説明を頼む
0444デフォルトの名無しさん
2011/12/02(金) 23:32:25.98本気で言ってそうwww
0445デフォルトの名無しさん
2011/12/02(金) 23:32:57.44バカどもですからねwww
0446デフォルトの名無しさん
2011/12/02(金) 23:34:23.72これを言い出す人多いよね。自動詞的メソッドをどう説明するんだろうか?
Thread#runなど。
0448デフォルトの名無しさん
2011/12/02(金) 23:35:20.78結城本から
デザインパターンはクラスライブラリそのものではない
デザインパターンはクラスライブラリよりも一般的な概念です。
具体的なプログラム例を読むことも理解の助けにはなりますが、その特定の
プログラムだけがAbstract Factoryパターンなのではありません。肝心なのは
どういう種類のクラスやインターフェースが出てきて、、それらが
お互いにどういう関係にあるか、なのです。
0449デフォルトの名無しさん
2011/12/02(金) 23:38:17.45SVOのOはObject
OOPのOもObject
smalltalkのメッセージ送信の対象という意味でも合致していると思ってる
0450デフォルトの名無しさん
2011/12/02(金) 23:39:34.460451デフォルトの名無しさん
2011/12/02(金) 23:41:30.04( Message object object object object )
これどうすんの?
0452デフォルトの名無しさん
2011/12/02(金) 23:42:53.98Threadクラスに対してrunというメッセージを送信する
I send run message to Thread
これの目的語というのが正しい気がする
0453デフォルトの名無しさん
2011/12/02(金) 23:44:28.14結局結城本では、
デザインパターンとは,どういう種類のクラスやインターフェースが出てきて、、それらが
お互いにどういう関係にあるかであると言っているのですね。
各デザインパターンについてそういう形の説明ができますか?
0454デフォルトの名無しさん
2011/12/02(金) 23:44:31.26それはどういう意味?
0455デフォルトの名無しさん
2011/12/02(金) 23:45:25.58マルチメソッド
0456デフォルトの名無しさん
2011/12/02(金) 23:45:46.24横レスだがモノステートは調べて今知った。でもこれだと、派生クラスに適用したい場合はどうしたらいい?
あと、GoF 本は Singleton の目的を「インスタンス数を1つだけに制限して、それにアクセスするグローバルな方法を提供する」
って書いてるだけだから、俺は >>429 で合ってると思うんだが。出来たら、もうちょっと詳しく説明してくれないか?俺の頭では分からんので。
0457デフォルトの名無しさん
2011/12/02(金) 23:50:14.90はい、この場合のクラスやインターフェースというのは
Java用語ではなく一般的な意味です。
それは、「その特定の プログラムだけがAbstract Factoryパターンなのではありません」と
書いてあることからも明らかです。
0458デフォルトの名無しさん
2011/12/02(金) 23:51:06.79もしかしてデザインパターンを知らないの?
自分が、if文を教えて下さいと
言っているのと同じだって分かってるかな?
0459デフォルトの名無しさん
2011/12/02(金) 23:52:42.03何を見た?ぐぐって先頭のページにでてくるモノステートは間違ってるからな。
class Mono
{
static int value1;
static int value2;
public:
int Method()
{
return value1;
}
}:
Mono mono;
モノステートはこういうヤツ。当然親も子も継承できる。
0460デフォルトの名無しさん
2011/12/02(金) 23:54:24.79Javaプログラマがかなり先を言ってるね。
0461456
2011/12/03(土) 00:00:08.87いや、既に親クラスがあって、その派生クラスのインスタンス数を制限したい場合。
class Base { public virtual int Hoge { return 0; } }
class Sub : Base { public override int Hoge { return 1; } }
この場合で、Sub のインスタンスを1個にしたい場合はどうしたら良い?
0462デフォルトの名無しさん
2011/12/03(土) 00:00:40.83デザインパターンの市販本のほとんどが、Javaを使って説明しているからね。
0463デフォルトの名無しさん
2011/12/03(土) 00:01:49.43実はそのデザパタとかOOが遅れているということもあり得る
0464デフォルトの名無しさん
2011/12/03(土) 00:02:02.55この2人はJavaというよりsmalltalk
というかオブジェクト指向の発祥ってどこなの?
0465デフォルトの名無しさん
2011/12/03(土) 00:02:12.81Java以外にもたくさんあるぞ。
Amazonで「○言語 デザインパターンで」調べてみ。
0466デフォルトの名無しさん
2011/12/03(土) 00:04:11.21モノステートは状態を1つに保つだけ。
インスタンスの数は制限しない。
インスタンスの数を制限したいならシングルトン。
>状態が1つでいいなら、モノステートでいいだろ。
前にこう書いたろ。
0468デフォルトの名無しさん
2011/12/03(土) 00:07:00.38実際はその辺のハイブリッドだしな。
0469デフォルトの名無しさん
2011/12/03(土) 00:08:47.71メッセージ送信を唄っているsmalltalkのオブジェクト指向に合致しないのものは、また別のオブジェクト指向と捕らえるのが正しいのかね
クラス、型システムをオブジェクト指向として捉えて広めたのがまた別に誰かいた気がする
0470デフォルトの名無しさん
2011/12/03(土) 00:10:36.03バグの問題じゃないだろ。
OOのメリットは、既存のコードを変更しないで済むことなんだから。
0471デフォルトの名無しさん
2011/12/03(土) 00:15:40.66デザインパターンについて、30歳のSEに聞きました。
「あなたは、一パターンでもよいから、デザインパターンを適用したことがありますか?」
はい、と答える人は何人いると思う。
0472デフォルトの名無しさん
2011/12/03(土) 00:16:36.97100人に聞きました、が抜けていた。スマン。
0473デフォルトの名無しさん
2011/12/03(土) 00:16:57.44そもそも何でインスタンスを一つにしたいんだ?
map[ SINGLETON_A ].Method();
map[ SINGLETON_B ].Method();
とかしたいわけじゃないんだろ?
0474デフォルトの名無しさん
2011/12/03(土) 00:18:47.52ドカタなら日常茶飯事に使ってるだろw
0475デフォルトの名無しさん
2011/12/03(土) 00:20:19.770476456
2011/12/03(土) 00:26:25.89インスタンスを一個に絞りたいことはよくあると思うんだけど?
例えばクラスのメタ情報とか、コードで定数を定義するときとか。
基底クラスで既定値を定義しておいて、派生クラスで変更分だけ上書きして使えば、コードの見通しが良いでしょ?
0477デフォルトの名無しさん
2011/12/03(土) 00:32:07.06それはインスタンスじゃなくて状態を一つに絞りたいだけじゃないか?
あと、シングルトンは、親クラスを持つことはできるけど、子クラスを持つことは不可能だからね。
ちなみに、英語圏だとファクトリー用途が多いらしい(ファクトリーのメモリー消費節約のため)。
0478デフォルトの名無しさん
2011/12/03(土) 00:47:12.84レガシー本の例では、DBコネクションをシングルトンにした場合の呼び出し側のテストの書き方について書かれてる。
0479デフォルトの名無しさん
2011/12/03(土) 00:50:26.49RequiredRuleFactory factory(param);
Rule *rule = factory.Create(arg);
こういうのが一般的だろうけど、
見た目さえ変えりゃ、これもファクトリーみたいなもんじゃん。
Query query("select %1 from table");
Result *result = query.Post(&db);
0480デフォルトの名無しさん
2011/12/03(土) 00:52:50.02だよね。
だから最近はDIコンテナ側の設定で
シングルトンにするかどうかを決めるようになってきてるよね。
動的型付け言語の世界にも
早く普及してくれるといいんだけど。
0481456
2011/12/03(土) 00:54:40.73確かに状態を一つにしたいんだけど、その状態がインスタンスでないと多態が使えなくて困るので……。例えばこんな感じ。
class MetaData { public virtual string GetCode() { return "Unknown"; }
class PersonMetaData : MetaData {
public static MetaData Instance = new PersonMetaData();
public override string GetCode { return "Person"; }
}
main() { PrintMetaData(PersonMetaData.Instance); }
PrintMetaData(MetaData data) { print(data.GetCode); }
0482デフォルトの名無しさん
2011/12/03(土) 00:56:41.93Postの戻り値がなんなのかさっぱりわからんけど、
もしそれがResultがインターフェース(抽象クラス)であるのなら
それはファクタリーだよ。
デザインパターンの本質
それは、実装ではなくて考え方なんだから
見た目(実装)は関係ない。
それがファクトリーの考え方による設計で、
実際にファクトリーの動作をしているのなら
それはファクトリーパターン
0483デフォルトの名無しさん
2011/12/03(土) 01:03:18.66だから >>459のモノステートで十分じゃね?
0484456
2011/12/03(土) 01:14:14.58そかな?
モノステートだと。基底クラスもモノステートじゃなきゃ new するたびにメモリ確保が走っちゃうし、インスタンス毎に値が書き換えられちゃうし。
Singleton の方が安心して使えると思うんだけど。
0485デフォルトの名無しさん
2011/12/03(土) 01:22:43.11ああ、子の状態を一つにしたいのか。
それならシングルトンの方が向いてるかもね。
題材がシングルトンに向いてるかは別だけど。
0486デフォルトの名無しさん
2011/12/03(土) 01:23:24.32しかもインスタンスの生成場所まで変化するのはやりすぎ
あきらかに不具合
0487デフォルトの名無しさん
2011/12/03(土) 01:25:25.67ここの納得できる強力な理由がほしい
0488デフォルトの名無しさん
2011/12/03(土) 01:30:19.880489デフォルトの名無しさん
2011/12/03(土) 01:30:36.290490デフォルトの名無しさん
2011/12/03(土) 01:35:32.55多分意図がちがうと思う。列挙型の要素みたいな感じなんだろ。
変化するもんじゃなさそうだ。
まぁ、だったらコンストラクターprivateにして、オブジェクト側は、
public const static MetaData PERSON_META_DATA = new PersonMetaData()でいいと思うけど。
0491456
2011/12/03(土) 01:45:55.35ごめんね、頭の中が多態で使う〜でいっぱいになっててソースが不適切だった。
最初のソースでちゃんと説明していれば、頭の方で終わってた話だった。ごめん。
>>490
そうそう、Singleton の話だから private コンストラクタは書かなくても伝わるだろうと端折っちゃった。
const は書き忘れた。
0492490
2011/12/03(土) 01:49:14.38クラスごとのメタ情報を持ちたいだけ。
だったら、そのメタ情報を付与するクラスにpublic MetaData MetaData();ってメソッドもたせて、
そのクラスの中に、private static MetaDate metaData = new MetaData( "Person" );とか持たせておけばいい。
まぁ、この方法だと既存のクラスには使えないけどね。まぁ、そういう場合はトレイトだ。
0493456
2011/12/03(土) 01:56:54.84あくまで例だから、あんまり突っ込まんといて。
メタ情報を付加させる場合も実際はインナークラスとして定義したり、ジェネリックを使ったりと色々だから。
0494デフォルトの名無しさん
2011/12/03(土) 01:59:32.30コードの再利用の目的の一つにバグの低減があるとは思わないのかね?
0495デフォルトの名無しさん
2011/12/03(土) 02:00:19.19何百個のバグになるだろ。
0496デフォルトの名無しさん
2011/12/03(土) 02:09:25.340497デフォルトの名無しさん
2011/12/03(土) 08:00:27.07動的型付けならシングルトンでもモックに差し替えるの簡単だから
普及しないと思うよ。必要無いもの。
0498デフォルトの名無しさん
2011/12/03(土) 09:47:42.48その通り
0499デフォルトの名無しさん
2011/12/03(土) 09:51:28.652,3のデザパタも習得しました。
これから残りのデザパタを習得するつもりです。
そこで教えてもらいたいのですが、どのデザパタが現場では使われますか。
全部なら全部でもよいのですが、よく使われるものは何か知りたいのです。
列挙していただけたら非常に助かります。
0500デフォルトの名無しさん
2011/12/03(土) 09:53:43.85>OOのメリットは、既存のコードを変更しないで済むことなんだから。
この俗説ほんとか?スパゲッティもまたそうやってできたのだが
0501デフォルトの名無しさん
2011/12/03(土) 10:25:36.25既存のコードを修正しないで新たな機能を追加することができる
その機能を実装する(使う)ときは当然コードの修正は必要
しかしその使うという意志を表明している部分を変更するだけで済む
機能の追加と実装を分けて行えるのがメリットだと思う
0502デフォルトの名無しさん
2011/12/03(土) 10:29:36.06>>388 から同じ話題が出てる。ただ、現場で頻出するパターンを抽出して名前を付けたのがデザパタなので、
全部の名前と目的ぐらいは知っておいて損はないよ。一度 GoF 本を通して読んでおくといい。
0503デフォルトの名無しさん
2011/12/03(土) 11:38:25.79OOでそれが出来る事に異論は無いが、OO以外では出来ないと思った理由は?
0504デフォルトの名無しさん
2011/12/03(土) 12:03:56.73さんくす。
やはり全部ですかね。
0505デフォルトの名無しさん
2011/12/03(土) 12:19:28.84ポリモーフィズムが実現できればOK
C言語ではできない
0506デフォルトの名無しさん
2011/12/03(土) 12:37:23.480507デフォルトの名無しさん
2011/12/03(土) 12:46:08.43実装はANSI Cという世界だったりするよ
0508デフォルトの名無しさん
2011/12/03(土) 13:20:03.35【第4回】多態性(2/3):CodeZine
http://codezine.jp/article/detail/3709?p=2
>>503に解答すると
オブジェクト指向"言語"以外でもできない というわけではない
手続き型言語だとしても "オブジェクト指向" を採用することにはなる
しかしその場合オブジェクト指向"言語"ほどオブジェクト指向を容易に実現することができない
よってOOという思想を使わないと実現できない
ってことになるんじゃないのかな
0509デフォルトの名無しさん
2011/12/03(土) 13:21:05.82極端な話他の言語の多くはC言語で作られているのだからできないわけがない
じゃあC言語は、オブジェクト指向言語や関数型言語なのか?というとそんなことはない
0510デフォルトの名無しさん
2011/12/03(土) 13:37:07.72ポリモーフィズムひとつとっても、OOPのそれは
subtype polymorphismというポリモーフィズムの一種にすぎない。
OOという思想を使わないと実現できないってことは無いよ。
0511デフォルトの名無しさん
2011/12/03(土) 13:38:12.39> 「Rubyには○○パターンは不要!」
>
> 「え?じゃあRubyだとどうするの?」
>
> 「こうするだけで実装できる!」
>
> 「なにが実装できるの?」
>
> 「○○パターンだけど」
>
> 「そうだね、それがRubyにおける○○パターンの実装だよ」
>
>
> 将来>426が経験することになる実話w
>>426じゃなくて>>410の間違い。
↑はすでに>>410に書いてある通りじゃん。
0512デフォルトの名無しさん
2011/12/03(土) 13:56:24.05ポリモーフィズムの実現にOOという思想を使わないと実現できない
ということは言ってないよ
>>470,>>500,>>501,>>503の流れとして、OOのメリットの1つはポリモーフィズムだよ
と言っているだけ
0513デフォルトの名無しさん
2011/12/03(土) 14:56:48.69>既存のコードを修正しないで新たな機能を追加することができる
そのカラクリは要するになんだっけ?
0514デフォルトの名無しさん
2011/12/03(土) 17:45:07.71ポリモーフィズム
それはOOの1つのメリット
これに何か問題ある?
0515デフォルトの名無しさん
2011/12/03(土) 17:53:30.03俺には難しい説明だな。
それにポリモーフィズムってマイナーな特徴という認識なのだが
0516デフォルトの名無しさん
2011/12/03(土) 17:56:49.38OO以外でも実現できるポリモーフィズムを
OOのメリットと呼ぶのに違和感がある
0518デフォルトの名無しさん
2011/12/03(土) 18:17:36.32ttp://lucacardelli.name/Papers/OnUnderstanding.A4.pdf
0519デフォルトの名無しさん
2011/12/03(土) 18:23:07.26まずOOのメリットはポリモーフィズムだけではなく、一般的にはカプセル化、継承もそれに加わる
あとOO以外で実現というのがそもそもおかしい
OO以外ではなく、オブジェクト指向”言語”以外でも実現できるというのは同意
手続き型言語でもオブジェクト指向の思想は反映できるということ
だと思ってる
0520デフォルトの名無しさん
2011/12/03(土) 18:32:31.54だれに言ってるのかどこを読めと言ってるのか知らんがそういうのは
踏まえたうえでの議論だと思うが
0521デフォルトの名無しさん
2011/12/03(土) 18:41:58.66ML polymorphism がアヒャってのはわかった
0522デフォルトの名無しさん
2011/12/03(土) 18:48:15.751.3章あたりに polymorphism のざっくりとしたレビューが書いてあるから、そこじゃね?
OOP の polymorphism にも触れてる
0523デフォルトの名無しさん
2011/12/03(土) 18:59:14.45ポリモーフィズムもカプセル化もオブジェクト指向に固有のコンセプトじゃない
関数型言語にだってある
0524デフォルトの名無しさん
2011/12/03(土) 19:03:54.050525デフォルトの名無しさん
2011/12/03(土) 19:19:33.460526デフォルトの名無しさん
2011/12/03(土) 19:22:25.60それはマルチパラダイムということじゃなくて?
関数型言語の定義要素の1つとしてポリモーフィズムもカプセル化もあるの?
0527デフォルトの名無しさん
2011/12/03(土) 19:34:37.47オブジェクト指向の思想って?
与太話になりそうで好かん
0528デフォルトの名無しさん
2011/12/03(土) 19:37:32.78SMLにはポリモーフィズムもカプセル化(モジュールの)もあるけど
オブジェクト指向言語という人はいないと思う
0529デフォルトの名無しさん
2011/12/03(土) 21:31:40.86ということはオブジェクト指向とそうじゃないものわ分けるには、ポリモーフィズム、カプセル化とは別の基準があると思ってるということだと思うけどそれはなんなの?
それともオブジェクト指向というものをそもそも認めないということ?
0530デフォルトの名無しさん
2011/12/04(日) 01:45:35.22528じゃないが、原理の面から言って、オブジェクト指向かどうかは、
オブジェクトに指向してるかどうかが基準であって、
OOPLかどうかは、OOPをすることを目的として
言語が設計されてるかどうかの問題。
ある言語を使ってOOP出来るかどうかによって
その言語がOOPLかどうか決まるわけじゃない。
SMLは、オブジェクトの連携によって駆動するプログラムを
作るために設計された言語なの?
ちなみに俺は多態やらカプセル化やらは、OOのメリットだとは思ってない。
OOである方法論の単なる構成要素のうちの1つだと思ってる。
0531デフォルトの名無しさん
2011/12/04(日) 08:36:14.33>ある言語を使ってOOP出来るかどうかによって
>その言語がOOPLかどうか決まるわけじゃない。
ここは>>519の通り同意見。
ではそのOOP出来るというのはどういうことを指すのかを知りたい
ポリモーフィズム、カプセル化、継承できることを指すのかと思っていたけど、
確かにこの3つは、何かを目指した手段と言われれば納得
その目指す先は「オブジェクトの連携によって駆動するプログラム」?
オブジェクトの連携によって駆動するプログラム とは具体的にどういうこと?
0532デフォルトの名無しさん
2011/12/04(日) 09:38:50.28関数型では破壊的な操作を必要最小限にする方向を目指すけど、
オブジェクト指向ではそんなこと無くて、その代りに
レースコンディションの解消はオブジェクトが各自の責任で行う
0533デフォルトの名無しさん
2011/12/04(日) 09:55:58.55>オブジェクトに指向してるかどうかが基準であって
だからそのあなたが大事にしている「オブジェクトに指向してる」って
いうのはどういうことなの?
0534デフォルトの名無しさん
2011/12/04(日) 10:11:45.44コンポジットには感激した。これは使える。
0535デフォルトの名無しさん
2011/12/04(日) 10:28:38.10>コンポジットには感激した
その大部分は再帰に感激したのかな?それとも
0536デフォルトの名無しさん
2011/12/04(日) 10:35:11.95型クラス(typeclass)とか?
これは、どっちかというと、オーバーロードのニュアンスが強いから、ちょっと違うか
日本語訳も多相が使われるし
0537デフォルトの名無しさん
2011/12/04(日) 10:52:24.17それは関数型言語とそれ以外の言語の比較であって、オブジェクト指向の特徴とは言えないような…
0538デフォルトの名無しさん
2011/12/04(日) 11:07:06.06再帰はもちろんだが、単独者と部下持ちの区別をパターンでやってしまうところがよい。
0539デフォルトの名無しさん
2011/12/04(日) 11:22:16.90区別?むしろ同一視するんじゃなかったっけ
細かくてスマン
0540デフォルトの名無しさん
2011/12/04(日) 11:35:19.65>>538です。細かいことはSEとしてはよいことです。
区分という表現は曖昧でした。エレメントがあるかないかを見て分別しているでした。
0541デフォルトの名無しさん
2011/12/04(日) 14:31:35.80継承も多態性もカプセル化もメリットなんかじゃないだろ。
「ウチの車のメリットはV10エンジンを積んでることです」なんていうのかよ。
「リッター80kmで、1秒で100Kmまで出ることです」ってのがメリットだろ。
0542デフォルトの名無しさん
2011/12/04(日) 14:37:11.89エンジンを積んでるのはメリットだけど?
もしかして継承や多態性やカプセル化で
何が出来るか知らないってこと?
そこから説明しないといかんの?
0543デフォルトの名無しさん
2011/12/04(日) 14:47:25.08「V10エンジン」を積んでることは別にメリットじゃない。
同じ性能出るエンジンなら別のエンジンでも構わない。
同じことが出来るのであれば、別に継承である必要でもないし、
カプセル化である必要もないし、多態性である必要もない。
0544デフォルトの名無しさん
2011/12/04(日) 14:52:53.90カプセル化だってOO的な手法じゃなくクロージャで実現する方法もある。
多体性というならドライバ関連でOO以前からありふれてた
OOのメリットとは言わん。
0545デフォルトの名無しさん
2011/12/04(日) 14:54:41.81アセンブラでOKと言いたいわけかw
0546デフォルトの名無しさん
2011/12/04(日) 14:55:47.66曖昧なんじゃない、不適切だ
0547デフォルトの名無しさん
2011/12/04(日) 14:55:53.00ジャンブで実装できるしな。
0548デフォルトの名無しさん
2011/12/04(日) 14:59:25.39クロージャでカプセル化するとき、OO的な思考が入ってるはず。クラス的な手法じゃなく、ならともかく。
どちらもOOの実現方法にすぎんでしょ。
0549デフォルトの名無しさん
2011/12/04(日) 15:03:56.54PostがResul返すかどうかはFactoryかどうかに本質的に関係ないだろ
そもそもResult以外返せばコンパイルエラーだ
俺の感覚では>>479はファクトリとは言わん。サブクラス切り替えて生成するインスタンスを変えてるんじゃないっしょ
0550デフォルトの名無しさん
2011/12/04(日) 15:04:35.72クラスがあるから、C++は、C#の思想が入ってるといってるのと同じ。
視点がおかしい。
0551デフォルトの名無しさん
2011/12/04(日) 15:10:00.83んーそうかー?
クロージャでカプセル化するんなら、何かを隠蔽して、それを何かで公開してるんだよな?
それをOO的な思考で実装しないことが出来るとでも?っ・・・ってできるかorz
まーでも、普通そーいう雑な設計はしないっしょ。何がしたくてカプセル化なのか謎すぎだから。
0552デフォルトの名無しさん
2011/12/04(日) 15:11:48.84その二つなら寧ろProxyに感激してほしいなあ
0553デフォルトの名無しさん
2011/12/04(日) 15:12:28.43OOPの基礎的な部分は属性と操作を持ったものをオブジェクトとして
それらが相互に操作しあって自分の属性を更新することで
プログラムが動作すること。
その基礎をもとに発展させた方法論のうちで代表的なものが
クラスベースの方法なんで、狭義なそれを暗黙にOOPと呼ぶ人も居る。
0554デフォルトの名無しさん
2011/12/04(日) 15:24:32.10拡張に対して開きつつ修正に対して閉じてないと失格ですよ
0555デフォルトの名無しさん
2011/12/04(日) 15:28:25.33例えば、下の実行引数解析コードだと、ArgumentとOptionAlphaとかの親となる、
Optionを書き換える必要は金輪際無い。あたらしい、オプションが必要になったら、
Optionクラスの子クラスを増やすだけ。引数解析の仕組みを増やしたければ、
Argumentの子クラスを増やすだけ。既存のOptionの子を書き換えたり、
Argumentの子を書き換えることはない。書き換えるとしたらバグがあったときくらい。
// クラス定義
OptionAlpha alpha;
OptionBeta beta;
public:
ExampleType( const Argument &arg )
{
OptionMap options;
options["a"] = α //GArgumentの場合は-aに対応
options["alpha"] = α //GArgumentの場合は-alphaに対応
options["b"] = β //GArgumentの場合は-betaに対応
arg.Anarize( MapAdapter( options ) );
}
// 呼び出し
GArgument argument( argc, argv );
ExampleType example( argument );
0556デフォルトの名無しさん
2011/12/04(日) 15:31:58.08肝心なトコが抜けてる。日本語的な意味でおかしいと言ってんの。
OOがクロージャを、クロージャがOOを含んでるんじゃなく、
カプセル化を、OOとクロージャが含んでんの。だから視点がおかしいといってる。
0557555
2011/12/04(日) 15:33:55.870558デフォルトの名無しさん
2011/12/04(日) 15:36:27.06>ArgumentとOptionAlphaとかの親となる、Optionを書き換える必要は金輪際無い。
訂正: OptionAlphaとかの親となるOptionと、Argumentを書き換える必要は金輪際無い。
0559デフォルトの名無しさん
2011/12/04(日) 15:37:25.58>自分の属性を更新
ここの出典をプリーズ
0560デフォルトの名無しさん
2011/12/04(日) 15:39:49.19興味深いので拘ってみたいんだけど
>カプセル化を、OOとクロージャが含んでんの。
は同意だけど(個人的には含んでるってよりインプリしてるの方がしっくりくるけど)
単独の関係を検証してるならそれでいいけど、先の話はそれとは別でしょ。
先の話題は、クロージャでカプセル化を実現、した時の話だから、
それをOO視点無しでする設計って現実にあるの?ってこと。
0561デフォルトの名無しさん
2011/12/04(日) 15:42:35.00これがはじめから有効な場合ってどういう場面なんだろう
もしくはDuckTypeで動く言語ならかなりの場合不要なような気がする
0562デフォルトの名無しさん
2011/12/04(日) 15:44:31.52逆に、クロージャ的視点なしでオブジェクト設計する事があるの?と言える。
そもそも、クロージャは3番目にできた言語であるLispで実装されたもの。
どちらかと言えば、クロージャの設計思想をOOがうけてるって言ったほうが正しい。
smalltalkのブロックだって、無名関数がベースだしな。
0563デフォルトの名無しさん
2011/12/04(日) 15:45:55.99イベントドリブン。
転送機構の代用品になる。
0564デフォルトの名無しさん
2011/12/04(日) 15:46:31.68尻拭いの感覚でだあたいあってる。
新インタフェースをAdapteeに旧インタフェースAdapterに使うのがデフォだから。
設計間違いと言えるかはケースバイケース。仕様変更だつ
0565デフォルトの名無しさん
2011/12/04(日) 15:49:07.26最初から使うのは、既存ライブラリをこちらの自持ちAPI都合で都合よく再利用する場合とか
0566デフォルトの名無しさん
2011/12/04(日) 15:51:11.15ダックタイプじゃ代用にはならんよ。
異なるオブジェクトから同じイベントで1つの名前のメソッドを呼ばれたら、
どのみち、イベント元を区別できないし。
0567デフォルトの名無しさん
2011/12/04(日) 15:53:59.14あると思うけど、どうかな?
クロージャ言ったらレキシカルスコーブっしょ。プロトタイプベースのOOでない、クラスベースのOOにその視点は登場しないと思われる。
そもOOなJavaにはクロージャないし。
0568デフォルトの名無しさん
2011/12/04(日) 15:54:38.78キーを2つ取るマップとキーを1つ取るマップの橋渡しとか、
独立性と柔軟性を上げてる訳で、別に尻拭いがメインじゃないだろ。
0569デフォルトの名無しさん
2011/12/04(日) 15:54:59.70ごめん。勢い余った。
そこは取り下げるからスルーお願いします。
0570デフォルトの名無しさん
2011/12/04(日) 15:56:59.84まず、smalltalkなんかは、メソッド自体が一つのクロージャ。
それから、OOで言えば、オブジェクト自体がある種のクロージャであり、
オブジェクトのメソッドが、コンストラクターと、実行メソッドだけであれば、
無名関数と同様の動作になる。
0571デフォルトの名無しさん
2011/12/04(日) 16:00:47.94完全な代用にはならないけどかなり多くの場合ダックタイプで救えない?
あるいは言い換えると、ダックタイピングのような機能を持っていない言語は
仕様変更や要件定義漏れに弱いために、デザインパターンという
いわゆる逃げを使わなきゃいけない、といえるのかも
0572デフォルトの名無しさん
2011/12/04(日) 16:02:55.05んー
クロージャの定義をどのあたりにしてるか教えて貰えるかい?
ちょっと広義にしすぎてて、実はそのクロージャと呼んでるのクロージャでない別の何かだったりしないかな?
個人的には、クロージャではコンテキストって概念が鍵になると思ってるから、OOなオブジェクトってだけでは、背後にクロージャという概念が隠れてるとは感じられないんだけど
0573デフォルトの名無しさん
2011/12/04(日) 16:06:02.72>>572
多数の言語でクロージャと言われてるものの最大公約数。
基本的には、Lispのラムダ、Smalltalkのブロック、BCBで使えた__closure。
0574デフォルトの名無しさん
2011/12/04(日) 16:09:13.35smalltalk は知らないけれど、クロージャはそこでのコンテキストに束縛されるところがキモでは。
まあ、OO でもオブジェクトが使う全てを環境としてコンストラクタに渡す、
というような仕掛けで模倣することはもちろん可能だと思うが。
とはいえ、それを明示的にやったら最早クロージャとは言わないと思われ。
# lambda lifting を手でやってるだけ
0575デフォルトの名無しさん
2011/12/04(日) 16:11:19.45レキシカルな文脈で環境を補足するよ
0576デフォルトの名無しさん
2011/12/04(日) 16:13:30.92ブロック式がオブジェクトなの?
0577デフォルトの名無しさん
2011/12/04(日) 16:17:07.42異なるオブジェクトからあるオブジェクトの同じメソッドを呼び出して、
そのメソッド内で呼び出し元を区別したいっていうの?
それ、ObserverパターンかVisitorパターンと混乱してない?
0578デフォルトの名無しさん
2011/12/04(日) 16:17:11.94がわからんのだが、Adapterとイベントドリブンって何か関係あったっけ?
0579デフォルトの名無しさん
2011/12/04(日) 16:20:19.54良い指摘�d
0580デフォルトの名無しさん
2011/12/04(日) 16:20:21.52BlockContextクラスのインスタンス
0581デフォルトの名無しさん
2011/12/04(日) 16:24:40.88他のクラスはインスタンス化のタイミングで環境を補足しないの?
BlockContextクラスだけ特別扱いになっている?
しっくりこない。
0582デフォルトの名無しさん
2011/12/04(日) 16:31:04.75まー、Smalltalkerでない俺は話題についてけてないんだけど
0583デフォルトの名無しさん
2011/12/04(日) 16:32:11.300584デフォルトの名無しさん
2011/12/04(日) 16:34:50.29みたいな感じ?うーむ・・・
これはオブジェクト指向とは関係なく、Smalltalk でクロージャを実現するための言語機能とみるべきじゃないの?
0585デフォルトの名無しさん
2011/12/04(日) 16:35:58.87それでオブジェクト指向とは何?
という話は >>553
でそのメリットはなんなんだろう?
0586デフォルトの名無しさん
2011/12/04(日) 16:36:46.13Adapterパターンって元のメソッドのシグニチャを変えたいって話だと思うから、
ダックタイプがそもそも結びつかない気がするんだけど
0587デフォルトの名無しさん
2011/12/04(日) 16:41:59.71>>501は実装と使用という全く別概念を同義に使ってしまうあたり
言葉の使い分けが微妙なので
引用して議論すると混乱の種になるぞ
0588デフォルトの名無しさん
2011/12/04(日) 16:42:02.27オブジェクト指向とは、
クラスや継承やポリモーフィズムを総称した呼び方。
ポリモーフィズムのメリット=オブジェクト指向のメリット
0589デフォルトの名無しさん
2011/12/04(日) 16:45:50.80=カプセル化のメリット
+インヘリタンスのメリット
+ポリモーフィズムのメリット
+ダイナミックバインディングのメリット
一つ一つは他のパラダイムでも実現できるけど
これらをバランスよく実現して普及したパラダイムがオブジェクト指向だった。
では駄目なの?
0590デフォルトの名無しさん
2011/12/04(日) 16:49:17.980591デフォルトの名無しさん
2011/12/04(日) 16:53:51.430592デフォルトの名無しさん
2011/12/04(日) 16:54:45.33http://kmaebashi.com/programmer/object/intro.html
0593デフォルトの名無しさん
2011/12/04(日) 16:58:08.49int b = 2;
マルチプルインスタンス!
0594デフォルトの名無しさん
2011/12/04(日) 17:06:47.18つまり規範的な概念ではなく記述的な概念ってことか
ファウラー風に言えば
0595デフォルトの名無しさん
2011/12/04(日) 17:23:11.21ダックタイピングが利用できると、そのシグネチャを変えなくても
あとから利用側が同じシグネチャに合わせることができる場面が多いっていう
意味じゃない?
0596デフォルトの名無しさん
2011/12/04(日) 17:27:51.25ガーと鳴かない状況でガーいわせるんだから。そこでガー言わせるIFミスマッチ埋めがAdapterなんだから。
0597デフォルトの名無しさん
2011/12/04(日) 17:36:57.77総称はないな。そもそもクラスベースじゃないOOもあるし。
0598デフォルトの名無しさん
2011/12/04(日) 17:41:55.48クラスベース または プロトタイプベースって
言い換えるだけだよ。
0599デフォルトの名無しさん
2011/12/04(日) 17:42:26.070600デフォルトの名無しさん
2011/12/04(日) 17:44:35.240601デフォルトの名無しさん
2011/12/04(日) 17:49:31.36その機能を現在作成中のプログラムの中で、使いたいんだけどインターフェースがあっていない
だからAdapaterを作成してインターフェースを合わせましょう
っていう話だよね
以下委譲を利用したAdapter
提供されているクラス 変更不可
class Adaptee{
int test(int a, double b){
return a + b;
}
}
自分が作成しているクラス インターフェースは変更不可
Interface Test{
void test(double b, int a);
}
class Adapter implements Test{
private Adaptee adaptee = new Adaptee();
void test(double b, int a){
adaptee.test(a,b);
}
}
0602デフォルトの名無しさん
2011/12/04(日) 19:26:20.030603デフォルトの名無しさん
2011/12/04(日) 19:30:53.02とすると
オブジェクト指向 = (クラス | プロトタイプ) and (継承 | 委譲) ans 多態性 の総称
すっげぇ定義しづらい・・・
0604デフォルトの名無しさん
2011/12/04(日) 19:39:35.17シッタカはやめとけw
例えばsingletonなんて、Smalltalkで使われていた頃はsingletonとは呼ばれていなかったぞw
0605デフォルトの名無しさん
2011/12/04(日) 19:40:35.310606デフォルトの名無しさん
2011/12/04(日) 19:49:38.030607デフォルトの名無しさん
2011/12/04(日) 20:09:33.66一つしか存在しないということを指す言葉。
たとえばTrueクラスのインスタンスはtrueのみ。
Singletonはあるクラスのインスタンスを
一つに制限するときに使うパターン(コード・設計)。
あるクラスをsole insntanceにするときに使うのが
Singletonパターン。こういう使い方をする。
Singletonとsole insntanceは別物
0608デフォルトの名無しさん
2011/12/04(日) 21:16:28.61> っていう話だよね
違う
ソースが提供されているかどうかは全く関係ない
0609デフォルトの名無しさん
2011/12/04(日) 21:27:36.46ソースが提供されていたら、自分のインターフェースに合わせて変更してしまえばいいんじゃないか
と思っちゃうんだけど違うのかな
提供されているクラスは充分にテストされているから、変更せずにそのまま利用したい
ということ?
0610デフォルトの名無しさん
2011/12/04(日) 21:29:12.84インターフェースが変わるとコードもテストも
大量に修正が必要になる。
だから変えようと思っても変えられない。
リファクタリング機能が充実している
Javaでは信じられない発想。
0611デフォルトの名無しさん
2011/12/04(日) 22:15:38.03考えると分かりやすいと思う。
ドメインモデルを直接変更してしまうと、表示画面に特化した再利用性の低い
ものになってしまうので、アダプターパターンを適用する。
プレゼンテーションモデルというのはJavaのJComboBoxにおけるComboBoxModel
などのことで、アダプターパターンを用いることで、どんな形のクラスであってもソースの
修正なしにコンボボックスという形で表示することができる。
0612デフォルトの名無しさん
2011/12/04(日) 22:16:40.160613デフォルトの名無しさん
2011/12/04(日) 22:40:21.43Java使ってるのにソースの互換性を考えたことないのね
0614デフォルトの名無しさん
2011/12/04(日) 22:46:48.06javascriptで書くけど、Observer、Visitorってのは、ここまでの範囲じゃん。
button.addEventListener("click", function( event ){ alert( "I'm visitor." ); }, false);
Adapterでイベントを区別するってのは、こういうこと。
function StartAdapter( delegateTarget ) { function( event ){ delegateTarget.start() } }
function StopAdapter( delegateTarget ) { function( event ){ delegateTarget.stop() } }
var mainLogic = new MainLogic();
buttonA.addEventListener("click", StartAdapter( mainLogic ), false);
buttonB.addEventListener("click", StopAdapter( mainLogic ), false);
0615デフォルトの名無しさん
2011/12/04(日) 22:48:05.84function StartAdapter( delegateTarget ) { return function( event ){ delegateTarget.start() } }
function StopAdapter( delegateTarget ) { return function( event ){ delegateTarget.stop() } }
0616デフォルトの名無しさん
2011/12/04(日) 23:17:54.07仕組みで言っても仕方ないって。
OOPLってのは、OOの目的を達成を支援する事を標榜してるだけで、
目的のためなら、手段は色々なんだから。実装継承の無いOOPLもあるし、
javascriptみたいにカプセル化を持たない言語もある。多態性に関しては、
コアなんで、流石にサポートしない言語は無いけど。
OOは、そもそもSimulaのシミュレーションから着想を得て発展させたもの。
水分子や、酸素分子はそれぞれ別の振る舞いをする。
酸素の溶けた水中は、グラフ構造で表現するのが自然だが、
グラフのノードたる、水分子、酸素分子は別々の振る舞いをしてしまう。
これを上手く、自然に再現するには、既存の手法や言語ではどうしても不細工だった。
それをキレイに表現しようと発展したのがSimula。
更にこのノードをオブジェクトとして定義し、分子などをコンピュータ上のリソースに応用しようと
考えたのが、SmalltalkとC++であり、その考えがオブジェクト指向となっている。
なので、OO概念 = 異なるリソースのグラフ構造表現 だ。
ノード単位での並列化を加えたものがアクターモデルと呼ばれていることからも、
概念は、はっきりしている。
OOPLとは、あくまでこの「異なるリソースのグラフ構造表現」をどれだけ楽に実装できるかを
目指した言語であるだけで、別にどの機能を持っているからOOPLという話ではない。
0617デフォルトの名無しさん
2011/12/04(日) 23:20:54.93読むのだるいんで、下らない喩え話を省いて。
0618デフォルトの名無しさん
2011/12/04(日) 23:36:58.80ええと、かなりわからん・・・ごめん。
それはAdapteeは
mainLogic.start()、mainLogic.stop()でいいの?
で、
buttonA.addEventListener("click", mainLogic.start, false);
で済ますことができないシチュエーションがあるってことでいい?
そして
「異なるオブジェクトから同じイベントで1つの名前のメソッドを呼ばれたら、」
っていう文言を翻訳すると、
異なるオブジェクト : buttonA および buttonB
同じイベント : addEventListener("click")
1つの名前のメソッド : *Adapter(mainLogic) ???
ってことかな?最後のは別に1つの名前のメソッドじゃないから、違ってる気がする。
0619デフォルトの名無しさん
2011/12/04(日) 23:47:09.770620デフォルトの名無しさん
2011/12/04(日) 23:47:18.66OOPLとは、あくまでこの「異なるリソースのグラフ構造表現」をどれだけ楽に実装できるかを
目指した言語であるだけで、別にどの機能を持っているからOOPLという話ではない。
0621デフォルトの名無しさん
2011/12/04(日) 23:48:50.87>buttonA.addEventListener("click", mainLogic.start, false);
これができる言語なんて無いでしょ。デリゲートなり無名関数をアダプターとして挟まない限り無理。
0622デフォルトの名無しさん
2011/12/05(月) 00:06:02.44function method( event ) { alert( "多分、buttonAかbuttonBのどっちかから呼ばれたと思う" ) }
buttonA.addEventListener("click", method, false);
buttonB.addEventListener("click", method, false);
クラスを省いてるんで、また誤解があるかもしれないが、
一つのメソッドが呼ばれると、何処からよばれたか解からんというのは、こういう状態。
勿論、methodが、buttanAと、buttonBを参照してれば、eventオブジェクトで区別は付けられる。
その代わり、buttonAとbuttonBからmethodを切り離せなくなるんで、現実的じゃない。
0623デフォルトの名無しさん
2011/12/05(月) 00:21:57.042ch の長文はオレオレ理論なのか根拠のある話なのか判別が付きにくいから
原典へのリンクも張って。
0624デフォルトの名無しさん
2011/12/05(月) 01:41:33.35http://www.cebollita.org/dugan/history.html
アランケイへのオブジェクト指向とはなんぞやというインタビュー
http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en
「異なるリソース(複数のコンピューターとか)のグラフ構造表現」とまではっきり書いてないが、
要約すると、そういう事を書いてある。基礎概念が、コンピューターネットワークが
細胞間のメッセージングと同じように考えられるとか、ニューロンネットワークとか、
通信網のシミュレーションは、アルゴルのような従来の言語ではやりづらかったとかね。
0625デフォルトの名無しさん
2011/12/05(月) 01:57:24.77StartAdapterとその中身の無名関数とで冗長
あと大文字で始めるのやめれ、見づらい
0626デフォルトの名無しさん
2011/12/05(月) 02:18:25.48別に冗長ではないだろ
これは、あくまで例だが実際には、
mainLogic以外のオブジェクトも渡す理由だから
無名関数だったら毎回function(event){・・・.start()}って
かかないといけないじゃん
0627デフォルトの名無しさん
2011/12/05(月) 02:39:22.01でいーじゃん
0628デフォルトの名無しさん
2011/12/05(月) 02:44:49.510629デフォルトの名無しさん
2011/12/05(月) 02:49:05.79分かりやすさがダンチ
0630デフォルトの名無しさん
2011/12/05(月) 02:57:21.85startじゃなくinitの方が適切な名前だったなーとか、併せて初期サイズを引数で渡した方がいいねーとかなったら
function InitAdapter( delegateTarget, initialSize ) { return function( event ){ delegateTarget.init(initialSize) } }
に変えて
buttonA.addEventListener("click", InitAdapter( mainLogic, initialSize ), false);
にするの?
buttonA.addEventListener("click", function(){ mainLogic.init(initialSize) });
ってだけで済むところを。どんなメリット求めてパターン使ってるの?っていう
0631デフォルトの名無しさん
2011/12/05(月) 03:02:53.59>>72の通りだな
0632デフォルトの名無しさん
2011/12/05(月) 03:06:18.840633デフォルトの名無しさん
2011/12/05(月) 03:18:52.180634デフォルトの名無しさん
2011/12/05(月) 03:24:26.32数学は天文学だとか言うのと同じ程度に眉唾なんだが
発展経緯を知ることは意味があるけど、それがイコール定義ではないでしょ
0635デフォルトの名無しさん
2011/12/05(月) 03:38:19.77startが変化しなけりゃ引数増やす必要ないだろ。
そもそもstartがイベントを受け取る事を前提にしてるなら、
引数が増えたりすることがおかしい。あくまでイベントを別のメソッドで
受け取るためにアダプター噛ましてるだけなんだから。
それはともかくとして、関数に名前付けてんのは、
無名関数を作れない環境でも同じだという事を強調した。
無名関数単品でも他のオブジェクトのメソッド呼ぶだけならアダプターではある。
それはともかく、ダックタイピングが使える環境だろうと、無名関数を作れない
環境だろうと、アダプターをイベントで使うというのがわかればいい。
Javascriptでどれだけキレイに書けるか、Javascriptのセオリーに
従うならどうかなんては問題にしてない。
0636デフォルトの名無しさん
2011/12/05(月) 04:02:54.16引数が増えたりするのは少しもおかしくない
Textで設定値を指定するとか、普通にある
そもそもTargetインターフェースが固定なんだから、Adapteeは可変が前提でしょ。そこ否定してどーすんのさ
おまけ。
問題にしてないと言うなら、主題に沿わないコード断片を書き散らすのやめれ
フォーカスがブレたのなら、それは焦点を絞らなかった書き手の問題だよ。
0637デフォルトの名無しさん
2011/12/05(月) 06:12:22.51違うよ。
つーか、クラスをsole instanceにするとか、用法がメチャクチャだぞw
1つのクラスのインスタンスが1つしかない状況を仮定して、
そのインスタンスを指す言葉がsole instanceで、
そのクラスを指す言葉がsingletonだ。
Smalltalkではinstanceに注目してsole instanceと呼んでいたが、
GoFではよりクラス寄りになったJava等にあわせてsingletonと呼ぶことにした。
0638デフォルトの名無しさん
2011/12/05(月) 06:16:12.50StartAdapterって何するメソッドなの?
0639デフォルトの名無しさん
2011/12/05(月) 06:22:41.87構造が目的なのではなくて、相互作用が目的じゃないのか?
グラフ構造というよりも、異なる単位間の相互作用、のほうがしっくりくる。
で、流派的には
ケイが動的で柔軟な相互作用を追求し、
ストラウストラップは効率的な相互作用を指向して、
メイヤーは各単位の拡張性/整合性に注目した。
0640デフォルトの名無しさん
2011/12/05(月) 07:07:44.20>>624以上のソースを出せと言われたら
もう、ISO/IEC 2382-15しか無いんだがな。
知りたいなら高い金だして買ってくれ。
0641デフォルトの名無しさん
2011/12/05(月) 07:17:19.29無いな
C#使ってて、イベントを受け取るために使った場合の
Delegateは、イベントが発行する以上の引数を持たせる事はできないし
テストのために、追加の引数を渡せるように
Delegateオブジェクトを拡張したなんて聞いたことがない
0642デフォルトの名無しさん
2011/12/05(月) 07:30:45.00Swingが解るなら、StartAdapterってのは、他のインターフェースのメソッドを
一つ呼ぶだけのListenerオブジェクトだよ。
JButton button1 = new JButton()
JButton button2 = new JButton()
StopWatch mainLogic = new StopWatch();
button1.addMouseListener(new StartAdapter(mainLogic));
button2.addMouseListener(new StopAdapter(mainLogic));
Javaで書くとこんな感じか。
0643デフォルトの名無しさん
2011/12/05(月) 07:43:33.94じゃあ訊くけどさ、数学の定義を示してくれたまえ。
その上で、その定義とやらが義務教育を受けた一般人にとって
どれだけ眉唾なものか議論しようじゃないか。
0644デフォルトの名無しさん
2011/12/05(月) 07:51:47.10ラムダすら無いうんこな言語で使うパターンですね
0645デフォルトの名無しさん
2011/12/05(月) 08:01:44.78冗長なコード書くよな
まさにデザパタの弊害って感じ
0646デフォルトの名無しさん
2011/12/05(月) 08:15:32.26イベントリスナとして登録するためには、イベントを受け取る関数の形に合わせる必要がある。
これは、ロジック側のインタフェースをイベントリスナとして要求されるインタフェースに
変換しているという見方もできて、その見方をするならば、
そこで作成されるイベントリスナオブジェクトはアダプタパターンを使っているとも言える。
という理解でいいのかな?
確かにそういう考え方をしたことはなかった。>>632 同意。
0647デフォルトの名無しさん
2011/12/05(月) 08:22:39.04ありがとうよくわかった
ListenerはAdapterパターンが使われているよという主張なのか
0648デフォルトの名無しさん
2011/12/05(月) 08:36:01.220649デフォルトの名無しさん
2011/12/05(月) 09:15:31.67ボタンごとに完全にクラス分けるのか、ある程度は画面ごとにListenerをまとめて押されたボタンを取得してif文で処理分けるのか
理想を言えば前者がいいんだろうけど、クラスすごく増えるんだよね
0650デフォルトの名無しさん
2011/12/05(月) 09:24:05.72Adaterが話題になってるのに、またズレたレスをしたもんだな
0651デフォルトの名無しさん
2011/12/05(月) 09:24:19.17誰も大絶賛してないと思うけど
そもそもそれがAdapterと納得している人はいない気がする
0652デフォルトの名無しさん
2011/12/05(月) 09:26:43.89おまえやおまえの周りがそうだからといって
勝手に一般化するなよ
世界はお前が認識してるより広いんだ
0653デフォルトの名無しさん
2011/12/05(月) 09:30:03.43脱線は一人でやってくれたまへ
コンピュータサイエンスの目的は軍事だという話題もあるぞ
0654デフォルトの名無しさん
2011/12/05(月) 10:42:44.420655デフォルトの名無しさん
2011/12/05(月) 13:08:57.91こういうのもAdapterパターンと呼ぶってこと?
まあ別に良いけど
map(lambda x: x + 1, range(1,10))
0656デフォルトの名無しさん
2011/12/05(月) 19:18:51.320657デフォルトの名無しさん
2011/12/05(月) 19:39:14.35lambdaにより、処理を差し替えれる事から、Strategyになるんじゃない?
もしくは、double-dispatchなしの簡易版Visitor (イディオムとして名前がついていたような記憶があるが思い出せない)
0658デフォルトの名無しさん
2011/12/05(月) 19:43:05.440659デフォルトの名無しさん
2011/12/05(月) 19:46:24.810660デフォルトの名無しさん
2011/12/05(月) 20:06:23.40解ってるかもしれないけど、
Listener = Adapterじゃないからね。
Listenerの中で、複数のオブジェクトや
制御構文を並べて複雑な処理をしてたら、
もはやAdapter(適応)パターンじゃない。
あくまでも、イベントを他のオブジェクトに渡すだけの
最低限の実装で有るべき。Adapterの中で、文字列から
数値型に変えて引き渡したり、ファイル型に変えて
引き渡すぐらいはいいけどね。
0661デフォルトの名無しさん
2011/12/05(月) 20:13:46.38Adapterと呼ぶんじゃないか?
0662デフォルトの名無しさん
2011/12/05(月) 20:22:27.570663デフォルトの名無しさん
2011/12/05(月) 20:25:20.75lambdaの中で+(__add__メソッド)を呼ぶだけだから、>>635の定義
> 無名関数単品でも他のオブジェクトのメソッド呼ぶだけならアダプターではある。
ならアダプタパターンってことになるな
まあ、>>662の言う通りだと思うわ。言葉遊びっつーか馬鹿みたい
0664デフォルトの名無しさん
2011/12/05(月) 20:39:49.98StrategyやらCommandやらVisitorやら、他にもインターフェースを駆使して動的な性質を取り入れようとしているパターンには
動的型付けとかクロージャとかミックスインで代替できるものがいっぱいあると思うよ
モダンな言語はデザパタに頼らずに、よりスマートでソースコードの見通しがいい方法で解決すべき。
0665デフォルトの名無しさん
2011/12/05(月) 20:46:38.00Adapterパターンは、結局ダックタイピングできる言語だろうと、
高階関数つかえる言語だろうと、無意識かもしれんが、使う人は使ってる。
尻拭い以外に使ってることも多いんだよ。
0666デフォルトの名無しさん
2011/12/05(月) 21:11:06.69転送と高階関数で、見かけは存在しないように見せかけられる。
本質的にゃ変わりゃしない。
0667デフォルトの名無しさん
2011/12/05(月) 21:13:08.650668デフォルトの名無しさん
2011/12/05(月) 21:16:09.15委譲を利用するAdapterだと違和感が少ないけど、継承を利用するAdapterだと気持ち悪さがよくわかる
提供されているクラス 変更不可
class AdapteeModel{
int test(int a, double b){
return a + b;
}
}
インターフェース変更不可
Interface Test{
void test(double b, int a);
}
自分が作成しているクラス 変更可能
class AdapterListener extends AdapteeModel implements Test{
void ActionListener(double b, int a){
this.test(a,b);
}
}
ListenerがModelを継承するっていうのは明らかにおかしい
いわゆるis a 関係にかすってもいない
AdapteeとAdapterは同じ目的のクラスであるべきだけど、ListenerとModelはまったく目的が違う
言葉遊びとかそういうレベルじゃない
今回の勘違いは、委譲とAdapterを同一視してる発言
0669デフォルトの名無しさん
2011/12/05(月) 21:26:17.89なんでAdapterなのに継承してんの?
Adapterが別のクラスにくっついてちゃいかんだろ。
>>660にも書いたが、あくまでAdapterは、
別のオブジェクトのメソッドに受け渡すだけ。
Listener = Adapterでは無いが、Listenerに
Adapterを使うこと自体は問題ない。
0670デフォルトの名無しさん
2011/12/05(月) 21:30:05.97Listenerは、別にAdapterじゃなくてもいい
ただListenerとしてAdapterが使えるってだけの話だろ
0671デフォルトの名無しさん
2011/12/05(月) 21:32:49.04なんでモデルでもないのにAdapteeModel?
0672デフォルトの名無しさん
2011/12/05(月) 21:37:20.54Adapter パターン - Wikipedia
http://ja.wikipedia.org/wiki/Adapter_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
>>670
どういうことかよくわからないから
ListenerとしてAdapterが使えるって具体的にコードで書いてみてよ
>>671
古典的なMVCでは、Listenerから呼び出すメソッドはModelのメソッド
AdapteeModelクラスの中身はなんでもいい
0673デフォルトの名無しさん
2011/12/05(月) 21:40:11.63ほれ
http://en.wikipedia.org/wiki/Adapter_pattern
0674デフォルトの名無しさん
2011/12/05(月) 21:41:45.98モデルつってんのに、メンバーもなけりゃ
ブロードキャスト機構が付いてないから、
アレなのかなとおもってさ
0675デフォルトの名無しさん
2011/12/05(月) 21:45:45.04日本語版じゃさも、委譲型が特別形態の様に書かれてるけど、
GoF本や、海外の資料だと、委譲してるのがデフォ。
継承型の方が特殊なんだけど。
0676デフォルトの名無しさん
2011/12/05(月) 21:50:22.93殆どアニオタの巣窟なんだっけ
0677デフォルトの名無しさん
2011/12/05(月) 21:51:38.59自分の責任だと思いなよ。
0678デフォルトの名無しさん
2011/12/05(月) 21:52:37.27http://www.oodesign.com/
こういうちゃんとしたサイトで勉強したら?
0679デフォルトの名無しさん
2011/12/05(月) 21:54:37.96なんで情弱御用達Wikipediaの面倒なんか見なきゃならんのよ。
0680デフォルトの名無しさん
2011/12/05(月) 21:57:10.17そこはスルーして貰えると思って省略した
Modelらしくするなら以下を追加 けどやっぱり今回の話とは関係ないので省略
List<Observers> observers = new ArrayList<Observers>();
private int a = 0;
public void addObserver(Observer ob){
observers.add(ob);
}
public void changeA(int aa){
a = aa;
this.notifyObservers();
}
public int getState(){
return state;
}
private void notifyObservers(){
for(Observer ob:observers){
ob.update(this);
}
}
0681デフォルトの名無しさん
2011/12/05(月) 21:58:14.680682デフォルトの名無しさん
2011/12/05(月) 22:01:48.87自分もAdapterでどちらを使うかと言われれば委譲の方を使うよ
ただし同じAdapterパターンなんだから委譲も継承も目的は同じはず
en wiki
>translates one interface for a class into a compatible interface
>>678のサイト
>Convert the interface of a class into another interface clients expect.
>Adapter lets classes work together, that could not otherwise because of incompatible interfaces.
と書いてあるとおりインターフェースを合わせるためのもの
プログラムとか考えずアダプターと言ったらまさしくインターフェースを合わせるためのもの
Listenerでmodelを呼び出すのは、インターフェースを合わせるためではないよね
>>681
ソースなんてGoF読んでくれとしか言えないw
0683デフォルトの名無しさん
2011/12/05(月) 22:01:58.84Javaで、しかもgetXxxxx使ってんだから
せめてjava.beans.PropertyChangeSupportと
java.beans.PropertyChangeListenerぐらいは使おうよ。
0684デフォルトの名無しさん
2011/12/05(月) 22:06:58.62ListenerをAdapterで実装したとき、
Model自体をAdapterが使用する必要ないでしょ。
class Model implements Runnable{}
new RunAdapter( (Runnable)new Model() );
例としては変だけど、Adapterとしての用途なら別にこれでいいわけじゃん。
0685デフォルトの名無しさん
2011/12/05(月) 22:13:52.92Adapter DelegateAdapter = new Adapter(instance.Method);
DelegateAdapter( 10 );
.net環境は楽だなぁ
0686デフォルトの名無しさん
2011/12/05(月) 22:22:10.60そうですね
>>684
もちろんそれみたいなListener=Clientの状況なら問題ない
Listener=Adapterはおかしいと主張してる
0687デフォルトの名無しさん
2011/12/05(月) 22:25:31.47Listener = { Adapter pattern, Other pattern, ... }
にできるっていう意味で書いてんじゃん。
なんで引きずってんの?
0688デフォルトの名無しさん
2011/12/05(月) 22:30:02.260689デフォルトの名無しさん
2011/12/05(月) 22:34:03.85これにつきるな。ソースコードは設計書であるべきだから本質的でないものが混ざるとストレスたまる。
デザパタはその見通しを悪くするものが多いから、本当に必要なとき以外は極力排除したい。
TemplateMethodみたいに見通しよくするものもあるけど。
0690デフォルトの名無しさん
2011/12/05(月) 22:39:08.17俺はこれを否定してるつもりなんだけど
ListenerのどこにどうAdapterパターンを使うんだ
Observerパターンは使ってるけど
>>688
どうしてコントローラーとアダプターパターンが同列なんだ
どうやってリスナーをアダプターで実装するんだ
もう俺だけ理解してない気がしてきた
誰か教えてくれ
0691デフォルトの名無しさん
2011/12/05(月) 22:39:39.69TemplateMethodの見通しが良いかは分からないけど、上二行に関しては同意
ていうか頼むから>>614や>>642のようなアホコードは書かないで欲しいもんだね
0692デフォルトの名無しさん
2011/12/05(月) 22:39:48.63C#でもできるし、GObjectを使ったCでもできるし、Lispでもできる。
アルゴリズムが言語に依存しないのとおんなじ。
0693デフォルトの名無しさん
2011/12/05(月) 22:40:09.16単にお前が、設計の基礎知識を知らんだけではないのか?
設計図を読めない人は、設計図をみたらよくわからんと言うだろう。
それと同じだ。
0694デフォルトの名無しさん
2011/12/05(月) 22:43:20.02リスナーはオブザーバーパターンから見た立場
アダプターは、委譲される側から見た立場
直交できる関係であって排他的なもんじゃないでしょ
0695デフォルトの名無しさん
2011/12/05(月) 22:45:21.24本当に必要なときに使うのは誰も否定してないんじゃないの?
0696デフォルトの名無しさん
2011/12/05(月) 22:45:44.95例としてわざとそう書いてるのに空気読めないねぇ。
0697デフォルトの名無しさん
2011/12/05(月) 22:46:01.69なぜそうなっているのかその理由と目的を聞いて、
じゃあお前はこの目的をどうやって達成する?と聞いたら
一番いい方法がデザパタと同じコードにになるだろう。
0698デフォルトの名無しさん
2011/12/05(月) 22:46:40.31あんたは、見た目とデザパタを同一視してるだろ。
そこが解ってないと言われてんの。
0699デフォルトの名無しさん
2011/12/05(月) 22:46:43.34だから、本当に必要なときを前提にして
話をしてるんでしょw
0700デフォルトの名無しさん
2011/12/05(月) 22:47:06.50例として不適切なのが相変わらず理解できないのね
0701デフォルトの名無しさん
2011/12/05(月) 22:47:48.59なぜ例として不適切なのか?
いちいちストーリを作らないといかんのか?
0702デフォルトの名無しさん
2011/12/05(月) 22:47:53.41必要もないのに使っている悪例がでてるじゃん
0703デフォルトの名無しさん
2011/12/05(月) 22:49:08.26分かるようなコードでも、実勢経験が少ない人には
なんでそんなものが必要になるのかわからないんだよ。
0704デフォルトの名無しさん
2011/12/05(月) 22:49:35.43だから、これは必要なときという前提の話。
0705デフォルトの名無しさん
2011/12/05(月) 22:51:11.05自分で何を言ってるのか分かってる?
0706デフォルトの名無しさん
2011/12/05(月) 22:51:54.71むしろ実務経験の少ない人ほど無駄なパターンを多用する傾向があるかと
0707デフォルトの名無しさん
2011/12/05(月) 22:53:04.34それはよくある話だね。
サーバーの話だけど俺は昔リバースプロキシがよくわからなかった。
そのまま繋げばいいのに、なんでそんなものを入れて複雑にするのか?と思った。
今では理由はわかるけど、経験少ないとわからんものだよ。
なんかの本に書いてあったけど、密結合な設計は悪い。
結合を疎にするには間にクッションを入れるみたいなこと。
デザパタもそうなってるんだよね。結合度を下げるために
間にクラスを入れてる。
その理由がわからない人は経験が足りないだけ。
0708デフォルトの名無しさん
2011/12/05(月) 22:54:09.44動的型付け言語で実装すると委譲も継承も必要無いけど、
これも見た目が違うだけでAdapterパターンのはず
class Product:
def __init__(self, cost=0): self.cost = cost
def get_cost(self): return self.cost
Product.get_price = Product.get_cost
0709デフォルトの名無しさん
2011/12/05(月) 22:54:57.25そうだね
"本当に必要なときは"使った方がいいね
0710デフォルトの名無しさん
2011/12/05(月) 22:55:41.76よく分かってるけど?
ここに書いている短い例ではいろいろ省略している
めんどうだからね。
本当は○○〜というストーリーがあるんだけど、それを省略している。
このストーリーをちゃんと書けばデザインパターンはそういう目的の
ためにあるんだってわかるはず。
ただ、めんどくさいから書かないよ。経験あればこの程度のストーリーなんて
心当たりがあるはず。ない人がわからんと文句を言ってるだけ。
0711デフォルトの名無しさん
2011/12/05(月) 22:56:45.40デザインパターンの本質は、実装ではなくて考え方なので、
その考え方さえ満たしていれば、いろんな実装がありえます。
0712デフォルトの名無しさん
2011/12/05(月) 22:57:55.09button.addMouseListener( new ActionListener(){ void actionPerformed(ActionEvent e){ instance.Method(); } } ):
button.Click += new EventHandler( instance.Method );
言語が違おうが、パターンとしては同じって事が解らない人は辛いね
0713デフォルトの名無しさん
2011/12/05(月) 22:59:09.42もういいよ
聞く耳を持たない人には無いを言っても無駄だからね
0714デフォルトの名無しさん
2011/12/05(月) 22:59:51.04それで?
0715デフォルトの名無しさん
2011/12/05(月) 23:00:29.45いわゆる一昔前の頑固親父だよな
0716デフォルトの名無しさん
2011/12/05(月) 23:02:32.96もういいよって言ってるのにその返しは無くない?
0717デフォルトの名無しさん
2011/12/05(月) 23:03:18.27どういう仕事してんだろ?接客とかはしたことなさそうだけど
0718デフォルトの名無しさん
2011/12/05(月) 23:04:31.98そもそも「もういいよ」って返しがありえないだろw
ありえないものには、
ありえないもので返すしかありません。
0719デフォルトの名無しさん
2011/12/05(月) 23:06:10.53お前ってものすごい自分ルールを持ってるね
普通はありえない返しだと思ったらありえないって言うだろw
0720デフォルトの名無しさん
2011/12/05(月) 23:06:34.62それは、お前の自分ルールだ。
0721デフォルトの名無しさん
2011/12/05(月) 23:07:09.18お互いここらで終わりにしようか?
0722デフォルトの名無しさん
2011/12/05(月) 23:08:17.19どうぞ勝手に。俺も勝手にする。
0723デフォルトの名無しさん
2011/12/05(月) 23:08:41.41ヤツがいってるのはアレか、JavascriptじゃわざわざAdapterなんか使わずに、
面倒だから無名関数の中に直接処理を埋め込めといってたのか。多分・・・
0724デフォルトの名無しさん
2011/12/05(月) 23:09:47.050725デフォルトの名無しさん
2011/12/05(月) 23:10:45.70じゃなく、
function(){ 処理ベタ書き }
こんな感じか
0726デフォルトの名無しさん
2011/12/05(月) 23:10:46.420727デフォルトの名無しさん
2011/12/05(月) 23:13:37.29確かに、それならAdapterパターンつかってないわな。
デザパタ減らしてる。
0728デフォルトの名無しさん
2011/12/05(月) 23:14:56.86引数無しなら instance.Method だけで良いんと違うん?
0729デフォルトの名無しさん
2011/12/05(月) 23:19:10.80instanceとのヒモ付がなくなっちゃう。
0730デフォルトの名無しさん
2011/12/05(月) 23:21:56.94instanceB.Method = instanceA.Method;
instanceB.Method();
これ動かしたら、instanceBとinstanceAどっちが参照されると思う?
0732デフォルトの名無しさん
2011/12/05(月) 23:32:13.69上のほうでも誰か指摘してただろ
0733デフォルトの名無しさん
2011/12/05(月) 23:34:36.71新たにクラスやインターフェースを作るのは気に入らない
ソースコードの見通しが悪くなるから
(つーても、使う言語でそれ以外に実装方法が無いなら仕方ないが)
見た目は大事
0734デフォルトの名無しさん
2011/12/05(月) 23:36:40.150735デフォルトの名無しさん
2011/12/05(月) 23:36:58.700736デフォルトの名無しさん
2011/12/05(月) 23:39:24.59往年の派遣土方は、テスト工数じゃなくて、
ステップ数で見積もらなきゃいけないから、
そういうとこが厳しいんだってさ。
オブジェクトで振る舞いの表現ってのも元請けが
理解できないから、なかなかさせてもらえないみたい。
0737デフォルトの名無しさん
2011/12/05(月) 23:46:08.52インターフェース + クラスで10行に膨らませて
大規模(笑)開発にしてるとこあるな
行数で評価されるからこれで良いんだってww
まさにドカタの発想w
0738デフォルトの名無しさん
2011/12/05(月) 23:47:22.85まさにこれ
http://d.hatena.ne.jp/higayasuo/20101126/1290766099
> きれいなソースコードをかけるようになるためにデザインパターンも知ってたほうがいいんじゃないのという人もいると思いますが、
> デザインパターンはきちんと学んだ上で、いったん軽く忘れたほうがいい。
>
> 軽く忘れるというのは、コードを書いているときに、そういえば、このパターンはデザインパターンのあれに似てるなぁと思い出せる
> くらいに忘れるということです。思い出せたらそれは使うようにしましょう。
>
> デザインパターンが常に頭に常駐している状態でコード書くと、無駄に複雑になっちゃうんだよね。
>
> デザインパターンは、ある程度複雑な問題をきれいに解くために考えれたものですが、もともと簡単なものに適用すると無駄に
> 複雑になってしまうためです。
0739デフォルトの名無しさん
2011/12/05(月) 23:47:49.09派遣はそれに加えライブラリを作れないからな
常にスクラップビルドだから今度最利用するっていう発想はない
0740デフォルトの名無しさん
2011/12/05(月) 23:50:47.451つ名前付きの高階関数用意しときゃいいのに、
10回も20回もおんなじlambda書くんだもんな
0741デフォルトの名無しさん
2011/12/05(月) 23:54:05.95さすがにそれは無理があるわ
0742デフォルトの名無しさん
2011/12/05(月) 23:54:23.47高階関数の意味分かってる?
0743デフォルトの名無しさん
2011/12/06(火) 00:01:25.17だからお前は言語機能とデザインパターンをいい加減切り離せ
0744デフォルトの名無しさん
2011/12/06(火) 00:10:03.14何を言っているのか分からない
738は自分が読んで納得した意見を紹介しただけなんだけど
あと733は別人ですよ
0745デフォルトの名無しさん
2011/12/06(火) 00:14:10.14切り離してるから、実装方法が選べるなら
簡潔な方を選択しろと言っているんだろ
>>614のようなアホコードを書かないためにもな
0746デフォルトの名無しさん
2011/12/06(火) 00:14:25.11一行で済む内容を手書きで一行書くのも IDE に十行生成させるのも
手間はそれほど変わらない。別にどっちでもいいと思うようにならないか?
フィールドを 3, 4 個定義して getter/setter の生成をポチっとやった瞬間に
JavaDoc コメントも入れれば 100 行超える。Java での開発ってそういうもんだろ。
0747デフォルトの名無しさん
2011/12/06(火) 00:21:24.460748デフォルトの名無しさん
2011/12/06(火) 00:21:35.68>複雑になってしまうためです。
これは「デザインパターン」を「オブジェクト指向」に置き換えても成立すると思う。
0749デフォルトの名無しさん
2011/12/06(火) 00:23:57.38説明としてはまともだと思うが?
0750デフォルトの名無しさん
2011/12/06(火) 00:26:19.32無名関数が存在するか、無名クラスが存在するか、
Delegateの様なデザインパターンを予めサポートした機能が存在するか、
そんなもん全部言語による。このスレで言語依存の話をギャーギャー続けるな。
0751デフォルトの名無しさん
2011/12/06(火) 00:27:46.63優れてるか知らないけど俺はまだ解りやすいとは思った
0752デフォルトの名無しさん
2011/12/06(火) 00:29:25.26相変わらず言語機能に拘るのな
0753デフォルトの名無しさん
2011/12/06(火) 00:29:47.02説明としては…
>>751
まだ分かりやすい…
煮え切らない回答だな
0754デフォルトの名無しさん
2011/12/06(火) 00:30:33.85あなたはお呼びじゃないです
0755デフォルトの名無しさん
2011/12/06(火) 00:31:50.77何してんのかよく解からんがな
0756デフォルトの名無しさん
2011/12/06(火) 00:32:34.74相手の言いたいことの本筋を掴めず、どうでもいい枝葉末節に拘って時間を無駄にするタイプだろ。
0757デフォルトの名無しさん
2011/12/06(火) 00:35:10.73余計な事言わなきゃ15レスぐらいで終わりそうなのに。
0758デフォルトの名無しさん
2011/12/06(火) 00:35:41.88そういう時間を無駄にしないためにこそ、こんなコードは書いちゃいけない
0759デフォルトの名無しさん
2011/12/06(火) 00:37:43.920760デフォルトの名無しさん
2011/12/06(火) 00:38:00.69え?掴みづらかったか?俺は分かり易いと思ったが。
delegateTarget.start() を EventListener の要求するインタフェースに適合させるという意味で
function( event ){ delegateTarget.start() } が Adapter だと言えるという話だろう。
どこが分かりにくいのか疑問。
0761デフォルトの名無しさん
2011/12/06(火) 00:42:10.34お前だけおかしいんだから、そろそろ空気読んでうせろよ
0762デフォルトの名無しさん
2011/12/06(火) 00:47:46.89「どうでもいい枝葉末節に拘って時間を無駄にする」という実例。
>>614 は日曜だろ。現に 2 日も無駄にしてる。2 日無駄にしてまだ終わらない。
0763デフォルトの名無しさん
2011/12/06(火) 00:51:27.76そうやって意図を説明をしないと分からない
実際、自分以外の何人かも分からないとコメントしてる
>>627は見たままで誰でもすぐに理解できる
念のため、無名関数かどうかは問題にしてないよ
>>761
残念だけど俺だけじゃないんだな
そっちはどうか分からないけど
0764デフォルトの名無しさん
2011/12/06(火) 00:51:29.96ツッコミも入るわい
まあ、いいかげん引っぱりすぎだが
0765デフォルトの名無しさん
2011/12/06(火) 00:51:39.09ホント無駄
0766デフォルトの名無しさん
2011/12/06(火) 00:53:28.992日同じ議論やって、要点だけ抜けて末節だけになっとる。スゲェ・・・。
0767デフォルトの名無しさん
2011/12/06(火) 00:53:47.150768デフォルトの名無しさん
2011/12/06(火) 00:54:04.940769デフォルトの名無しさん
2011/12/06(火) 00:55:32.48お前いたら、他の人に解りやすい説明もできなくなる。
失せろ。
0770デフォルトの名無しさん
2011/12/06(火) 00:55:38.900771デフォルトの名無しさん
2011/12/06(火) 00:57:09.06お前が関わると誤った知識が広まるから、お前こそ失せろよ
こういう奴が一番有害だな
0772デフォルトの名無しさん
2011/12/06(火) 00:57:40.730773デフォルトの名無しさん
2011/12/06(火) 00:57:44.02> >>627は見たままで誰でもすぐに理解できる
> 念のため、無名関数かどうかは問題にしてないよ
そうかな?俺と感覚が違うなあ。
「Listener のこういう使い方は Adapter パターンの適用と見ることができる」
という説明のための例だろ?
これは駄目だと思うんだ。
> function(){ mainLogic.start() }
function(event) { mainLogic.start() }
と書いてほしい。引数の event を抜いたら、
むしろ本来説明したいことは伝わりにくくなると思う。
0774デフォルトの名無しさん
2011/12/06(火) 00:59:27.61そこは見てなかった
けど、それこそ枝葉の問題だ
0775デフォルトの名無しさん
2011/12/06(火) 01:00:12.93と>>566が>>577にツッコまれて、苦し紛れに出した例が>>614だからな
無理矢理Adapterをねじ込んだから不要/冗長なコードになってる
0776デフォルトの名無しさん
2011/12/06(火) 01:02:10.38感覚の違いだということで。
ああ、こういう話(枝葉か本筋か)に正解はないよ。君と俺との感覚の違い。
どっちが普通でどっちがオカシイかという議論は 2ch でやっても無駄だからやめよう。
0777デフォルトの名無しさん
2011/12/06(火) 01:03:56.40この手の輩は勝利宣言で終わらなかったら延々と貼りつく
0778デフォルトの名無しさん
2011/12/06(火) 01:04:10.56実際の開発ではこういった書き方はしない方が良いという意味ではみんな同意するんじゃないかな?
0779デフォルトの名無しさん
2011/12/06(火) 01:05:19.520780デフォルトの名無しさん
2011/12/06(火) 01:07:12.34なんでこれが勝利宣言になるの?
0781デフォルトの名無しさん
2011/12/06(火) 01:07:54.22アダプターパターン使ったとか現実世界で言うなよ
話通じないしアホだと思われるぞ
0782デフォルトの名無しさん
2011/12/06(火) 01:08:50.550783デフォルトの名無しさん
2011/12/06(火) 01:09:53.67button と listener の関係が Observer で
listener と delegateTarget の関係が Adapter だね
着目する場所の違い。Visitor はどこを混同するとそうなるのかわからん。
0784デフォルトの名無しさん
2011/12/06(火) 01:14:20.800785デフォルトの名無しさん
2011/12/06(火) 01:15:43.96最初から委譲するように作ってあるものに対してAdapterパターンという言葉を使うのはちょっと違うような
0786デフォルトの名無しさん
2011/12/06(火) 01:36:10.07UIごとじゃなく機能単位で分けられるんじゃない?
例えば、画像編集ソフトで画像を保存する事を考える。
この時、保存は、ツールバーでする人もいれば、ショートカットキーでするひとも居る。
(ActionListener)new SaveControl( (FileModel)fileModel, (ByteModel)imageModel );
みたいな使い方が出来る保存用リスナー作ってツールバーとショートカット(メニュー)に
割り当ててあげれば、ツールバーとショートカットキー用に別々のクラスを書かなくて済むでしょ。
あと、(ByteModel)imageModel みたいな感じで、インターフェースで受け
取れるようにしてれば(ByteModel)soundModel みたいに
他のデータにも使えて、もう少しコードを書く量は減らせると思う。
0787デフォルトの名無しさん
2011/12/06(火) 01:39:22.62デリゲートパターンてのはデザパタに無いからね。
0788デフォルトの名無しさん
2011/12/06(火) 01:42:54.58デザパタは置いとても、無名関数をアダプターとして使ってるぐらい言うんじゃないか?
0789デフォルトの名無しさん
2011/12/06(火) 01:46:06.56>>778=>>781=>>782 なんだから触れるなよ
0790デフォルトの名無しさん
2011/12/06(火) 06:15:46.76違う
ViewとListenerあわせてObserverパターン
立場とか一切関係ない
ModelにAdapterを適用したいことはあるかもしれないから排他ではないがListenerとは関係ない
0791デフォルトの名無しさん
2011/12/06(火) 06:25:31.34この発言でおかしいことがはっきりした
あなたの理論で言うと、委譲とか考えないで、後から処理を差し込むためにAdapterパターン使うはずなのに、結局委譲使ってるんだなw
そもそも後から処理を差し込むためにAdapterパターン使う訳じゃない
Adapterの意味は適合
非互換のインターフェースを適合するために用いるのがAdapterパターン
他の方法でも実装できるんだから、Adapterパターンの本質には委譲は関係ない
委譲はAdapterパターンの実装方法の1つに過ぎない
0792デフォルトの名無しさん
2011/12/06(火) 07:20:42.51MVCで、ObserverにCommandを組み合わせる事はよくあるが、
デザインパターンというものは排他的か?
0793デフォルトの名無しさん
2011/12/06(火) 07:21:47.32ところで静的型付けを持つ言語でクロージャを持つ言語って、そのクロージャの型はどう定義するものなんだろうな
引数の型や数によってそれぞれ別のシグネチャを持つようにデザインされてたら
変に縛りが強すぎて、再びデザパタの生まれ変わりみたようなものを導入することになりそう
0794デフォルトの名無しさん
2011/12/06(火) 07:45:20.300795デフォルトの名無しさん
2011/12/06(火) 08:01:18.52排他じゃないと書いてるだろ
何を読んでそのレスをしたんだ
0796デフォルトの名無しさん
2011/12/06(火) 08:05:55.14ここで、Timerクラスを利用したい開発者がいて、その開発者はactionPerformedというメソッドでTimerをstartしたいとする。
この場合、TimerAdapterというAdapterを作成することで、既存クラス(Timer)クラスを修正することなく、 異なるインタフェースを持たせることができる。
このように、既存クラスを修正することなく、異なるインタフェースを持たせるということが、Adapterパターンの役割である。
class Timer {
public void start();
}
class TimerAdapter extends Timer implements ActionListener {
public void actionPerformed(ActionEvent e) {
super.start();
}
}
イベントリスナにTimerAdapterという名前を付けることに違和感を感じるだろ?
その違和感こそイベントリスナがAdapterではない証拠。
イベントリスナを使うときに「意図」しているものはAdapterではない。
Timer#start()をActionListener#actionPerformed(ActionEvent e)という名前で使いたいから
リスナを作っているのか?明らかに違うだろ。
デザインパターンは、目的をもって使うもの。
クラス図が偶然に同じ形をしていたからといって、そのパターンを使っているとはいわない。
0797デフォルトの名無しさん
2011/12/06(火) 08:13:39.85GOFパターンにはないけど、他のパターン本でみた気がする。ただの委譲にパターンとか大げさすぎる気もするけど。
0798デフォルトの名無しさん
2011/12/06(火) 08:21:21.56同じ主張の人が現れて嬉しい
他にこれと同意見の人いないの?
0799デフォルトの名無しさん
2011/12/06(火) 10:21:50.96>>796の意見は不思議と入ってこない。
反論か同意かしたかったが、どちらもできなかった。
0800デフォルトの名無しさん
2011/12/06(火) 13:16:05.39ギャップを埋めるのがAdapter
Timer#start と ActionListener#actionPerformed は同じ機能かって話ですよ
0801デフォルトの名無しさん
2011/12/06(火) 17:42:59.78この主張に対しては妙にレスないんだよな
変な煽り合いにはいっぱいレスつくのに
0802デフォルトの名無しさん
2011/12/06(火) 19:46:27.48これは結城本の例でいうと、直流12ボルトの電源をアダプタに繋いで交流100ボルトに
変換したとしても飽くまでも電源であるべきで、大まかな機能や目的は変わらないはず。
それに対して>>796の例では、タイマーをアダプタに繋いでもタイマーであるべきだが、
出来上がったクラスのインターフェースを見てみると、タイマーであるとはとても考えられない。
ということかな?
確かにこの例だと出来上がったクラスはイベントリスナであることが主であって、タイマー
としての機能はオプションで交換可能なものとして設計されているように見える。
これをアダプタと考えるのは難しいな。
0803デフォルトの名無しさん
2011/12/06(火) 21:22:34.62そもそも視点がおかしい。
C#に書き換えてみれば解りやすい話。
startButton.Click += clock.Start;
stopButton.Click += clock.Stop;
本来のリスナーは、clock.Startとclock.Stop。
アダプター自体じゃない。アダプターは、リスナーオブジェクトから、
リスナーメソッドにインターフェースを変換してやる手伝いをしてるだけ。
0804デフォルトの名無しさん
2011/12/06(火) 21:53:39.31> デザインパターン
先人が作ってくれた設計パターンにそれらしい名前をつけただけのもの
問題領域を抽象化する上で、もっとい良い物があればそれを使うべきだ
# 問題領域をうまく抽象化出来ないやつが多いからOOは遅いとか
# 蔑みの目でみられる
0805デフォルトの名無しさん
2011/12/06(火) 22:30:02.96actionPerformed()で受けるのをやめるか、
もっと言えばActionListener#actionPerformed(ActionEvent e)なんてパターンをやめて
クロージャやらデリゲートやらブロックやらを直接受け取るようにすればいいのに
0806デフォルトの名無しさん
2011/12/06(火) 22:33:20.13C#の機能でごまかしてるようにしか見えないんだけど
そのコードをJavaで書くとどうなるの?
あと796は委譲の方が良いだろうけど、そこは問題じゃないだろ
0807デフォルトの名無しさん
2011/12/06(火) 22:40:22.76startButton.Click += clock.Start;
startButton.addMouseListener( new StartAdapter( clock ) );
stopButton.Click += clock.Stop;
startButton.addMouseListener( new StopAdapter( clock ) );
重要なのは、本来のリスナーがclockのメソッド側にあること。
>>796は、リスナーを前提としてないオブジェクトとの結合に視点が固まりすぎてる。
0808デフォルトの名無しさん
2011/12/06(火) 22:48:05.85結局「new StartAdapter( clock )」これだろ?
803では何を言いたかったのか?何のためにC#に書き換えたのか分からない
> 重要なのは、本来のリスナーがclockのメソッド側にあること。
> >>796は、リスナーを前提としてないオブジェクトとの結合に視点が固まりすぎてる。
これも何をいいたいのか全く分からない
もうちょっと伝わる書き方をして欲しい
0809デフォルトの名無しさん
2011/12/06(火) 23:02:06.55startButton.Click += clock.Start;
リスナー本体は、clock.Start()。
>>796は、clock.Start()がリスナーだと思ってない。
だから、アダプター自体がリスナーだと思って違和感を感じるといってる。
0810デフォルトの名無しさん
2011/12/06(火) 23:04:38.64C#に書き換えたのは、アダプターがキャスト(変換)機構に過ぎない事を強調してんの。
0811デフォルトの名無しさん
2011/12/06(火) 23:07:59.90そもそもJavaでこう書けてりゃ今回のパターンでアダプターは書く必要ないんだよな
0812デフォルトの名無しさん
2011/12/06(火) 23:19:02.42なんか噛み合ってないな
> >>796は、clock.Start()がリスナーだと思ってない。
思っていないというか、むしろclock.Start()がリスナーで無いことが前提の話なんだが
自分は>>796の言わんとしていることが分かっているつもりなので、おそらくは809の
方が勘違い・読み違いをしていると思う
というか796にもフォローして欲しいところだな
0813デフォルトの名無しさん
2011/12/06(火) 23:20:22.69こういう書き方って結局できたか?
delegateの型を一致させないと+=なんてできなくね?
つまり、そこが違ってるからこそアダプタ云々の話になってるわけで、
C#だからといってそこを誤魔化してはだめじゃね?
0814デフォルトの名無しさん
2011/12/06(火) 23:23:02.03結局>>811ができないから、やってるだけ。
0815デフォルトの名無しさん
2011/12/06(火) 23:31:34.51そもそも>>796はAdapterとしておかしいんだよ
0816デフォルトの名無しさん
2011/12/06(火) 23:36:40.510817デフォルトの名無しさん
2011/12/06(火) 23:47:35.30話は変わるが、MVCで入れ子になったビューの
コントローラーは、どう扱うのが理想なんだろか。
例えば、YesとNoのボタンを持ったViewがあるとする。
YesNoObserverでも作って、親のViewに管理させ、
どちらが押されたか通知ってのは基本として、
それ以外の動作(Yesボタンが右クリックされた)とかは、
どういう風に通知するのが理想だろ?
親のViewにYesとNoの全てのイベントを委譲
管理させるのは扱いづらい・・・。
0818デフォルトの名無しさん
2011/12/07(水) 00:02:47.63ListenerにAdapter噛ませてListener機能の無いもん喰わせたら
おかしいと思うのは当たり前。>>802の話にそえば、
Adapter噛ませてもListenerに渡すものはListener機能を
持ってるもんじゃないとおかしい
0819デフォルトの名無しさん
2011/12/07(水) 00:21:12.68アダプタってのはメソッド呼び出し。呼び出すための実装。
0820デフォルトの名無しさん
2011/12/07(水) 01:34:57.230821デフォルトの名無しさん
2011/12/07(水) 07:23:18.42うーん・・・
画面を右クリックした段階では、まだ画面との対話中で、モデルやらビジネスロジックには影響を与えないよね。
俺だったらビューのロジックにそのまま書いちゃうなあ。
バリデーションみたいにモデルかどこかと共通化したいなら別途ヘルパー群を作るとか。
0822デフォルトの名無しさん
2011/12/07(水) 07:32:26.990823デフォルトの名無しさん
2011/12/07(水) 08:12:46.02一人だけ理解してないということがわかった
0824デフォルトの名無しさん
2011/12/07(水) 12:56:27.73リスナー ≠ オブザーバー
0825デフォルトの名無しさん
2011/12/07(水) 13:01:17.68AwtやSwingでのイベントハンドラの呼び名だもんな
0826デフォルトの名無しさん
2011/12/07(水) 17:35:41.820827デフォルトの名無しさん
2011/12/07(水) 21:36:12.12Observer Patternにしようとして作ってるわけじゃないけどな。
ListenerからListenerを呼び出す場合もある。
基本はdelegation event model。
この辺りが面白い。
http://javafaq.jp/S065.html
あとAWT, SwingじゃXxxxxAdapterってクラスがあるけど、
デザパタのAdapterとは違う。そもそもデザパタ本より先にモデルが
作られてるから仕方ない話だが。
0828デフォルトの名無しさん
2011/12/07(水) 22:48:35.04JDK 1.0は1996年
JDK 1.1(AWTにjava.awt.EventListenerが導入された)は1997年
0829デフォルトの名無しさん
2011/12/07(水) 23:01:40.990830デフォルトの名無しさん
2011/12/08(木) 11:12:24.08あと、MFCの元になったThinkCのライブラリは…いつ頃だっけ?
0831デフォルトの名無しさん
2011/12/08(木) 11:59:21.21In 1991, a small group of Sun engineers called the "Green Team" believed that the next wave in computing
was the union of digital consumer devices and computers. Led by James Gosling, the team worked
around the clock and created the programming language that would revolutionize our world -- Java.
0832デフォルトの名無しさん
2011/12/08(木) 17:48:41.340833デフォルトの名無しさん
2011/12/12(月) 10:49:49.15これは間違いないから大丈夫。
0834デフォルトの名無しさん
2012/01/16(月) 19:29:18.57それとも生成以外のことには関与しないほうが良い設計でしょうか?
class IGameUnitFactory {
public:
virtual ~IGameUnitFactory(void) {}
virtual SharedPtr<GameUnit> Create(void) const = 0;
};
class GameUnitXXXFactory : public IGameUnitFactory {
private:
WeakPtr<GameState> game;
InitParam param;
public:
GameUnitFactory(SharedPtr<GameState> game, InitParam param) : game(game) , param(param) {}
SharedPtr<GameUnit> Create(void) const {
SharedPtr<GameState> g(game.Lock());
if(g) {
SharedPtr<GameUnitXXX> unit(new GameUnitXXX(param));
g->Register(unit);
return unit;
}
else { reutnr SharedPtr<GameUnit>() ; }
}
};
0835デフォルトの名無しさん
2012/01/16(月) 22:18:36.19それを踏まえた上で、一般的な意味でFactoryというなら
登録までしていいんじゃないか。
ちなみにデザパタ本の話を持ち出すと、
加工したオブジェクトを返すパターンはBuilderパターンと言われ、
切り替え可能な仮想コンストラクターのセットをAbstractFactoryという。
また、単一のコンストラクターを仮想化したものをFactoryMethodという。
まぁ、呼び方なんかどうでもいいし、どれか1つに合わせて
ガッチリ作らなきゃならんわけでもない。
0836835
2012/01/19(木) 00:44:41.91FactoryMethodは、クラスAがあったとき、クラスAの内部や、Aの関係各所でつかう
他のクラスのコンストラクターをAに直接使わせないようにする方法。
やり方は、他のクラスのコンストラクターの代わりに、Aに他のクラスを
戻り値とする仮想関数を定義する。で、Aの子クラスBで仮想関数に具体的な
コンストラクターを実装してやるってパターンね。
0837デフォルトの名無しさん
2012/01/19(木) 06:25:39.580838デフォルトの名無しさん
2012/01/19(木) 08:49:36.74【簡単なまとめ】
★日本人の知らないうちに、欧州を中心に、世界中で日本文化ブームが起きて凄いことになっていた
(実質第2次ジャポニズムブーム)
↓
★現地にいる人間からの情報で、日本人がやっと気づいた
↓
★日本文化の紹介を何もしてこなかった政府が批判され国会議員が動いた
↓
★政府やNHKが「クールジャパン」という言葉を作り、やっと広報活動を始めた
↓
★しかしすでに欧米では、ブームを通り越して生活の一部として定着してたw すでに日常風景ww 広報の意味なし
↓
★韓国が日本のようにチヤホヤされたくて捏造韓流ブームを煽ったが、全く人気が出ず、世界的にバレたアイゴー<;#`Д´>
↓
★韓国が頭に来て、全世界での日本文化ブームもウソということにするニダ゚
↓
★在日朝鮮人の村上隆くん頼むニダ
↓
★村上隆 「日本文化ブームはウソ」というと、さすがにバレるので、「クールジャパンはウソ」でごまかして発信
↓
★確かに 、「クール・ジャパン」という人は外国ではほとんどいないのは事実だが
「ジャパン イズ クール」とか「ジャパニーズ○○ イズ クール」という人は普通にいる
あとはwonderful amazing ,,,とかね。まぁどの言葉も似たような意味だから
「クール・ジャパン」と思っている人が多いのは間違いではない
↓
★村上隆が巧妙なのは、「クール・ジャパン」という言い方はしていないということを
「日本文化が実は人気がない」という風に思わせるように発言していること
↓
★村上隆の印象操作工作発言にダマされたバカが続出中 ←今ココ ( ´ω`)
0839デフォルトの名無しさん
2012/01/19(木) 09:58:58.08東電や政府、オリンパスを始めとした糞企業のせいで日本のイメージは今や韓国と並んでワースト2だよ
0840デフォルトの名無しさん
2012/01/19(木) 18:29:34.950841デフォルトの名無しさん
2012/01/21(土) 18:31:34.710842デフォルトの名無しさん
2012/01/22(日) 20:02:15.73ここはオブジェクト設計スレだからなあ。
リスコフの置換原則の観点で意見を述べるなら
韓国と同一視できるか否かが鍵だな。答えはもちろんNOだ
0843デフォルトの名無しさん
2012/01/29(日) 12:46:29.39健在だが?
http://lapizlazuri.net/041225kokuji2.jpg
0844デフォルトの名無しさん
2012/01/29(日) 23:01:47.23実際にコードを書いて、便利さを説明してるサイトや本ってないかな。
オブジェクト指向だとこういう実装になるけど、従来の手続き型で書くとこうなる、みたいな。
0846デフォルトの名無しさん
2012/01/30(月) 07:03:16.450847デフォルトの名無しさん
2012/01/30(月) 08:47:37.86でも拡張のしやすさについては間違った方法でやるとスパゲティ量産になるから単純に利点と言い切れないかな
0848デフォルトの名無しさん
2012/01/30(月) 15:27:35.62まあ節度ある使い方してればそれほどでもないけどさ。
0849デフォルトの名無しさん
2012/01/30(月) 15:44:59.140850デフォルトの名無しさん
2012/01/30(月) 18:13:36.43極端な例だけどJFrameとかは委譲しないよね(これは型の問題もあるけど
ただ単に委譲するメソッドの割合が多いと実装継承使いたくなる
差分が1つのメソッドとか
0851デフォルトの名無しさん
2012/01/30(月) 18:48:59.22ネームスペースで問題(同じ名前で同じ型の同じ数の引数のあるメソッドとか)は、
コンパイル時にエラーとしてわざと検出してもらえるようにしてある。
問題のある箇所は自力で解決している。
0852デフォルトの名無しさん
2012/01/30(月) 21:29:31.68JFrameを継承しなきゃならん時なんてまずないだろ。
コンポーネントがコンポーネントを直に持つクラスってよく見るが、
アレは無駄だ。
コンポーネントの外でデコレートしてやりゃ十分。
0853デフォルトの名無しさん
2012/01/31(火) 02:47:14.10ここらへんは粒度とかコード量に依存してる気がする
外からデコレートで煩雑になると考えたら、
そのコンポーネントで囲っちゃうな
0854デフォルトの名無しさん
2012/01/31(火) 07:16:25.37継承委譲の話からはそれちゃうけど、JFrameを継承した独自のクラスを作るのは無駄ってことか
確かにそうかも
JFrameを継承しているクラスに専用のメソッド用意したら、それこそ変な実装継承になっちゃうか
0855デフォルトの名無しさん
2012/01/31(火) 07:22:16.55MVCでModelとViewの関係をObserverパターンで関連付けるというメリットも書き方もわかるけど、現実的にどう適用してるのかを見てみたい
EclipseはSWTだし、大きくてどこ読めばいいかさっぱりだった
0856デフォルトの名無しさん
2012/01/31(火) 08:17:09.90swingでまともなMVCは難しいよ。
VCなスタイルになる。何故かコントローラーの
Actionがモデルが持つべき機能を持ってるしね。
0857デフォルトの名無しさん
2012/01/31(火) 09:49:31.21連想型のコンテナをラップしたサブジェクトクラスを監視してるオブザーバークラスがあってそのオブザーバーはサブジェクトの更新時にコンテナの増分を知りたいという状況なんだけど
コンテナのコピーをとって毎回差分を計算してたら遅すぎるから増分を直接通知する通知関数をつくろうかと思ったんだけど
オブザーバーパターンの本来の利点の一つであるサブジェクトの設計がオブザーバーの設計に影響されないっていうのに反してる気がして悩んでる
言い直すと、オブザーバーがどんな情報を要求しているかサブジェクトが知らなければならない、というのが良くないんじゃないかなと感じるんだけど、どう思う?
0858デフォルトの名無しさん
2012/01/31(火) 12:28:22.32ActionListenerを実装した専用のクラスを作ってそれをviewにaddActionListenerさせればVとC別れるってことにはならないのかな
Viewが持っているControllerのactionが持つべき機能って何?
0859デフォルトの名無しさん
2012/01/31(火) 12:35:26.97現実的にはこういうときMVCに限界を感じる
だからMVCがダメという訳ではなく状況に応じてMVCから脱線することも必要だと思う
通知関数を増やさない方法としては、Modelがupdateするときにどの情報が更新されたかを知らせるプラグを渡すという方法もあるけど、フラグ管理は格好悪い
この2つ以外に方法あるのかな
0860デフォルトの名無しさん
2012/01/31(火) 13:04:04.641つ増加する度に通知すればいいだけだと思うけどそれじゃだめなんけ。
あと、監視側は別に監視対象に依存してもいいでしょ。
イベント情報から監視対象を参照しなければいいだけ。
監視対象が監視側に依存するのは論外だけど。
0861デフォルトの名無しさん
2012/01/31(火) 13:05:45.06ごめん。VCって書いたのはMが消えるって意味。
VとCが癒着するって事じゃないよ。
0862デフォルトの名無しさん
2012/01/31(火) 15:27:36.82「ひとつ増加するたびにその差分を通知してほしい」という欲求はオブザーバー側から来るものでしょ
これに応えるてしまうとサブジェクトのオブザーバーへの依存が切り捨てられないことになる
しかし依存は切れなくなるがパフォーマンスは改善する
というジレンマの話をしているの
0863デフォルトの名無しさん
2012/01/31(火) 17:50:24.81Mが消えるということはないような
どういう状況を言ってる?
Mの処理をCに書いちゃうということかな
0864デフォルトの名無しさん
2012/01/31(火) 21:58:35.69CがMを兼ねるってとこかな。
クラス的に同一というだけだから、
Actionクラスの子をモデルの生贄にして、
他のリスナーからActionを弄るという方法で
オブジェクト的に分離できるっちゃ出来るけど。
0865デフォルトの名無しさん
2012/01/31(火) 21:59:06.75>>861は、MのロジックがCに集められて、Mがドメインモデル貧血症をおこし、ただのCのValue objectになっていると言いたいのかなと思った。
0866デフォルトの名無しさん
2012/01/31(火) 22:10:55.34Subjectからは、変更があった事だけを通知してもらい、observerから、値をpullするってのは?
subjectにそんなプロパティをもたせると、依存関係ができてしまうのて、別途専用のインターフェースを用意し、それを介するようにする。
このインターフェースの実体 = subjectとするか、subjectを参照する何かにするかは自由。
0867デフォルトの名無しさん
2012/01/31(火) 22:24:59.22コピーを取るという事は、subject自体どれが変更されたか認識していなくて、変更前後を確認する必要があるということ?
0868デフォルトの名無しさん
2012/02/01(水) 01:20:19.21よーわからん。
0869デフォルトの名無しさん
2012/02/01(水) 06:22:32.02その分離がMVCかと思ってたんだけどSwing(Java?)以外ではどうやってOとCの分離を実現するの?
0870デフォルトの名無しさん
2012/02/01(水) 06:25:36.70それかと思ったけど、ドメインモデル貧血症はSwingに依存する話ではないから、また別の何かあるのかと思った
それとも他のに比べてSwingはドメインモデル貧血症を起こしやすい仕組みなのかな
0871デフォルトの名無しさん
2012/02/01(水) 08:26:04.04>OとCの分離を実現するの?
MとCのタイポ?
と仮定して、
分離せずModel-Viewになる。古くは、MicrosoftのMFCとか
ロジックをちゃんとMに置けば、この形式でも問題ないと思う。
ただ、表示のためにMのデータを整形する際、処理がVに入り込んでしまう。
Vの処理はイベントデリゲートを受けて、Mに丸投げしたいので、あまり嬉しくない。
妥当な妥協案は、変換(整形)用のみのクラスを間にはさむのがいいんじゃないかと考えてる。
例えば、Presentation ModelとかView Modelとかいわれるやつを組み込む。
0872デフォルトの名無しさん
2012/02/01(水) 08:38:54.14オブジェクト指向じゃないってことか?
オブジェクト指向ってのはあくまで手段
手段が目的になってないか?
0873デフォルトの名無しさん
2012/02/01(水) 12:38:00.73たいぽです
最初の話に戻るけどMFCとかは分離せずにMとVがくっつくというのはわかるけど、それならむしろSwingの方がMVCを実現しやすいような
分離するのがMVCなのかと思ってる
0874デフォルトの名無しさん
2012/02/01(水) 12:40:47.28setter,getter作ってそれで操作されたらフィールドの値好きに書き換えられちゃうのが嫌だ
自分の作ったクラスは一定のルールの元使って欲しい
そうじゃないとバグがあったとき、どのような操作でバグが引き起こされたのか把握しづらい
データ隠蔽は必要
0875デフォルトの名無しさん
2012/02/01(水) 12:43:52.17インタフェースだけで完結している単位が使いやすい。
0876デフォルトの名無しさん
2012/02/01(水) 13:14:18.71QtやActionScriptなら、適当に作ったモデルをViewに
紐付けできる仕組みがある。
Swingには同じ一貫した仕組みは無い。
document modelとかあるけど一部のviewにしか使えない。
0877デフォルトの名無しさん
2012/02/01(水) 18:06:28.17データ隠蔽とインターフェースは反する関係じゃないでしょ
データ隠蔽しない、更にクラスの使い方を強制しないってことは、Listインターフェースを継承したクラスでは配列へのアクセッサー用意してもらって、addメソッドやremoveメソッド無くせば満足なの?
0878デフォルトの名無しさん
2012/02/01(水) 18:22:11.97バインディングというやつかな
VからMの依存関係は別のファイルに書くんだっけ
あとわからないことがあるんだけどMVCで新しいViewを表示したい場合はCがnewしていいの?
CはM以外に依存してはいけないという理解なんだけど他に適当なところが見当たらない
0879デフォルトの名無しさん
2012/02/01(水) 18:24:17.10A→B→Cの順でメソッド呼んでね?的なのを防ぐには、状態別にオブジェクトを作るとかしないと無理ぽ。
0880デフォルトの名無しさん
2012/02/01(水) 19:32:02.72バインドは一つのコード内にかけるよ。
QtならQObject::connectつてな関数で紐付するだけ。
0881デフォルトの名無しさん
2012/02/01(水) 19:34:51.87viewとmodelでやるのは、本来の目的を
考えりゃあり得ないからね。
ちなみに本来の目的ってのは、ビジネスロジックの
隔離とかじゃないよ。
0882デフォルトの名無しさん
2012/02/01(水) 20:00:15.53関連付けをVやMでやるのはおかしいということですか?
現在はVやMを作るメインメソッド的なところで関連付けてます
ただこれだと新しく途中でViewをnewするときに困る
あらかじめ表示されるViewをすべてnewしておいて表示したいときに表示命令を出すようにすれば解決するけど、メモリが激しく無駄…
0883882
2012/02/01(水) 20:13:02.03CからPMとかVMとか呼ばれる物に指示するのが正しい気がしてきた
PMはCからViewを表示しろという指示を受ける PMはそれをViewに通知
0884デフォルトの名無しさん
2012/02/01(水) 20:27:07.42この図が本来の目的。この図を
考えればMとVとCを
どう分けるべきか大体わかると思う。
0885デフォルトの名無しさん
2012/02/01(水) 20:31:33.59MVCを集約管理するクラスへの弱参照をVやCが持ってそれに新しいV作ったから適切にBindしてちょって頼めばいいんじゃね?
0886デフォルトの名無しさん
2012/02/01(水) 20:36:41.64頭固すぎだろ
0887デフォルトの名無しさん
2012/02/01(水) 20:40:04.00CがVに依存して困る理由もないじゃん。
Vの実装に対する依存がいやなら、
CはVを抽象化して操作すりゃいい。
0888デフォルトの名無しさん
2012/02/01(水) 20:45:34.69それはもうみんな理解した上での議論
0889デフォルトの名無しさん
2012/02/01(水) 21:00:17.49それだけでそう分けるべきかわかってたら
MVCとかMVVMとかMPVとか乱立しねーよ(´・ω・`)
MとVVMとかVCは分離されてしかるべきだけどV-VM、V-Cは依存しててもそんな問題ないよね
0890デフォルトの名無しさん
2012/02/01(水) 21:09:38.20悪くないよ。もはやMVCと呼べるものではないだけ。
0891デフォルトの名無しさん
2012/02/01(水) 21:20:10.42ロジックが読みづらくなるかもだけど、遅延生成にしてみるとか?
Viewを直接インスタンス化するのではなくて、ViewのFactoryをインスタンス化して、初めて必要になった時にViewを作らせる。
0892デフォルトの名無しさん
2012/02/01(水) 21:22:09.66メモリもそうだけど動的にVIewの個数が変わるときも困るから
最初に全部用意ってのは選択肢としてないでしょ
0893デフォルトの名無しさん
2012/02/01(水) 21:25:07.52Androidの画面遷移みたいに、最新のn個を残しておいて、残りは適宜削除。
また必要になったら再生成。
0894デフォルトの名無しさん
2012/02/01(水) 21:26:51.32個数が変わる時は、なんらかの対策が必要だけど、依存性を最初に解決できるメリットはあると思うよ。
0895デフォルトの名無しさん
2012/02/01(水) 21:31:21.97Mがドメインモデル貧血症になると、それはただのValue objectとなり、CがMの役割となり、結果Model-View になるだけかなと、思ってる。
0896デフォルトの名無しさん
2012/02/01(水) 21:39:56.01その通りだけど、単純に思いつく方法より良い方法はないのかという話
0897デフォルトの名無しさん
2012/02/01(水) 21:54:17.64そのViewに関連して必要になるControllerも一緒に作る
この生成クラスにViewが監視すべきModelを渡す方法は少し考える必要がある
というのは1つの方法かな
このView生成クラスに、依存性の情報を管理させると考えると責務としてもしっくりくる
このViewとModelの依存関係というのは、アプリの1度の実行に依存するものだから、わざわざViewごとに生成クラスを分ける必要もない
ControllerがこのView生成クラスに直接依存するのが嫌だったら、何かインターフェースを用意してそれに依存すればいいのかな
インターフェースにはViewの生成機会単位のメソッドを用意
0898デフォルトの名無しさん
2012/02/01(水) 21:54:30.60そもそもviewをどの単位で言っているのか謎。
サムネイルリストのサムネイル一個一個をモデルに基づき
生成するのはViewの役目だし、サムネイルリスト画面を
生成するのはControlerの役割じゃん。
どっちよ。
0899デフォルトの名無しさん
2012/02/01(水) 22:02:25.08後者
気にしてなかったけど、前者は何も考えずViewでやってた
厳密にやるなら、サムネイル1個1個もControllerで作って、サムネイルリストの画面に引数で渡して上げたりした方がいいのかな
そうなるとボタンは・・・とか切りないな
0900デフォルトの名無しさん
2012/02/01(水) 22:09:30.09Model更新に基づく部分にControlerが介入しちゃいかんよ。
せいぜいサムネイルを生成するFactoryの交換ぐらい。
0901デフォルトの名無しさん
2012/02/01(水) 23:05:56.64IDEの支援は置いといてロジックとして何がMVCよりいいの?
0902デフォルトの名無しさん
2012/02/01(水) 23:09:50.98以前使った方法は、画面の状態遷移を管理するためのクラスを用意し、全てのControllerに持たせる(1ウインドウで中のページを切り替えてたので、Singletonだったかも)。
次の画面に関する識別子をこいつに渡して、次画面を取り出すようにしてた。
併せてナビゲーション管理も行わせて、前画面に戻るための仕掛けを用意してた(むしろこの機能がメイン)
0903デフォルトの名無しさん
2012/02/01(水) 23:22:00.55大抵の画面はコントローラーが頑張り過ぎる実装で十分だと思うぞ。
きちんとしたMVCは実装コストが高くつくし再利用できて画面にガシガシ
更新が反映されるモデルが見つかったなって思ったタイミングではじめて
実装をはじめればOK。
0904デフォルトの名無しさん
2012/02/01(水) 23:26:01.43こんな感じか?
//viewのシーケンス管理
Context context = new Context();
okeyButtonA.addActionListener(new NextControl(context, 1));
okeyButtonB.addActionListener(new NextControl(context, 2));
okeyButtonC.addActionListener(new NextControl(context, 3));
0905デフォルトの名無しさん
2012/02/01(水) 23:30:48.12基本的なモデルは1度作ったら延々と再利用出来るじゃん。
複雑なモデルはともかく、ただのテキストとか、
整数はMVCガンガン使った方が楽でしょ。
0906デフォルトの名無しさん
2012/02/01(水) 23:49:13.97MVVMはWPF(Windows Presentation Framework)を適用する際に、対象を分離することによるテスタビリティを良くするためものと思ってます。
再利用はあまり意識してなさそう。
MはUIと完全に切り離されてるので、xUnitで自動化しやすくなる。
Vは表示のみに特化されてるので、値が正しくバインドされるかどうかをテストするだけでよくなる(VMをMockにすれば自動化も容易?)
テストしづらい厄介なところをVMに集めてる。
ただVMはMVCのCの側面+PMの側面をもっているので、
C側面についてはハンドルしてるイベント処理から適切にMのメソッドが呼ばれるかどうかの確認。
PM側面は仕様どおりデータを整形してるかどうか確認。
共にMをモックにすれば、自動化できるかな?
0907デフォルトの名無しさん
2012/02/01(水) 23:54:09.57むしろ、モデルは一度作ったら変更しにくいから
しっかりと作らないといけないだけだろ
それでも、後で変更したくなる
0908デフォルトの名無しさん
2012/02/01(水) 23:57:47.49回答ありがと。
MVVMはQtやSmalltalkのようにIDE上でドラッグアンドドロップだけで、
M/V/Cに当たるものを繋ぎ合わせられたりする?
0909デフォルトの名無しさん
2012/02/01(水) 23:57:50.69もう少し泥臭く、Controllerにcontextだけ渡しておき、Controllerでイベントをハンドリングする処理の中で必要に応じてcontextに問い合わせ。
状態管理をもつService Locatorみたいなところかな
0910デフォルトの名無しさん
2012/02/02(木) 00:03:11.33stringモデルとか、intモデルとか、
代入と、読み出し、
リスナー登録ぐらいしか必要無いしそんな拘る所も無くね?
0911910
2012/02/02(木) 00:11:04.43読み出しインターフェイスだけ。
だからなおさらモデル設計が緩くてもそんなにこまんないよ。
0912デフォルトの名無しさん
2012/02/02(木) 00:13:16.17現実ではオブジェクトは二種類にわかれると思う。
一つは処理がメインの構造オブジェクト
もう一つは値として使う値オブジェクト
フレームワーク部分は構造だろう。こいつは
他から値をもらうけど、中で長期間保持したりしない。
いわばシングルトンオブジェクトでいいもの。
それに対して日付オブジェクトとかは、数値型と同じく値が主。
処理も持っているけど、基本は値。値の拡張版
データとして保存しシリアライズするかもしれないようなもの。
0913デフォルトの名無しさん
2012/02/02(木) 00:15:24.69部品単位と画面単位の話を分けて考えたほうがいいんじゃないのか。
単一の整数や文字列のモデルって単純な部品単位のモデルであって
画面単位の話じゃないよね。
0914デフォルトの名無しさん
2012/02/02(木) 00:16:50.05Controlerってそんなに再利用できる?
というか再利用してもそんなに幸せにならない気がする。
0915デフォルトの名無しさん
2012/02/02(木) 00:18:03.22IDE(Visual Studio)単体にはなかった気が
VにVMのプロパティを指定するところは、Expression Blendという、V構築ツールを使えば可能
IDEと統合されてたかどうかは不明。
VMの自動生成もなし。各々のフレームワーク作者が、用意しているっぽい
Mとのリンクもあったかな?
Visual Studioの世界では、まだまだ発展途上な感じ。
0916デフォルトの名無しさん
2012/02/02(木) 00:46:08.81>>904ぐらいの粒度にしとけばね
0917デフォルトの名無しさん
2012/02/02(木) 01:11:44.47画面単位は、部品のモデル差し直すぐらいしか
やる事ないから、あんまり重要視してないけど何かある?
個人的にはMVCは部品単位が一番効果を発揮すると思ってるけど。
3Dモデルを角度毎複数のviewに表示したり、
プログレスバーとラベルに同じ進捗表示したりさ。
0918デフォルトの名無しさん
2012/02/02(木) 06:18:46.82このときこのControllerがMとVに依存しているのは問題なさそう
ボタンが変わったとしても依存しているViewとModelの操作をするという責務は変わってない
0919デフォルトの名無しさん
2012/02/02(木) 06:39:59.79n番目のView
ModelからのViewへの変更通知に毎回VM(n)が挟まれる
ViewからのクリックはVM (n+1) が受け取りModelを操作するということかな
これって基本的にはMVPと同じ?
0920デフォルトの名無しさん
2012/02/02(木) 08:01:13.75戻ると進むとか、保存とか、ウィンドウを
全て閉じたら終了とか一般的なものは
大概再利用可能じゃないか
0921デフォルトの名無しさん
2012/02/02(木) 08:42:30.65その辺はそういった処理するのを関数とか小さいクラスのレベルで再利用するけれど、コントローラーはそれらを集約して使うだけでコントローラー自体の再利用とはちとちがくね?
0922デフォルトの名無しさん
2012/02/02(木) 12:59:12.44戻る、進むControllerなんて、コンストラクタで捕縛した、
Modelの戻るメソッド呼ぶだけだし。
戻るメソッドに合わせて多少のイベント変換はするけど
大した事はしないよ。
0923デフォルトの名無しさん
2012/02/02(木) 17:52:09.10どの単位で分ければいいの?
Modelは完全に独立して普通にパッケージを分ける
ControllerAクラスがViewAクラスを新たに表示するために依存しているとする
その1
a.controllerにControllerAクラス
a.ViewにViewAクラス
Bクラスも同様
その2
controller.aにControllerAクラス
view.aにViewAクラス
Bクラスも同様
その3
AクラスもBクラスもまとめて
controllerパッケージとviewパッケージに突っ込む
その4
ControllerクラスもViewクラスもまとめてaパッケージとbパッケージに突っ込む
0924デフォルトの名無しさん
2012/02/02(木) 18:55:07.83そこが問題じゃね?
0925デフォルトの名無しさん
2012/02/02(木) 19:36:08.92そもそも俺がそれを理解できてない
パッケージ設計の原則 - Strategic Choice
http://d.hatena.ne.jp/asakichy/20090130/1233317812
この原則見るとリリース単位と言われるけど、個人開発の場合リリースすることないしな
単純なグループ分けもしくは、パッケージプライベートを利用して公開するインターフェースを切るためとか?
パッケージプライベートを意識するなら>>923のその1が正しい気がする
Viewとかは全部パッケージプライベートにしておく
Viewに対するaddActionListenerメソッドだけはpublic
そしてこのaddActionListenerを利用して他のパッケージのControllerを登録する
0926デフォルトの名無しさん
2012/02/02(木) 20:58:21.34衝突回避のためだけに
長い名前を書かなくて済むようにするためのもんだからね。
名前が重複せず関連性の強いもんに分けるだけでいいでしょ。
Socketならudpパッケージとtcpパッケージにそれぞれ作るとか。
0927デフォルトの名無しさん
2012/02/02(木) 20:59:09.75モジュール単位で分けるのが好きなので、その4、をよく採用するかな?
0928デフォルトの名無しさん
2012/02/02(木) 22:42:14.52Text::View;
Number::Model;
Number::View;
一般的な名称を下位に置き、固有に近い名称を
上位に置く分け方が重複しづらく短縮もしやすくて合理的。
ただ名前空間の別名付けられないJavaだと使いづらい。
0929デフォルトの名無しさん
2012/02/08(水) 18:51:16.05・コンテナを一箇所にまとめて共有し、能力照会でインターフェースを取得する
どっちがいいとおもう?
どっちでやってもごちゃごちゃするんだけど
0930デフォルトの名無しさん
2012/02/08(水) 20:17:13.710931デフォルトの名無しさん
2012/02/08(水) 20:33:27.900932デフォルトの名無しさん
2012/02/08(水) 20:49:08.03英語で答えて差し上げなさい
0933デフォルトの名無しさん
2012/02/08(水) 21:08:07.89はじめて知った
0934デフォルトの名無しさん
2012/02/08(水) 22:41:27.191. スキルごとにコンテナを用意。魔法戦士なんかは魔法使いコンテナと戦士コンテナの両方に登録。
2. コンテナはひとつだけ用意。スキルを指定してキャラ集合を取得するインタフェースを用意。
のどっちがいいか? ってことじゃないか。
0935デフォルトの名無しさん
2012/02/08(水) 22:49:59.65Service Locator作りたいってことかえ?
後者が良くわからんが、一つのコンテナに全部詰め込むって意味なら、型安全な前者を選ぶ。
そうではなく、前者のコンテナにを束ねたファサードなら、依存性を一箇所で管理できるので、後者の方がいいんじゃないの?
0936デフォルトの名無しさん
2012/02/09(木) 06:18:50.24もう少し具体的な状況を説明してくれないとわからない
前者が良い場合も後者が良い場合もあると思う
0937デフォルトの名無しさん
2012/02/11(土) 16:50:41.42アブストラクトファクトリも1年掛かったが正確に理解した。
デザパタって、すぐにわかったような気にはなるのだが、いざとなると混乱する。
アブストラクトファクトリは相性が悪かった。
何度もわかった、と思うのだが、どうしても適用でない。
0938デフォルトの名無しさん
2012/02/11(土) 17:08:16.51あんなん普通にプログラムかいてれば自分で覚えるだろ
・あとあと楽なように
・とりあえずこの場を切り抜けたい
・移植したい
・速くしたい
・読みやすくしたい
みたいなさいろんな条件で書いた経験があればさ
言語によっても書きやすいパターン違うしさ。
・・・ファクトリとかうざいから
>>929
後者がいいに決まってんだろ。使う人の立場を考えようぜ
使う人は何がしたいかって言ったら、インターフェースを指定してその機能をもったオブジェクトのリストが取得したいんだろ?
中でどうやって実装してもいいけどさ
0939デフォルトの名無しさん
2012/02/11(土) 17:10:21.24プログラミングで大事なのは思いやりな。まあお前らみたいな冷たい心の持ち主には何年かかっても分からないだろうけどな
0940デフォルトの名無しさん
2012/02/11(土) 19:55:41.36えらそーなわりに、設計センスねーのな
責務過多になってるだけだろ。>>929は質問者が用意した選択肢の中にまどな答えがない、が答えだわ
0941929
2012/02/11(土) 21:10:52.36自分がやりたかったことは「要素の集合から特定の型(インターフェース)を持つ要素をリストアップ」したいってことです
例えば「ゲームワールドから衝突可能インターフェースを継承したものをリストアップ」したい、といった感じで
0942デフォルトの名無しさん
2012/02/11(土) 21:32:11.53ケースバイケースなんだな。ゲームみたいにパフォーマンスが必要な場合、かつ衝突可能かどうかっていうのはメインな要素じゃん
それなら拡張性無視でやるんだよ
ゲームでそういうやり方やっちゃうのは、最近の言語から入ったザコどもな
アセンブラレベルでどのくらいの処理になるのか分かっちゃいない
もう少し高度なアプリケーションの場合はそういうのもありだな
htmlのタグに関して、クリック可能だの、・・・可能だのそういう奴とかな。よく知らないけど
0943デフォルトの名無しさん
2012/02/11(土) 21:34:32.00いやさ、趣味プログラマで独りでしか開発したことないからさ
エラくないのよ。最近バイトでそういうのやるんだけどさ、内心びびってるのよ
こいつらどのくらい凄いだろうって。
実際書けないやつもいるんけどさ、俺と同じで小学校からみたいな奴も居てさ
ガクブルよ
0944デフォルトの名無しさん
2012/02/11(土) 21:43:51.21>・・・ファクトリとかうざいから
同感wwww
プログラミング暦30年の俺の経験上
ファクトリが必要と感じるのはイニシャライザのオーバーライドを前提とする場合だけ。
0945デフォルトの名無しさん
2012/02/11(土) 21:52:15.87とにかく必須でない趣味のファクトリはうざい。
0946デフォルトの名無しさん
2012/02/11(土) 21:58:17.190947デフォルトの名無しさん
2012/02/11(土) 22:04:32.13無駄な30年でしたね。。
0948デフォルトの名無しさん
2012/02/11(土) 22:08:26.11アブストラクトファクトリー今調べたけど名前負けする概念だな
俺の経験から
・コード量を減らす
・将来的なコードを変更量を減らす
このふたつを目指せばまあまあいいコードが書けるんじゃないかなって。自然と・・・ファクトリーみたいなことも思いつくはず
0949デフォルトの名無しさん
2012/02/11(土) 22:09:20.12っていうのをしか考えて無いな
0950デフォルトの名無しさん
2012/02/11(土) 22:14:53.46まあ他人の趣味に口を挟むのも野暮かもしれないが。
0951デフォルトの名無しさん
2012/02/11(土) 22:16:06.410952デフォルトの名無しさん
2012/02/11(土) 22:20:02.76秋田から別の話題にれっつごー
0953デフォルトの名無しさん
2012/02/11(土) 22:23:26.040954デフォルトの名無しさん
2012/02/11(土) 22:26:33.80borlandがすでに終了してるからだろ。
0955デフォルトの名無しさん
2012/02/11(土) 22:26:55.69廃れていく技術だから。
0956デフォルトの名無しさん
2012/02/11(土) 22:31:09.210957デフォルトの名無しさん
2012/02/11(土) 22:33:08.40C++って書きづらいじゃん。書きやすくてネイティブってDelphiしか無いんだよ
そういえば、C++って全部ヘッダーファイルに書くのが今風だよな?
いちいちソースとヘッダー行き来する面倒だし
0958デフォルトの名無しさん
2012/02/11(土) 22:36:58.54約20年前に使った事あるよ。ビジュアル開発環境として当時は画期的だった。これをM$がパクッタのがVisualBasicやVisualC++
開発の順序は
Delphi→C++Builder→JBuilder
でborlandは滅びてJBuilderも今はeclipseベースになってしまった。
0959デフォルトの名無しさん
2012/02/11(土) 22:38:58.79スレタイ読まないdelphi話はじめるような空気の嫁なさが空気を変えてるだけだ
0960デフォルトの名無しさん
2012/02/11(土) 22:45:03.99俺が生まれたらへんじゃねえかYO
delphi作った人がmicrosoftに行っちゃってC#作ったっていううわさだよな
>>959
そうだったな。じゃあ
俺流のデザパタ
・コード量を減らす
・将来的なコード変更量を減らす
について語ろうぜ
0961デフォルトの名無しさん
2012/02/11(土) 22:50:50.53後者の問題に気づかないようだと
話し相手として不足感が
0962デフォルトの名無しさん
2012/02/11(土) 22:52:35.68そもそも、デザパタの出自とか勉強不足すぎだな
その自己流<デザパタ>とやらは
デザインパターンを名乗る資格を全く満たしてない
0963デフォルトの名無しさん
2012/02/11(土) 22:53:30.25デザインパターンの効果としてこれは低いだろ。
全体の整合性が良くなって結果的に減る事はあっても
十分に整理されたプログラムならデザインパターンを用いなくても同等。
0964デフォルトの名無しさん
2012/02/11(土) 23:02:43.83メタ的にさ、デザインパターンを使うか使わないかって判断しないといけないときあるじゃん
上ででてたファクトリーを使うかどうかみたいな
そういうときにどっちのほうがコード量が減るか。とか
将来的にどういう変更が予想されるかそれぞれコード変更量はどの程度なのか
っていうのを考えると判断しやすいような気がしたんだよ
>>962
デザインパターンって調べたけど、プログラマ同士の共通語を用意してみたけどどうかな?
って程度のものなのな。みんな騒ぎすぎなんだな
0965デフォルトの名無しさん
2012/02/11(土) 23:25:19.32http://www.excite.com/ ってのはマジであるようだが…。
0966デフォルトの名無しさん
2012/02/11(土) 23:38:25.16このまま落とすのももったいないので、次スレ行きたいので、
テンプレ候補を選び出してもらえますか?
0967デフォルトの名無しさん
2012/02/11(土) 23:41:08.960968デフォルトの名無しさん
2012/02/11(土) 23:45:02.22AbstractFactoryはStrategyなどのポリモーフィズムを利用した拡張可能部分に関連性があるときは使いやすい
0969デフォルトの名無しさん
2012/02/11(土) 23:47:43.190970デフォルトの名無しさん
2012/02/12(日) 00:17:58.55Strategyというだけで話が通じる
いい時代になったな。
0971デフォルトの名無しさん
2012/02/12(日) 00:23:27.93ライブラリで使ってるのはいいけど
無理に入れたがるやつはマジ簡便
0972デフォルトの名無しさん
2012/02/12(日) 00:30:58.590973デフォルトの名無しさん
2012/02/12(日) 00:32:10.060974デフォルトの名無しさん
2012/02/12(日) 00:39:01.31そういうのはマ板でやってくれ
0975デフォルトの名無しさん
2012/02/12(日) 00:46:55.04仕様書にそこまで書く奴がアホ
0976デフォルトの名無しさん
2012/02/12(日) 00:49:37.36元は仕様書にある概念をそのままソースに落とすために
わかりやすいまとまりになんらかの名前が必要だから作ったものだというのに
自分のオナニーの実現のためにクラスを作ってしまっている
仕様書に書いてあるとおりに作ろうとしない
無駄な仕事ばかり増やしてちっとも金にならない
それがデザパタ信者のやる仕事
0977デフォルトの名無しさん
2012/02/12(日) 00:51:45.99設計が下手くそだから駄目だしして貰ったんだろ
成長しないタイプだろお前
0978デフォルトの名無しさん
2012/02/12(日) 00:53:57.96お前みたいな道具の使い方もわからないオナニー野郎にうける説教なんてないね
バーカ
一生オナニーしてろ
0979デフォルトの名無しさん
2012/02/12(日) 00:54:19.43まぁそんな仕様書書いたりそれに基づいて作る仕事でなくてほんとよかったわ(´・ω・`)
0980デフォルトの名無しさん
2012/02/12(日) 00:55:37.11お前の作るもんは仕様書にないような構造が入ってて
仕様書にはないような機能がついてんだろ?
給料泥棒君w
0981デフォルトの名無しさん
2012/02/12(日) 00:56:11.30無駄な作業ご苦労さん。下手くそは設計まがいとか背伸びやめたらいいよ
俺の職場はそんな無駄もんは首切られてさよなら〜される
0982デフォルトの名無しさん
2012/02/12(日) 00:58:39.52わかんねーだろてめーみたいな未熟な腕じゃよ
本当のプロは無駄なクラスは一切作らない
0983デフォルトの名無しさん
2012/02/12(日) 01:00:13.99プログラムと一体一で対応する仕様書を書く大いなる無駄に気づけないレベルでかわいそう
0984デフォルトの名無しさん
2012/02/12(日) 01:02:24.95下手な設計をダメ出しされるのが
本当のプロなんだろ
察してやれよ
0985デフォルトの名無しさん
2012/02/12(日) 01:08:09.31俺等の仕事はてめーが思ってるほどクリエイティブな仕事ではない
汎用性云々はさほど重要ではなく仕様書とソースコードが一致していることのほうが100倍大事だ
まずな
実装技術ってのはそれほど価値がない
それは実装にかかる工数が設計や仕様の決定にかかる時間よりもはるかに短いからだ
つまり口では急げ急げというものの実際は全体の工程からすればクソみたいなもんなんだよ
そんなところにそんな崇高な概念なんて必要なわけねーだろw
お前はまず世の中の仕組みが見えていないだから本当に重点をおかなければならないことが見えてないんだ
開発だってただ上から投げられる仕事をこなしてるだけだろ?
だからデザパタなんかにハマっちゃうんだ
0986デフォルトの名無しさん
2012/02/12(日) 01:11:48.94> 汎用性云々はさほど重要ではなく仕様書とソースコードが一致していることのほうが100倍大事だ
この発想に問題を感じ取れな時点で程度が知れる
場違いだから巣にお帰り
0987デフォルトの名無しさん
2012/02/12(日) 01:14:58.97狭い世界に篭ってないで世界観広げた方がいーんでねーの
0988デフォルトの名無しさん
2012/02/12(日) 01:15:37.920989デフォルトの名無しさん
2012/02/12(日) 01:16:06.25ダッセーけど型の種類をレコードに持たせて判別するのが一番だと思うよ
データ操作専用のクラスを作ってそういうダッセー部分を外側から隠蔽するのも忘れるなよ
0990デフォルトの名無しさん
2012/02/12(日) 01:27:35.48それは汎用性を上げるコードをいれちゃった時点でもう
元の仕様とは一致してないよね?
単にお前の都合で仕様変更に対応できるソースにしたいってだけで
お前問題のすりかえを勝手に脳みそでしちゃうこと多くない?
0991デフォルトの名無しさん
2012/02/12(日) 01:27:45.89iteratorやな。だっせーwww
0992デフォルトの名無しさん
2012/02/12(日) 01:29:19.76大人数でやったときにすりあわないよな
次スレないと不完全燃焼やで
0993デフォルトの名無しさん
2012/02/12(日) 01:31:18.63上の方で無駄な作業うんたら言われてただろ
何指摘されてるか1から10まで言われない理解できない程頭こちんこんちんなのな
0994デフォルトの名無しさん
2012/02/12(日) 01:51:20.39俺は上の立場だけど、
ちゃんと仕様にデザインパターン含めるよ。
拡張する予定あるのに、拡張性を持たせないわけ無いだろう。
何か問題でもあるの?
0995デフォルトの名無しさん
2012/02/12(日) 01:54:14.57マ版な話題はマ版でやってもらうとして
ム版な観点で問題なくはないな
YAGNIに反するだろ?その時になってやればいい
0996デフォルトの名無しさん
2012/02/12(日) 01:56:19.36お前、YAGNIを拡大解釈してない?
YAGNIは必要ないものを実装しないってことで、
設計をしないということじゃないんだよ。
機能そのものは設計しないかもしれないけれど、
その機能を追加できるような設計はしておくのが普通。
その上で必要になるまで実装しないのがYAGNIだ
0997デフォルトの名無しさん
2012/02/12(日) 01:58:24.87その拡張の予定、というのが結局は未定に過ぎないってことが本質だから
拡張が決まってからで問題ない
0998デフォルトの名無しさん
2012/02/12(日) 01:58:37.87http://toro.2ch.net/test/read.cgi/tech/1328979487/
0999デフォルトの名無しさん
2012/02/12(日) 01:58:49.891000デフォルトの名無しさん
2012/02/12(日) 01:59:28.13全てに対して有効な戦略はないっていう
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。