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

■ このスレッドは過去ログ倉庫に格納されています
2017/09/26(火) 07:20:38.98ID:qu+DPehL
前スレ
オブジェクト指向システムの設計 172
http://mevius.2ch.net/test/read.cgi/tech/1467992113
オブジェクト指向システムの設計 173
http://mevius.2ch.net/test/read.cgi/tech/1502182334/

類似スレ
手続き型システムの設計 1
http://mevius.2ch.net/test/read.cgi/tech/1500282714
2017/10/01(日) 00:12:57.26ID:GRIqwmf+
>>109
> そう考えるとActiveRecordも継承するのは必須ではないということになるな。
当たり前だ。
virtualに対して全くoverrideしないのなら継承の意味はない。
それはある意味、典型的な間違った使い方だ。
そしてお前はそれも分からない馬鹿だということ。
2017/10/01(日) 00:13:18.18ID:H5Asg8Dc
トーンが明らかに下がってきたなw

ようやくこのバカも理解出来あってことか。
デザインパターンは使用例(応用例)であって

そこで継承を使っているからって
継承が使用例(応用例)になるわけじゃない

ストラテジーパターンはアルゴリズムを実行時に
選択することができるようにするためのデザインパターン
そこで継承が使われていることは重要ではない。

継承を使うパターンは他にも有る。
使用例(応用例)が論点なのであって、何を使っているかは
デザインパターンとして考えるときには重要な事ではない。
2017/10/01(日) 00:16:02.84ID:H5Asg8Dc
>>110
> virtualに対して全くoverrideしないのなら継承の意味はない。
(そこからかーw)
2017/10/01(日) 00:16:29.39ID:GRIqwmf+
>>111
は?下がってないぞ。
俺はデザパタ=ゴミ、デザパタ厨=ゴミ、で変わりない。
ただしお前が馬鹿すぎて議論は無理だからフェードアウト気味なだけ。
2017/10/01(日) 00:17:15.28ID:U1G3k+aG
自分だけはバカじゃないという前提
2017/10/01(日) 00:21:43.29ID:H5Asg8Dc
>>113
でも、継承の「典型的な使用例」がストラテジーパターンである
という言葉に反論できてないじゃないですかーw

所詮、継承は使用例の一つなんですよ。
ストラテジーパターンを継承と言ってしまうと

他の継承を使っているパターンは、すべてストラテジーパターン
アルゴリズムを実行時に選択することができることが重要
だってことになるじゃないですかーw

意味不明ですよね

これはデザパタがゴミなんじゃなくて、
すべてはあんたのストラテジーパターンを継承と呼ぶから
こういう意味不明な結論にいなるわけですよ。


そうならないように、基本機能(継承)とその応用例(パターン)
きっちり分けて考えましょうって話なるわけ

何度も言いますよ?
継承の「典型的な使用例」がストラテジーパターンである
「典型的な使用例」です。
2017/10/01(日) 00:29:59.36ID:GRIqwmf+
>>115
間違った使い方はいくらでも出来るんだよ。言い換えれば、
・継承の正しい使用例は常にストラテジーパターンになる
でいいか?

overrideしないで継承するってのは典型的な「便利関数置き場」であって、
駄目だろこれは。
というか、これがありならパターンにあるべきだが、無いだろさすがに。
2017/10/01(日) 00:31:39.13ID:xYp8c7mI
>>115
間違った使い方はいくらでも出来るんだよ。言い換えれば、
・継承の正しい使用例は常にストパタになる
でいいか?

overrideしないで継承するってのは典型的な「便利関数置き場」であって、
駄目だろこれは。
というか、これがありならパタにあるべきだが、無いだろさすがに。
2017/10/01(日) 00:32:27.29ID:H5Asg8Dc
> ・継承の正しい使用例は常にストラテジーパターンになる
> でいいか?

継承の正しい使用例は常に「アルゴリズムを実行時に選択することができる」
ためのも。

うん。明らかに間違いだなw
実行時に選択できる必要ないし
2017/10/01(日) 00:33:52.13ID:H5Asg8Dc
>>117
> overrideしないで継承するってのは典型的な「便利関数置き場」であって、
> 駄目だろこれは。

だめでもなんでもない。

有るクラスが、有るクラスを踏まえているならば
(is-a関係)それを表現するために継承を使うべき

継承っていうのは「便利関数置き場」じゃないのよ?
それらの関数を使わなかったとしても
継承関係にあれば継承を使うんだよ。
2017/10/01(日) 00:35:47.35ID:H5Asg8Dc
overrideしない使い方として例えばRuntimeErrorみたいなのがあるな
その他の実行時エラークラスはRuntimeErrorを継承して作る。

そうすることで、全ての実行時エラークラスをRuntimeErrorとして
みなすことができるし、一部のクラスだけは例外的に
その他の情報をエラークラスに格納することができる。
2017/10/01(日) 00:46:34.86ID:GRIqwmf+
>>119
それはまた違う話だ。
1本道で複数継承している場合は、将来的に分岐したり交換される可能性等を踏まえているだけ。
絶対に分岐しないと分かり切っている場合に継承する意味はないだろ。

例えば、メソッド一つ一つ全部バラして継承させて、メソッド20個で継承20階層も出来るが、無駄だろ。
将来的にも絶対にoverrideされないのなら最初から継承構造なんて必要ないんだよ。
ベタにクラス作って終わりだ。

>>120
それはoverrideと同じ、というか、メソッドではなくメンバのoverrideになる。
2017/10/01(日) 00:49:35.69ID:H5Asg8Dc
これのどこがメンバのオーバーライドをしているのか説明してほしいもんなんだがw

http://blog.toshimaru.net/ruby-standard-error/

# `Exception`ではなく
class MyError1 < Exception; end
# `StandardError`.
class MyError2 < StandardError; end
2017/10/01(日) 00:51:22.19ID:H5Asg8Dc
>>121
お前さ、基本

1. 自分が○○にたいして馬鹿なことを言う
2. 自分が言った馬鹿なことの対して馬鹿だと自分でツッコむ
3. そのツッコミを根拠に、○○はダメだという

というやり方やってるよね?


○○がだめなんじゃなくて
お前がダメなんだよw
2017/10/01(日) 00:53:40.85ID:GRIqwmf+
が、まあ、これらは通常は区別されているから、以下としよう。
・メソッドの継承の正しい使用例は常にストラテジーパターンになる
・メソッド/フィールド等全てについて(将来的にも)全くoverrideしない場合は継承する意味がない
これでいいか?
2017/10/01(日) 00:54:50.31ID:U1G3k+aG
何かよくわからんけどおもしろいなそれ
2017/10/01(日) 00:57:27.86ID:H5Asg8Dc
> ・メソッドの継承の正しい使用例は常にストラテジーパターンになる

ならないって何度も言ってるんだがw

> ・メソッド/フィールド等全てについて(将来的にも)全くoverrideしない場合は継承する意味がない

意味はある。その例も出した。



結局さぁ、お前、実装のことしか考えられてないんだよ。
設計能力が圧倒的に不足している。

どんな設計を見た所で、その実装が継承使っていれば、
これは継承と呼ぶべきだーって叫ぶつもりだろ?
2017/10/01(日) 00:59:36.43ID:H5Asg8Dc
設計とはかならず「何のために」そういう設計をするのかという
目的が有る。それがデザパタの使用例や応用例なんだよ。

継承は「何のために」ではなく実現技術

だから継承といっただけでは何をしたいのか全くわからない。
だからデザインパターンで定義されている名前が必要
2017/10/01(日) 01:01:17.79ID:44WxUqLn
が、まあ、これらは通常は区別されているから、以下としよう。
・メソの継承の正しい使用例は常にストパタになる
・メソ/フィー等全てについて(将来的にも)全くoverrideしない場合は継承する意味がない
これでいいか?
2017/10/01(日) 01:02:05.70ID:H5Asg8Dc
> ・メソッドの継承の正しい使用例は常にストラテジーパターンになる

ならないって何度も言ってるんだがw

> ・メソッド/フィールド等全てについて(将来的にも)全くoverrideしない場合は継承する意味がない

意味はある。その例も出した。
2017/10/01(日) 01:03:39.76ID:GRIqwmf+
>>122
おれはRuby使いではないからチラ見ではよく分からんが、
見る限りrescueの仕様によるものであって、
Exceptionは派生しまくってるし、特に変だとも思わないが。
2017/10/01(日) 01:05:28.40ID:H5Asg8Dc
>>130
メソッド/フィールド等全てについて(将来的にも)全くoverrideしない
継承の正しい使い方だって言ってる
2017/10/01(日) 01:05:32.81ID:GRIqwmf+
>>129
とりあえずID見る癖付けろ。
俺のレスは粘着により複製されてるから。
2017/10/01(日) 01:07:40.92ID:GRIqwmf+
>>126
> どんな設計を見た所で、その実装が継承使っていれば、
> これは継承と呼ぶべきだーって叫ぶつもりだろ?
そりゃそうだろ。
お前は継承使ってても「これは継承ではない!」というのか?
2017/10/01(日) 01:09:09.45ID:GRIqwmf+
>>131
いや派生しまくってんだから、既にoverrideされまくっているはずだが。
2017/10/01(日) 01:10:27.50ID:H5Asg8Dc
>>133
> お前は継承使ってても「これは継承ではない!」というのか?

いや? 継承使っていてもストラテジーバターンでなければ
ストラテジーパターンではないと言うつもりだよ?

お前はストラテジーバターン=継承と呼ぶべきだって言ってるんだから、
お前はストラテジーパターンでないパターンを見ても、
ストラテジーバターン(=継承)だって言うんでしょ?

っていう話をしてるんだが?
2017/10/01(日) 01:11:52.96ID:44WxUqLn
>>132
あんたが表現のロジックを統一しないから代弁してやってんだよ
2017/10/01(日) 01:12:07.31ID:H5Asg8Dc
>>134
え? なに?

世界中の何処かで誰かがオーバーライドしていれば
それは継承使っていいって言ってるわけ?

その理屈だと継承が適切じゃないものなんてないだろうな。
世界中の何処かで誰かはオーバーライドしてるだろうさ
たとえそれが便利関数であったとしても
2017/10/01(日) 01:14:01.94ID:GRIqwmf+
>>135
> お前はストラテジーバターン=継承と呼ぶべきだって言ってるんだから、
そうとは言ってない。俺は、
・(正しい用法で)メソッドを継承した場合、ストラテジーパターンは自動的に適用されるから、
わざわざ「ストラテジーパターン(キリッツ」なんて言う機会も意味もない
という立場だ。
抽象度は違うが、分離不可能だし、分離する意味もないから通常は「継承」という言葉が使われる、ということ。
2017/10/01(日) 01:15:16.80ID:44WxUqLn
>>135
> お前はストラテジーバターン=継承と呼ぶべきだって言ってるんだから、
そうとは言ってない。俺は、
・(正しい用法で)メソを継承した場合、ストパタは自動的に適用されるから、
わざわざ「ストパタ(キリッツ」なんて言う機会も意味もない
という立場だ。
抽象度は違うが、分離不可能だし、分離する意味もないから通常は「継承」という言葉が使われる、ということ。
2017/10/01(日) 01:18:01.30ID:GRIqwmf+
>>137
意味不明。

RubyのExceptionは派生しまくっている=メソッド/フィールド等が既に追加/上書きされているはずであり、
これは正しい継承の使い方である、ということ。
2017/10/01(日) 01:19:25.82ID:H5Asg8Dc
>>138
> ・(正しい用法で)メソッドを継承した場合、ストラテジーパターンは自動的に適用されるから、
されない。

されると思っているのはお前がストラテジーバターン(設計用語)を
勝手に継承(実装用語)と読んでいるから、

何度も言うが設計は使用例(応用例)、つまり目的が有る
「アルゴリズムを実行時に選択することができる」
という目的があってこそストラテジーバターンと呼ぶことができるのであって
この目的がなければ、継承を使っていたからと言ってストラテジーバターンにはならない

設計用語を使わないからお前は「継承を使っているものはすべて継承だー!」という
意味不明なことをいうつもりだろって言ってんの。

設計用語を使っていれば「継承を使っているものはすべてストラテジーバターンだー!」
という事になって言葉的には意味不明なことにはならない。
もちろんこれが間違っているのは先に言ったとおり。

設計能力が足りないよ?
2017/10/01(日) 01:20:27.48ID:H5Asg8Dc
>>140
> RubyのExceptionは派生しまくっている=メソッド/フィールド等が既に追加/上書きされているはずであり、
いや上書きされてない。
上書きする必要ようもないしな。
2017/10/01(日) 01:25:04.92ID:GRIqwmf+
>>142
メンバは追加されてるだろ。(多分)
全く同じで階層だけ与えてエントリポイントをずらしているのか?
走だとしたらかなり奇妙な使い方だとは思うが。
2017/10/01(日) 01:26:45.20ID:44WxUqLn
>>142
メンバは追加されてるだろ。(多分)
全く同じで階層だけ与えてエンポイをずらしているのか?
走だとしたらかなり奇妙な使い方だとは思うが。
2017/10/01(日) 01:30:18.31ID:H5Asg8Dc
>>143
> メンバは追加されてるだろ。(多分)
オーバーライドの話だっただろ。アホめw


例外クラスは、クラスの階層構造を表現するのに
継承が適切だから継承を使ってる。
すべてのErrorはExceptioであり、実行時に発生するのは
StandardErrorであり、ファイルIOに関するエラーはIOErrorである
という風にだ。

これは設計として正しい。

オーバーライドするかどうかは些細な問題にすぎない。
重要なのは各クラスにどういう関係があって(これが設計)
それをどう言語で表現するか(これが実装)だ


お前がずっとやってるのは、実装だけしか見てないってことだよ。
2017/10/01(日) 01:30:53.56ID:GRIqwmf+
>>141
言いたいことは分かるが、平行線だな。
2017/10/01(日) 01:32:35.82ID:H5Asg8Dc
>>146
お前は言いたいことがわかる(俺が言ってることを理解した)
俺はお前が言いたいことがわからない

平行線ではない
2017/10/01(日) 01:34:40.94ID:GRIqwmf+
>>145
それも既に書いたけどね。
>>124読め。

とはいえ平行線ならそれでいい。
2017/10/01(日) 01:36:17.23ID:H5Asg8Dc
>>146
すべてはお前が

ストラテジーバターンは継承を使ってるから
設計用語ではなく実装用語の継承と呼びましょう

そうするとストラテジーバターンなんて用語はいらないですよね?
ってことはデザパタ用語は全ていらないんじゃないですか?

使う目的なんか気にせず、実装に継承を使っていれば
全部継承と呼びましょうよ

だからデザパタは意味がない。ゴミ


というばーかな。理屈を言い出したのが悪い。
2017/10/01(日) 01:36:22.99ID:GRIqwmf+
>>147
> 俺はお前が言いたいことがわからない
じゃあ全部読み直せ。
それで分からないのなら、俺かお前の日本語が駄目駄目なだけであり、
どちらにしてもこれ以上は無理だ。
2017/10/01(日) 01:36:32.17ID:44WxUqLn
>>145
それも既に書いたけどね。
>>128読め。

とはいえ平行線ならそれでいい。
2017/10/01(日) 01:38:16.54ID:H5Asg8Dc
>>150
お前の日本語がダメダメだってことだろw

お前はコンテキストを理解してない。
設計の話をしている時に実装の話をすんな
2017/10/01(日) 01:40:22.72ID:H5Asg8Dc
使う目的が違うのに、実装に継承が使われているだけで
全部継承と呼ぶな。それは実装用語だ

ストラテジーバターンの目的として使ってない時に

ストラテジーバターンは継承♪
継承を使っていればストラテジーバターン♪
だから全部ストラテジーバターン♪

とか言い出すなボケ

ストラテジーとは別のバターンとして使っているときは
実装に継承が含まれていようが別のパターンだ
2017/10/01(日) 01:42:14.15ID:GRIqwmf+
>>149
>>66,79,84読め
現実的に使えないから使われてないのだと思うぞ。
これも平行線ならそれでいいが。

>>153
そんなことは言ってないんだが、そう読めたのならそれでいい。
2017/10/01(日) 01:43:39.80ID:H5Asg8Dc
> 現実的に使えないから使われてないのだと思うぞ。

現実的に使われてるから、使われてるとしか言いようがない
2017/10/01(日) 01:44:39.83ID:44WxUqLn
>>154
ストラテジーパターンって何?
ストパタのこと?
2017/10/01(日) 01:45:19.08ID:H5Asg8Dc
例えば、Railsのモデルに使われているActiveRecordというのは
もともとPoEAAのActiveRecordパターンという
パターンを実装したものだ

あまりにもRailsが有名になりすぎてRailsのものだと
勘違いしている人がいるぐらいにな。

これだけでも有名で大規模な利用例と言えよう
2017/10/01(日) 01:46:37.91ID:GRIqwmf+
>>155
> 現実的に使われてるから、使われてるとしか言いようがない
これって前から聞いてるけど、お前のリアルなの?
2017/10/01(日) 01:49:44.09ID:H5Asg8Dc
>>158
あぁ、レスが遅かったな。
すでにデザインパターンが使われてる例を一つ出したところだ


デザインパターンが使われていない証拠を出せ
デザインパターンが使われている証拠を出せ

これは

幽霊がいないという証拠を出せ
幽霊がいるという証拠を出せ

という話と似ている。幽霊がいないことを証明するのは難しいが
幽霊がいるという証明をするのは簡単
一匹でも幽霊を見つけてくればいい。

だから俺はデザインパターンが使われてる例を一つ出した。
お前は難しい方から攻めてくれ。デザインパターンが使われていないという証明をしろ。
2017/10/01(日) 01:52:23.50ID:GRIqwmf+
>>157,159
そうだとしてさ、その場合、
「AcriveRecordオブジェクトを継承しといてね」とは言うけど、
「AcriveRecordパターン使ってね」とは言わないだろ、普通。
2017/10/01(日) 01:56:02.10ID:44WxUqLn
#define パターン パタ
#define デザインパターン デザパタ
#define ストラテジーパターン ストパタ
#define メソッド メソ
#define フィールド フィー
これでだいぶコード量が小さくできる

他に入れとくべきものある?
2017/10/01(日) 01:56:44.56ID:H5Asg8Dc
>>160
だからお前は実装のことしか見れてないっていってんだよww
視野が狭すぎ

「AcriveRecordオブジェクトを継承しといてね」は実装の話だ

「AcriveRecordパターン使ってね」は設計の話だ。
(実際には誰かに頼まれて使ったのではなくRailsの生みの親のDHHが
考慮した結果AcriveRecordパターンを使っわけだが)

お前は設計がすんだあとの立場からしか見えてないんだよ。
お前の書き込み自体が「○○しといてね」と指示を出される側から見てるのがその証拠
お前は誰かがやった設計の通りに、実装することしかしたことがないんだろ?
2017/10/01(日) 02:01:22.65ID:44WxUqLn
実装は思想やモデル、指針を定義するパターンを実現する手法のひとつにすぎない
それだけのことだよね
2017/10/01(日) 02:03:57.54ID:GRIqwmf+
>>162
いや、指示を出す立場でも同じ言葉だと思うが。

よく知らないが、
> ActiveRecordのようなO/Rマッパーを使うと、
> オブジェクト指向プログラミングができるのはもちろん、
> モデル層の永続化のコードを基本的にライブラリ任せにできるので、
> SQLを記述する煩わしさを避けることができます。
> http://www.atmarkit.co.jp/ait/articles/1104/12/news135.html
つまり俺なら普通に「O/Rマッパー」って言うぞ。
それを厨二に「ActiveRecord(キリッ」と名付けるのは勝手だが、
何故俺がいちいち名前を覚えないといけないのだ?
2017/10/01(日) 02:05:21.68ID:44WxUqLn
>>164
ソフトウェア設計者ならパターンくらい覚えるものだろう
仕様書を元に実装するコーダーなら別だが
2017/10/01(日) 02:08:23.29ID:GRIqwmf+
>>165
むしろ覚えるべきは「O/Rマッパー」(一般用語)であって、
「ActiveRecord」(Rails方言)ではないだろ。
2017/10/01(日) 02:08:24.39ID:H5Asg8Dc
普通、設計は「○○パターンを使ってね」なんて言わないからなぁ。

言うとしたら「○○パターンを使いましょう」だ
なにもない所から使うパターンを考えることが設計作業なんだから。

設計者が実装者に指示を出すとしたら
「○○パターンを使いますから、必要なクラスを実装してください」か
もしくは「○○パターンを使います。そのために必要なクラスの一部を作りましたから、
あなたは○○オブジェクトを継承しといてね」になるだろう。

そう実装の話。実装の立場からしか物事を見れてないから
設計をすることの意味すらもわからず
設計に実装と同じような指示が存在すると墓穴をほってしまう。
2017/10/01(日) 02:09:16.78ID:H5Asg8Dc
>>166
O/RマッパーとActiveRecordは同じ意味ではない。
まずそこから勉強することが大事だよな?
2017/10/01(日) 02:11:38.94ID:44WxUqLn
>>166
Active Recordというワードで鬼の首取るしかなくなってるように見える
議論の本質はそこではないともうひと方は言っていることがはたから見てても汲み取れる
2017/10/01(日) 02:12:56.51ID:H5Asg8Dc
まあ、ご教授してさしあげると(笑)

O/Rマッパーは設計を意味する用語ではない
なにかのオブジェクトとデータベースをマッピングする
という目的のためにライブラリ・フレムワークの種類のことだ。

O/Rマッパーと言ってもそこにどんな設計が使われているかはわからない。
ActiveRecordパターンを使ってるかもしれないし
Table Data Gatewayパターンを使ってるかもしれないし
Row Data Gatewayパターンを使ってるかもしれないし
Data Mapperパターンを使ってるかもしれない
2017/10/01(日) 02:14:56.98ID:H5Asg8Dc
RailsのActiveRecordは
その名前の通りPoEAAのActiveRecordパターンを
実装したO/Rマッパーである

別にO/Rマッパー全てがActiveRecordパターンというわけではない
2017/10/01(日) 02:15:32.16ID:GRIqwmf+
>>168
はいはい、「O/Rマッパー」と「ActiveRecord『パターン』」な。
つかこの辺は普通に脳内補完しろよマジで。

>>167
それ前から疑問で何度も聞いているのだが、お前のリアルでは
> 「○○パターンを使いましょう」
と言っているのか?

これも何度も言っているが、ストラテジーパターンに該当するとして、
その際、継承/委譲/関数ポインタのどれにするかで大違いなので、
現実的に「ストラテジーパターンで行きましょう」なんて議論は無理で、
「ここは委譲にしとく?」みたいなことにならないか?
2017/10/01(日) 02:16:17.79ID:44WxUqLn
まとめると、基本設計(パターン)とそれを実現するために使う道具(ライブラリ等の具体的な実装)の区別をちゃんとつけて設計しましょう
ってことでFA?
2017/10/01(日) 02:17:03.31ID:H5Asg8Dc
Java の Hibernate という O/Rマッパーが
Data Mapperパターンを使っている

http://d.hatena.ne.jp/naoya/20051024/1130146687

> テーブルの構造とクラスの設計に乖離がある場合、
> その乖離を埋めるためのマッピングを用意してやる必要がある、
> これが Data Mapper パターン。Java の Hibernate とかが
> Data Mapper による O/R マッピング実装。
2017/10/01(日) 02:18:34.76ID:H5Asg8Dc
>>172
O/Rマッパーの実装として

ActiveRecordパターンを使ったRailsのActiveRecordと
DataMapperパターンを使ったJavaのHibernateを紹介した


ここからもO/Rマッパーという用語では
設計がわからんという話に納得できただろ?w
2017/10/01(日) 02:18:59.84ID:GRIqwmf+
>>170,171
それくらいは分かるが、と言うより、

・O/Rマッパー=OとRをマッピングするもの

であって、それ以上でも以下でもないんだよ。
ただし、中身の実装を知らなくていいというのがOOPであって、それで終わり。
2017/10/01(日) 02:20:16.08ID:H5Asg8Dc
> ただし、中身の実装を知らなくていいというのがOOPであって、それで終わり。

ア、ハイ、実装者側の立場からしか見えてないんですよね?w


中身の設計ぐらい知らなきゃw
2017/10/01(日) 02:21:21.14ID:44WxUqLn
少しずつ主張を変えていって最初からそう言ってるんだがってことにする論法って俗に何て言うの?
2017/10/01(日) 02:21:59.93ID:H5Asg8Dc
ちょっとまてw
終わった話を蒸し返す論法も使ってるぞw
2017/10/01(日) 02:26:02.99ID:GRIqwmf+
>>174
そのURL読んだけど、それって多分単純にその実装をそう呼んだだけであって、
いわゆるデザパタ(GoF)とはだいぶ主旨が異なるぞ。
まあそれを有り難がるのも自由だが。
2017/10/01(日) 02:28:09.18ID:H5Asg8Dc
実装者は使うライブラリ・フレームワークの設計をしらないと
めちゃくちゃになるからな。

例えば昔、トランザクションスクリプトパターンと
単なるSQLライブラリばかり使ってきた人が
別プロジェクトでPythonのDjango(これもActiveRecordパターン)を
使ったんだが散々な結果だったよ。

フレームワークとしてActiveRecordパターンを要求されるが
そこにActiveRecordパターンではやらないようなコード
(SQLを実行するだけのようなメソッド)をクラスに生やしたりして。

Djangoフレームワークの実装の中身は見なくてもいいけど
そこで使われている設計はちゃんと理解していなければダメだ。
2017/10/01(日) 02:28:25.53ID:44WxUqLn
あるOOPベースのライブラリを使うことで結果的にあるデザインパターンに沿うことになるライブラリと、いろんなデザインパターンを実現するのに使えるより純粋な道具としてのライブラリがあると思うの
そこはちゃんと分離して話をしないとダメだと思うの
2017/10/01(日) 02:28:51.27ID:H5Asg8Dc
>>180
お前(今までの流れから明らかに力不足)の
感想なんていらんがなw
2017/10/01(日) 02:30:10.95ID:GRIqwmf+
一応俺のスタンスは最初から変わってないつもりだぞ。
・デザパタはゴミ
・デザパタ厨もゴミ
・デザパタ用語は使い道がないからゴミ
2017/10/01(日) 02:31:34.05ID:44WxUqLn
>>184
そうだろうね
そしてそれはソフトウェア設計者としては二流以下だというのがこれまでの話の流れだと思うの
2017/10/01(日) 02:31:45.57ID:H5Asg8Dc
>>184
もう一つ。

・俺は無能なバカ

これも加えとけw
今までの流れで明らかになったしな
2017/10/01(日) 02:32:31.62ID:GRIqwmf+
>>181
それはある。
しかしそれは「フレームワークの中身を知っておけ」であって、「デザパタを知っておけ」ではない。
2017/10/01(日) 02:34:18.00ID:44WxUqLn
>>186
というより
・俺はデザインパターンとかめんどくさいから勉強したくないの
だと思う
2017/10/01(日) 02:35:51.52ID:GRIqwmf+
>>182
一応それは世間的には区別されているらしいぞ。(wikiだと思ったが、今探したがない)
・自分が思うように使うのがライブラリ
・フレームワークの場合は、自分が合わせる
2017/10/01(日) 02:36:36.93ID:H5Asg8Dc
>>187
> しかしそれは「フレームワークの中身を知っておけ」であって、「デザパタを知っておけ」ではない。

「フレームワークで使われてるデザパタを知っておけ」だ

俺はDjangoは当時知らなかったがActiveRecordパターンを知っていたから
使い方が間違っていることにすぐに気づいたぞ
特定のフレームワークに縛られない知識が重要という話だ。


あくまで実装者として立場からしか見れないお前は
今使ってるフレームワークの使い方で精一杯なんだろうけどな。

そしてフレームワークから呼び出されるコードしか書かないから
お前の世界にはデザパタがでてこないわけだよ。

全て理屈が通ったなw
2017/10/01(日) 02:40:26.75ID:GRIqwmf+
>>190
だからそれは「フレームワークがActiveRecord前提で組まれている」からであり、
それを「ActiveRecordパターン」と呼ぶのは自由だが、GoFの言う「デザパタ」とは違うって。
まあ平行線ならそれでいいが。
2017/10/01(日) 02:44:03.92ID:H5Asg8Dc
> GoFの言う「デザパタ」とは違うって。

そりゃそうだ。ActiveRecordパターンは

エンタープライズアプリケーションアーキテクチャパターン
https://www.amazon.co.jp/dp/B01B5MX2O2/
にのってるマーチン・ファウラーのデザインパターンなんだから
2017/10/01(日) 02:46:05.25ID:U1G3k+aG
>>184
そうだな
デザインパターンをデザパタと呼称する奴はゴミな場合が多い
2017/10/01(日) 02:50:38.64ID:GRIqwmf+
>>192
>>180読め
2017/10/01(日) 02:51:22.94ID:H5Asg8Dc
ちなみにJava の Hibernate という O/Rマッパーは
ActiveRecordパターンとともに紹介されている
Data Mapperパターンを使っているが

Hibernate はフレームワークではない。ライブラリである。
2017/10/01(日) 02:53:02.16ID:GRIqwmf+
むしろお前らが何故そこまで必死なのか分からん。再度言うが、>>172の後半、

>>167
それ前から疑問で何度も聞いているのだが、お前のリアルでは
> 「○○パターンを使いましょう」
と言っているのか?

これも何度も言っているが、ストラテジーパターンに該当するとして、
その際、継承/委譲/関数ポインタのどれにするかで大違いなので、
現実的に「ストラテジーパターンで行きましょう」なんて議論は無理で、
「ここは委譲にしとく?」みたいなことにならないか?

デザパタ厨の皆様、これに答えてくれよ。
2017/10/01(日) 02:55:34.72ID:44WxUqLn
デザインパターンは不要の長物といってる人はデザインパターンを理解してないと思われる
何かしらのソフトウェアをゼロから作り上げるにあたっては必ず何かしらの大枠となる基本設計思想や基本構造を構想して行われる
それがGoFのデザインパターンに一致するかもしれないし、新しい独自のデザインパターンかもしれない
デザインパターンという言葉は両者含めての言葉である
つまり、デザインパターンを持たないソフトウェアなど本来は存在しない
2017/10/01(日) 02:55:40.17ID:H5Asg8Dc
>>196
お前がなんでそんなことに必死になってるのか?
みんなそう思ってるよw

ストラテジーバターンでしか
お前はデザインパターンを否定できないってね。
2017/10/01(日) 02:57:01.13ID:H5Asg8Dc
>>196

> これも何度も言っているが、ストラテジーパターンに該当するとして、
> その際、継承/委譲/関数ポインタのどれにするかで大違いなので、
> 現実的に「ストラテジーパターンで行きましょう」なんて議論は無理で、

ここはいろんなアルゴリズムを実行時に切り替えられるようにしよう
であればストラテジーバターンで行きましょう。という議論になる。

アルゴリズムを実行時に切り替えられるようにしようという設計の話で
委譲にしておく?なんて実装の話は出てこない。
2017/10/01(日) 02:57:04.47ID:44WxUqLn
むしろお前らが何故そこまで必死なのか分からん。再度言うが、>>172の後半、

>>167
それ前から疑問で何度も聞いているのだが、お前のリアルでは
> 「○○パターンを使いましょう」
と言っているのか?

これも何度も言っているが、ストパタに該当するとして、
その際、継承/委譲/関数ポインタのどれにするかで大違いなので、
現実的に「ストパタで行きましょう」なんて議論は無理で、
「ここは委譲にしとく?」みたいなことにならないか?

デザパタ厨の皆様、これに答えてくれよ。
2017/10/01(日) 02:58:01.82ID:H5Asg8Dc
ほらなw
答えたのに無視するもんなー

こういうやつです
2017/10/01(日) 03:01:11.73ID:44WxUqLn
>>196
デザインパターンとは設計の大枠となる構造や指針であって、それを決めてからより具体的な実装を検討していくってだけなんだが…
2017/10/01(日) 03:04:15.90ID:GRIqwmf+
>>201
だからID見ろよマジで

とはいえ君が>>199ならそれでいい。
他の奴も出来れば>>196に回答よろしく。
俺はもう寝るが。
2017/10/01(日) 03:05:53.36ID:44WxUqLn
>>203
回答しといたぞ
2017/10/01(日) 03:07:26.90ID:GRIqwmf+
>>202
お前もどういう神経なのか分からんが、議論したいのなら普通に入ってこい。
邪魔したいのもお前の自由だが、だったらさらっと入ってくるな。
普通に迷惑行為をしてるんだぞお前は。
2017/10/01(日) 03:09:34.07ID:44WxUqLn
>>205
デザパタっていうなら省略ポリシーをちゃんと守って書きなって言ってるだけ
2017/10/01(日) 03:14:58.23ID:44WxUqLn
>>205
デザパタと言ったかと思えばストラテジーパターンと言ってみたり、中途半端なんだよ
そういうやつが書くコードは、ところどころポリシーが違ったりしてるいい加減なコードを書きそうだ
そんな調子だからデザインパターンも軽視するのだろう
2017/10/01(日) 03:20:07.22ID:H5Asg8Dc
デザパタと略すならストラテジーパターンも
ストパンと略すべきだろうな
2017/10/01(日) 03:23:34.93ID:44WxUqLn
>>208
いやそれはおかしいだろw
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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