X



オブジェクト指向システムの設計 173 [無断転載禁止]©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
垢版 |
2017/08/08(火) 17:52:14.38ID:4Kd2O+xB
前スレ
オブジェクト指向システムの設計 172
http://mevius.2ch.net/test/read.cgi/tech/1467992113

類似スレ
手続き型システムの設計 1
http://mevius.2ch.net/test/read.cgi/tech/1500282714
2017/09/24(日) 21:34:19.75ID:6WCXGFDs
お前ら暇そうだな
2017/09/24(日) 21:45:55.89ID:/PuckvVk
テキストエディタとか
操作毎にスナップショット撮るわけにもいかんだろ

オペレーション毎に逆捜査も実装しとんの?
それともうまいこと変更箇所だけ前後を記憶してるのか
2017/09/24(日) 22:31:02.79ID:5g9dg2+V
>>918
頭の中でシュミレーションできる演繹な人なら
逆の作用を実装しなきゃいけないこと、
作用にかかわる環境、DB等も含め保存しとかないと再現できないこと、
が想定できるからcommandのようなものでなく状態の方を保持した方が楽とわかる

数学の公式を暗記する人と、自分で導いたり証明できる人との差だな
そしてわかってる人に説明するときピタゴラスの定理とかいえばいちいち証明せずに簡潔に伝わる
これが共通認識

デザインパターンは演繹と経験の帰納からによるベストプラクティスでもあるが、どこにでも使いたがるゴールデンハンマーアンチパターンもある
お前のように暗記するだけの奴は陥りがち
2017/09/24(日) 22:37:03.69ID:sQZN3/qk
ID:R8lp94JX

パターン暗記人間を馬鹿にしてるのに
自分がパターン暗記のワンパターン人間だったパターン

結局、ただの同族嫌悪パターンだったんだね
2017/09/24(日) 22:43:55.92ID:R8lp94JX
>>954
> 逆の作用を実装しなきゃいけないこと
お前らは本格的に馬鹿だな
2017/09/24(日) 22:55:31.56ID:L7/sMAP/
>>944
それがファイルのリストを編集するんよ
順番を入れ替えたり、属性くわえたり、あれやこれや
例えば順番入れ替えるのに挿入位置と元の位置をインデックスで覚えておくとすると
ファイル一覧が更新されたとき差異が有ったらインデックスがズレるから修正するとかね
(もっとほかの方法もあるけど、単純にインデックスで覚えておくとそうなる、という例え話)
もしくはファイルが消えたと思ったら、ゴミ箱から復活してきたりしたときに
ちゃんと元の編集情報を引き継げるのかとか
そういうのがUndo、Redo全般にまで絡んできてややこしいよね、って話
2017/09/24(日) 23:09:35.85ID:L7/sMAP/
まぁ何か操作されるたびに状態全部丸ごと保存しておくような
アホみたいな実装でもメモリが圧迫しないほど
対象物が小さければ、それが一番簡単だわな
ただ実際には問題になるケースがあるから
逆操作どうのこうのになるんだが
逆操作が面倒なら、操作のうち30回に一回ほど完璧なスナップショットを取って
それ以外は順方向の差分にしておく方法もあるな
巻き戻すときは近場のスナップショットから順方向に差分を展開して求める
動画のキーフレームと差分フレームみたいなものだな
逆操作が要らなくなるから、かなりの負担軽減になるのと
スナップショットの頻度でメモリ使用量のチューニングが効くな
2017/09/24(日) 23:16:13.53ID:L7/sMAP/
業務アプリではUndo、Redoを実装してくれって要望はあまりないんだろうな
大体は何かのエディタとかで必要になる機能だからなぁ
そんな印象を受けた
2017/09/24(日) 23:18:28.72ID:R8lp94JX
>>958
> まぁ何か操作されるたびに状態全部丸ごと保存しておくような
お前も相当にアホだな。デザパタ厨なんてこんなもんのようだが。
つか、レス読めよマジで。
2017/09/24(日) 23:34:49.79ID:dIaNhcU3
結局のところコマンドパターンを使えばいいんでしょう?
2017/09/24(日) 23:38:10.28ID:gFeQddMX
>>957
もういいよ
どうみても要件がおかしいとしか思えんし
2017/09/24(日) 23:39:49.07ID:R8lp94JX
ちなみに俺のレスが読めないとしても、俺以外のレスにも正解はあるんだから、
読み取れないのはお前らがどれが正解か分からないってことだぞ。

undo/redoなんて標準機能なんだし、考えたことはあってしかるべきで、
疑問を持っていた>>933はこの機会を逃さず尋ね、>>953までは進んだ。これは正しい進歩だ。
それに比べてデザパタ厨は何も考えてきて無いからこの有様。
「もっと上」を追求し続ける職人気質は必要だし、無いと上達はしない。
これは>>933にはあった。デザパタ厨にはない。
2017/09/24(日) 23:42:39.61ID:dIaNhcU3
スナップショットと言ってもオブジェクトの全ての
情報を保存しておかなければいけないとは限らない。
一部だけで良い場合もある。

じゃあこのスナップショットを設計するには
どのようなクラスやメソッドが必要だろうか?

少し時間をあげるから考えてみると良い
2017/09/24(日) 23:43:38.74ID:dIaNhcU3
>>963
あんたは重要なことをやってない。
undo/redoを行うとは言っているが、
その時に必要なメソッドはどんなものか?
を提示していない。
2017/09/24(日) 23:48:53.18ID:R8lp94JX
>>965
> その時に必要なメソッドはどんなものか?
お前も相当な馬鹿だな。
2017/09/24(日) 23:59:11.94ID:dIaNhcU3
>>966
設計というのはそういうものだぞ?
アルゴリズムじゃないんだから、
クラスがあってどんなメソッドが必要かっていうのを
提示しなければいけない

例えばソート関数はアルゴリズムでこれ単体では設計ではないが、
そのソートアルゴリズムを切り替え可能な汎用的な
コレクションクラスのようなものは設計となる
2017/09/24(日) 23:59:55.88ID:R8lp94JX
>>949
結局俺の疑問>>951には答えてくれないのか?

まあそちらは分かっているとは思うが、
コマンドパターンをその名の通り、「コマンドにオブジェクトを与える」とするなら、
殆どの場合で関数ポインタを直接差し込む必要はない。
通常はキーを与え内部でハッシュ等から関数ポインタを呼ぶ。

ただ、Javaでは関数ポインタが取れないから、そもそもこの「関数ポインタ引き用ハッシュ」を作れない。(はず)
だからJavaでコマンドパターンを記述すると無理に継承が行われ、説明が余計に意味不明になる。
それが俺が基本的に説明のコード部分を無視している理由。Javaには構造を正しく記述する能力がない。
ただPythonでもそうなのなら、関数ポインタを差し込むのが定義なのかもしれんが。
2017/09/25(月) 00:29:03.77ID:8cq/CpUk
>>968
コマンドオブジェクト内のメソッドのことを関数ポインタと呼んでるんなら
コマンド内には関数ポインタは必須だよ(間接的に呼び出すのでも別に構わないけど)

コマンドを実行する側が、コマンドの内部実装を気にする必要がなく
executeメソッドやundoメソッドみたいに共通の呼び出しで
各コマンドを処理できることに意味がある

Javaも8からラムダ使えるから単なる関数の実行だけなら
インターフェースや継承使わなくても関数ポインタ的なものを
実行側のリストに直接追加するなりハッシュ作って追加するなりできるよ
2017/09/25(月) 00:36:24.94ID:8cq/CpUk
undo/redoの仕組みは
- 操作を記録する方法
- 状態を記録する方法
- 状態の差分を記録する方法
のどれかかその組み合わせ

コマンドパターンでのundoは操作を記録して逆操作をする
メメントパターンでのundoは状態を記録
それぞれ良し悪しあるから状況にあったのを選べばいい

何を記録するか以外に
サポートするundoの機能によって記録するデータ構造が変わる
stackとかtreeとか
2017/09/25(月) 00:51:45.61ID:N+1HPlkM
スナップショットってどうやって実現すればいいの?
undo/redoってどうやって実現すればいいの?

その答がデザインパターンなんだな
2017/09/25(月) 00:53:39.30ID:3XblncDf
>>969
> コマンドオブジェクト内のメソッドのことを関数ポインタと呼んでるんなら
> コマンド内には関数ポインタは必須だよ(間接的に呼び出すのでも別に構わないけど)
ああ、この認識でいい。
Java7まではメンバポインタを関数ポインタ代わりとみなし、差し込んで上位からメソッド呼び出ししかなかったろ。

そこで疑問だが、ここで関数ポインタ直接差込のメリットあるか?
俺だったらハッシュをクロージャで捕捉して、
「この呼び出し機構から呼べるのはこのハッシュ内関数のみ」として制限する。
この方がソース上で一覧も見やすくなるし。
直接差込だと何でも実行可能になり、どうしてもバラけるし、
(俺はあまり気にしないが)変な物を差し込まれてないかのテスト等がしにくい。
パターン作った連中はここら辺の事情は分かっているはずで、ちょっと不自然さを感じるんだが。
2017/09/25(月) 00:55:43.76ID:N+1HPlkM
メンバポインタってなんだ?
2017/09/25(月) 00:57:17.48ID:N+1HPlkM
C言語には関数ポインタは有るけど、
その関数ポインタは名前の通り関数へのポインタであって
データへのポインタは含まないんだよな
だから関数とデータで別々に扱わないといけない
2017/09/25(月) 00:57:27.34ID:3XblncDf
>>972訂正
× メンバポインタ
○ メンバ関数ポインタ
まあ分かる範囲だろ。
2017/09/25(月) 00:58:44.83ID:N+1HPlkM
>>972
> パターン作った連中はここら辺の事情は分かっているはずで、ちょっと不自然さを感じるんだが。

パターンは実装ではないので、
あるパターンに対して幾つもの実装がある
言語が変われば実装は異なる

だから君みたいに実装のことなんて考えてないんだよ
あくまで設計だから一つ上の層から物事を考えてる
2017/09/25(月) 00:59:09.44ID:N+1HPlkM
>>975
メンバ関数ポインタって何?
Javaに関数ポインタなんて無いんだが
2017/09/25(月) 03:20:37.55ID:eX6e3GbI
みんな話が通じてるかのように会話してるけど俺にはさっぱりだ
ロジックを無理に日本語にせずJavaかC++の疑似コードかなんかで書いてくれた方が誤解なく伝わるぞ
2017/09/25(月) 03:21:41.82ID:/NZHFTqW
しったかの応酬
2017/09/25(月) 05:13:23.75ID:2SJhli4d
>>956
理由を挙げることができないのは馬鹿だからですか?
小学生とかよくそうだよね
2017/09/25(月) 22:28:14.08ID:DU69B7yE
デザパタって何?
2017/09/25(月) 22:34:32.01ID:AtwfXPhb
なんだろう?
2017/09/25(月) 23:07:47.29ID:N+1HPlkM
>>981
> デザパタって何?
デザインパターンのこと
設計のパターン

例えばソートでもアルゴリズムによって
バブルソートなどという名前がついているように、

デザパタでもパターンに名前をつけてる。
もし名前がなくて「undo/redoを実現するやり方」という言い方をしたら
どうやってやるのか?っていうのを他の人と知識の共有ができないし、
逆にどうやってやるのか?を「オブジェクトをリストの形でもって
それぞれが変更内容の情報を持っていて、その変更内容を逆方向に
適用することでundo、順方向に適用することでredoを実現する」という
言い方をしたら冗長な上に正確ではないし、undo/redo以外にも使えるってことが
わからないし、まあ何も良いことがないだろ?

名前をつけることで、デザパタの知識を持っている人の間で
知識を共有できるわけよ。

その知識のカタログがデザインパターン
2017/09/25(月) 23:20:57.87ID:5HagYgjy
哲学
2017/09/25(月) 23:30:01.68ID:3XblncDf
>>981
ゴミ。
結局デザパタ厨は誰もundoすらまともに実装出来なかったろ。推して知るべし。
2017/09/25(月) 23:36:45.43ID:N+1HPlkM
いや・・・クイックソートという名前を出してる人に
クイックソートを実装してみろって意味不明だろ。
2017/09/25(月) 23:40:43.21ID:3XblncDf
ID:3Bk8qYPA == ID:N+1HPlkM
2017/09/25(月) 23:42:00.75ID:N+1HPlkM
>>978
外れw
2017/09/26(火) 00:05:37.02ID:3DlL6rrx
物凄く残念な人が住み着いたから
しばらくはこのスレもお休みだな
2017/09/26(火) 00:43:54.35ID:wPSfJS/Y
俺は最初から居たから、その理論ならデザパタ厨がコミだということになる。

無理に布教しようとするからおかしな事になる。
仮にデザパタ厨がundo如きピシッと実装出来ていれば、自然と布教出来ただろうに。
この有様では訴求力なんて皆無だろ。
2017/09/26(火) 00:47:18.92ID:Yx2E7i/E
>>990
反デザパタのお前に訴求力があればその台詞も格好ついたんだろうけどなあ
2017/09/26(火) 01:04:27.60ID:w3seKs+r
次スレ立てろ
2017/09/26(火) 01:10:41.31ID:wPSfJS/Y
>>991
俺は「反デザパタ」ではなく、「デザパタは役に立たん」と言っているだけ。
ソースはデザパタ厨の実力。
2017/09/26(火) 01:34:04.11ID:SmezMtDi
ID:3XblncDf=ID:R8lp94JX=「構造体」を適宜「オブジェクト」に読み替え関数ポインタ/関数オブジェクト「ラッパ」パターン君

ゴミw
2017/09/26(火) 01:35:14.08ID:SmezMtDi
デザパタは必要

ソースは
「構造体」を適宜「オブジェクト」に読み替え関数ポインタ/関数オブジェクト「ラッパ」パターン

これ読んだだけでわかる
2017/09/26(火) 02:46:47.83ID:LgPIDr44
デザパタ、デザパタうっせーよ
デザインパターンな
2017/09/26(火) 03:18:16.89ID:shxtGnUG
デザパタ
2017/09/26(火) 03:21:34.51ID:shxtGnUG
ザパタデ
2017/09/26(火) 03:22:11.12ID:1aSY2upq
>>996
目立ちたがりやさん
2017/09/26(火) 03:22:32.56ID:shxtGnUG
パタデザ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 48日 9時間 30分 18秒
10021002
垢版 |
Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/

▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況