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

レス数が950を超えています。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/23(土) 23:33:54.47ID:PFKg/P6i
>>861
良いSmalltalkerと悪いSmalltalkerがいて
このスレには後者が住んでるから

ケント・ベック、ウォード・カニンガム、エリック・エヴァンス、ラルフ・ジョンソンらは
Smalltalkを垣根を越えてこの世界に影響を与えた人達
日本だと羽生田さんとか

悪いSmalltalkerはSmalltalkの世界観に閉じこもって現実を見ない
技術力が無いから他に生かせないというのもある
2017/09/23(土) 23:42:38.26ID:Z1NsXN0c
>>862
C++のテンプレートなら、
継承関係ないクラスの同じ名前のメソッドを呼び出し側は共通に使えるんだよ。
静的ダックタイピングと言えば分かるか?
Javaはこれが出来ないから継承ありきになるだけであって。

> >ほぼ全ての場合に左側の用語が使われ
> その確信の根拠はどこから来てるの?
だって見たことないし。
ネットでも継承/委譲議論は見かけるが、わざわざデザパタ用語使ってる奴はいないだろ。
余計に分かりにくくなるだけだし。
元々>>703の質問がこれだが、君はリアルで使っているのか?

> 多態はデザパタとは別の概念で
> イコールで使われるようなものじゃないだろ
多態自体が本来はパターン(多態パターン)で、これはオブザーバー/ファクトリー/フライウエイト等と並べられるだろ。
継承/委譲は多態の実装方法であって、それらの組み合わせで○○パターンとか無駄に水増しするからデザパタはダメなんだよ。
2017/09/23(土) 23:49:02.66ID:Z0Kw+Iw9
やはり長文はアホ
また証明されてしまったね
2017/09/23(土) 23:57:20.81ID:zdCb7/9/
そりゃまとめる力がないからな
2017/09/24(日) 00:10:40.58ID:rk9buIU7
まず自分の考えが正しいというのが第一にあって、そこに無理矢理デザパタの思想を当てはめようとするから、
なに言ってんだこいつ、みたいになる
誰だよお前、お前が考えてることなんて知らねえよ、お前の考え基準で説明されてもわかんねえよハゲっていう
2017/09/24(日) 00:34:29.86ID:d6JjhuPW
ハゲじゃねーよ!
2017/09/24(日) 00:35:18.57ID:UM3Vm/oL
薄いだけだもんな
2017/09/24(日) 01:09:02.05ID:ZoycLPfe
>>866
>余計に分かりにくくなるだけだし
オレオレ用語の方が分かりにくいと思うが

長文の応酬だるいから
>>820
に戻ってひとつだけ言うと

>構造体渡し=コマンドパターン
こんなのこのスレで初めて見たぞ

同じようなこと言ってる
人でも本でもサイトでもいいけどいるの?

なんか用語や概念が自分勝手すぎて
議論が噛み合わない


>>869
>お前の考え基準で説明されてもわかんねえよ
だよな

「お前の中ではそうなんだろうな」としか思えないよな
873デフォルトの名無しさん
垢版 |
2017/09/24(日) 01:11:16.00ID:3BjqQEbI
まあまあ落ち着けよ、ハゲ同士で喧嘩すんなって
2017/09/24(日) 01:34:59.31ID:R8lp94JX
>>872
それは既に書いただろ。日常的過ぎて言及されないが、あえて言うならそうだと。
Cでは(というか他言語も一般的にそうだが)引数が増え過ぎたら構造体にして見た目単純化するんだよ。
こんなのパターン(キリッされても困るわ。

それに文句言うのなら、ネット上でデザパタ用語使って制御構造議論してる奴探してこいよ。
俺は見たことないぞマジで。

ただまあ、平行線なら平行線でいいよ。
君は君の意思でデザパタを学び続ければいいだけだし、俺が同意する必要すらない。
2017/09/24(日) 01:51:31.62ID:d6JjhuPW
なんてことはない >>820
右がパターン(やりたいこと)で
左がその実装方法(の一つ)ってだけ
2017/09/24(日) 01:53:02.97ID:d6JjhuPW
例えば、

if = 条件分岐制御
for = ループ処理

みたいなことだよ。
2017/09/24(日) 01:53:22.66ID:uS0xIQvj
>>874
>Cでは(というか他言語も一般的にそうだが)引数が増え過ぎたら構造体にして見た目単純化するんだよ。

それコマンドパターンと全く何の関係もないから
みんなツッコんでんだろ
2017/09/24(日) 01:54:33.21ID:uS0xIQvj
>>875
え? え?
2017/09/24(日) 01:57:08.64ID:d6JjhuPW
もちろん>>820で書いている左の実装方法は劣化版。
右にで書いてあるパターンは、もっと多くの要求に対して
スマートな解決策を示しているが、

>>820左の実装方法はパターンで要求しているものの
一部部分しか満たせていない。

もちろん実際にはそれほどの要求は求められていないことが多く
左の実装方法で実現できるある程度のことで十分であることも多い

だけど、所詮左に書いてあるのはパターンの
簡易な実装でしか無い
2017/09/24(日) 02:02:05.28ID:d6JjhuPW
例えば

グローバル=シングルトン
というのは

まず>>820の盛大な勘違いを訂正しておくが、世の中で悪と言われているのは
グローバル「変数」であってグローバル「関数」やグローバル「オブジェクト」ではないということ

グローバル変数のどこがダメかというと、どこからでも
その変数に好きな値を入れてしまえるということ
(変数の型にあったものしか入れられないという制約は有るものの)

グローバル関数はそもそも値を入れるものではないし、
グローバルオブジェクトはpublic変数なんてものは当然禁止で
関数経由で代入するので自由な値は入れられない。

そういった制限ができない時点でグローバル変数では
シングルトンの代替にはならないが、
小規模プログラムで、気をつけて使えばシングルトンの
代わりにならないことはないという点で
かろうじてグローバルでも実装可能
2017/09/24(日) 02:07:55.77ID:d6JjhuPW
> 構造体渡し=コマンドパターン(ただしこれはCでは日常的過ぎてパターンだとも認識されてない)
「構造体渡し」というのが(実装レベルの)パターンの名前だよ

構造体があるのは一部の言語で、通常はクラスのインスタンス(=オブジェクト)渡しということになる。
要するに引き数をオブジェクトにするということ。

つまり引き数が多いから、コマンドパターンを使いましょう。
=引き数をオブジェクトにして実装するということですね!

ということで、パターンがやりたいことで
実装方法がオブジェクトだったり構造体だったりするということ

構造体渡しというのはあくまでオブジェクトがないC言語での実装方法であって
反対に構造体がない言語ではオブジェクト渡しとなる。

その2つを抽象化したものがコマンドパターン。
例えば言語が決定してない時点で構造体渡しを使いましょうなんて言えないじゃないか
構造街があるかないかわからんのだから

だから設計時点での言い方として「構造体渡しという実装方法の名前」ではなく
「コマンドパターンという名前」を用いる
2017/09/24(日) 02:15:14.31ID:d6JjhuPW
> ラッパ=アダプターパターン(だと思う)

これは>>820の勘違いがよく分かる例だな

アダプタパターンというのは、
電源アダプタと同じく、どんな電気機器でも
アダプタを使えばコンセントにさせるということで、
互換性がないものを、ある共通のインターフェースに
適合できるように変換するもののことを指す。

だからラッパという手段を用いることで
アダプタパターンを実装できるが、

だがラッパというのは別にある共通のインターフェースに
適合させる必要はない

あるライブラリがC言語用のAPIしか備えておらず
オブジェクト指向的には使いづらいから、APIのラッパを
作ってオブジェクト指向風に使えるようにするなんてのもある。

これはラッパは必ずしもアダプタパターンが要求している、
ある共通のインターフェースに適合させるなんてことはしていないが、
ラッパを使ってもできる場合があるということでやっぱり実装方法の話題なのさ
2017/09/24(日) 02:25:31.82ID:ZoycLPfe
>>881
>つまり引き数が多いから、コマンドパターンを使いましょう
眠いから要点だけ言うが
引数を圧縮したいだけなら配列渡しでもいい場合があるよな
逆にコマンドパターンは引数がひとつでも使う場合もある

コマンドパターンはもっと汎用的な抽象化技法で
要求をオブジェクトにすることで
アンドゥの挙動が実現できたりする
2017/09/24(日) 02:28:03.87ID:uS0xIQvj
>>881
その説明コマンドパターンと何の関係ないよ
完全に勘違いしてるのでググって
2017/09/24(日) 02:32:19.28ID:d6JjhuPW
はい。ググって正しいことを証明します。

http://www.techscore.com/tech/DesignPattern/Command.html/

第22章ではCommandパターンを学びます。あるオブジェクトに対して要求を送るということは、
そのオブジェクトのメソッドを呼び出すことと同じです。
そして、メソッドにどのような引数を渡すか、ということによって要求の内容は表現されます。
さまざまな要求を送ろうとすると、引数の数や種類を増やさなければなりませんが、
それには限界があります。そこで要求自体をオブジェクトにしてしまい、
そのオブジェクトを引数に渡すようにします。それがCommandパターンです。
2017/09/24(日) 02:51:01.08ID:uS0xIQvj
>>885
その説明文自体が悪いし書いてるコードも理解してないだろ
これ見てざっくり理解して
http://python-3-patterns-idioms-test.readthedocs.io/en/latest/FunctionObjects.html#command-choosing-the-operation-at-runtime

それ理解したらundoが入ってる例を探すといい
タスクをキューに入れる場合なんかにもよく使われてる
2017/09/24(日) 05:14:10.07ID:5g9dg2+V
>>861
使えない人がいるから
2017/09/24(日) 07:10:11.71ID:8QRYtBFv
デザパタは現場で使ってない
2017/09/24(日) 08:08:05.85ID:Oc3oIVgi
相変わらず低レベルなやつほど長文で連投するねこのスレ
2017/09/24(日) 08:19:44.51ID:8QRYtBFv
ホントだよ
現場ではデザパタなんて使ってないっていうのに
2017/09/24(日) 09:46:34.11ID:asf3lmyK
>>889
自分が何を知っていて何を知っていないかにすら無自覚だから
知らないところを無意識に嘘や想像や見栄で補って膨らませて
フワフワの長文合戦になる

十分な知識かマナーがあれば、どちらかがあれば、こうはならない
2017/09/24(日) 09:52:22.19ID:L7/sMAP/
でも自分で思ってるコマンドパターンが明らかに間違ってて
もう恥ずかしくて出てこれないでしょ
構造体渡し=コマンドパターン とか初めて見たわ
2017/09/24(日) 10:06:43.49ID:R8lp94JX
>>880
君がグローバルの問題を全く理解してないことは分かった。
ただこれは君がグローバルを使ったことが無いことを意味しており、悪いことではない。

>>881
「構造体」を適宜「オブジェクト」に読み替えられないのはゆとりだけ

>>882
「ラッパ」で問題なく通じるのに特殊限定した「アダプターパターン」と言い換える意味はない。

>>886
・関数ポインタ/関数オブジェクト=コマンドパターン
やっぱデザパタ用語って死語じゃん
2017/09/24(日) 10:10:41.01ID:R8lp94JX
>>886、訂正
・関数ポインタ/関数オブジェクト/callback=コマンドパターン
> Design Patterns says that “Commands are an object-oriented replacement for callbacks.”
2017/09/24(日) 10:22:53.31ID:yvoGeauV
>>890
相撲の決まり手みたいなもので
当人は意識せずに作ってて後からこれは、て分類しているようなものだから
先にパターンありきではないし、パターンを理解していなければ作れないということはない

ただ設計時・作成時に、ここはこのパターンを使う、って明示できる場合には
そのパターン名をモジュールの名前につけることで
設計書の記述を省略できたり、後からコードを見た時に理解しやすくなるという利点がある
2017/09/24(日) 10:28:00.99ID:sQZN3/qk
>>895
正解

てかこんな基本のKも理解できずに
デザパタいらない、デザパタは死んだ、デザパタなんて学習しなくても俺天才(キッ
とか言ってる馬鹿どもは馬鹿なのか?馬鹿w
2017/09/24(日) 10:39:05.39ID:R8lp94JX
>>895
前半は同意だが、、、

> そのパターン名をモジュールの名前につけることで
> 設計書の記述を省略できたり、後からコードを見た時に理解しやすくなるという利点がある
ねーよ。StrategyMyModule とか恥ずかしすぎるし余計分かりにくいわ。
2017/09/24(日) 10:44:17.50ID:dIaNhcU3
>>893
> 君がグローバルの問題を全く理解してないことは分かった。
あんたがグローバルの問題を全く理解してないと言いたいのはわかった。
だが、あんたはその理由を全く言っていないw
2017/09/24(日) 10:45:29.83ID:dIaNhcU3
>>894
> ・関数ポインタ/関数オブジェクト/callback=コマンドパターン

だ、あらそれ、コマンドパターンというパターンを
関数ポインタ/関数オブジェクト/callbackで
実装しますって話だよね?
2017/09/24(日) 10:48:01.59ID:sQZN3/qk
>>897
で、お前は
OrizinaruTensaiHoge
とか付けるんだろ?

神だなw神馬鹿w
2017/09/24(日) 10:48:10.22ID:dIaNhcU3
undoを実装するにはどうしたら良いでしょうか?
正解 コマンドパターンを使います。



undoを実装するにはどうしたら良いでしょうか?
誤答 関数ポインタを使います。
え? 関数ポインタ?

関数オブジェクトも使います。
え? 関数オブジェクト?

コールバックも使います。
え?コールバック?

それらを使って実装します。
だからそれらを使ってどのように実装しますかって話なんですが? 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
2017/09/24(日) 10:49:08.03ID:rk9buIU7
>>897
StrategyMyModuleはないわww
2017/09/24(日) 11:09:57.56ID:sQZN3/qk
ID:R8lp94JX
ラッパでも吹いてろゴミゆとりwwwwwwwwwwwwwwwww
2017/09/24(日) 11:15:24.97ID:R8lp94JX
>>899
俺はデザパタ用語は死語だと言っているだけ。

>>901
> undoを実装するにはどうしたら良いでしょうか?
> 正解 コマンドパターンを使います。
undoに何が必要か全く考えずに、ググって見つけたコードがコマンドパターン(キリッだったんですね。
コピペプログラマ死ね
2017/09/24(日) 11:20:12.29ID:zoxaw5LC
>>893
構造体とオブジェクトの違いがわからない(理解しようとしない)クズ
2017/09/24(日) 11:56:26.32ID:dIaNhcU3
>>904
> undoに何が必要か全く考えずに、

え? よく知られた設計を使わずに
独自で考えるの?無駄じゃない?
だからデザインパターンがあるんでしょ
2017/09/24(日) 11:58:08.61ID:dIaNhcU3
>>904
> 俺はデザパタ用語は死語だと言っているだけ。
今普通に使われてる用語が死語だと言われましても・・・
2017/09/24(日) 12:10:37.74ID:rk9buIU7
>>904
なんとかパターン(キリッ

普通のプログラマがふっつーに語彙として使ってるパターン名を、お前はドヤ顔されてるように感じちゃうからイライラするんだな
勝手にイライラしてる人ってたまにいるけど、お前もそっちだったか
2017/09/24(日) 12:44:49.84ID:5g9dg2+V
これはヤバイ

901 デフォルトの名無しさん sage 2017/09/24(日) 10:48:10.22 ID:dIaNhcU3
undoを実装するにはどうしたら良いでしょうか?
正解 コマンドパターンを使います。
2017/09/24(日) 12:48:49.90ID:dIaNhcU3
そして理由を書かない
いつものパターン(笑)
2017/09/24(日) 12:49:33.29ID:sQZN3/qk
>>904
お前の名前は今日から
「構造体」を適宜「オブジェクト」に読み替え関数ポインタ/関数オブジェクト「ラッパ」パターン
君な
2017/09/24(日) 12:50:06.83ID:sQZN3/qk
>>910
それデザインパターンやん!
いつパタやん!
2017/09/24(日) 12:58:38.50ID:5g9dg2+V
>>910
undoっていったらmementだろ
やったことじゃなくて状態の方を覚えとくんだよ
2017/09/24(日) 12:58:45.83ID:R8lp94JX
>>907-908
とりあえずデザパタ言及以外でデザパタ用語が使われてる例探して来いよ

>>910
ggrks
2017/09/24(日) 13:03:51.26ID:Oc3oIVgi
>>910
またお前か
メメントも知らないカスが粋がるんじゃあない
2017/09/24(日) 13:04:36.29ID:rk9buIU7
>>914
GitHubでパターン名を検索するくらいの知恵もないのか
2017/09/24(日) 13:11:14.14ID:sQZN3/qk
>>914
「構造体」を適宜「オブジェクト」に読み替え関数ポインタ/関数オブジェクト「ラッパ」パターン君
自演パターンはよくないで
2017/09/24(日) 13:17:39.49ID:R8lp94JX
>>913
なるほど以下を見る限り、undoはmementoだな。
http://www.techscore.com/tech/DesignPattern/Memento.html/
とはいえ、デザパタに頼る=デザパタが無いと何も出来ないから、というのはよく分かった。
undoすらパターン提示されないと作れない程馬鹿なのね。

・スナップショット+正方向履歴=メメントパターン
mementoってパターンにする必要ないほどのゴミだろ。この程度でいちいち命名してたらきりがない。
2017/09/24(日) 13:20:45.50ID:rk9buIU7
>>913
> とはいえ、デザパタに頼る=デザパタが無いと何も出来ないから、というのはよく分かった。
> undoすらパターン提示されないと作れない程馬鹿なのね。

そうやって相手の程度を決めつけないと上に立てないほど自信がないのはよくわかった。

って言い返されたいパターン?
2017/09/24(日) 13:21:21.52ID:Oc3oIVgi
マウントパターン
2017/09/24(日) 13:25:26.63ID:dIaNhcU3
>>918
> mementoってパターンにする必要ないほどのゴミだろ。この程度でいちいち命名してたらきりがない。

じゃあmementoって名前を使わずに
mementoの話をしてくださいな。
自分でmementoって言ってるくせになぁw
2017/09/24(日) 13:41:52.80ID:R8lp94JX
デザパタ派はアルゴリズムを考えることを全くせず、既存パターンからコピペすることは分かった。
この場合、パターンは手持ちのカードだから、無理にでも増やそうとするのも分かる。
実際、馬鹿にプログラムさせる場合はこの方が捗るかもしれん。この感覚は俺にはなかった。
2017/09/24(日) 13:49:00.51ID:L7/sMAP/
たしかに、引数が多いのをまとめるために構造体渡しにすることを
コマンドパターンとか言っちゃうオツムの人にとっては
デザインパターンは便利かもしれないね
2017/09/24(日) 13:52:17.29ID:L7/sMAP/
同時に、コマンドパターンを見て
引数が多いのをまとめるために構造体渡しにすることと同一だと
思ってしまうオツムのひとは
デザインパターンを学んでも理解できないわけだから
それ以前の知能が足りてないという意味で役に立たないだろうね
こういう人は本を読んでも、誰かに説明を受けても
理解できない、知識が吸収できない、抽象的なことが理解できない
わけだから、常に場当たり的に対応するしかないね
会話も成り立たないし
2017/09/24(日) 13:57:45.31ID:dIaNhcU3
>>922
> デザパタ派はアルゴリズムを考えることを全くせず、既存パターンからコピペすることは分かった。

いやそりゃそうだろw
設計はアルゴリズムじゃない。
アルゴリズムは処理だが、
設計は構造だ

お前全く分かってないじゃないかw
2017/09/24(日) 14:08:32.54ID:dIaNhcU3
アルゴリズムにも名前ついてるの知らないのかな?

コピペはしませーん。
他の人が作ったアルゴリズムのライブラリを
使うだけだからコピペじゃありませーんって
言うつもりなのだろうか?
2017/09/24(日) 14:31:19.48ID:R8lp94JX
>>926
旧来の貧民プログラマにとってundo実装の第一選択肢は「逆方向履歴」なんだよ。
これがダメな場合は「スナップショット+正方向履歴」になる。
君はこのことにすら気づけない程の馬鹿だ。
しかし、実際、後者のほうが圧倒的に簡単だから、馬鹿には後者を押し付けておけ、というのは合ってるんだよ。

俺はC出身だから「馬鹿はプログラミングするな」という感覚なのだが、
昨今は文系馬鹿もプログラミングする機会があるわけだし、デザパタ洗脳も現実解としてはありなのかもしれん。
出来ない奴に考えさせたら永久にループするからね。
JavaでOOPこそが正義と洗脳するのも似たようなもんだし。
2017/09/24(日) 14:34:09.72ID:dIaNhcU3
>>927
逆方向履歴パターンと
正方向履歴パターンですね?

新しいデザインパターンを考えて
名前をつけましたって言いたいの?
2017/09/24(日) 14:47:05.63ID:99mn0O+v
>>924
いつもの自分の狭い知識でなんとか理解したつもりになろうとして
「だから自動車というのは馬なし馬車だろう?」ってほざく輩の
辺りにまき散らす「めまい感」たるやw
2017/09/24(日) 14:47:11.92ID:R8lp94JX
>>928
上司がお前らを馬鹿と見極めて「デザパタ洗脳」していたとしたら、全て辻褄が合うんだよ。
2017/09/24(日) 14:48:22.76ID:dIaNhcU3
お前ん中ではな(笑)
2017/09/24(日) 15:51:48.82ID:sQZN3/qk
喚くだけの基地害
こんなやつとは絶対に一緒に仕事したくないな
2017/09/24(日) 16:00:01.88ID:/PuckvVk
>>918
undoめっちゃ難しくないか
そのへんのテキストエディタで操作履歴覚えてUndoしてるのとかって
どうやってるのか見当もつかん
2017/09/24(日) 16:08:12.02ID:uS0xIQvj
>>933
undo stack
2017/09/24(日) 16:18:43.21ID:L7/sMAP/
テキストエディタのUndoぐらいならわけない
何処までの操作を1コマンドとするかというのは有るが
まぁできるよこれぐらいは

Redo、Undoでメモリ節約のため差分を取っていく方式なら
全てのデータの変更の差分を取っておかないと上手くいかないが
そのデータが自分の管轄外の外部からも編集可能だった場合は難しい
腕の見せ所
2017/09/24(日) 16:20:14.18ID:L7/sMAP/
つまりは差分を取っていくといっても
外部からも勝手に変更されるので
完ぺきには出来ないから
ある程度ファジーなつくりにする必要があるんだわ
2017/09/24(日) 16:27:00.69ID:L7/sMAP/
例えばA→AB→ABCっていう編集なら
差分を取るのは簡単だし、元に戻すのも簡単だけど
他所のソフトからリアルタイムで「B」が削除されたとして
それは自分のソフトからも検出可能かもしれないが
自分のソフトから「B」を消したわけじゃないから
自分のソフトのUndoコマンドリストに入れるのはおかしな話だし
でも実際「B」は無くなってるわけで・・・
この辺下手にやるとRedo動作で消したはずの「B」が復活したりする
このような場合は若干難しい
2017/09/24(日) 16:53:15.51ID:Oc3oIVgi
>>933
イベントを記録して再生機能をつけるだけ
スーパーファミコン時代からある古典的なテクニックだ
2017/09/24(日) 17:06:20.42ID:gFeQddMX
>>937
undo するんだから外で変更されたって覚えておけばいいだけだろ
そもそもそれ直感に反した動作になりがちだからよほどの理由がないとやらない方がいい
2017/09/24(日) 17:12:54.02ID:R8lp94JX
>>937
無能らしくきちんとメメントパターンにすがれ
2017/09/24(日) 17:47:27.17ID:ZoycLPfe
>>929
>「自動車というのは馬なし馬車」
「コマンドパターンは構造体渡し」って
そういうことだな、言い得て妙
2017/09/24(日) 19:10:06.85ID:sQZN3/qk
デザインパターンを理解し、undo/redoに対してきちんと設計を考え答えられる人

対して、

デザインパターンが理解ない人


940 名前:デフォルトの名無しさん[sage] 投稿日:2017/09/24(日) 17:12:54.02 ID:R8lp94JX [11/11]
>>937
無能らしくきちんとメメントパターンにすがれ


悲しいなぁ
2017/09/24(日) 19:28:13.46ID:L7/sMAP/
>>939
「それは自分のソフトからも検出可能かもしれないが」
とは書いたが、必ずしも検出が現実的に行えるかはわからないし
完璧なリアルタイム性が無くて、後から「変更したよ」
って通知が届くだけかもしれないし
そもそも取りこぼすかもしれないし
こういったことを考えていくと、ある程度ファジーに作っとくしかない
一体何の事例だと言われそうだが、俺の場合はファイルシステムだった
ファイル構成は俺の知らないところで
エクスプローラとかから勝手に変更されたりするから

フォルダ一覧から取得したファイルリストに対して何か編集が出来て
そのファイルリストがリアルタイムで実際のフォルダ構成に従って更新されうる場合

普通であれば、ファイルリストを、「一覧取得時点」での静的な物にしてしまうか
Undo、Redoを諦めるか、のどちらかだが
俺の場合はたまたま両方必要になってしまった
かなり稀なケースだとは思うけど、まぁ面倒だ
2017/09/24(日) 20:07:26.73ID:gFeQddMX
>>943
ファイルシステムなら実行してダメならエラー表示するだけだろ
(どうしてもぶつかる可能性があるから)
>>937の編集とは全然違う話やん
2017/09/24(日) 20:13:27.53ID:R8lp94JX
俺にしたらデザパタ厨はゴミだとよく分かったけどね。

undo/redoするだけなら>>938-939で全く正しい。
履歴はコマンドを保持する形になり、呼び出し形式がコマンドパターンと類似してくる。これが>>886が混同した理由。
なおこのケースでは大半の場合、コマンドには関数ポインタは含まれず、構造体が渡される。
これすら分からない馬鹿が粘着している。
俺だったら内部でテーブルジャンプかハッシュだね。コマンド側から関数ポインタを与えるメリットが無いから。
なおEmacsはここでユーザ関数ポインタを与える構造になっているから、ほぼ無限の拡張能力がある。

>>943は相変わらず全く分からないみたいだが。
要はデザパタ厨はデザパタから一歩離れれば何も出来なくなるわけだ。
元々初心者にメッキを施す為だし、この意味では機能している。
>>933のようにundo出来ないよりは「○○パターン」で実装する奴の方が上と言えば上だ。
しかし俺は>>933を評価したい。理由は上達する可能性があるからだ。

どうすればいいのか?を考え続ければ上達はする。これが>>933だ。
この場合はこれ、を何度続けても、慣れはするが上達はしない。これがデザパタ厨だ。
プログラミング暦だけ長くても全く上達しない奴が偶にいて不思議だったのが、これか。
ただ、undo/redo等は標準的な機能ではあるし、OSS等を参考にすれば脳死済みのデザパタ厨でもある程度戦えるのかもしれん。
2017/09/24(日) 20:17:22.51ID:Oc3oIVgi
バーカ
2017/09/24(日) 20:35:02.81ID:ZoycLPfe
>>945
>プログラミング暦だけ長くても全く上達しない奴
自己紹介パターン
2017/09/24(日) 20:38:27.77ID:ZoycLPfe
日本人のカタカナ英語って
英米人と明らかに発音が違うが

オブジェクト指向を手続き型の中で
解釈するのってそれと似てるな

自分では同じつもりなんだろうけど
ぜんぜん違うんだよ
2017/09/24(日) 20:57:58.94ID:uS0xIQvj
コマンドパターンの適用例の一つとしてundoがあるだけで
undoを実現するために存在してるパターンじゃないよ

undo/redoの実装方式だって一つじゃないんだし状況に応じて設計を選択すればいい
技術力の高い人はその選択が適切に出来る人
2017/09/24(日) 21:10:06.90ID:sQZN3/qk
>>945
おいおい

「構造体」を適宜「オブジェクト」に読み替え関数ポインタ/関数オブジェクト「ラッパ」パターン君が
コマンドパターンなんて言葉使っちゃダメだろ

> デザパタ厨はゴミ
1レスでブーメラン頭に突き刺すとか民主党もビックリだぜ!
2017/09/24(日) 21:18:11.67ID:R8lp94JX
>>949
> コマンドパターンの適用例の一つとしてundoがあるだけで
ちなみに君の中のコマンドパターンの定義は、コマンド内には関数ポインタがあることが必要なのか?
通常のundoなら一番単純な実装はe(EventArgs)をundo stack に積んでいくことであり、
この場合は関数ポインタを保持してないから矛盾するが。
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を行うとは言っているが、
その時に必要なメソッドはどんなものか?
を提示していない。
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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