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

■ このスレッドは過去ログ倉庫に格納されています
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/21(木) 22:05:21.29ID:QBtXCTqk
デザパタなんて使わねーよ
2017/09/21(木) 22:53:56.69ID:1e+K8/4+
>>791
使ってることに気づいていないクズ
2017/09/21(木) 23:13:46.19ID:F/cUryZs
>>776
何でもそうだが、デザパタもやりすぎたら手段が目的化するんだよ。>>775とか。
言われてみれば使ってるっていう、>>779位がちょうどいい頃合だと思うよ。

何が問題って、GoF自体が古いからではあるが、今ならもっと単純にできるものが大量に有って、
というかGoFの時点で既にアクロバティック気味で、何がやりたいんだこいつらは?って感じなんだよ。
名前も厨二過ぎてイミフだし。
結局はOOPの文法の全ての組み合わせから、あるあるに厨二な名前をつけただけ、っていう。
例えばコンテナ等でお約束的に使われる「型消去」だが、GoFにはないだろ。
(見落としかもしれんが、それなら「型消去」と直感的な名称の方が断然良いからGoFが使われないだけ)
だからWikiにも書いてある通り、俺は
> デザインパターンをむやみに適用するのは不適切であり、不適切な使用はコードの複雑さを無意味に高めてしまうと注意している。
> 一部のデザインパターンは、プログラミング言語(例: Java, C++)の機能の欠損の印であると主張されることがある。
の側面もかなりあると思うよ。
2017/09/21(木) 23:14:03.96ID:F/cUryZs
>>776(続き)
ただ、使ってる/使ってないと言えば、それは確実に使っている。
既に言ったがストラテジーは継承そのものだから、OOPならほぼ間違いなく使うし、
オブザーバーってのはフレームワークのイベントモデルがこれ(.NETとHTMLはそう)なので、
例えばC#やJavaScriptにおいてこれを使ってないというのはありえない。(自覚しているかどうかは別)
なおJavaScriptはこれを言語自体にも取り込もうとしたが、いいところまで行って頓挫した。
https://www.html5rocks.com/ja/tutorials/es7/observe/
本当に頻出なら言語で直接サポートした方が便利だから、そうなって行くものなんだよ。
それがイテレータであってね。
だから、この類の「言語新機能」を追いかけていても、頻出パターンについては自然と学習することになる。
GoFは1995だし、それからソフトウェア工学も進歩しなかったわけではない。(Javaは10年間進歩しなかったが)
新しい言語は分かりきっている問題に対しては対策をしてくる。
そしてGoは「継承はいらない」という彼らなりの結論を出してる。
GoFなんて古典を妄信するより、Goが何故こういう結論を出したのか考えるほうがいいと思うぞ。

> ちなみに我輩はしがない流れ者の派遣プログラマー(プログラム設計もやってます)です。
君がここら辺の話について来れないのなら、とりあえずまず読んでみろ、ではある。
それでどう思うかは君の自由だ。

多分結局は適性なんだよ。パターンから選ぶほうが楽なら積極的に使えばいい。
俺にはデザパタは粒度が大きすぎる。自分で継承/匿名関数等を使って組み上げるほうが楽だ。(というより直感的)
ただし結果的には同じようなことになっているとも思うが。
2017/09/21(木) 23:55:29.08ID:2yneGSNP
ストラテジーが継承そのものってどういう意味?

HTMLのイベントモデルがオブザーバーってどういうこと?
2017/09/22(金) 00:00:17.04ID:kB3Gqsn3
>>794
> そしてGoは「継承はいらない」という彼らなりの結論を出してる。
> GoFなんて古典を妄信するより、Goが何故こういう結論を出したのか考えるほうがいいと思うぞ。

いまでもGoFを学ぶ意味があると言うと、盲信してることにされちゃうんだね
ということは、Goの出した結論をGoを指示する人は盲信してるの?

まぁGoが正しいわけじゃないし、SwiftやScalaが出した答えも考える価値があるね
2017/09/22(金) 00:31:51.44ID:sr7lvu8c
>>796
> まぁGoが正しいわけじゃないし、SwiftやScalaが出した答えも考える価値があるね
その通りだ。俺は自分で考えろと言っているだけだ。

GoFが古いのは事実だ。
その間にソフトウェア工学が進歩していると仮定するなら、当然問題は解決されてくる。
実際そうなっているわけでね。
メジャー言語では、Javaは例外的に全く進歩してないが、
他言語(C++/C#/JavaScript)はなんだかんだで色々試行しているよ。

俺自身、継承はちょっと結合が強すぎるとは感じる。
ただ全部委譲の方がいいか?と言われれば、どうかな?とも思うが。
とはいえ、「全部委譲でよし、継承イラネ」ってのは2chでも散見されるだろ。

で、君はSwiftやScalaを知っているんだろ?それはどうなっているんだ?
2017/09/22(金) 00:32:11.77ID:Nn2M/THg
>>794
> そしてGoは「継承はいらない」という彼らなりの結論を出してる。
> GoFなんて古典を妄信するより、Goが何故こういう結論を出したのか考えるほうがいいと思うぞ。

継承という文法がなくても
継承を別の方法で実装できるからでしょ?

「継承はいらない」ではなく「継承を直接行うための文法はいらない」が正しい
そしてGoでも継承自体はやる。
2017/09/22(金) 00:38:17.90ID:9s7VGfiV
ほんと、ストラテジーが継承そのものってどういうことよ??
最近はOOでも関数を渡せる言語が増えてきたから
ストラテジーの実装は継承使わないほうが多いと思うぞ

古臭いGoFをそのまま学ぶ必要はないだろうが
単に各パターンを知る・使えるようになることよりも
パターンを通してOOの設計原則を学ぶことが重要
2017/09/22(金) 09:48:55.51ID:eeRMTLx0
アラン・ケイやGoFのデザパタに触れるとスレが荒れるということは分かった
2017/09/22(金) 11:19:40.04ID:b6yHr9//
名前がついてるものの中でも
クイックソートやB+Tree、線形補完でスレが荒れるなど聞いたことないし
やはり何か根本的に微妙なんだろうな
2017/09/22(金) 12:09:12.17ID:z4GP1i1k
良し悪しを証明出来ないからだろう
アルゴリズムのオーダーとかなら数学で証明できるから議論の余地がない
数学的に曖昧なものほどバカでも議論に入る余地があるから調子乗って参加しちゃう
こういう議論でしか話せないんだよバカは
2017/09/22(金) 12:52:53.21ID:gDV2cvxW
クイックソートでも再帰を使えないアホウが発狂するぞ
どんなネタでも発狂するキチガイは存在する
2017/09/22(金) 14:02:03.76ID:juWn7/fD
再帰なんてわかんなかったら繰り返しになるまでコード書いて見ればいい
繰り返し部分を関数にすれば作成完了だ

しかし、スタックオーバーフローで死ぬ
ここまでがワンセンテンスだ
2017/09/22(金) 14:30:09.14ID:b6yHr9//
要は名前を付けるほどの物でも無かったんじゃね、説
2017/09/22(金) 14:39:52.97ID:b6yHr9//
例えばクイックソートなんか、明らかに名前を付けるに値する人類の英知でしょ
ちょっと自分では思いつかないかもしれないし
誰でも真っ先に思いつきそうなセレクションソートなんかと比べれば効果は劇的だし
動きも複雑っちゃ複雑なところもあるから、人に説明するのも大変でしょ
だからクイックソートは絶対名前を付けて共有したほうが良い
それと比べてどーなんかなーという
2017/09/22(金) 15:05:58.23ID:kB3Gqsn3
じゃあバブルソートとかリニアサーチは名前つけるほど大層なもんでもないから、先頭からひとつずつ見ていくやつ、みたいな感じで表現すればいっか
2017/09/22(金) 15:53:34.28ID:b6yHr9//
基本的には名前が知られて有名になっていく過程というものが有るんじゃないかと
その自然的プロセスをすっ飛ばして
良くありそうなアルアルに名前を付けます、俺の独断と偏見でな!
ってのがね
2017/09/22(金) 21:46:42.33ID:9s7VGfiV
パターンに名前を付けることの価値がわからない人には
オブジェクト指向は向いてないんじゃね?

a, b, x, y, t1, t2みたいな命名しとけばいいと思うわ
2017/09/22(金) 22:19:39.92ID:sr7lvu8c
>>801
俺自身は単品の説明は必要だと思っている。例えば、
・継承/インタフェース/委譲/関数ポインタ/匿名関数/クロージャはそれぞれこういう場合にこう使う
ところがデザインパターンはこれらの組み合わせであり、
・ここで継承、ここは委譲してこう組み合わせる、これが○○パターン(キリッ ←うぜー
バリエーションで無駄に名前を増やしすぎている。>>738のとおり、
・(いわゆる)ファクトリメソッド(A)
・Factory Methodパターン(B)
・Abstract Factoryパターン(C)
なら(A)->(B)->(C)のアップグレードは自明であり、別々に名前をつける必要はない。
(だから混同されているし、また逆に、混同してても問題ないから混同されたまま、とも言える)
GoFからして水増し感ありまくり。半分くらいリストラ出来るんじゃないか?真面目に見たことはないが。

そういえばJavaScriptのIndexedDBはAPIがFactoryになっている。
まあこれに意味があるのかは疑問ではあるが。
https://developer.mozilla.org/ja/docs/Web/API/IDBFactory
あと、Proxyパターンは標準化済みだ。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy
いずれにしても頻出パターンは受動的にも学べる。
2017/09/22(金) 22:20:48.95ID:Sr724cYm
パァーン
2017/09/22(金) 22:21:11.90ID:sr7lvu8c
>>802
プログラミングは暗記だ!と思っている文系の馬鹿がすがるからだろ。
彼らにとっては、自分達が「上級者」だと証明するものは記憶したデザインパターンの個数しか無く、
そんなもの無意味だ、と言われて発狂してるだけ。
上記の遠り、俺は何度も「何故意味がないか」を具体的に説明しているが、
彼らは感情的にしか反論できてない。これがまた彼らの馬鹿っぷりを証明している。

本来は経験の差を知識で埋め、初心者→熟練者にジャンプアップさせることが目的だった。
これは表面的には達成できるんだけど、やっぱり中身は初心者のままで、考え方がずれてるんだよ。
しかしそのメッキしただけのまがい物が上級者ぶって語るからおかしなことになる。

ただまあ、デザパタ議論をしているだけでもマシな方だ。
JavaScriptはネット見てるだけでマジでカオスで、ろくなコードはないし、でたらめを主張する奴も普通にいる。
現場は壮絶な状態だというのは想像に難くない。
あいつら、jQueryが使えたら達人扱いっぽいのだが、jQueryってCでいうprintfだからな。
2017/09/22(金) 23:15:39.67ID:sr7lvu8c
>>808
名前を付けるのは基本的にはいいことなんだが、直感的じゃ無いと駄目なんだ。
これはmemeと同じで、みんなが妥当だと思わないと広まらないんだよ。
(これが君の言う「自然的プロセス」で、つまり自然淘汰されただけとも言える)

ストラテジーパターン、アダプターパターン、デコレーターパターン、ビジターパターンとか言われても、は?だろ。
バブルソート、クイックソート、リニアサーチ、バイナリサーチってのはそのものずばりだ。
>>807みたいな馬鹿にはそれすら分からないらしいが。

ところで>>807、お前は早くSwiftとScalaの説明しろ。
2017/09/23(土) 00:15:19.15ID:47xDJ4SG
愚にもつかない長文を一生懸命連投するメンタリティが悲しい
2017/09/23(土) 00:25:56.13ID:47xDJ4SG
愚にもつかない長文を一生懸命連投するメンタリティが悲しい
2017/09/23(土) 03:16:02.43ID:PZVogj5V
>>814>>815
書き込めたかどうか確認することすらできない人はそう言った
2017/09/23(土) 03:56:40.05ID:3Bk8qYPA
>>813
クイックソートのどこがそのものなんだ?
単に「速いソート」って名乗ってるだけだろ

クイックソートよりも速いアルゴリズムを採用して
「超速いソート」と名付けたらそのものズバリだと思うか?

超速いソートという名前からどんなアルゴリズムを想像するよ?
2017/09/23(土) 05:07:06.10ID:Tcv0uwXr
デザインしたことたいやつにはわからんよ
2017/09/23(土) 05:07:31.96ID:Tcv0uwXr
デザインしたことないやつにはわからんよ
2017/09/23(土) 09:00:59.54ID:Z1NsXN0c
>>817
ゆとり死ね

>>808
そういえば、実際に頻出だと名前が無いと困るので、別の名前が付いてる。

多態(ポリモーフィズム)=ストラテジーパターン
ラッパ=アダプターパターン(だと思う)
グローバル≒シングルトンパターン
包含/委譲=コンポジットパターン
○○プール(スレッドプール等)=フライウエイトパターン
構造体渡し=コマンドパターン(ただしこれはCでは日常的過ぎてパターンだとも認識されてない)

元々有った物については、イテレータ等同じ名前でないものはデザパタ側の名前がアホ過ぎてスルーされてる。
例外的にsingletonは使われているが、これはglobal=悪というJava教ではなぜかsingleton=善とされているから。
(適用範囲はほぼ同じ。実は駄目っぷりもほぼ同じなのだがスルーされてる。
坊主がウサギを鳥だと言い張って食ったようなもの。)

ぱっと見た感じはこんなもんか?
俺はデザパタの名前は普段使って無いから間違ってるかもしれんが。
2017/09/23(土) 09:08:00.24ID:Z0Kw+Iw9
全然イコールじゃなくてわろた
2017/09/23(土) 09:28:01.41ID:nAanI8EG
長文書く奴はバカの法則
2017/09/23(土) 09:34:12.45ID:lJTicCY1
クラス、変数名全部頭にunkoってつけてやる
2017/09/23(土) 09:45:25.48ID:Z1NsXN0c
3行しか読めない馬鹿はマジでプログラマ辞めて自殺してくれ。
絶対に上達しないし、糞コード量産されるだけで迷惑だ。
つか、普段から仕様書なり解説記事なり読んでないの丸分かりだし。
2017/09/23(土) 10:49:54.45ID:7PRDVMsP
>>824
でもお前の文章が冗長なのも事実だ
2017/09/23(土) 10:57:31.46ID:zdCb7/9/
>>824
伝わらないことを他人のせいにしてんじゃないよ
長くても読みやすい文章はいくらでもあるけどおまえはそうじゃない
2017/09/23(土) 11:11:51.31ID:pHSma+nn
下らん長文書く奴はたいていわけわからん仕様書書く
2017/09/23(土) 11:17:26.32ID:Jh9lXn4N
自分だけはバカじゃないという前提
2017/09/23(土) 11:21:38.27ID:Z0Kw+Iw9
ゴミみたいな長文を書くウジ虫はコードも長い
平気な顔して10行20行の関数を書く
2017/09/23(土) 11:59:27.08ID:g84quUgG
パターンとかなんでも名前ついてるじゃん
reduxとかpromiseとかgit flowとか
頻出だったら名前が必要でそうでなければ不要とか、主張の意図がわからんわw
名前があったら困るのかw
2017/09/23(土) 12:07:41.55ID:Z1NsXN0c
やはりゆとりは殺すべき。
根本的に勘違いしている。長文のほうが簡単なんだが。
2017/09/23(土) 12:09:39.94ID:Z0Kw+Iw9
>>831
BaKa
2017/09/23(土) 12:10:13.25ID:Z1NsXN0c
>>830
> reduxとかpromiseとかgit flowとか
2017/09/23(土) 12:15:27.16ID:qINfq2L1
>>831
長文はキチガイ
2017/09/23(土) 12:34:46.78ID:47xDJ4SG
長文自体が問題でもあるけどこの場合
「愚にも付かない」長文を「一生懸命連投」しちゃってるところが涙を誘う
小学生の九九暗唱連呼なら、しつこくても間違ってても、まだ微笑ましい
2017/09/23(土) 12:43:54.76ID:Z0Kw+Iw9
長文を書くからボロが出る
2017/09/23(土) 12:56:54.86ID:Z1NsXN0c
既に言ったが俺は>>775の意図が理解出来ない
文才溢れるゆとりによる適切な解説を求む
2017/09/23(土) 14:04:19.43ID:0ADpWaV5
>>835
>>814-816
2017/09/23(土) 14:34:52.76ID:vbQ5UjHD
俺はデザパタ知らないし話についていけてないけど
それでも長文書くやつはバカだろ
長文書いただけで、そいつが言ってることが
間違いだってわかる=デザパタはクソ
840デフォルトの名無しさん
垢版 |
2017/09/23(土) 14:40:40.69ID:ghlB+mQW
>>839
長文嫌いなの?
2017/09/23(土) 14:44:31.43ID:OVoD4rc5
ディベートのテクニックの一つだよ
相手が長文で攻めてきたら
長文はキモいの一言で
で相手の理論を論破できる
2017/09/23(土) 14:48:58.43ID:Z0Kw+Iw9
要点を絞れない
簡潔に説明できない
長文はアホの得意技
2017/09/23(土) 14:49:33.57ID:j6VCxv0o
>だからデザパタ単体で学習した方が整理される言語を学んでいるときは
>パターンより文法にコードリーディングしてるときは
>実装のテクニックに目が行きがちだしね

なるほど、確かに何言ってるか分からんな
2017/09/23(土) 14:54:26.06ID:OVoD4rc5
>>842
それもディベートでよく使う。
基本相手の発言は遮って自分の発言で上書きするのが
テレビでもよく使われるテクニックだが、

相手がなにか言ってしまったら、
要点を絞ってもう一回発言してくださいと
逆に相手に同じことを言わせるというテクニックもある。

このテクニックをうまく使うと、要点を絞らせるから
相手がいいたいことを減らすことができる。
2017/09/23(土) 15:20:32.55ID:PshCXG8Z
×デザパタ
○デザインパターン
2017/09/23(土) 15:24:18.47ID:Z1NsXN0c
>>839
俺は「デザパタはクソ」派なんだが
2017/09/23(土) 15:25:09.29ID:qWNtk5Ea
長文書く奴は脳が女の脳してるからプログラムには向いてないんだよな。
2017/09/23(土) 15:32:14.50ID:Z1NsXN0c
>>840
ゆとりにとって「長くても読みやすい文章 (>>826)」とはこういうのらしい。
http://news.denfaminicogamer.jp/projectbook/zelda
これは対談なのでこの形式で問題ないとはいえ、やはり冗長感ありで、スレでも指摘されてた。
基本的には頭が悪い(脳内短期記憶バッファが小さい)から、長文を一度に読み込めず、
小学校1,2年生相手のように一つ一つ対話的に説明してくれないと分からないらしい。
(富豪レスではなく貧民レスじゃなきゃダメ)

ついでにScalaの説明をする奴がいないので少し調べているところだが、
Scala以前については大体これであってるな。
http://rirakkumya.hatenablog.com/entry/2013/04/20/093044

>>842
最近、その手の詭弁テクニックを使う奴激増したよな?
印象も重要なリアルのディベートならさておき、
ここでやる意味は全くないから意味不明なのだが、なんでだか分かる?
2017/09/23(土) 15:38:26.88ID:PFKg/P6i
>>820
その等式、マジで全部間違ってるよ
2017/09/23(土) 15:39:56.99ID:Z1NsXN0c
>>842
> 要点を絞ってもう一回発言してくださいと
> 逆に相手に同じことを言わせるというテクニックもある。
ちなみにこれ思い出した。
> プレゼンで一つ前のスライドに戻すように頼む
> http://netgeek.biz/archives/88894
2017/09/23(土) 15:40:40.91ID:qWNtk5Ea
曖昧で冗長で不正確で理解しにくいの4拍子そろってるな。
2017/09/23(土) 15:46:15.97ID:Z1NsXN0c
>>849
なら君なりの等式を書いて議論を進めて、どうぞ。

というかマジでお前ら、それで何とかなってるのか?
リアルで詭弁論法使う奴がいたら俺はそれ以降相手にしないんだが。
2017/09/23(土) 16:37:32.08ID:47xDJ4SG
お前ら、この状況をよく観察しろよ
そして、スルーの使い時を学ぶんだ
2017/09/23(土) 16:42:14.21ID:zdCb7/9/
>>848
読み辛いよ
2017/09/23(土) 16:57:16.97ID:Z1NsXN0c
>>854
では君が思う「長くても読みやすい文章」の例示よろ
2017/09/23(土) 16:59:16.70ID:zdCb7/9/
え、やだ
2017/09/23(土) 17:00:49.62ID:lJTicCY1
>>855
長くする意味がわからんw
ちょうどいい長さでレスしろよw
2017/09/23(土) 17:58:20.11ID:Z1NsXN0c
そういえば.NETはオブザーバーは標準化済みでユーザタイプeventで使えたわ。
https://msdn.microsoft.com/ja-jp/library/edzehd2t(v=vs.110).aspx
2017/09/23(土) 20:29:44.01ID:b6I3iAXW
>>794
>ストラテジーは継承そのもの
ストラテジーは委譲だよ
継承そのものと言えるのは
テンプレートメソッドの方

デザパタの基本じゃないか

>ここら辺の話について来れないのなら
上から目線で言ってて
間違ってりゃ世話ないな!
2017/09/23(土) 22:48:39.47ID:Z1NsXN0c
>>859
テンプレートメソッドパターンは本来は依存関係なしのコード共通化=C++のテンプレート、C#のジェネリック
のような気がするが、まあそれならそれでよし。

・多態(継承/委譲)=テンプレートメソッドパターン、ストラテジーパターン、コンポジットパターン
・ファクトリーの多態=アブストラクトファクトリーパターン

で、これらは現在、ほぼ全ての場合に左側の用語が使われ、デザパタ用語はリストラ済みの認識でいいか?
2017/09/23(土) 22:50:48.00ID:0YQdpVUK
Smalltalkの話すると荒れるのなんで?
2017/09/23(土) 23:12:24.68ID:b6I3iAXW
>>860
>テンプレートメソッドパターン
>C++のテンプレート、C#のジェネリック
デザインパターンのテンプレートと
ジェネリックのテンプレートは関係ない

ジェネリックは型を汎用的に扱う仕組み
デザパタの方は処理を継承で共通化する仕組み


>ほぼ全ての場合に左側の用語が使われ
その確信の根拠はどこから来てるの?

多態はデザパタとは別の概念で
イコールで使われるようなものじゃないだろ

コンポジットパターンのことを指して
多態って言われても意味分からん
2017/09/23(土) 23:14:18.84ID:b6I3iAXW
>>861
Smalltalkerは
どうしてもOO原理主義的になりがちだから

どんな分野でも原理主義は衝突と摩擦を招く
関数型原理主義とかでも荒れるだろ?
2017/09/23(土) 23:15:33.02ID:OVoD4rc5
>>861
SmalltalkはOSと言語が合体している独自の世界だから

Smalltalk実行環境(=OS=開発環境)のみがコンピュータ上で動いており
Smalltalk実行環境は電源を消すまで動作しているという前提の話をするから
言語だけの話にならない。

例えば開発した新しいプログラムをOS上で起動するというのは
Smalltalkの世界では、Smalltalk実行環境上で新しいクラスを作って呼び出すということで
プログラムを一旦終了してバグを修正して再起動するということは
Smalltalkの世界では、ではクラスを動的に変更するということになる。

このように一般的なOSでは、プログラムの作成や修正という当たり前にできることが
Smalltakでは「オブジェクトは遅延結合が必要で動的に変更できなければならない」という
根拠になってしまっているから、お前らの世界では遅延結合や動的が必須なのだろうけど、
そのマイナーな世界を押し付けるな。そんなものはなくてもできる。という感じで荒れる
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
ホントだよ
現場ではデザパタなんて使ってないっていうのに
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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