X



オブジェクト指向システムの設計 174 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
0006デフォルトの名無しさん垢版2017/09/26(火) 23:00:24.75ID:wPSfJS/Y
smalltalk信者: 変化する環境に適応出来なかった絶滅種
デザパタ厨: 煽ることしか出来ない無能

次の患者、どうぞ
0008デフォルトの名無しさん垢版2017/09/26(火) 23:57:05.71ID:wPSfJS/Y
無能な煽りは逆効果だとも分からないほど無能なんだな。

デザパタなんてイラネな俺がいくら無能でも、
デザパタを勉強する価値がある事にはならんだろ。
肝心のデザパタ厨が無能なんだから。
お前ら当たり前の論理も組み立てられないのな。

結局はデザパタ厨もやりすぎて手段が目的になってる。
上級者の実装パターンを学び、実装時にそれを生かすのが目的なのに、
デザパタの暗記が目的になり、undoすら実装出来ないのでは意味無いだろ。
しかも自分がその程度だと気付けてないのも救えない。

全スレ>>945は訂正しておく
・933の実力>>>デザパタ厨=自分がundoの実装すらマトモに出来ない事に気づけない

布教したいのなら、お前らがやるべき事は、
実装方式を悩んでいる初心者に対し、「そこは○○パターンで(キリッ」と丁寧に教えることであって、
いくら俺を叩いても意味無いだろ。
まあお前らにはこれをやる実力すらないわけだが。
0014デフォルトの名無しさん垢版2017/09/27(水) 02:04:44.17ID:SJAHc9Lg
前スレ見てきた

> デザパタの暗記が目的になり、undoすら実装出来ないのでは意味無い

とか言ってる人がいたから、デザパタ厨とアンチデザパタ厨で実装対決してたのかと思ったら、誰もなにも実装してなかった
なるほど、undoすら実装できない人同士で設計論を争ってるのか
0015デフォルトの名無しさん垢版2017/09/27(水) 02:10:07.97ID:60RbULmH
デザパタの持つ意味も理解してなければ
デザパタとundoの関係も理解してない人が
デザパタイラネと言ってたのが前スレ
0017デフォルトの名無しさん垢版2017/09/27(水) 06:51:39.93ID:mNYogTbA
どんなコンテナ概念も全部「それは構造体だから〜」にする
いつもの「自動車は馬なし馬車だから」さんが居たのは憶えてる。
0019デフォルトの名無しさん垢版2017/09/29(金) 01:04:50.43ID:NSGi97+G
「注文」っていう動詞があったときに、
「振る舞い」と「操作」って何が違うんかな。
0020デフォルトの名無しさん垢版2017/09/29(金) 01:17:44.77ID:tjqo0EG6
>>19
主体が違うし、それがOOPの基礎でもある。
詳しくは優秀なつもりのデザパタ厨が説明してくれるのを待て。
0021デフォルトの名無しさん垢版2017/09/29(金) 02:19:10.82ID:RLeXl8wr
order.cancel() -> 注文の振る舞い
cancel(order) -> 注文に対する操作

ただしメソッドのことを操作と呼ぶ場合もあるから文脈による
0023デフォルトの名無しさん垢版2017/09/30(土) 01:29:46.30ID:/jgYbdHq
だからデザパタってなんだよ
デザインパターンすら打つのが面倒くせえ奴はプログラミングなんかやめちまえ
0026デフォルトの名無しさん垢版2017/09/30(土) 07:00:21.91ID:REKxOj2c
オブジェクト指向ができなくて悩んでいるのですが、アドバイスお願いします
例として商品は10種類まで、今はつり銭の概念が入ってくるとややこしくて考えられないので投入金額 = 価格のみ購入可能というすごいシンプルな飲料自動販売機を想定しています
フローとしては購入する()内で飲料型の商品変数のメンバ価格と投入金額を比較し、イコールだった場合在庫数を減らす()を呼ぶというふうに考えているのですがどうなのでしょうか?
また自販機がわかりづらい場合、他の例を出して頂ければそちらで設計しますのでお願いします

クラス図を貼っておきます
https://i.imgur.com/0Sthq5O.png
0027デフォルトの名無しさん垢版2017/09/30(土) 07:13:23.68ID:SiFkWGTC
どうなのって、正解があるわけじゃないから好きに作れよ
複雑そうなところはクラスの数を増やす、そうでないなら無理にクラス化しない
そういうことでどこまで作るかにもよるし
ユースケース図でも書け
0029デフォルトの名無しさん垢版2017/09/30(土) 09:04:38.47ID:fdjE74yE
デザパタ デザパタ デザパタ デザパタ デザパタ デザパタ デザパタ デザパタ
デザパタ デザパタ デザパタ デザパタ デザパタ デザハタ デザパタ デザパタ
デザパタ デザパタ デザパタ デザパタデザパタ デザパタ デザパタ デザパタ
0030デフォルトの名無しさん垢版2017/09/30(土) 10:19:36.24ID:bL0j7tMv
デザパタ厨はこういう時こそ「○○パターンで!」とやるべきだろ。
そもそもデザパタ厨ですら全く使わない(=見かけない)から最初の質問、
「本当に使われているのか?」が発生するのであって。
0032デフォルトの名無しさん垢版2017/09/30(土) 10:37:51.13ID:aRvHHZYR
StrategyとStateの違いって何よ
0033デフォルトの名無しさん垢版2017/09/30(土) 10:43:09.58ID:bL0j7tMv
>>31
それだとデザパタは使い物にならない=ゴミ、ってことになるだろ。
てか君はどっち派よ?
まずはデザパタ厨に説明する機会を与え、様子見すべきだろ。
0040デフォルトの名無しさん垢版2017/09/30(土) 14:21:26.94ID:MuV6ZELy
>>26
オブジェクト指向かどうかに関係ないが
内部構造を考える前にシステム境界の内側と外側のインタラクションをまず考えること
システム境界の内側と外側のインタラクションを定義するためには
各インタラクションを自然言語で明確に記述することからはじまる

それができれば一番外側のクラスのインターフェースを考える(慣れるまで内部状態は一緒に考えない)
次に一番外側のクラスのインターフェースをサポートするために必要な状態やクラスを考える
で新しく必要だと考えたクラスのインターフェースを考える
これを繰り返す
0041デフォルトの名無しさん垢版2017/09/30(土) 14:26:12.80ID:MuV6ZELy
>>26
- 「お金の投入」と「商品の購入」を別インタラクション? お金はどうやって投入するの?
- 「購入する()」は何も渡さず何も返さない?

↑こういう点が必要なインタラクションを把握できてないと感じるところ
0043デフォルトの名無しさん垢版2017/09/30(土) 17:15:12.31ID:NS2YjOla
>>26
出庫(商品id, 出庫日, 個数)
入庫(商品id, 入庫日, 個数)

在庫管理 {
在庫数を取得する(p_商品id) {
a = (select sum(個数) from 入庫 where 商品id = p_商品id)
b = (select sum(個数) from 出庫 where 商品id = p_商品id)
return a - b
}
入庫する(商品id, 入庫日, 個数) {
insert into 入庫 (商品id, 入庫日, 個数)
}
出庫する(商品id, 出庫日, 個数) {
if (個数 > 在庫数を取得する()) throw 例外("在庫数が足りません")
insert into 出庫(商品id, 出庫日, 個数)
}
}

自販機 {
ボタンクリックイベント() {
商品id = 押されたボタンに紐付く商品idを取得する()
在庫管理.出庫(商品id, 現在時刻, 1)
押されたボタンに紐付く商品を取り出し口に落とす()
}
}

グローバル例外ハンドラ {
未処理例外イベント(例外) {
エラーログを出力する(例外)
}
}
0045デフォルトの名無しさん垢版2017/09/30(土) 18:37:38.64ID:MuV6ZELy
>>43
- 無限に入庫できるの?
- ボタン押せばお金入れて無くても商品出してくれるの?
- 在庫数取得中にラスト1個の出庫が発生すると商品出てこないね

早まった詳細化はよくあるデスマーチパターン
0047デフォルトの名無しさん垢版2017/09/30(土) 19:22:12.04ID:NS2YjOla
>>45
要件に無いので無限に入庫できる
金銭の問題は質問者が別途考えることであり現在のコンテキストにはそぐわない
自販機において商品購入の並列処理は考慮しなくてよい

あまりにも馬鹿馬鹿しい指摘は今後スルーします
0048デフォルトの名無しさん垢版2017/09/30(土) 19:27:44.53ID:bL0j7tMv
結局デザパタは自販機クラスを構成する時の説明に使えないのか?
ならばデザパタは存在価値が無く、デザパタ厨はゴミだって事になるが。

俺の見立てでは、デザパタはセンスがない奴の勉強してますアピール時のアリバイ程度にしかならない。
肝心の構造実装を説明する時にも他の用語の方が適切だって時点でゴミ確定。
使い物にならないから誰も使わず、「本当に使われてるんですか?」という質問が発生する。
デザパタ厨は老害だよ。

デザパタが有用だと主張するなら、デザパタ用語でより分かりやすい説明を提供できないといけない。
そもそも俺はデザパタ厨は実装能力が全くなく、非デザパタ用語での説明すら出来ないと見ているが。

ついでに言うとsmalltalk信者もこういう時こそメッセージング指向(キリッで
素晴らしい実装を披露するべきであるんだがな。


>>43
ところでそれは何言語で何指向なんだ?
(なお俺も>>45は揚げ足取りで、現段階で必要な議論ではないと思う)
0049デフォルトの名無しさん垢版2017/09/30(土) 19:38:34.22ID:Cb9Aht4V
>>48
自販機クラスの構成の説明に使えないものはゴミなら、プログラミングの世界ってゴミばかりだねw
0050デフォルトの名無しさん垢版2017/09/30(土) 19:49:34.96ID:bL0j7tMv
>>49
そもそもお前らデザパタ厨は「『何に役立つから』デザパタを学ぶべきだ」という主張なんだ?
当然だが俺は、何にも役に立たないからゴミだ、という主張だ。
実際ここで使わないで、いつ使うんだ?という状況だろ。

> プログラミングの世界ってゴミばかりだねw
他に何がゴミだと思っている?
0053デフォルトの名無しさん垢版2017/09/30(土) 20:47:17.95ID:Lb08y44X
>>50
> そもそもお前らデザパタ厨は「『何に役立つから』デザパタを学ぶべきだ」という主張なんだ?

デザパタ本を最初に読んだ時、
俺がそれまで悩んでいたり自分で考えた設計が
紹介されていたから、やっぱりちゃんとした
本で勉強したほうが時間の節約になると
実感したから学ぶべきだって主張

あんたの世界が狭いんだろ?
フレームワークを使って、その中身だけを書いてる人は使わないだろうさ
自分の作ったアプリにプラグインの仕組みを取り入れようとしたり
テキストエディタなんかを作ろうと考えたら、必ずと行っていいほど使うよ。
0054デフォルトの名無しさん垢版2017/09/30(土) 20:58:31.09ID:bL0j7tMv
>>51
そりゃ>>26への回答だろ。
つか、俺は君の>>40-41よりも>>43の方が直接的で分かりやすいと思うが。
全部実装する必要もないし。

>>43
俺は48で何指向かと聞いたがこれは間違いだった。
これはOOPだね。見落とした。すまん。
0055デフォルトの名無しさん垢版2017/09/30(土) 21:05:07.39ID:bL0j7tMv
>>53
> 自分の作ったアプリにプラグインの仕組みを取り入れようとしたり
> テキストエディタなんかを作ろうと考えたら、必ずと行っていいほど使うよ。
ほう。何パターンを使うんだ?
前者は「DLL」、後者は前回も言ったがundoなら「逆方向履歴」等で、デザパタ用語は不要だろ。
これ以上に明快な説明をデザパタ用語でやってみろよ。
0056デフォルトの名無しさん垢版2017/09/30(土) 21:26:28.25ID:MuV6ZELy
要件定義をきちんとすれば自然に辿り着くことだけど
自動販売機をモデル化する場合に核になるのはステートマシン
それを理解せず設計したりコードを書いたりすれば
>>45で指摘したような問題が後から後から出てくる

設計時もコーディング時も
事前/事後/不変条件を常に意識することが大事
0057デフォルトの名無しさん垢版2017/09/30(土) 21:49:36.71ID:Lb08y44X
>>55
「デザパタ」が必要ないんじゃなくて
「デザパタ用語」が必要ないって
お前書いてるよね?w
0060デフォルトの名無しさん垢版2017/09/30(土) 22:23:39.23ID:bL0j7tMv
>>57
それは当たり前。
デザパタは登場時の時点で「既に頻出」な物に名前を付けただけ。
何も新しい物はない。普通にコード書けば使っている。
だから俺は「デザパタを別に勉強する意味はない」という立場。

>>59
> 逆方向履歴という機能を実装するのに
何パターン?
これにはパターンは無いはずだが。
(ただし俺は全て押さえているわけではないが)
0062デフォルトの名無しさん垢版2017/09/30(土) 22:26:30.68ID:bL0j7tMv
>>56
> 自動販売機をモデル化する場合に核になるのはステートマシン
これは多分違うぞ。
どのレベルからステートマシンと称するかにもよるが。
0063デフォルトの名無しさん垢版2017/09/30(土) 22:26:30.88ID:Lb08y44X
> デザパタは登場時の時点で「既に頻出」な物に名前を付けただけ。

たしかに世界にとっては頻出だろう?
だが勉強中の人にとっては知らない知識だ

だからその人が世界に追いつくために
勉強しなければいけないってことだ

なぜ頻出なものを自分で考え出さないといけないのか
それこそ時間の無駄だ
0065デフォルトの名無しさん垢版2017/09/30(土) 22:31:39.91ID:Lb08y44X
結局デザパタを認めないやつは
自分で考えだしたものが
実は教科書に乗っているようなものと
認めたくないんだろうな。
0066デフォルトの名無しさん垢版2017/09/30(土) 22:38:00.59ID:bL0j7tMv
>>63
> なぜ頻出なものを自分で考え出さないといけないのか
> それこそ時間の無駄だ
使える物は全て言語機能に採り入れられてるから、言語を学べば「使い方」は理解出来る。
そしてせっかく覚えた「デザパタ用語」は使い道がない。
中途半端に抽象化した結果、「ストラテジーバターン」=動的に対象関数を切り替える
とした場合、実装は「継承/委譲/関数ポインタ」等になり、実装時にはこれらの区別も重要な為、
「継承/委譲/関数ポインタ」が使われ、「ストラテジーバターン」が使われることはない。
だったら最初から言語機能をきっちり押さえた方がいい、というのが俺の立場。
(ただしJavaみたいな制限がきつい言語だと、言語だけ学んでも駄目だが)
0068デフォルトの名無しさん垢版2017/09/30(土) 22:40:17.60ID:Lb08y44X
> 使える物は全て言語機能に採り入れられてるから、言語を学べば「使い方」は理解出来る。

言語を学ぶの中にデザパタを学ぶが含まれているんだが?
なにを言ってるのだろうこいつは
0069デフォルトの名無しさん垢版2017/09/30(土) 22:41:49.90ID:Lb08y44X
ストラテジーバターンは継承/委譲/関数ポインタを応用して
作り出すパターン

単体の道具(継承/委譲/関数ポインタ)を
複数組み合わせて構造を作るのがパターン

やっぱりデザパタ分かってないんだなw
0071デフォルトの名無しさん垢版2017/09/30(土) 22:43:01.60ID:bL0j7tMv
>>68
> 言語を学ぶの中にデザパタを学ぶが含まれているんだが?
これは初耳だが、どの言語のことだ?
0072デフォルトの名無しさん垢版2017/09/30(土) 22:46:06.66ID:Lb08y44X
>>71
どの言語でも

継承ってなんですか?
→ 親クラスの機能をサブクラスが受け継ぐことです

継承を使うと何ができるんですか?
→ 応用例はいくつもあります。例えば〜のような使い方が出来ます。
このような使い方を○○パターンといいます。

っていうように道具を使った応用例として
デザパタがでてくるだろ

お前は継承という道具を勉強するだけで
その継承のいろんな応用例まで勉強中のやつが思いつくと思ってんのか?
0073デフォルトの名無しさん垢版2017/09/30(土) 22:49:13.24ID:bL0j7tMv
>>69
> 単体の道具(継承/委譲/関数ポインタ)を
> 複数組み合わせて構造を作るのがパターン
これは俺は無駄なバリエーションで名前の数を増やしているだけという立場。
お前らはテンプレートメソッド=継承という立場だったはずだが、
その場合、テンプレートメソッド、ストラテジー、コンポジットを別々にする意味はあるのか?
そして、この程度の差異で無駄に名前を増産する意味があるのか?
何の為にストラテジーパターンを抽象化したんだ?
0074デフォルトの名無しさん垢版2017/09/30(土) 22:51:54.36ID:bL0j7tMv
>>72
> → 応用例はいくつもあります。例えば〜のような使い方が出来ます。
> このような使い方を○○パターンといいます。
ねーよアホ。
デザパタが書かれる前から継承はあったし、使われてる。
継承は継承としか書いてない。
お前はデザパタ洗脳用の教科書を掴まされたんじゃないのか?
0075デフォルトの名無しさん垢版2017/09/30(土) 22:54:20.26ID:Lb08y44X
> その場合、テンプレートメソッド、ストラテジー、コンポジットを別々にする意味はあるのか?
使い方が違うからな。

第一な、無駄なリエーションで名前を増やしているというのなら、
言語なんて実は

・順次実行
・メモリ(I/O)読み書き機能
・演算機能
・(条件付き)ジャンプ機能

これだけの用語で十分。関数とか例外とかそんなものすらいない。
実際機械語はこのぐらいしか機能がない。
それ以外の機能は、これらの基本的な機能の応用例でしか無い。

だが、それだけじゃあまりにも基本的な機能すぎて
他の人と知識を共有できないから名前を増やすことで
短い単語で言いたいことを表現してるんだろうが
0077デフォルトの名無しさん垢版2017/09/30(土) 22:55:19.24ID:Lb08y44X
>>74
> デザパタが書かれる前から継承はあったし、使われてる。

だからなんだ。

使われてるその応用例をカタログ化したのが
デザインパターンなんだろ

プロが長年かけて最適なパターンを教科書に乗せて
初学者がすぐに追いつけるようにしたんだよ。
0078デフォルトの名無しさん垢版2017/09/30(土) 22:57:54.56ID:Lb08y44X
> 継承は継承としか書いてない。

当たり前過ぎ・・・
基本と応用の違いも理解できんのか。

初学者に継承を教えるだけで、
すぐに応用例が思いつくわけ無いだろ

基本(継承)を教えてから、基本機能を組み合わせて
応用(パターン)を学ぶんだよ。


継承とパターンが違うんだから、
継承のストラテジーパターンって書くわけ無いだろw

継承=ストラテジーパターンではない。
色んなパターンの中で継承が使われてる
ストラテジーパターン以外でも継承が使われている。
この2つの単語は同一ではない
0079デフォルトの名無しさん垢版2017/09/30(土) 22:59:02.15ID:bL0j7tMv
>>75
> 短い単語で言いたいことを表現してるんだろうが
おう、だからやってみろと>>55で俺は言ったはずだが、
お前も不都合なことは見えなくなる病気なんだな。

デザパタ用語は抽象度が中途半端すぎて、何にも使えない、というのが俺の立場。
まあ、>>55の回答を待つ。
0080デフォルトの名無しさん垢版2017/09/30(土) 23:00:35.25ID:wIKBotg5
>>69
> 単体の道具(継承/委譲/関数ポインタ)を
> 複数組み合わせて構造を作るのがパタ
これは俺は無駄なバリで名前の数を増やしているだけという立場。
お前らはテンメソ=継承という立場だったはずだが、
その場合、テンメソ、スト、コンポジを別々にする意味はあるのか?
そして、この程度の差異で無駄に名前を増産する意味があるのか?
何の為にストパタを抽象化したんだ?
0081デフォルトの名無しさん垢版2017/09/30(土) 23:01:38.79ID:bL0j7tMv
>>77
俺は>>72
> どの言語でも (中略)
> っていうように道具を使った応用例として
> デザパタがでてくるだろ
についてダウト!と言ってるんだよ。
理由は「継承」は「デザパタ」よりも古いから。

これに対する回答は?
0082デフォルトの名無しさん垢版2017/09/30(土) 23:15:32.07ID:Lb08y44X
>>79
> おう、だからやってみろと>>55で俺は言ったはずだが、

そこがお前ずれてるんだよ。

デザパタは「やること」ではない
(誰かが)やったことの知識だ

すでに「やってる」ことに過ぎない
何をやれと言ってるのかさっぱりわからない。
0083デフォルトの名無しさん垢版2017/09/30(土) 23:17:34.98ID:Lb08y44X
>>81
> 理由は「継承」は「デザパタ」よりも古いから。

古いから何なんだよ・・・

最初に継承が生まれ、それを使って
いろんなパターンが生み出された。

継承はパタ−ンよりも古くて当然だよ。

で「継承」は「デザパタ」よりも古いからなに?
0084デフォルトの名無しさん垢版2017/09/30(土) 23:18:06.00ID:bL0j7tMv
>>78
> 初学者に継承を教えるだけで、
> すぐに応用例が思いつくわけ無いだろ
いやストラテジーパターンは応用例ですらない。使用例だ。
誰でも思いつくというか、この使い方をする為に設計された言語機能が継承だ。
そして使い方なら言語の説明で一通り為されて居るものだ。

> 継承=ストラテジーパターンではない。
(意見としては)違うね。
継承を使った場合、ストラテジーパターンに該当しない物を作れない。
抽象度が異なる為、これらは確かに単語としては同じではないが、しかし、
「ストラテジーパターン」という単語を使って説明する適切な場合がない。
要らない単語をいたずらに増やしただけだ。
0085デフォルトの名無しさん垢版2017/09/30(土) 23:20:26.38ID:Lb08y44X
>>80
> その場合、テンメソ、スト、コンポジを別々にする意味はあるのか?

応用例の説明見れば分かる通り
使い方が違うんだから意味あるだろうな。

シチューとカレーなんてどちらもほとんど同じ材料が使われてるが
別々の料理になってるだろ。


お前が言ってるのはそういうこと
いろんなパターンで継承が使われてるが、その継承の
使い方の違いでパターンの違いになるんだよ。

どっちも同じ材料が入ってるから、
「にんじん+たまねぎ+じゃがいも料理」だ!
じゃないの
0086デフォルトの名無しさん垢版2017/09/30(土) 23:21:33.84ID:bL0j7tMv
>>82
> 何をやれと言ってるのかさっぱりわからない。
お前は本当に馬鹿なのか?
日本語が通じないようならこの辺で打ちきりにするが。

俺は、
> 他の人と知識を共有できないから名前を増やすことで
> 短い単語で言いたいことを表現してるんだろうが (>>75)
について、>>55で求めた、
> 前者は「DLL」、後者は前回も言ったがundoなら「逆方向履歴」等
よりも簡単な説明をデザパタ用語でやれ、と言ってるんだが。
0087デフォルトの名無しさん垢版2017/09/30(土) 23:21:47.75ID:Lb08y44X
>>84
> 誰でも思いつくというか、この使い方をする為に設計された言語機能が継承だ。

最初にストラテジーパターンというパターンがあって
継承が生まれただと?

ハハハ



なぜなら

> 理由は「継承」は「デザパタ」よりも古いから。
0088デフォルトの名無しさん垢版2017/09/30(土) 23:23:53.47ID:bL0j7tMv
>>83
なるほどお前は池沼なんだな。

> で「継承」は「デザパタ」よりも古いからなに?
デザパタ(1995)以前の「継承」を実装していた言語の仕様書、
例えば「プログラミング言語C++」(1983)において、
> どの言語でも (中略)
> っていうように道具を使った応用例として
> デザパタがでてくるだろ (>>72)
があり得ない、と言ってるんだが。
0089デフォルトの名無しさん垢版2017/09/30(土) 23:24:28.98ID:Lb08y44X
>>86

> 前者は「DLL」、後者は前回も言ったがundoなら「逆方向履歴」等
DLLはダイナミックリンクライブラリ
動的にリンクするライブラリと言うだけで、
それだけではどんなものかがわからない。

> undoなら「逆方向履歴」
逆方向履歴という機能を実現するにはいろんなやり方がある。
それだけではどんな設計を使うのかが決まっていない

その設計にどんなパターンを使うのが良いのか?
そこでデザインパターンの中から適切なものを探そう
0090デフォルトの名無しさん垢版2017/09/30(土) 23:26:32.68ID:Lb08y44X
>>88
あ、お前今が2017年だってわかってなのか?w

そりゃデザインパターンとしてカタログ化されてない
昔(1995)以前では、言語の勉強の中で
デザパタが登場するわけ無いだろwww
昔(お前の時代)にはデザパタ出てこないの当たり前だよーーーーw

今は言語の勉強の中で基本の応用として
デザパタを学習するんだよ。
0091デフォルトの名無しさん垢版2017/09/30(土) 23:27:35.90ID:Lb08y44X
いや、まかさ

俺の子供の時代にはそんなこと習わなかった

が根拠になっていたとはなwww
草www
0092デフォルトの名無しさん垢版2017/09/30(土) 23:29:01.75ID:bL0j7tMv
>>87
> 最初にストラテジーパターンというパターンがあって
> 継承が生まれただと?
お前は本当に馬鹿だな。

継承の典型的な使用例に「ストラテジーパターン」という名前を付けただけだ。
だけど実際は「継承」で全く問題なくて、しかも無駄に抽象化したから使いどころもなくなった。

というかどうやらデザパタ厨はマジで馬鹿で議論が出来ないのは分かった。
他の言葉が通じる連中が出て来たら再開する。
0093デフォルトの名無しさん垢版2017/09/30(土) 23:31:17.52ID:wIKBotg5
>>87
> 最初にストラテジーパターンというパターンがあって
> 継承が生まれただと?
お前は本当に馬鹿だな。

継承の典型的な使用例に「ストパタ」という名前を付けただけだ。
だけど実際は「継承」で全く問題なくて、しかも無駄に抽象化したから使いどころもなくなった。

というかどうやらデザパタ厨はマジで馬鹿で議論が出来ないのは分かった。
他の言葉が通じる連中が出て来たら再開する。
0094デフォルトの名無しさん垢版2017/09/30(土) 23:31:34.77ID:Lb08y44X
> 継承の典型的な使用例に「ストラテジーパターン」という名前を付けただけだ。

継承の応用例の一つとして「ストラテジーパターン」がある
応用例の一つであるということからもわかるように
継承を使った応用例はいくつも有るから

継承と言っただけで「ストラテジーパターン」を意味することにはならない。
だから「使い方」を言いたいときには「ストラテジーパターン」という必要がある。

継承はベースとなる機能
その継承の使い方がパターンなのである
0095デフォルトの名無しさん垢版2017/09/30(土) 23:32:35.29ID:bL0j7tMv
>>89
> その設計にどんなパターンを使うのが良いのか?
> そこでデザインパターンの中から適切なものを探そう
それも俺は要求済みだ。早く答えろ。

> > 逆方向履歴という機能を実装するのに
> 何パターン? (>>60)

お前は典型的な「都合が悪い物は見えない病気」だな。
まあこの議論を見れば、デザパタ厨がどれだけゴミか分かるだろうから、お前らの布教も捗るだろうよ。
0096デフォルトの名無しさん垢版2017/09/30(土) 23:33:05.80ID:Lb08y44X
> 継承の典型的な使用例に「ストパタ」という名前を付けただけだ。

継承の典型的な使用例と何度も言っていることからわかるように

ストラテジーパターンは継承の使用例の一つでしか無い
だから継承といっても使用例が定まるわけではない。


何度も言うぞ

継承の「典型的な使用例」がストラテジーパターンである
0097デフォルトの名無しさん垢版2017/09/30(土) 23:35:25.33ID:bL0j7tMv
>>94
だから
・継承を使っているがストラテジーパターンには非該当
の例を出せるか?多分無理なんだよ。だから、
> だから「使い方」を言いたいときには「ストラテジーパターン」という必要がある。
この分離は必要ないんだよ。
この言い方では通じないとは思うが。
0098デフォルトの名無しさん垢版2017/09/30(土) 23:36:17.57ID:Lb08y44X
何度も言うぞ

継承の「典型的な使用例」がストラテジーパターンである

継承の使用例の一つがストラテジーパターンであるが
継承の利用例は他にも有る。

では聞こう

継承とは何パターンか?
答えるわけがない。

継承の使用例の一つがストラテジーパターンであるが
継承の他の利用例は別のパターン名がついているからである。


継承は道具。使用例がパターン。
使用例であるパターン名を言わないと、
どんな使用例かは答えられない

何度も言うぞ

継承の「典型的な使用例」がストラテジーパターンである 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0099デフォルトの名無しさん垢版2017/09/30(土) 23:37:23.69ID:Lb08y44X
もうそろそろ、継承の「典型的な使用例」がストラテジーパターンである
という言葉の意味が理解できたことだろうか?


そう使用例がパターンなのである
0100デフォルトの名無しさん垢版2017/09/30(土) 23:37:53.05ID:wIKBotg5
>>94
だから
・継承を使っているがストパタには非該当
の例を出せるか?多分無理なんだよ。だから、
> だから「使い方」を言いたいときには「ストラテジーパターン」という必要がある。
この分離は必要ないんだよ。
この言い方では通じないとは思うが。
0103デフォルトの名無しさん垢版2017/09/30(土) 23:40:59.93ID:Lb08y44X
>>100

> ・継承を使っているがストパタには非該当
> の例を出せるか?

だせるが?

継承を使っている他のパターンはいくつも有るだろ?
だが、そのほかのパターンまで必要ない
継承の「使用例」がストラテジーパターンだ。
0104デフォルトの名無しさん垢版2017/09/30(土) 23:49:17.59ID:Lb08y44X
一つのクラスが複数のパターンを使っているってことは有るが
有るパターンが有るパターンを内包しているってのはない。

継承を使ってる他のパターンがストラテジーパターンを内包していること無い。

なぜそんな愚かな勘違いをするのか?

それはストラテジーパターンという使用例を
基本機能である継承と同一視しているからだ。

継承を使っているパターンはあるが
それはストラテジーパターンとして使っているわけではない。



継承とストラテジーパターンを同一視しているから、
そんな馬鹿な結論に至る。

これこそが、継承(基本機能)と応用(使用例)を
別々にしておくべきだという回答の一つでも有る
0105デフォルトの名無しさん垢版2017/09/30(土) 23:51:38.51ID:Lb08y44X
> Strategy パターンは、コンピュータープログラミングの領域において、アルゴリズムを実行時に選択することができるデザインパターンである。

と説明してあるように

アルゴリズムを実行時に選択しないのであれば
それはストラテジーパターンではない

継承を使っているからと言って実行時に選択するとは限らないからな

アルゴリズムを実行時に選択したい(使用例)ときに使うのが
ストラテジーパターンである
0106デフォルトの名無しさん垢版2017/09/30(土) 23:55:48.04ID:bL0j7tMv
>>105
だから、継承を使っていて、
> アルゴリズムを実行時に選択しない
例を挙げてみろ、と言ってるんだよ。
0107デフォルトの名無しさん垢版2017/10/01(日) 00:01:15.13ID:H5Asg8Dc
例えばRailsアプリだと一般的にモデルはActiveRecordクラスを継承して作るが
実行時にアルゴリズムを変えたりはしない
0109デフォルトの名無しさん垢版2017/10/01(日) 00:07:41.09ID:H5Asg8Dc
ActiveRecordクラスで実装されている
機能を利用するために決まってるだろw

蛇足だが

ActiveRecordクラスを使わないモデルもあって
その場合は例えばActiveModelを使う。

だが面白いことに、ActiveRecordクラスは継承するが
ActiveModelは継承ではなくinclude(MixIn)する

実際の所コードを再利用することが目的なので
継承以外にもやり方はあるということだ。

そう考えるとActiveRecordも継承するのは必須ではないということになるな。

まあ蛇足だがw
0110デフォルトの名無しさん垢版2017/10/01(日) 00:12:57.26ID:GRIqwmf+
>>109
> そう考えるとActiveRecordも継承するのは必須ではないということになるな。
当たり前だ。
virtualに対して全くoverrideしないのなら継承の意味はない。
それはある意味、典型的な間違った使い方だ。
そしてお前はそれも分からない馬鹿だということ。
0111デフォルトの名無しさん垢版2017/10/01(日) 00:13:18.18ID:H5Asg8Dc
トーンが明らかに下がってきたなw

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

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

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

継承を使うパターンは他にも有る。
使用例(応用例)が論点なのであって、何を使っているかは
デザインパターンとして考えるときには重要な事ではない。
0113デフォルトの名無しさん垢版2017/10/01(日) 00:16:29.39ID:GRIqwmf+
>>111
は?下がってないぞ。
俺はデザパタ=ゴミ、デザパタ厨=ゴミ、で変わりない。
ただしお前が馬鹿すぎて議論は無理だからフェードアウト気味なだけ。
0115デフォルトの名無しさん垢版2017/10/01(日) 00:21:43.29ID:H5Asg8Dc
>>113
でも、継承の「典型的な使用例」がストラテジーパターンである
という言葉に反論できてないじゃないですかーw

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

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

意味不明ですよね

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


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

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

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

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

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

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

だめでもなんでもない。

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

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

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

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

>>120
それはoverrideと同じ、というか、メソッドではなくメンバのoverrideになる。
0123デフォルトの名無しさん垢版2017/10/01(日) 00:51:22.19ID:H5Asg8Dc
>>121
お前さ、基本

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

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


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

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

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

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



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

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

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

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

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

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

意味はある。その例も出した。
0130デフォルトの名無しさん垢版2017/10/01(日) 01:03:39.76ID:GRIqwmf+
>>122
おれはRuby使いではないからチラ見ではよく分からんが、
見る限りrescueの仕様によるものであって、
Exceptionは派生しまくってるし、特に変だとも思わないが。
0131デフォルトの名無しさん垢版2017/10/01(日) 01:05:28.40ID:H5Asg8Dc
>>130
メソッド/フィールド等全てについて(将来的にも)全くoverrideしない
継承の正しい使い方だって言ってる
0133デフォルトの名無しさん垢版2017/10/01(日) 01:07:40.92ID:GRIqwmf+
>>126
> どんな設計を見た所で、その実装が継承使っていれば、
> これは継承と呼ぶべきだーって叫ぶつもりだろ?
そりゃそうだろ。
お前は継承使ってても「これは継承ではない!」というのか?
0135デフォルトの名無しさん垢版2017/10/01(日) 01:10:27.50ID:H5Asg8Dc
>>133
> お前は継承使ってても「これは継承ではない!」というのか?

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

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

っていう話をしてるんだが?
0137デフォルトの名無しさん垢版2017/10/01(日) 01:12:07.31ID:H5Asg8Dc
>>134
え? なに?

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

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

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

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

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

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

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

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


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

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

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


お前がずっとやってるのは、実装だけしか見てないってことだよ。
0147デフォルトの名無しさん垢版2017/10/01(日) 01:32:35.82ID:H5Asg8Dc
>>146
お前は言いたいことがわかる(俺が言ってることを理解した)
俺はお前が言いたいことがわからない

平行線ではない
0149デフォルトの名無しさん垢版2017/10/01(日) 01:36:17.23ID:H5Asg8Dc
>>146
すべてはお前が

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

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

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

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


というばーかな。理屈を言い出したのが悪い。
0150デフォルトの名無しさん垢版2017/10/01(日) 01:36:22.99ID:GRIqwmf+
>>147
> 俺はお前が言いたいことがわからない
じゃあ全部読み直せ。
それで分からないのなら、俺かお前の日本語が駄目駄目なだけであり、
どちらにしてもこれ以上は無理だ。
0152デフォルトの名無しさん垢版2017/10/01(日) 01:38:16.54ID:H5Asg8Dc
>>150
お前の日本語がダメダメだってことだろw

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

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

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

とか言い出すなボケ

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

>>153
そんなことは言ってないんだが、そう読めたのならそれでいい。
0155デフォルトの名無しさん垢版2017/10/01(日) 01:43:39.80ID:H5Asg8Dc
> 現実的に使えないから使われてないのだと思うぞ。

現実的に使われてるから、使われてるとしか言いようがない
0157デフォルトの名無しさん垢版2017/10/01(日) 01:45:19.08ID:H5Asg8Dc
例えば、Railsのモデルに使われているActiveRecordというのは
もともとPoEAAのActiveRecordパターンという
パターンを実装したものだ

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

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


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

これは

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

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

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

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

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

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

お前は設計がすんだあとの立場からしか見えてないんだよ。
お前の書き込み自体が「○○しといてね」と指示を出される側から見てるのがその証拠
お前は誰かがやった設計の通りに、実装することしかしたことがないんだろ?
0163デフォルトの名無しさん垢版2017/10/01(日) 02:01:22.65ID:44WxUqLn
実装は思想やモデル、指針を定義するパターンを実現する手法のひとつにすぎない
それだけのことだよね
0164デフォルトの名無しさん垢版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(キリッ」と名付けるのは勝手だが、
何故俺がいちいち名前を覚えないといけないのだ?
0165デフォルトの名無しさん垢版2017/10/01(日) 02:05:21.68ID:44WxUqLn
>>164
ソフトウェア設計者ならパターンくらい覚えるものだろう
仕様書を元に実装するコーダーなら別だが
0166デフォルトの名無しさん垢版2017/10/01(日) 02:08:23.29ID:GRIqwmf+
>>165
むしろ覚えるべきは「O/Rマッパー」(一般用語)であって、
「ActiveRecord」(Rails方言)ではないだろ。
0167デフォルトの名無しさん垢版2017/10/01(日) 02:08:24.39ID:H5Asg8Dc
普通、設計は「○○パターンを使ってね」なんて言わないからなぁ。

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

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

そう実装の話。実装の立場からしか物事を見れてないから
設計をすることの意味すらもわからず
設計に実装と同じような指示が存在すると墓穴をほってしまう。
0169デフォルトの名無しさん垢版2017/10/01(日) 02:11:38.94ID:44WxUqLn
>>166
Active Recordというワードで鬼の首取るしかなくなってるように見える
議論の本質はそこではないともうひと方は言っていることがはたから見てても汲み取れる
0170デフォルトの名無しさん垢版2017/10/01(日) 02:12:56.51ID:H5Asg8Dc
まあ、ご教授してさしあげると(笑)

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

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

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

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

これも何度も言っているが、ストラテジーパターンに該当するとして、
その際、継承/委譲/関数ポインタのどれにするかで大違いなので、
現実的に「ストラテジーパターンで行きましょう」なんて議論は無理で、
「ここは委譲にしとく?」みたいなことにならないか?
0173デフォルトの名無しさん垢版2017/10/01(日) 02:16:17.79ID:44WxUqLn
まとめると、基本設計(パターン)とそれを実現するために使う道具(ライブラリ等の具体的な実装)の区別をちゃんとつけて設計しましょう
ってことでFA?
0174デフォルトの名無しさん垢版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 マッピング実装。
0175デフォルトの名無しさん垢版2017/10/01(日) 02:18:34.76ID:H5Asg8Dc
>>172
O/Rマッパーの実装として

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


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

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

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

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


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

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

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

Djangoフレームワークの実装の中身は見なくてもいいけど
そこで使われている設計はちゃんと理解していなければダメだ。
0182デフォルトの名無しさん垢版2017/10/01(日) 02:28:25.53ID:44WxUqLn
あるOOPベースのライブラリを使うことで結果的にあるデザインパターンに沿うことになるライブラリと、いろんなデザインパターンを実現するのに使えるより純粋な道具としてのライブラリがあると思うの
そこはちゃんと分離して話をしないとダメだと思うの
0184デフォルトの名無しさん垢版2017/10/01(日) 02:30:10.95ID:GRIqwmf+
一応俺のスタンスは最初から変わってないつもりだぞ。
・デザパタはゴミ
・デザパタ厨もゴミ
・デザパタ用語は使い道がないからゴミ
0185デフォルトの名無しさん垢版2017/10/01(日) 02:31:34.05ID:44WxUqLn
>>184
そうだろうね
そしてそれはソフトウェア設計者としては二流以下だというのがこれまでの話の流れだと思うの
0187デフォルトの名無しさん垢版2017/10/01(日) 02:32:31.62ID:GRIqwmf+
>>181
それはある。
しかしそれは「フレームワークの中身を知っておけ」であって、「デザパタを知っておけ」ではない。
0189デフォルトの名無しさん垢版2017/10/01(日) 02:35:51.52ID:GRIqwmf+
>>182
一応それは世間的には区別されているらしいぞ。(wikiだと思ったが、今探したがない)
・自分が思うように使うのがライブラリ
・フレームワークの場合は、自分が合わせる
0190デフォルトの名無しさん垢版2017/10/01(日) 02:36:36.93ID:H5Asg8Dc
>>187
> しかしそれは「フレームワークの中身を知っておけ」であって、「デザパタを知っておけ」ではない。

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

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


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

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

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

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

エンタープライズアプリケーションアーキテクチャパターン
https://www.amazon.co.jp/dp/B01B5MX2O2/
にのってるマーチン・ファウラーのデザインパターンなんだから
0195デフォルトの名無しさん垢版2017/10/01(日) 02:51:22.94ID:H5Asg8Dc
ちなみにJava の Hibernate という O/Rマッパーは
ActiveRecordパターンとともに紹介されている
Data Mapperパターンを使っているが

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

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

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

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

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

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

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

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

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

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

デザパタ厨の皆様、これに答えてくれよ。
0202デフォルトの名無しさん垢版2017/10/01(日) 03:01:11.73ID:44WxUqLn
>>196
デザインパターンとは設計の大枠となる構造や指針であって、それを決めてからより具体的な実装を検討していくってだけなんだが…
0205デフォルトの名無しさん垢版2017/10/01(日) 03:07:26.90ID:GRIqwmf+
>>202
お前もどういう神経なのか分からんが、議論したいのなら普通に入ってこい。
邪魔したいのもお前の自由だが、だったらさらっと入ってくるな。
普通に迷惑行為をしてるんだぞお前は。
0207デフォルトの名無しさん垢版2017/10/01(日) 03:14:58.23ID:44WxUqLn
>>205
デザパタと言ったかと思えばストラテジーパターンと言ってみたり、中途半端なんだよ
そういうやつが書くコードは、ところどころポリシーが違ったりしてるいい加減なコードを書きそうだ
そんな調子だからデザインパターンも軽視するのだろう
0210デフォルトの名無しさん垢版2017/10/01(日) 08:46:24.59ID:GRIqwmf+
>>198
ストラテジーパターン以外についても前スレでさんざん
○○=△△パターン、って書いたろ。
まあいいが。


undoすらまともに実装出来ないデザパタ厨が、
何をどう勘違いしたら設計出来るつもりになれるのか不思議だったが、
だいぶ喋ってくれたので何となく分かったような気がする。
まあ後日読み返してみることにするよ。これについてはありがとう。
0212デフォルトの名無しさん垢版2017/10/01(日) 09:33:28.54ID:GRIqwmf+
>>211
まあ今日はもうやり合う気はないんだが、多分お前らは設計を根本的に勘違いしている。
例えば、>>174内URLで言うなら、

> Table Data Gateway は J2EE の DAO に代表されるパターンで、
> ひとつのインスタンスがテーブルの全部のレコードを扱うというもの。
> SQL を一箇所に集めることで保守性を上げましょうね、というもの。

普通の人の設計=後半部分を考えること
お前らの言う設計=この全文を覚えること

になってる。
ただしこれがお前らみたいに考える能力がない連中にとって現実解になり得るのかもしれん。
これは前にも言ったが。

> 自分がやったことあるところは自信あるもんな
これがお前らの世界観を端的に示している。
経験済みならパターンとして暗記しているから出来るが、やったこと無いと何も出来ない。
最初の卵は絶対に産めないわけだ。
実はお前らがundoをさも難しいと思っていること自体がかなり滑稽なんだがな。

とはいえ新しい意味での「コピペプログラマ」が跋扈する時代でもあるから、
お前らのやり方でもある程度通用するのは事実なのだろう。
デザパタ厨=コピペプログラマのようだし。
0213デフォルトの名無しさん垢版2017/10/01(日) 10:06:53.73ID:GRIqwmf+
まあとにかく俺は、
「動的に対象関数を切り替える」と言えば済むだけのところで
「ストラテジーパターン」と言い換えるのは、厨二以外の意味はないと思うけどな。
そして「AcriveRecordパターン」なんて言っちゃうのは厨二過ぎて付いていけない。
「Rails標準O/Rマッパーの実装方式」と言えば誰にでも通じるのに。

とはいえこういう状況も割とよくあるのも事実だが。
0214デフォルトの名無しさん垢版2017/10/01(日) 10:46:47.52ID:IPLbJXkb
なんども使う処理は関数化して名前を付けるだろ
デザインパターンもそれと同じだよ
この考え方を理解できない人ってめちゃくちゃ長い関数を書きそうだよね
仕事では絶対に付き合いたくないタイプ
0215デフォルトの名無しさん垢版2017/10/01(日) 11:25:29.81ID:DL6cgIdt
>>178
とくに名前ついてないと思うけど
頭の悪い子が無自覚に食い下がるときって、いつもこうなってると思う
だから、いつもの展開だなって思うだけ

おまえら、バターン君これ以上いじっても何の利も無いぞ
もうそっとしておいてやれ
0216デフォルトの名無しさん垢版2017/10/01(日) 11:57:55.99ID:GRIqwmf+
>>215
それは君らが枝葉に対してしか反論しないからなんだがな。
とはいえこの意味も分からないのだと思うが。
君らのやり方については名前が付いていたはず。
0218デフォルトの名無しさん垢版2017/10/01(日) 12:06:57.99ID:GRIqwmf+
ああ、捕捉しておくと、
ID:H5Asg8Dcは頭が悪くて、多分短期記憶領域が非常に狭い。
だから論理的に筋立てるのではなく、言葉尻を掴んで反論してくる。
というかそれしか出来ない。
だがまあ、それでも話す気はあるみたいだから相手してみた、というところ。
最初からちゃんと議論してくれればこの展開にはなってない。
とはいえ、今のID:H5Asg8Dcにこれを求めるのは無理だ。

ただ、こういう、お前らに問題があるのに相手のせいにするというのはゆとりに多いし、
ゆとりは本当に馬鹿だから他のゆとりもそう思ってしまってみんなで同調する事も多い。
今まさにそうだが。
で、そういうのにも上の世代はブチ切れているから、そこら辺は自覚した方がいい。
0219デフォルトの名無しさん垢版2017/10/01(日) 12:22:54.23ID:yUwdbVfT
今デザパタ勉強中だけど、undo実装のパターンも二つぐらいなかったか
メメントとあともうひとつぐらい
よくわからんけど、なんでそんなに否定したがるかわからん
0220デフォルトの名無しさん垢版2017/10/01(日) 12:37:16.11ID:H5Asg8Dc
ほらな? 個人攻撃を始めちゃったw

これが記憶能力が少なくて名前を覚えられなくて


2分ヒープ木を用いて並び替えする方式でも
隣り合う要素の大小を比較しながら整列する並び替え方式でも
あらかじめ順番通りに並んだバケツを並び替えを行う要素分用意して順番に格納された要素をバケツから取り出し並び替えする方式でも
10進数の0以上の整数値の場合、0?10のバケツを用意しソートを行う要素の下1桁目に対応するバケツに格納する方式でも
バラバラになっている配列データを再帰的に最小限まで分解を行い分解し終わった後、結合を行う並び替える方式でも
動的に対象関数を切り替えるようなやり方をしよう

っていうやつなんやでw
0224デフォルトの名無しさん垢版2017/10/01(日) 12:51:14.45ID:IPLbJXkb
PGは基本キチガイだよね
まともな奴だと逆に珍しい
もともとプログラム好きなオタクはもれなくキチガイだし
他の就職先なくてプログラマになったやつも内定取れないだけあって人間性のおかしなキチガイばかり
0228デフォルトの名無しさん垢版2017/10/01(日) 13:17:01.88ID:DL6cgIdt
>>225
身の程知らず、も初学者にありがちなパターンだよなw
コンパイラがバグってるだの
言語がゴミだのOSがカスだの
俺だけが正しくて世界の全員が間違ってるだの

なにか、自分が無敵に思えるタイミングが、学習の初期の初期に存在するんだろうな
0229デフォルトの名無しさん垢版2017/10/01(日) 13:19:21.72ID:GRIqwmf+
>>220
前スレ>>813読め
基本的に君は相手が何を言ったのか全く覚えてない。
だから話がループする。
それは君の問題だが、君の場合はそれが常である為に、その異常性に気付けない。
それはマジでヤバいぞ。リアルだったらブチ切れられて終わりのはず。

>>219
俺は、デザパタは役に立たない、デザパタ厨は全員undoすら実装できないのが証拠、という意見で、
それでも君が勉強するのは君の自由。
ただここら辺も前スレ818で言ったし、話は完全にループしてる。
結局俺は前スレ812の意見からほぼ修正されてない。

デザパタ厨はデザパタを暗記することが目的になっている。
GoFのはデザパタ厨が主張するように「設計用語」としては多少は意味があるが、(ただし使いどころがないからゴミ)
ActiveRecordとかのただの「実装の一例」を抽象化無しで「パターン」として取り扱うからおかしな事になる。

ただし、デザパタ厨=コピペプログラマにとってはこれが彼等なりの現実解なのだと思う。
これも前スレ927で言ったとおり。
0231デフォルトの名無しさん垢版2017/10/01(日) 13:21:35.33ID:H5Asg8Dc
> 俺は、デザパタは役に立たない、デザパタ厨は全員undoすら実装できないのが証拠、という意見で、

根拠が無いな。

世界中を調べてみたのか?
まさかこのスレだけで判断してないよな?
0232デフォルトの名無しさん垢版2017/10/01(日) 13:21:53.57ID:qGSPhC6b
>>229
>デザパタ厨=コピペプログラマ
これもよくわからんな
デザインパターンを把握してないプログラマほどありもののコピペのつなぎ合わせでしのぎそうだが
0234デフォルトの名無しさん垢版2017/10/01(日) 13:23:11.45ID:H5Asg8Dc
>>232
正解。

アルゴリズムはコピペできるが
デザイン(設計)はコピペできない。

なぜならコピペ元(デザパタのサンプル)は
名前もサンプルだからそのまま使えることはない
0237デフォルトの名無しさん垢版2017/10/01(日) 13:27:40.28ID:OXD0q5aq
>>236
ごめん
現場で一度も見たことない
派遣で結構たくさん大手まわったけど
マジで1回も見たことないよ
0240デフォルトの名無しさん垢版2017/10/01(日) 13:30:31.06ID:JkvRtWNG
>>237
フレームワーク作ってるなら
コマンド、テンプレートメソッド、ストラテジー、アブストラクトファクトリー
は鉄板でしょ
0243デフォルトの名無しさん垢版2017/10/01(日) 13:38:57.48ID:GRIqwmf+
ちなみに俺も>>241と同じで、
・デザパタ用語を敢えて使う状況がないから自然消滅した
という気がしている。
だから何度もデザパタ厨に「お前らのリアルで使ってるのか?」と聞いている。
0244デフォルトの名無しさん垢版2017/10/01(日) 13:38:58.29ID:yUwdbVfT
知らないことを誇るのってすごく恥ずかしいと思う
数学なんて役に立たねーってわめいてるバカ学生みたい
0245デフォルトの名無しさん垢版2017/10/01(日) 13:40:32.66ID:H5Asg8Dc
>>243
使ってるし使われてる。

お前はフレームワークを使うことしかやってないんだろ?
実装の立場でしか見れてない、
お前の仕事は設計が終わった後で設計にたずさわっていない。

そりゃ知らんはずだわw
0246デフォルトの名無しさん垢版2017/10/01(日) 13:44:03.36ID:DL6cgIdt
>>245
あんたつくづくお人好しだなw

数学なんて社会に出ても役に立たない!
って主張はたまに聞くが
その反論は意外と耳に届いてこない
なぜなら、反論しうる層の人々は
そこまでヒマでもないし、お人好しでもない
真顔のままで見下ろしてる
0252デフォルトの名無しさん垢版2017/10/01(日) 14:04:05.22ID:OXD0q5aq
ネット上でも当たり前にデザパタが使われて解説してるサイトとか無いの?
msも使ってないし
デザパタサポートしてるフレームワークとかも聞かないし
0253デフォルトの名無しさん垢版2017/10/01(日) 14:43:18.93ID:H5Asg8Dc
> デザパタサポートしてるフレームワークとかも聞かないし

言ってることがおかしい。

デザインパターンは設計なのだから
「サポートしている」という言い方はしない
よくある設計をサポートしているフレームワークと言い換えれば
おかしいのがわかるだろう?

その時点で間違っているというのがわかる。

設計は使うものなので、デザインパターンの設計が
使われているフレームワークはいくつもある

GUIライブラリはデザインパターンをよく使う場所だし
プラグイン的な仕組みにも使われてる
0254デフォルトの名無しさん垢版2017/10/01(日) 14:52:33.98ID:H5Asg8Dc
面白いことにデザインパターンへの批判には
矛盾する二種類の批判が有る。

一つは
・誰でも普通に使ってるものにわざわざ名前をつけるな

もう一つは
・誰もそんなものを使っていない


おもしろいやろ?
デザインパターンを批判している人同士で
対立してるんやでw
0255デフォルトの名無しさん垢版2017/10/01(日) 14:53:18.46ID:OXD0q5aq
>>253
え?ボタン押してパターン選択したら必要なクラスが勝手にできるんでもいいんじゃないの?
でも誰も使ってないからそういうのできないんだよ
0256デフォルトの名無しさん垢版2017/10/01(日) 14:54:50.36ID:OXD0q5aq
>>254
矛盾してないじゃんw
両方成り立つ
大事なのはデザパタのパターンでのやり取りを誰もしてないってこと
0258デフォルトの名無しさん垢版2017/10/01(日) 14:58:51.94ID:H5Asg8Dc
>>255
> え?ボタン押してパターン選択したら必要なクラスが勝手にできるんでもいいんじゃないの?

あははw
それは「デザインパターンを使って設計したもの」
つまり「設計が終わった段階」から

コーディングの仕事をお前にさせる時に
クラスの枠組みを自動生成しているだけだ。
UMLツールがそういったことをやってくれる

お前は設計が終わった後の
実装を振られているだけなんだよ
お前は設計をしたことがない
0259デフォルトの名無しさん垢版2017/10/01(日) 14:59:57.46ID:OXD0q5aq
>>257
話の内容を理解しないで言葉だけ捕まえてるじゃん

使ってるって言ってる人はデザパタの構造だけの話でしょ?
使ってないって言ってる人はデザパタのパターンでのやり取りの話じゃん

結局、下の状態でなければデザパタの主旨から外れてるんだから
デザパタは使われてないんだよw
0260デフォルトの名無しさん垢版2017/10/01(日) 15:01:34.39ID:H5Asg8Dc
上の方でも「デザインパターンをコピペ」とか
意味不明なことを言ってるやつがいたが
デザインパターンはコピペしても意味がない。
なぜなら設計(=構造)だからだ

自動生成したとしてもファイルや
クラスのインターフェースぐらいしか作成できない

アルゴリズムなどコピペするような処理は含まれていない
あくまで構造だけなんだからコピペしようがない
0261デフォルトの名無しさん垢版2017/10/01(日) 15:02:53.48ID:H5Asg8Dc
>>259
> 使ってるって言ってる人はデザパタの構造だけの話でしょ?

そもそもデザパタは構造のパターンですが?

> 使ってないって言ってる人はデザパタのパターンでのやり取りの話じゃん

「デザインパターンのパターンでのやり取り」ってなんですか?
パターン♪パターン♪
0262デフォルトの名無しさん垢版2017/10/01(日) 15:03:17.57ID:OXD0q5aq
>>260
雛形作ってくれてもいいだろ
デザパタを使ってるなら楽だと思うぜ
シングルトンって押したら勝手にやってくれてもいいしね
0267デフォルトの名無しさん垢版2017/10/01(日) 15:06:25.98ID:yUwdbVfT
>>263
そらデザパタ勉強してないひとらにあわせてるんでね?
一番レベル低いところに合わせるって日本的じゃない
0270デフォルトの名無しさん垢版2017/10/01(日) 15:10:19.52ID:H5Asg8Dc
>>266
だからデザパタが指定できるっていうのが意味不明
何を指定するんだ?

デザインパターンにはクラス名もメソッド名も
決められていない。(説明用サンプルは実際に使う名前じゃない)
クラス名もメソッド名も決まってないのだからコピペしようがないのがわかるだろ?


UMLツールなどで、デザインパターンを使って
設計者が設計していくんだよ。つまり
デザインパターンを表現するのに必要な
クラスとメソッドを書いていく。(クラス図)
そこから自動生成する。

デザインパターンを使うっていうのは、
コードの再利用じゃねんだよ。
設計レベルの話なんだから

いい加減、実装の世界からしか見れないのは卒業した方がいいよ
本当に技術力不足だから
0271デフォルトの名無しさん垢版2017/10/01(日) 15:12:01.22ID:yUwdbVfT
まあ別にデザパタ知らんでも仕事はできるだろうけどさ
知っとくと便利ってだけで
0272デフォルトの名無しさん垢版2017/10/01(日) 15:13:14.14ID:OXD0q5aq
>>270
だからボタン一発で作ってくれればいいじゃん
visualstudioみたいに
馬鹿だなお前w

まあ、この世に無いものの話だから理解できなきゃいいけどw
0276デフォルトの名無しさん垢版2017/10/01(日) 15:25:11.32ID:H5Asg8Dc
>>272
お前が思っているよりも遥かに
高次元レベルでデザインパターンは言語・ライブラリ・フレームワークと
融合していることが>>275からわかるぞ。

この上なにを自動生成したいのか?
0277デフォルトの名無しさん垢版2017/10/01(日) 15:28:50.57ID:H5Asg8Dc
> PostSharpは現在、次のデザインパターン用の既製の実装を提供している。
>

>
> これで、デザインパターンの既製の実装を使って、チームはAOPを学習せずに、AOPの恩恵に浴することができる。

まさにこの現象だろうな。

実装担当者は、すでにフレームワークなどの含まれてるデザインパターンを使うだけだから
デザインパターンを学習せずに、知らずに利用している。


そういうやつら(デザパターンの恩恵を受けてるやつ)が
デザインパターンは(実装者よりも前の設計者が担当が使うものだから)
使わないというのだろう。

視野の狭い事だ。視野っていうか、所詮コーダーって言えば良いのか
0278デフォルトの名無しさん垢版2017/10/01(日) 15:30:09.48ID:H5Asg8Dc
ジュニア開発者w

> デザインパターンの自動化の使用は、一般的に政治的に敏感な問題である 。
> なぜならそれは、チーム内で関心の分離を対処するからである。
> 典型的には、上級開発者は、デザインパターンを選択し、アスペクトを実装する。
> そしてジュニア開発者は、それらを使用する。上級開発者が検証ルールを記述し、
> 手書きのコードがアーキテクチャを尊重することを確実にする。
> ジュニアの開発者が全体のコードベースを理解する必要はないという事実は、実際には意図された効果である。
>
> この議論は、シニアマネージャーの視点を取り、ジュニアの開発者のプライドを
> 傷つける可能性があるので、一般的に取り組むにはデリケートものである。


ジュニアにはデザパタは不要だよwww
0280デフォルトの名無しさん垢版2017/10/01(日) 15:36:37.23ID:OXD0q5aq
このスレ誰も使ってないのにやたら頑張るなw
ぶっちゃけ、三○もN○Tもニ○ンもコニカミ○ルタもpana○onicもス○エニもシ○ープもN○Cも沖○気もク○タも富○通も
富士○機も東京○力も関西○力もS○NYも
使ってないから
0283デフォルトの名無しさん垢版2017/10/01(日) 15:44:38.60ID:OXD0q5aq
>>282
見たことねーw
連徹過ぎて記憶が飛んだ覚えしかねーわw
俺が関わったとこはまともな資料なんて無かったな

俺が実践で使えると思ったのは
N○Cだけだけどね
ここは1回行ってみる機会があれば
いい勉強になると思うな
0285デフォルトの名無しさん垢版2017/10/01(日) 15:49:09.29ID:H5Asg8Dc
>>283

> ぶっちゃけ、三○もN○Tもニ○ンもコニカミ○ルタもpana○onicもス○エニもシ○ープもN○Cも沖○気もク○タも富○通も
> 富士○機も東京○力も関西○力もS○NYも
> 使ってないから

> ここは1回行ってみる機会があれば
> いい勉強になると思うな

派遣の仕事って楽しい?
0287デフォルトの名無しさん垢版2017/10/01(日) 15:52:03.93ID:H5Asg8Dc
> 俺が実践で使えると思ったのは
> N○Cだけだけどね
> ここは1回行ってみる機会があれば
> いい勉強になると思うな

NECのこれを受講すればいいのかな?

https://www.neclearning.jp/courseoutline/courseId/JV104/
システム開発における詳細設計の位置付け、作業内容、
JavaEEアーキテクチャの特徴を学びます。また
、JavaEEを使用したWebアプリケーション開発に用いる主要な
デザインパターンとその適用方法を設計演習を通して修得します。
0288デフォルトの名無しさん垢版2017/10/01(日) 15:55:44.33ID:OXD0q5aq
>>287
そんなんじゃねーよ
ちゃんと要件定義書から設計、実装までルーチンワークで作れるマニュアルがあるんだよ
見てねー奴も多いんだけど
作った奴天才だと思ったわ
0289デフォルトの名無しさん垢版2017/10/01(日) 16:11:52.72ID:H5Asg8Dc
ルーチンワークしてるやつには
考える必要がある設計は不要だよ
お前は何も考えなくていい
0290デフォルトの名無しさん垢版2017/10/01(日) 16:22:04.09ID:IPLbJXkb
ルーチンワークで十分な仕事しかしてないだけだし
ルーチン化できると言う割に自動化はしないあたり本当はルーチン化できてないんだろうなぁ
0292デフォルトの名無しさん垢版2017/10/01(日) 16:37:01.00ID:H5Asg8Dc
>>291
> 考えないとわからないところなんて俺らの仕事の範囲ではないのかもな
だから設計は、俺ら=お前の会社の同僚 の
仕事の範囲でないんだろ?
0294デフォルトの名無しさん垢版2017/10/01(日) 17:41:42.32ID:yUwdbVfT
いやまじ、使わないというのは正しいんだろうよ
使わないから必要ないと思ってる時点でおさとが知れるというだけなのでは
0295デフォルトの名無しさん垢版2017/10/01(日) 17:49:10.14ID:H5Asg8Dc
伝言ゲーム理論を使えば三段論法で
デザパタが使われていないことを証明できる

デザパタは
俺は使わない

それは使わない

どれも使わない

だれも使わない

使わない

故にデザパタだ誰も使っていない
0296デフォルトの名無しさん垢版2017/10/01(日) 17:50:50.31ID:NdVkYjBm
iOSアプリ開発で公式ドキュメント読んでて
これなんかObjective-C固有のプログラムガイドかと思ったら
アップルのシステムやアプリじゃ実際にこんなパターンを使ってるよ参考にしてね!
だったっけなぁ…

Objective-C プログラミングの概念
https://developer.apple.com/jp/documentation/CocoaEncyclopedia.pdf

現行でこういうのを使いまくった上でiPhoneやiPadが町中で日々動いてるわけで
デザインパターンは無いんだ!デザパタ厨が!とか言われても
おじいちゃん、そろそろ引退したら?としか…
0297デフォルトの名無しさん垢版2017/10/01(日) 18:00:38.71ID:H5Asg8Dc
>>296
マジ書いてあんなw

多くのCocoaアプリケーションでは、モデルオブジェクトの状態が変化すると、
その通知はコントロー ラオブジェクトを 経由して ビューオブジェクトに伝わります。
図 7-2にこの様子を示します。2つの基 本的なデザインパターンが関与していますが、よりすっきりとしています。

図 7-2 複合パターンとしてのMVC(Cocoa)
User action
Update
Update
Notify
Mediator Strategy Controller
ModelView
Command Composite
Observer

この複合デザインパターンでは、コントローラオブジェクトはMediatorパターンと
Strategyパターンを 包含しています。モデルとビューの間でやり取りされるデータフローを、
両方向とも仲介していま す。モデルの状態変化はコントローラオブジェクトを経由して
ビューオブジェクトに伝わります。さ らに、ビューオブジェクトには、ターゲットアクション
機構の実装という形で、Commandパターン も含まれています。
0299デフォルトの名無しさん垢版2017/10/01(日) 18:03:18.29ID:H5Asg8Dc
もう一つ

複合デザインパターンとしての
MVC「Model-View-Controller」は、より基本的なデザインパターンをいくつか組み合わせた形のデザインパターンです。
基本パターンどうしの組み合わせにより、MVCアプリケーションを特徴づける、機能の分割や通信経路を定義しています。
しかし従来型のMVCは、組み合わせる基本パターンが、現在のCocoaのそれとは違っていました。その違いは主として、
コントローラオブジェクトやビューオブジェクトに与える役割に関するものです。
当初の(Smalltalk流の)考え方では、MVCはComposite、Strategy、Observerというパターンから成っていました。

Composite:アプリケーションのビューオブジェクトは、実際には入れ子になったビューの
複合体(composite)であり、このビュー群が協調して(ビュー階層の形で)動作します。この表示コンポーネントは、
ウインドウを頂点とし、その下にテーブルビューなどの複合ビュー、さらにその下にはボタンなどの分割できないビューがあります。
ユーザ入力や画面表示の処理は、複合体を構成するどのレベルでも可能です。

Strategy:コントローラオブジェクトは、いくつかのビューオブジェクトに対する戦略(strategy)を実装しています。
ビューオブジェクトの機能は(視覚的)表示に関わる範囲に限定し、インターフェイスの振る舞いが当該アプリケーションに
おいてはどのような意味を持つか、の判断はすべてコントローラに委譲します。

Observer:モデルオブジェクトは、自分自身と直接的な関わり合いがあるオブジェクト(一般にビューオブジェクト)の
状態が変化すると、その通知を受け取ります。
0302デフォルトの名無しさん垢版2017/10/01(日) 18:26:16.96ID:RRIZa9RT
デザパタ使えないアピールするモチベーションが、デザパタ使ってない自分肯定でしかないのが見え見えだから、つまんない議論だよ
0304デフォルトの名無しさん垢版2017/10/01(日) 18:51:21.95ID:qGSPhC6b
優越コンプレックスを抱えてる人は苦しいだろうなぁ
素直な心を取り戻せることを祈ってる
0306デフォルトの名無しさん垢版2017/10/01(日) 19:22:42.09ID:2hcCMVoe
>>26
凝った設計にもできるけど(たとえばDDDのドメインサービスとかさらに突っ込んだDCIのコンテキストベースで)
このくらいの要件なら自販機オブジェクトだけ定義して
在庫管理と商品種別はRDBで管理し、金銭投入→購入のタイミングで
SQLを発行して該当する飲料を商品種別テーブルからピックアップし、その後
在庫管理テーブルで在庫減らしのSQL発行で十分なのでは?

O/Rマッパーの使い方を学びたいならクラス図のようにオブジェクト化するのも手だけれども
0309デフォルトの名無しさん垢版2017/10/01(日) 23:59:30.23ID:DL6cgIdt
バターン君をいじめて
得るもんがあったのかどうか
各自寝る前に自問自答してほしい
0310デフォルトの名無しさん垢版2017/10/02(月) 00:03:17.40ID:1fd9LcjX
デザインパターンがいらないって言ってるやつは
実装側の視点でしか考えることができないってのがわかった。
これが得たものかな
0312デフォルトの名無しさん垢版2017/10/02(月) 00:09:14.81ID:wn2w8Fsj
>>308みたいに自演して
「結局キャットドアに戻ってきたな」とかだせえリセット図るの。
けっこうおっさん…つうより“じいさん”って歳で構造体から脳が進化してないから
オブジェクト指向側からのアプローチが歳で理解できない可哀想な初老
0313308垢版2017/10/02(月) 00:15:00.22ID:YWGKtTIQ
>>312
何の自演だよ?
どのレスと同じやつだと勘違いしたのか教えてくれ
0314デフォルトの名無しさん垢版2017/10/02(月) 00:20:41.00ID:j0IOuO2e
そろそろ設計の議論もやめるかって思う
プログラムってどう組んでも動くしね
正解なんてないんじゃないかなぁ?
って思うようになった
仮にあったとしてもそれをどうやって証明するのか?
非常に虚しい気がしてきた

デザパタ、オブジェクト指向使うだの使わないだの
どっちが正解もクソも組んで金もらえたらそれでしめーな話をグダグダうるせーよな給料安いくせに

今、組めている人間を否定することはできない
また、否定する必要もない

俺等が話してることは麻雀のどの牌を捨てたらいいか?みてーな話でどうでもいいんだよきっと
初っ端字牌がないから国士無双は狙っては駄目ですよ
って言ったところで実際に狙って来ちまったらそれを誰が否定できようか?
そんなくだらない内容なんだよ
0315デフォルトの名無しさん垢版2017/10/02(月) 00:37:35.29ID:cbUKrfm3
> プログラムってどう組んでも動くしね

動くだけじゃダメでしょw
最低限じゃん。
動くだけの汚いコードたくさん見たこと有るよ。
0317デフォルトの名無しさん垢版2017/10/02(月) 00:47:44.45ID:YWGKtTIQ
「プログラムを組む」っていう表現って何となく手続き的な臭いを感じる
プログラムを組み上げるものとして見てるってことだよね
0319デフォルトの名無しさん垢版2017/10/02(月) 01:12:12.35ID:j0IOuO2e
>>318
次の開発が無かったら保守にかけたお金は無駄だよね?
この辺は君等はトレードオフの問題を勝手にプラスサムの問題だと履き違えている
ぶっちゃけ馬鹿にしか見えないのであまりおおっぴらに言わない方がよい
0320デフォルトの名無しさん垢版2017/10/02(月) 01:15:20.46ID:j0IOuO2e
汎用性はトレードオフのはずだ
なぜ君等はつければつけるほどお得みたいなアホな考えもってるんだ?
保守なんかねーよ(あるかどうかわからないじゃん)
0321デフォルトの名無しさん垢版2017/10/02(月) 01:19:24.52ID:j0IOuO2e
改修の方向性も付けた汎用性が役に立たんようなもんだったらまるまる無駄であろ

でもこういう俺の確率が高い方もしくは損害が少ない方に倒す的考えも
所詮は麻雀の捨て牌議論と何も変わらないんだろうな
って話だな

やっぱ意味ねぇよな設計に拘るのはやめたほうがいいな
金にならねぇ
0322デフォルトの名無しさん垢版2017/10/02(月) 01:25:51.90ID:cbUKrfm3
>>316
> でも客からしたらどうでもいいよね

いくらでもコストがかかってもいいなんて言う客はいないよ
0323デフォルトの名無しさん垢版2017/10/02(月) 01:27:35.32ID:cbUKrfm3
>>320
> 汎用性はトレードオフのはずだ
汎用性の話はしてない

同じコードを何度も書いたり
コピペするとコストがかかるって話をしてる
0327デフォルトの名無しさん垢版2017/10/02(月) 09:37:00.33ID:/w0x9Uo4
使い捨てのどうでもいいシステムは
使えない単価安い奴に
やらせとけって話じゃないの

まあ保守は作り始めた時点から始まってるから
リリースまで行けないかもしれないがな
0332デフォルトの名無しさん垢版2017/10/02(月) 16:11:15.50ID:hd0o7pZ3
>>331
デザインパターンて、将棋における定石みたいなもんじゃん
定石覚えてなくても駒動かせれば将棋はできるけどねー
0334デフォルトの名無しさん垢版2017/10/02(月) 19:37:25.82ID:cbUKrfm3
定石は役立たずのゴミ
飛車は移動して右下隅の王を金銀桂馬香車で囲う
って言ったほうがわかりやすいじゃん

そもそも定石なんて知らなくても将棋はできるし、
何十年もやっていれば定石なんて自然に思いつく
0335デフォルトの名無しさん垢版2017/10/02(月) 20:16:28.02ID:j0IOuO2e
AIに以前からの定石がひっくり返されてるらしいなw
デザパタもAIにひっくり返される日も近いなw
0336デフォルトの名無しさん垢版2017/10/02(月) 20:25:48.81ID:YWGKtTIQ
将棋で言う定石はデザインパターンよりももっと粒度の大きいパターン
MVCかMVVMかみたいな
デザインパターンは手筋に近い

何十年もやってれば自然に思いつくことを
数週間から数ヶ月程度の断然短い時間で理解できるようになることや
より高い抽象度で物事を考えられるようになることに価値がある

おじいちゃんに何言っても無駄かもしれんが
0338デフォルトの名無しさん垢版2017/10/02(月) 20:40:58.78ID:ET3hV4TH
そりゃあ常識はひっくり返されるためにあるからな
ひっくり返ってそれが有益ならそれでいいじゃん
0339デフォルトの名無しさん垢版2017/10/02(月) 20:42:54.27ID:cbUKrfm3
>>336
> 何十年もやってれば自然に思いつくことを
> 数週間から数ヶ月程度の断然短い時間で理解できるようになることや

寿司学校に3ヶ月通っただけの店がミシュランになるなんて許せん
10年間下積みをしてやっと職人になれるんや。
寿司の修行ってのはなぁ、寿司の勉強じゃなねぇだよ
0340デフォルトの名無しさん垢版2017/10/02(月) 21:15:12.14ID:XscuzJF4
そもそもこんなスレがあること自体おかしいんだよ
オブジェクト指向設計なんてやってればそのうちできるようになるし、それが人と比べてどうなのかなんて気にする必要もない
人それぞれのオブジェクト指向でいい
0342デフォルトの名無しさん垢版2017/10/02(月) 21:26:35.73ID:ET3hV4TH
>>340
それをあーやこーや言い合うのが子のスレなんじゃないの
デザインパターンを学習することによる不利益を逆に教えてほしいんだが
0346デフォルトの名無しさん垢版2017/10/02(月) 22:32:16.34ID:YWGKtTIQ
>>339
ネタじゃなく本気で寿司屋と比べてるなら
ソフトウェアの世界から早めに足洗って転職したほうがいいよ
0349デフォルトの名無しさん垢版2017/10/03(火) 01:32:34.93ID:yLH9r4Cn
寿司屋の板前っていうより半完成品を卸してる問屋みたいなもんだろ
で、おまえらはひたすらごはんを詰め込む係
プロパー様がネタを乗せて最後に元請け営業様がたんぽぽ乗せる
0350デフォルトの名無しさん垢版2017/10/03(火) 07:32:10.18ID:ObXIbUik
スシローはIT化進んでるから寿司はオブジェクト指向で管理してるよな

インタフェース名はsushiと予想する
0353デフォルトの名無しさん垢版2017/10/04(水) 20:25:20.81ID:oJzQgUY3
オブジェクト指向スレで寿司の話題だから、
シャリを基底クラスに例えてネタごとにシャリクラスを継承、
軍艦巻インターフェイスの実装とか、お子様にはワサビプロパティをtrueにとか、
そんな話かと思ったら全然違った。
0356デフォルトの名無しさん垢版2017/10/05(木) 07:17:31.37ID:gKycoOZO
寿司クラスのプロパティはシャリネタワサビだろ

スシローに関して言えばワサビのプロパティは不要
0359デフォルトの名無しさん垢版2017/10/05(木) 08:16:20.73ID:qwtqiP1S
わさびの量を調整したい場合はどう拡張すればいいの?
例えば罰ゲームで使うような山盛りわさび寿司
外国人向けの程よくわさび増量

あと、わさび巻の場合はわさびプロパティの内容はどう持つべきか?
0365デフォルトの名無しさん垢版2017/10/05(木) 23:44:16.07ID:W3Z8qYkC
>>363
キャットドアはやめろ
オブジェクト指向云々とは別のところに問題がある
またこの手の話するならちゃんと要件定義してからやれよ
0366デフォルトの名無しさん垢版2017/10/06(金) 00:35:25.91ID:jRqiq413
>>365
1つ賢い意見が出たな

要件定義をしないとキャットドアは作れない!

他のものもそうでないかな?
0367デフォルトの名無しさん垢版2017/10/06(金) 00:59:27.12ID:HTxWyqCb
どういう用途のソフトウェアかに関係なく
オブジェクト指向でモデリングできると思ってるやつが多々いるのはオブジェクト指向に密接に関係した問題
0369デフォルトの名無しさん垢版2017/10/06(金) 08:14:28.44ID:fl7uW9c1
>>366
寿司屋はわかりやすくね?
キャットドアやるならまずドアを作ってから継承するなりで基礎がないと
0374デフォルトの名無しさん垢版2017/10/06(金) 14:21:58.68ID:5osgMmV8
>>359
enum ワサビ量 {なし, ちょっぴり, 少なめ, やや少ない, 普通, やや多め, 多め, メガ盛り, ギガ盛り, テラ盛り, ペタ盛り, ワサビのみ};
0377デフォルトの名無しさん垢版2017/10/06(金) 21:48:40.87ID:Em99Pggz
処理の流れがあちこちに飛ぶし
あちこちから飛んでくるし
「これ誰が保守するんだ?」って気分になってる。
ちょっとした修正が今までならピンポイントでテスト合わせて30分位のところが
全体見るために3時間かかる感じ。
能力高くないと無理だと思うけど人手不足だし集められるかな?
もっと緩いオブジェクト指向でいいと思う。
こんなガチガチで上手くいったプロジェクトってあるの?
0378デフォルトの名無しさん垢版2017/10/06(金) 22:04:02.02ID:T+Euxqip
>>377
犬のしょんべんに当たっちまったな
自分以外の奴がソースコードを読めないようにする工夫だそれ

元凶がインターフェースで
継承してあるすべてのクラスのインスタンス作成箇所全部をチェックしないと処理がわからない
0379デフォルトの名無しさん垢版2017/10/06(金) 22:05:57.94ID:Y8RIMSRs
チンポについて教えてください。
チンポをインスタンス化して、引き数にマンコを持つキンタマメソッドの戻り値
ザーメンを取得したいのですが、コンパイル結果がフニャチンになります。
どうしたらいいですか。
0382デフォルトの名無しさん垢版2017/10/06(金) 23:17:58.09ID:H+o2EjG4
>>377
ほんとにガチガチならそのクラスを作ったやつの後任者〜お前の前任者までの間で間違ったクラスの使い方が広まったんだろうよ
0384デフォルトの名無しさん垢版2017/10/07(土) 05:03:01.30ID:8/GtqdSW
“これはこれをする奴”と一目でわかって
処理飛ばした後はそいつがよしなにやるから
細かいことは考えなくていい。
というのがオブジェクト指向の売りだから
「コイツはなにやってんだよ!」と処理追うのに混乱するようなのは
基本を履き違えてる気はする。
変なとこから流れてきた自称プログラムのプロがやりがちな
暗号みたいなクラス名とか
0386デフォルトの名無しさん垢版2017/10/07(土) 07:09:22.30ID:sBPFzIIo
インターフェースが現況って言ったってクラス名とメソッド名である程度目的はわかるようになってるんじゃねえの
それができてないなら単なる設計ミスじゃん
0387デフォルトの名無しさん垢版2017/10/07(土) 07:23:39.11ID:6GKmJG1C
>>386
バカの作るインターフェースは思いつきで入れた汎用性を実現するものだからそもそも設計書に書かれない
0389デフォルトの名無しさん垢版2017/10/07(土) 08:28:19.15ID:nPfSE+SF
>>384
手続き型みたいなのでバグ探すと、大体1ファイルの中見て
処理の流れもその中だけ追えば良くて
シンプルな流れだからチョイチョイってできるけど
完全なオブジェクト指向だと、
「この値を設定してるのは、ここ、
…、
じゃなくて、コイツ他のとこで設定してるのか〜、
ここ?
あ、もっと上か〜」
みたいにあちこち辿っていくから
あんまり良いことに感じないけど。
影響範囲も広いし。
考えなくていいのは、製造するときに何が何をすると
ハッキリと決められてる時で
どこにバグあるかとか見るときは
「ここだろう」と最初に思ったとこではなかったりしなくね?
設計が難しいなら、
バカでもできる簡単な設計で済む手続き型最強な気がする。
0390デフォルトの名無しさん垢版2017/10/07(土) 08:32:25.87ID:nPfSE+SF
>>389は詳細設計書位しかなくて、クラス図とかもろもろないケースの話で。
0391デフォルトの名無しさん垢版2017/10/07(土) 08:45:17.84ID:XbHkmFTG
>>389
ガチガチのオブジェクト指向ならその値がどこで設定されたなんか関係ないよ
今受け取った値に対しての動きをするだけ
0392デフォルトの名無しさん垢版2017/10/07(土) 08:56:39.98ID:YsvN5rHZ
ワンインスタンス内ではメンバはグローバル変数みたいに振る舞うから
継承多くなるとっていうかある時点でクソ言語になるんだよね
0393デフォルトの名無しさん垢版2017/10/07(土) 08:59:42.95ID:gjULmNh3
>>389
>>384
>手続き型みたいなのでバグ探すと、大体1ファイルの中見て
>処理の流れもその中だけ追えば良くて
>シンプルな流れだからチョイチョイってできるけど

これはむしろオブジェクト指向の特徴だね

>完全なオブジェクト指向だと、
>「この値を設定してるのは、ここ、
>…、
>じゃなくて、コイツ他のとこで設定してるのか〜、
>ここ?
>あ、もっと上か〜」

これは典型的な手続き型のデバッグだよね

もしかしてスレ加速を狙ってわざと間違えてる?
0394デフォルトの名無しさん垢版2017/10/07(土) 09:01:52.28ID:YsvN5rHZ
>>393
それ明らかに俺から見て逆だわ
処理に対して一旦オブジェクトで纏めるオブジェクト指向がそこの辺シンプルになるわけねーだろチンカス
0395デフォルトの名無しさん垢版2017/10/07(土) 09:07:01.43ID:gjULmNh3
>>394
あ〜
うん
まあそういう人も居るよね
存在を否定はしないよ
民主主義国家の人民は自由であるべきだ
0396デフォルトの名無しさん垢版2017/10/07(土) 09:13:58.30ID:XbHkmFTG
>>395
393で言いたいことはまぁわかる
けど自分が多数派であると思い込んでるのはおかしい
おまえの中の「〜べき」って論は他人に通じないので押しつけないで
0397デフォルトの名無しさん垢版2017/10/07(土) 09:33:31.18ID:gjULmNh3
>>396
いろんなコミュニティに顔だしてみなよ
リアルが無理ならネットコミュニティだけでもいい
>>393が常識的な認識だよ
0399デフォルトの名無しさん垢版2017/10/07(土) 09:45:43.21ID:fUAr46yo
呼び出し階層が深いだけで可読性が低いなら抽象化が下手なだけで、オブジェクト指向に限った話じゃない

呼び出し元や定義にジャンプする機能のないエディタ使ってると辛いとか
DIでコンフィグから実装を注入してると追うのが面倒くさいとかなら分かる
0401デフォルトの名無しさん垢版2017/10/07(土) 10:08:41.11ID:HG4cr/37
>>398
> どこにそんなの書いてあるんだよ


いろんなコミュニティ
0402デフォルトの名無しさん垢版2017/10/07(土) 10:17:47.53ID:b4KK/o19
いろんな考えかたの人がいる
それは認めるべきだ
オブジェクト指向が好きなやつも手続き型が好きなやつもみんな自由と権利を持っている

でもここはオブジェクト指向のスレなので
手続き型に興味があるなら手続き型スレで議論を深めればいいんじゃないかな?

手続き型システムの設計 1 [無断転載禁止]©2ch.net・
http://mevius.2ch.net/test/read.cgi/tech/1500282714/

オブジェクト指向がわかりにくくて嫌いだからといってもオブジェクト指向のコミュニティを荒らしてもいい理由にはならないだろう
住み分けは大事だ
0406デフォルトの名無しさん垢版2017/10/07(土) 10:33:11.71ID:AzEsxXfu
ガチガチに手続き型で組んだプログラムなんて見とうないわ
あちこちに飛ぶから云々ってマジでいってんのか
0407デフォルトの名無しさん垢版2017/10/07(土) 10:44:43.23ID:b4KK/o19
あちこち飛ぶからいいんじゃねえか
飛ばなかったら全ての処理が一箇所に集まってパンクするだろw
0408デフォルトの名無しさん垢版2017/10/07(土) 11:50:23.50ID:h9kzLMoI
飛び方がキレイな木の枝のようになっていればよい
枝から枝へモモンガのように飛ぶ処理が入っていたら地獄だ
0409デフォルトの名無しさん垢版2017/10/07(土) 14:53:33.77ID:8/GtqdSW
というか、オブジェクト指向はクラスに責任を持たせることで
責任が遡ったり他へ波及するのを防ぎデバッグも局所化して容易にする思想なので
どこかで一目でわかるように「この値を設定する一意の責任を持つのはおまえ」と
責任を持った誰かがいて、正しく作ってればそこから周りにゴミが飛び散るはずがないので

>「この値を設定してるのは、ここ、
>…、
>じゃなくて、コイツ他のとこで設定してるのか〜、
>ここ?
>あ、もっと上か〜」

とか、それのどこがオブジェクト指向だ。>>393と同じ感想
0412デフォルトの名無しさん垢版2017/10/07(土) 16:08:52.04ID:b4KK/o19
素人がインターフェースを使うと実装に強く依存してしまうことがある
実装クラスの内部的な挙動を前提にするとかね
0414デフォルトの名無しさん垢版2017/10/07(土) 17:51:59.67ID:HG4cr/37
>>408

なに? お前、モモンガ先輩の事ディスってるの?
0421デフォルトの名無しさん垢版2017/10/08(日) 09:02:57.57ID:jBiYbWN1
オブジェクト指向の設計の話をしてると
このクラスはこのことを知ってるべきだ、イヤ知らないべきだ
なんて話がよくあるが
アスペの代表的な特徴として自分の視点でしか考えられない
ということかあるのでアスペにOOは無理
0422デフォルトの名無しさん垢版2017/10/08(日) 09:11:34.28ID:Iqz4qArZ
>>421
確かにアスペに取り扱いは難しいな
だが言うなればオブジェクト指向はアスペクラスの集合体だからアスペ視点は大切
0424デフォルトの名無しさん垢版2017/10/08(日) 09:24:39.06ID:jBiYbWN1
>>422
1人1クラスずつ作るのか
他の人のクラスを利用することがないからゴッドクラスが乱立するな
最悪だ
0425デフォルトの名無しさん垢版2017/10/08(日) 09:27:10.43ID:4gVJmCxE
そういう現場は多いよ
見積もりしやすいとかいう頭が悪い理由で、画面を作業単位にして割り振るから
神画面クラスがいくつも出来上がる

挙げ句の果てにその見積もりも根拠なしの適当な数字ときたもんだ
0428デフォルトの名無しさん垢版2017/10/08(日) 09:51:49.98ID:jBiYbWN1
>>425
あるな
メンテの費用たくさん取れるからいいんだよとか言い出す始末
勉強してるのがバカバカしくなる
0431デフォルトの名無しさん垢版2017/10/08(日) 10:58:52.79ID:tomnUErs
おまえらアスペとかADHDとか言ってるけど
せめてググってwikipediaや解説サイトぐらい見れば話が合うような言葉を選んでくれ
10人にADHDの説明させたら10通りの回答が出てくる現状では
技術的な議論に使う言葉じゃないと思うんだわ
0432デフォルトの名無しさん垢版2017/10/08(日) 11:01:13.46ID:4gVJmCxE
見積もりは出したふりでいい
客も見積もりに意味ないことは分かってるから上司への説明など適当にうまくやってくれる
その辺は阿吽の呼吸ですよ
0437デフォルトの名無しさん垢版2017/10/08(日) 11:36:48.97ID:FYLwhXQv
>>436
オブジェクト指向にフックを仕込めれば十分であることがわかった
アスペクト指向は「指向」ではなく、オブジェクト指向設計に
組み込む一種のパターン
0440デフォルトの名無しさん垢版2017/10/08(日) 22:01:40.54ID:4gVJmCxE
デコレーター
属性バリデーション
シリアライズ
apiプロキシ


aopは意識しないだけで結構使ってるな
0441デフォルトの名無しさん垢版2017/10/09(月) 08:04:01.64ID:tvCeOLo3
メッセージリソース管理クラスの素晴らしい設計を教えてください

void SomeAppMethod() {
// do something
view.AddMessage("MSG_0123")
// do something
}

こんな感じでリソースIDがシステム中にばら撒かれて制御不能状態になっています
メッセージリソースを管理するクラスを作って解消したいのですが良いAPIが決まりません
0443デフォルトの名無しさん垢版2017/10/09(月) 08:52:42.35ID:PA3EvPtr
>>441
OOPではリソースIDのような物理的な情報は隠蔽しなければならない

public interface ILowLevelMsgManager {
string GetMsg(string msgId, params object[] placeHolderArgs);
}

public interface IMsgManager {
string GetHogeMsg(); // ほげええええ
string GetFugaMsg(int num); // ふがふが{num}ふがふが
}

public class MsgManager : IMsgManager {
private ILowLevelMsgManager llmm;
public MsgManager(ILowLevelMsgManager pllmm) { llmm = pllmm; }
public string GetHogeMsg() { return llmm.GetMsg("MSG_0001"); }
public string GetFugaMsg(int num) { return llmm.GetMsg("MSG_0002", num); }
}
0444デフォルトの名無しさん垢版2017/10/09(月) 09:16:54.02ID:L5aecCRz
>>443
それになんの意味があるのかさっぱりわからんな
メッセージなんてでかいプロジェクトだと500個とか行っちゃって
詳細なんかわかんなくていいんじゃないの?
もうメッセージ一覧で確認することは諦めろよ的な
0445デフォルトの名無しさん垢版2017/10/09(月) 09:24:41.04ID:L5aecCRz
メッセージでこれまで見た中で一番多いのは3000だった
そこまで構えろとはいわんけどそういう性質のものではある

ソースの該当箇所に一つ一つ置いていく手間は省略できない
メッセージリソースIDとメッセージが照合できればそれでその作業は終わりじゃねーのか?
後、何を管理してもらいたい?
0446デフォルトの名無しさん垢版2017/10/09(月) 10:08:03.54ID:PA3EvPtr
>>444-445
ハードコードされた人間可読性ゼロの3000個のIDはそう簡単には管理しきれないと思うが
まあ君の人生だしどう時間を使おうと君の自由だね
私はしっかり管理して時間を節約するよ
0447デフォルトの名無しさん垢版2017/10/09(月) 10:21:29.30ID:Y2JfmrWo
客の都合でID体系変更になってリテラル全部調べて置き換えて再テストしたトラウマ
する価値ないと思ってもとりあえずでいいから抽象化しておいて損はない
0449デフォルトの名無しさん垢版2017/10/09(月) 10:44:55.28ID:3IBabimx
>>446
いやぁ、だからさ
ソースのエラー箇所に自動配置なんかできないんだからそこは300だろうが3000だろうが30000だろうが手動じゃん
IDとエラーメッセージが組にさえなってたらどういう構造にしようがやることかわんねーよ的な
0450デフォルトの名無しさん垢版2017/10/09(月) 10:48:47.25ID:3IBabimx
visualstudioのjaファイルとかその辺の仕組み使えばいいんじゃないの?
ローカライズするならやっとかないと死ぬよ
0451デフォルトの名無しさん垢版2017/10/09(月) 10:50:11.84ID:Vj0lVF94
rm = new ResourceManager(locale)
un = rm.get("property.name.user-name")
msg = rm.get("validation.error.max-length", un, 10)
print msg # ユーザー名は10文字以下で入力してください

スッキリ
0452デフォルトの名無しさん垢版2017/10/09(月) 10:55:11.14ID:PA3EvPtr
>>449
それじゃ可読性が低すぎるって言ってるの
暗号みたいにIDばらまかれても保守できないよ
それに>>447のようにIDとメッセージの対応が変わることもある
手間が変わらないなら1つ抽象化層を設けてコードを保護すべき
0456デフォルトの名無しさん垢版2017/10/09(月) 11:44:58.84ID:M//uOX8+
>>441
C#なら素直に.resx使う
少なくとも存在しないIDを使った場合に
コンパイルエラーになる仕組みを使う

種類ごとにグループ化(階層化)して管理しやすくする

メジャーなフレームワーク参照したら分かると思うがMSG_0123みたいな命名自体も悪手
もうどうしようもないのかもしれんが
0457デフォルトの名無しさん垢版2017/10/09(月) 11:50:08.07ID:3IBabimx
>>456
もう数からいってメッセージのうちのどれ?って判別できる量で終わらんと思うし
IDの命名規則なんて些細なことよw
俺の経験で言うと
0458デフォルトの名無しさん垢版2017/10/09(月) 11:59:06.73ID:RdvZrZJ8
コードジェネレータがいいよ

メッセージID, メッセージテキスト, パラメータ数
Hoge, ほげ, 0
Fuga, {0}はふがです, 1

これをエクセルで管理してメッセージ管理クラスを出力

class MessageManager {
public static string Hoge() => "ほげ";
public static string Fuga(object p0) => string.Format("{0}はふがです", p0);
}

んでデータ数が増えてきたらエクセルをやめてデータベースで管理
エクセルを使えばお客様もお喜びになられるので一石二鳥
0459デフォルトの名無しさん垢版2017/10/09(月) 12:17:44.19ID:M//uOX8+
>>457
メンテナンス性を犠牲にしても
命名負荷を下げたいという意思決定をしてるんならいいんじゃないの

神クラス・神テーブルと同じアプローチだけど
物によってはそれが適切な選択の場合もあるんだろうから
0460デフォルトの名無しさん垢版2017/10/09(月) 12:35:04.44ID:1orfMMQz
>>441
> メッセージリソース管理クラスの素晴らしい設計を教えてください

メッセージリソースなんてものを作らない。

view.AddMessage("あーがこーでどうなりました")

って日本語で書けばいい。

多言語化したいなら、gettextなどの言語やフレームワーク標準の
多言語化ライブラリを使えばいい話。

その場合は、英語でメッセージを書いて、日本語化するってことが
よく行われるが逆でもいいだろう。
0461デフォルトの名無しさん垢版2017/10/10(火) 07:21:02.20ID:JGhyCx0Y
>>373
責務指向良いね

ゲームはオブジェクト指向でしっくり来るかも知れんけど業務システムだとピンと来ない
0462デフォルトの名無しさん垢版2017/10/10(火) 08:31:03.78ID:v9JcaVeZ
ゲームをオブジェクト指向で作ると作りにくいよ
相互作用の処理が多過ぎてオブジェクトに閉じない
0463デフォルトの名無しさん垢版2017/10/10(火) 12:08:00.54ID:RxOfGqdN
それは設計どころかゲームそのものとしての落とし込みが不十分
ゲームとか一定のルールに則った動作をするだよ
0465デフォルトの名無しさん垢版2017/10/10(火) 23:46:15.72ID:WxQVAUFU
「オブジェクト指向だからステージの俳優が全員なんか言ってきて
カントクは一人一人対応なんかしてたら死ぬな!!www」

…いや、間違った理解をした奴はまあそういうドマヌケやらかしがちだが
普通はステージステータスに集約されて、ディレクターは
そのステータスを見て上から必要な個々に指示が送られるように作るからね…
0466デフォルトの名無しさん垢版2017/10/11(水) 00:09:15.15ID:i63/Wje0
ゲームは油断するとすぐにキャストや型判定だらけになってしまう
特定のクラス同士の時だけ発生する相互作用とか
0468デフォルトの名無しさん垢版2017/10/12(木) 21:48:31.48ID:Drh75QCI
お客さんが属性バリデーションも他のバリデーションフレームワークも使っちゃダメって言うんだけど
どうすれば楽にバリデーションできる?
言語はC#
テキストリソースは全てDBで管理されている
ロケールによってエラーテキストを変えなければならいとする
0469デフォルトの名無しさん垢版2017/10/12(木) 22:09:08.92ID:o8TlX9Z0
>>468
普通に作る以外にない
ちなみにダメって言う理由は何なの?

あとバリデーション自体と
バリデーション結果に応じたエラーテキストの選択は
分けて考えたほうがいいよ
0470デフォルトの名無しさん垢版2017/10/12(木) 22:34:53.95ID:Drh75QCI
>>469
属性やフレームワークは設定方法がよくわからないのでメンテナンスの時に困るから

ひたすら単調にif文をズラズラと書いてるんだけどシンドイ
項目数が100近いPageもあってそれぞれが何種類かのバリデーションを行うからバリデーションだけで数百行のメソッドになることもある
0471デフォルトの名無しさん垢版2017/10/12(木) 23:00:42.84ID:o8TlX9Z0
>>470
xmlでルール書くやつは敬遠されるのは理解できなくもないが
単純な属性ベースは分かりやすいしメンテしやすいのにね

楽しようとすれば結局自前で簡易的なフレームワーク風のものを作ることになる
あまりにも数が多いならコード生成という選択肢も
0473垢版2017/10/13(金) 00:23:50.41ID:9nU9SyY4
>>468
フレームワーク書いたらだめなの?
0476デフォルトの名無しさん垢版2017/10/13(金) 02:48:12.40ID:s0+Jkp8l
今回みたいな例だとライブラリを使わないで自作するとしたら
使った場合に比べて何倍ぐらいの金額を請求する?
0477デフォルトの名無しさん垢版2017/10/13(金) 02:56:05.56ID:GlXmqXn2
バリデーションが全体の工数に占める割合がわからないとなんともいえないけど、数倍なんてなるわけないだろアホ
どんだけバリデーションばっかやってるプロダクトを想定してんだよ

客に費用の話をするとき、「通常この規模だと20人月ですが、バリデーションライブラリが使えないので+50人月かかります」とでも言うのか
0478デフォルトの名無しさん垢版2017/10/13(金) 03:43:57.20ID:s0+Jkp8l
はぁ? 増えた分の請求は当然するだろ。当たり前のことを当たり前にするだけだぞ
0480デフォルトの名無しさん垢版2017/10/13(金) 04:36:24.84ID:zVcBlnUR
>>476
既存のフレームワーク使わずに自作する方が工数膨らむに決まってんだろ
カプコンレベルじゃないとスキル的にも厳しい
0482デフォルトの名無しさん垢版2017/10/13(金) 04:40:34.82ID:qOElJcq/
ひとまず使って組んで元の処理コピーして置き換えちゃえばいいんちゃう?
バリデーションのソースってあんでしょ?
0486デフォルトの名無しさん垢版2017/10/13(金) 16:33:32.34ID:kRlRrFWL
ごめん、何言ってんだかよくわかんないんだけど、
まず、>>468のバリデーションって、一体何に対するバリデーションの話してるの?
0487デフォルトの名無しさん垢版2017/10/13(金) 23:02:45.05ID:6pOkahl4
if (!validateRequired("#foo")) {
var msgFormat = getResource("error.required");
var label = getLabel("#foo");
addMessage(msgFormat, label);
addCss("#foo", "input-error");
}
以下100項目繰り返し

これ以上簡潔で保守性の高いバリデーションが存在しない件
OOPは物事を無駄に複雑化するばかりで役に立たん
0488デフォルトの名無しさん垢版2017/10/13(金) 23:14:22.48ID:s0+Jkp8l
>>487
バリデーションとメッセージとUIを一緒くたにするな
どこが保守性高いんだか、見づらいだけだろ
0492デフォルトの名無しさん垢版2017/10/13(金) 23:31:13.18ID:6pOkahl4
御託はいいからコード書いてみれば?
俺のコードより明確で保守性の高いコードをかけるとは思えんが
0493デフォルトの名無しさん垢版2017/10/13(金) 23:36:42.10ID:pm2E02lv
こーゆー上から目線なやつは自分の思い描くもの以外は全部クソって発想なのでめんどくさい
0497デフォルトの名無しさん垢版2017/10/14(土) 07:25:19.71ID:SVCVJk+z
バリデーション処理はexcel表から生成するものだよ
素人は手書きするらしいけどね
プロはこんなめんどくさいコードは書かない
0499デフォルトの名無しさん垢版2017/10/14(土) 10:58:40.12ID:SVCVJk+z
>>498
簡単だよ
|画面ID|セレクタ|コマンド名|ルール|
の一覧表をVBAマクロのループで回してjavascriptのコードを生成してjsフォルダに置く
それだけだ
うちの会社では20画面程度のシステムを扱うことが多いけど、このマクロのおかげで全画面の検証処理の実装が1人日でできてしまう
一覧性も高くそのまま仕様書やテストケースにも使える優れものだ
0500デフォルトの名無しさん垢版2017/10/14(土) 11:22:11.10ID:K4XROtS+
コピペプログラマは余計なコードを増やしてくれるな

foreach(validate as entry){
if (!validateRequired(entry.name)) {
var msgFormat = getResource(entry.resource);
var label = getLabel(entry.name);
addMessage(msgFormat, label);
addCss(entry.name, entry.clazz);
}
}

簡単に100分の1になるだろ
validateもプログラムからデータにしたら保守性あがるだろ
Modelからvalidateを収集するようにしてビジネスロジックを集約してもいいけど
今更そこまで設計変えるのは愚策か
0502デフォルトの名無しさん垢版2017/10/14(土) 11:44:12.14ID:XRdStdss
お客様がソース読むのかよ w
条件をお客様が決めるならExcelでもらって>>500のentryを生成するツールを作ればいいだけ
0503デフォルトの名無しさん垢版2017/10/14(土) 11:47:29.29ID:SVCVJk+z
結局コード生成するんじゃないかwww
なら最初からコード生成する前提で余計な手書きコードは書かない方がいい
プログラミングの基本すらわかってないのかよ
0506デフォルトの名無しさん垢版2017/10/14(土) 12:51:39.31ID:6KISst0f
>>502
> 条件をお客様が決めるならExcelでもらって>>500のentryを生成するツールを作ればいいだけ

発想が逆。YAML形式などで条件を書いて
必要ならばExcelに変換する。
Excelなんてサイズが無駄に多すぎて差分の比較もできないから
バージョン管理は事実上無理だろ
0507デフォルトの名無しさん垢版2017/10/14(土) 12:56:11.86ID:6KISst0f
YAML形式の何が良いかというとシンプルで見やすいから
お客様が直接読み書きできるってことだな
下手なCSVファイルよりもメンテナンス性が良い
0509デフォルトの名無しさん垢版2017/10/14(土) 13:55:47.42ID:2Glba8SI
Excelでも管理できてるなら別にいいと思うぞ
客や開発メンバーのリテラシーレベルに合ってるなら
無理に違うフォーマットを強要する必要はない
openxmlとか使えば差分比較だけならできる

むしろルールと処理を密結合させても平気な神経のほうが理解できない
そのうえプロを自称してドヤるww
0510デフォルトの名無しさん垢版2017/10/14(土) 14:10:09.58ID:6KISst0f
>>509
客にExcelを "ルール通りに" 使わせるという
リテラシーレベルをもとめるな

勝手にフォーマットを変える、勝手にセルを結合する。
どこからかコピペした結果おかしくなって直さない
追加分とかいって差分を送りました。そっちで結合してください
とか、毎回人手で対応しなきゃならない作業が発生するぞ。
こっちで決めた使い方のルールを守ってくれやしない
0511デフォルトの名無しさん垢版2017/10/14(土) 14:11:17.22ID:6KISst0f
> openxmlとか使えば差分比較だけならできる
むり、見た目同じように見えても、
レイアウト属性など関係ない情報の
大量の差分までできて管理できない
0512デフォルトの名無しさん垢版2017/10/14(土) 14:12:50.65ID:2Glba8SI
>>511
属性情報は無視してdiff出せるよ
色変えたとか罫線追加したとかそのレベルの差分確認したいとなると
専用ツール入れないと実用レベルでは使えない
0513デフォルトの名無しさん垢版2017/10/14(土) 14:15:37.80ID:NZcmE+Ju
ヴァリデーションフレームワークってどれも中途半端だよな
ちょっと複雑なヴァリデーションをしようとすると適用不能になる
しょうがないからカスタムコードを書くことになるんだけどフレームワークとケンカし始めるからフレームワークは規約で禁止って流れになる
日本の厳しい要件についてこれる柔軟性の高いフレームワークは無いものか
0514デフォルトの名無しさん垢版2017/10/14(土) 14:16:08.20ID:2Glba8SI
>>510
その辺は上の自称プロさんならVBA使ってルール守らせるExcel作るだろ
俺は別にExcel推奨したいわけじゃないぞ
0515デフォルトの名無しさん垢版2017/10/14(土) 14:16:14.83ID:XRdStdss
>>506
意味わからん
YAMLで書ける客がどれだけいるんだよ w
そもそも客がYAMLで書けるならExcelに変換なんて要らん、そのままソースに変換するなりすればいい
要件によっては実行時にそのまま読み込んでもいいかも知れんし
まあ>>500程度ならcsvとかで充分だと思うが
0516デフォルトの名無しさん垢版2017/10/14(土) 14:18:15.77ID:XRdStdss
>>510
> とか、毎回人手で対応しなきゃならない作業が発生するぞ。
どんだけ低レベルの客と付き合ってるんだよ w
0517デフォルトの名無しさん垢版2017/10/14(土) 14:22:34.78ID:6KISst0f
>>512
例えばこの例だと行を一行追加して、A2にあったWorldが
A3に変わった時の差分はこんなふうに表示される
http://blog.modd.com/entry/2016/01/26/125206

diff -u a.txt b.txt
--- a.txt 2017-10-14 14:16:59.481494825 +0900
+++ b.txt 2017-10-14 14:17:20.601528128 +0900
@@ -5,6 +5,12 @@
</row>
<row r="2">
<c r="A2" t="str">
+ <v>OOXML</v>
+ </c>
+</row>
+<row r="3">
+ <c r="A3" t="str">
<v>World</v>
</c>
</row>

Worldがもともとrow r="2"、c r="A3" だったわけだが、たった一行挿入することで、
2行目以下の、"全ての行データに対して" このようにrowとcが変化するわけだよ。
それで差分を管理できるわけ無いだろ。
0518デフォルトの名無しさん垢版2017/10/14(土) 14:24:44.57ID:6KISst0f
>>515
> YAMLで書ける客がどれだけいるんだよ w

こっちでこんな感じで書いてくださいっていうだけ。
それはExcelと同じ。

違うのは、Excelでは条件を指定した所で
見えない情報(フォーマット情報など)が
大量に埋め込まれるということ。
そしてその見えない情報を正しく修正するのが大変だということ
0519デフォルトの名無しさん垢版2017/10/14(土) 14:26:09.55ID:6KISst0f
>>516
> どんだけ低レベルの客と付き合ってるんだよ w

逆。客のレベルがExcelを無駄に使えるから
セルの結合とか色を変えたりしてくる。
Excelはできることが多すぎるんだよ。
余計なことをなんでもできてしまう。
0520デフォルトの名無しさん垢版2017/10/14(土) 14:28:15.75ID:6KISst0f
>>513
> ちょっと複雑なヴァリデーションをしようとすると適用不能になる

普通はちょっと複雑なバリデーションを書くための方法がフレームワークに用意されてる。

それに、ちょっと複雑なところだけ別にやればいいだけ。

100個のうち1個のマイナーケースに対応できないから、
100個すべてめんどくさい方法で作りましたとかアホでしか無い。
0521デフォルトの名無しさん垢版2017/10/14(土) 14:30:01.79ID:NZcmE+Ju
>>520
日本の業務アプリを甘く見過ぎだろ
カスタムコード書きまくらないと対応できねえよ
アホみたいにシンプルなUIしか書かなくてもいいWeb屋はスキル要らないし気楽でいいよな
0523デフォルトの名無しさん垢版2017/10/14(土) 14:35:49.60ID:6KISst0f
例えば郵便番号のバリデーションが
カスタムコードとか言いそうで笑えるw

そして郵便番号を使うたびに
同じバリデーションをコピペしてるんだろうな。

普通は関数にしてフレームワークに登録すれば終わり
あとは同じバリデーションを使いまわしできる。
0524デフォルトの名無しさん垢版2017/10/14(土) 14:40:00.04ID:6KISst0f
あぁ、当たり前だけど範囲チェックや型チェックや正規表現チェックとか
単純なものだけではなく、カスタムバリデーションや条件付きバリデーションなんかも
フレームワークの基本機能の1つだと先に言っておこう
0525デフォルトの名無しさん垢版2017/10/14(土) 14:45:10.18ID:XRdStdss
>>518-519
> こっちでこんな感じで書いてくださいっていうだけ。
えっ?
YAMLの書き方から教えるのかよ...
Excelでフォーマット守れって言うこともできない客にYAML書けるとか無職の妄想乙 w
0526デフォルトの名無しさん垢版2017/10/14(土) 14:46:32.49ID:6KISst0f
日本の業務アプリを作っているところがアホなのは、
バリデーションが正しく機能しているかは
アプリを実行して画面からぽちぽち実際と同じ使い方をして
検証していることなんだよな。同じ内容のバリデーションであっても
項目ごとに検証する。それがテスト時間を無意味に増やしてしまっている。

本来はバリデーションのテストは種類ごとに1つ(すごく当たり前だがw)
そして、画面の項目ごとに、想定しているバリデーション名が
設定されているかを設定ファイルを見て確認するだけ。
実際に動かしてテストはしない。
0527デフォルトの名無しさん垢版2017/10/14(土) 14:47:12.46ID:2Glba8SI
>>517
試したけど俺の環境では↓こうなるよ
diffだけなら十分実用レベル

$git diff
diff --git a/book.xlsx b/book.xlsx
index c75fc9a..6215aa2 100644
--- a/book.xlsx
+++ b/book.xlsx
@@ -1,5 +1,6 @@
Sheet1
Hello
+ OOXML
World
0528デフォルトの名無しさん垢版2017/10/14(土) 14:50:00.76ID:6KISst0f
>>525
> YAMLの書き方から教えるのかよ...

YAMLの書き方はExcelよりも簡単だよ。
Excelは知らない人が使いこなすためには
数週間とか数カ月かかるが、

YAMLだとフォーマット用意して、
これと同じように書いてくださいで説明終わり。

Excelでフォーマットを守れないのは、
これと同じように書いてくださいと言っても、使い方が難しいから。
俺の母親は、文字の自動補間機能のせいで「1」と入力しようと
しても「10」と補完されてしまって困っていたな。
0530デフォルトの名無しさん垢版2017/10/14(土) 14:53:33.13ID:6KISst0f
>>527
じゃあ今度はある程度データを入れて、同じ内容のセルを結合する前後で
ためしてみそれがどう見えるかを確認したら絶望することになるから
0531デフォルトの名無しさん垢版2017/10/14(土) 14:56:35.11ID:6KISst0f
ちなみに補足しておくと、>>529はxlsxを直接比較しているのではなく
xlsxをテキストに変換してから比較している。
その時にフォーマット情報などいろいろ抜け落ちる。

だから「取り消し線のところは無視してください。」なんてのはわからない。
このようにExcelはなんでもできてしまうから、
重要な情報が抜け落ちる所に書かれてあった時に比較できない。
0532デフォルトの名無しさん垢版2017/10/14(土) 15:07:27.23ID:XRdStdss
>>528
Excelの使い方が難しい?
YAMLがきちんと書けてExcel使えない奴なんて見たことないけどな
お前のおかんはYAML書けるのか? w
0533デフォルトの名無しさん垢版2017/10/14(土) 15:08:18.32ID:NTbBehto
>>526
俺はやるべきだと思うなぁ
だって外人のアプリってそのせいなのかどうなのか知らんけど
よく動いてないじゃんw
0535デフォルトの名無しさん垢版2017/10/14(土) 15:10:17.11ID:NTbBehto
xmlはプログラマしか編集できない上に
ファイルがでかくなると読み込み速度ヤバイので駄目だよ
0536デフォルトの名無しさん垢版2017/10/14(土) 15:20:54.33ID:IPoqHaAU
俺が昨日書いた検証処理の一部
実際にはこれの数十倍の検証ルールがあると考えてほしい
フレームワークで簡単にできるなら教えてほしいおねがいします

webアプリ
テーブルをバリデーションする

列は4つでそれぞれinputを持ってる
typeは順に「checkbox, text, text, text」

検索でバックエンドから取ってきたデータがこのテーブルに表示される
これを手入力で編集してバックエンドに保存する
再検索できるが検索時にはバリデーションしなくてよい
保存するときはバリデーションを実行する

メッセージはローカライズすること
すべてのテキストリソースはバックエンドで管理されている
0537デフォルトの名無しさん垢版2017/10/14(土) 15:21:29.07ID:IPoqHaAU
1列目のcheckboxがOFFの行はバリデーションしなくていい
2〜4列目のtextがすべて未入力の行はバリデーションしなくていい

2, 3列目が空白の場合エラー
2, 3列目が整数でない場合エラー
2, 3列目の合計値が1000を超えたらエラー

1列目のcheckboxがONの行の2, 3列目の合計値が10000を超えたらエラー

4列目はオプション
10文字以上の場合エラー
入力された文字列がバックエンドに登録されていない場合エラー

エラーメッセージは重複を排除して昇順に並び替えて所定の ul の子要素として追加する

エラーがあった入力項目は背景色を赤くする
同じ行で1つでもエラーがあった行は罫線を赤くする
0538デフォルトの名無しさん垢版2017/10/14(土) 15:22:07.10ID:6KISst0f
>>533
> だって外人のアプリってそのせいなのかどうなのか知らんけど
> よく動いてないじゃんw

外人のアプリって何?Windows?Linux?MacOS?
0540デフォルトの名無しさん垢版2017/10/14(土) 15:51:27.37ID:6KISst0f
>>537
どうでもいいけど、列目〜とか言って時点で、画面と密結合してんなーとしか思えんなw

列があれば行もあるんだろうけど、一行単位で処理してるようだから、
一行が、一クラスの一インスタンスと考えればよいだろう
1000超えたらエラーなのか10000超えたらエラーなのか分からんが。

画面表示周りにビューの仕事でこれはバリデーションではない。
バリデーション結果オブジェクトを見てビューで表示さればいいだけ(何度も言わせないように)

長くなったのでコードは次のレスに書く
0541デフォルトの名無しさん垢版2017/10/14(土) 15:51:34.74ID:6KISst0f
class Row
 include ActiveModel::Validations

 def col1_condition; end
 def col2_value; end
 def col3_value; end
 def col4_text; end

 def condition;
  col1_condition && col2_value.present? && col3_value.present? && col4_text.present?
 end
 def col2_plus_col3_number
  col2_value + col3_value
 end
 // ↑ここまでは単なるクラス定義
 //↓ここ以下がバリデーション

 validates :col2_value numericality: true, presence: true, if condition
 validates :col3_value numericality: true, presence: true, if condition
 validates :col2_plus_col3_number less_than_or_equal_to: 1000, if condition
 validates :col2_plus_col3_number less_than_or_equal_to: 10000, if condition

 validates :col4_text; maximun: 10, if condition
 validate :col4_registered

 def col4_registered
  // 入力された文字列がバックエンドに登録されていない場合エラー
 end
end
0542デフォルトの名無しさん垢版2017/10/14(土) 15:53:04.43ID:6KISst0f
× validate :col4_registered
○ validate :col4_registered, if: condition

っていうか全部 if の後の: 付け忘れてたw
0543デフォルトの名無しさん垢版2017/10/14(土) 16:04:41.69ID:2Glba8SI
>>531
だからそれは意図して属性情報は差分比較しないようにしてるからじゃん。。
なんなんその言いがかり

セルの結合もデータ的に何を意味してるのかVBA使うやつなら当然知ってるし
データとして使うExcelシートなら書式設定は変更されないようにロックするだろ
その辺のリテラシがないならExcel使うってのは選択肢にはならないわな
0544デフォルトの名無しさん垢版2017/10/14(土) 16:09:11.95ID:6KISst0f
>>543
すべての属性情報が無視していいとは限らないからね。
属性情報として重要な事が書かれているかもしれない。
そういう無視して良いのがないかわからないのがExcelの欠点の1つ
Excelになれている人ほど、余計な工夫をしてくる。
0545デフォルトの名無しさん垢版2017/10/14(土) 16:12:09.17ID:IPoqHaAU
>>541
これはなんの言語ですか?
JavaScriptだとどうなるのでしょうか?
10000を超えないのは複数の行について合計した時の話です
メッセージやCSSの処理はどうすればいいでしょうか?
0546デフォルトの名無しさん垢版2017/10/14(土) 16:23:07.56ID:6KISst0f
>>545
Ruby & Rails

JavaScriptはしらん。けど大差ないものは作れるだろ
文法上の制約があるとしてんもこんなふうになる程度

validates("col2_value", {numericality: true, presence: true, if: "condition"})

> 10000を超えないのは複数の行について合計した時の話です
一行ごとに保存できるのであれば、保存する時に
この一行を保存するときに10000を超えるかどうかを調べればいい

一行ごとに保存できない、つまりまとめて保存するならば、
一行に相当するオブジェクトに含まれる配列として
テーブル全体を持っておき、そのテーブルの数値の合計を調べれば良い。

> メッセージやCSSの処理はどうすればいいでしょうか?
んなもん、バリデーション結果を返して、そこに含まれるerrorsを
画面に表示すればいいだけ。ローカライゼーションは別の話。
0547デフォルトの名無しさん垢版2017/10/14(土) 16:32:34.19ID:IPoqHaAU
>>546
なるほど
なんとなくわかりかけてきました

肝心のエラー情報はどうやって、どのような形式で取得しますか?
検索や保存など処理によって検証内容が異なる場合は似たようなクラスを2つ用意するのでしょうか?
0548デフォルトの名無しさん垢版2017/10/14(土) 16:37:58.88ID:6KISst0f
> 肝心のエラー情報はどうやって、どのような形式で取得しますか?
フレームワーク次第なんだんだからそのやり方に従えばいい

> 検索や保存など処理によって検証内容が異なる場合は似たようなクラスを2つ用意するのでしょうか?
似たようなもの=同じではない=違うもの

違うなら別々に用意しなければいけないし、
100%まったく同じならば、使い回せばいい。
一部が全く同じならば、同じ部分だけつかいまわせるように切り出せばいい

絶対にやってはいけないのは、違うところがあるのに
似ているからという理由だけで違うものを使いまわすこと
そんなことをするとある修正が全く無関係な所に影響を及ぼしてしまう。

異なるなら別のものを作るのは当たり前の話だ。
0550デフォルトの名無しさん垢版2017/10/14(土) 16:45:47.95ID:6KISst0f
あとなぁ、コピペはいけないってことの意味を勘違いしてるやつが多いんだよな。

単語、文字列をコピペしたらいけない。ファイルをコピペしたら
いけないって勘違いしてる。

コピペしたらいけないのは処理だってーの。
処理はテストするものが定義はテストする意味はない。
定義でするべきなのはテストではなくて確認
確認は目視でもOKなんだよ。

バリデーションなんてほぼ定義にできてしまうのだから
テストする項目にはならない。確認する項目。
だからYAMLに分離して、技術者じゃなくても確認できるようにしておけば良いんだ。
0553デフォルトの名無しさん垢版2017/10/14(土) 16:49:56.83ID:6KISst0f
>>551
RubyじゃなくてRailsな。バリデーションはRailsというフレームワークの一機能
バリデーション結果のオブジェクトの中に
errosってのがあってそこに項目ごとにエラーメッセージが入ってる。
またバリデーション結果のオブジェクトにはvalid?、invalid?メソッドがあって
全体がバリデーションでOKだったかどうかもわかる。
0554デフォルトの名無しさん垢版2017/10/14(土) 16:55:23.66ID:IPoqHaAU
>>553
どの項目でエラーが出たかはわかりませんか?
背景色を変えるには入力項目のidとrubyオブジェクトのプロパティとのひも付けが必要だと思いますが
ここも粗結合にしたまま対応できるんでしょうか?
0555デフォルトの名無しさん垢版2017/10/14(土) 17:01:53.89ID:2Glba8SI
>>541
この場合のcheckboxは更新対象を示すフラグっぽいから
2~4列目のモデルの要素とは別にしたほうがいいんじゃないかな

ONになってる行のコレクション対してバリデーションすればいいので
if conditionは全部消せる
0556デフォルトの名無しさん垢版2017/10/14(土) 17:02:08.30ID:6KISst0f
>>554
だからerrorsオブジェクトの中に項目ごとにエラーが入ってるって言ったろ

> 背景色を変えるには入力項目のidとrubyオブジェクトのプロパティとのひも付けが必要だと思いますが
いらねーよ。

どうせエラー画面がでたら、エラーが出たその項目の値を表示するだろ?
その項目のすぐ下にでもエラー情報だせばいいだろ。

あ?id? エラー情報の表示にidなんていらねーからな。
まさかと思うが、CSSに全項目書いてたりしないよな。
それならclass使え。アホらしいから
0557デフォルトの名無しさん垢版2017/10/14(土) 17:06:44.40ID:6KISst0f
>>555
そこらへんはどうでもいいやw
重要なのはこの程度でカスタムコード書きまくらないと対応できないとか
思っていたことがはっきりしたってだけ

で、俺の意見はここからさらに先で、Railsのバリデーションコード
あの程度の情報量であれば、YAMLに簡単に外だしできるので、
外出して、客にもレビュー可能にして、価値の低いテストを減らしたい。
YAMLにすればフロントエンド側(JavaScript)でも再利用できるだろうし。
なんでもかんでもクラスに定義するのが良いとは思わないな。
0558デフォルトの名無しさん垢版2017/10/14(土) 17:11:55.12ID:ipiotHZI
その先はないので程々にした方がいい
設定ファイルでバリデーションするアイデアはJavaとか他の言語が大昔にとっくに通過していて
世界中でこれは使い物にならんと判定されたものだよ
0559デフォルトの名無しさん垢版2017/10/14(土) 17:15:32.80ID:ipiotHZI
バリデーションすなわち入力検証をプレゼンテーションから切り離して考えるのもバカバカしい
入力検証はViewあるいはViewModelに属する処理だからプレゼンテーションに入るのが正解
ドメインモデルに入力検証をやらせるのは愚かとしか言いようがない
0560デフォルトの名無しさん垢版2017/10/14(土) 17:16:00.23ID:6KISst0f
> 設定ファイルでバリデーションするアイデアはJavaとか他の言語が大昔にとっくに通過していて

それはXMLが失敗の原因だった。
XMLにはタグや属性という技術者しか知らないものが
あるからだめだったんだよ。
0561デフォルトの名無しさん垢版2017/10/14(土) 17:17:14.17ID:6KISst0f
>>559
> 入力検証はViewあるいはViewModelに属する処理だからプレゼンテーションに入るのが正解
YAMLにすることでそれも実現できる

バリデーションは、プレゼンテーションだけのものではない
プレゼンテーションでもドメインモデルでも使われるものだ
0562デフォルトの名無しさん垢版2017/10/14(土) 17:20:06.76ID:6KISst0f
更に言うならば、バリデーションはフレームワークではなく
言語仕様に組み込むべきものだよ。
本質的にはD言語の契約プログラミングと同じものなんだから
0563デフォルトの名無しさん垢版2017/10/14(土) 17:21:48.23ID:ipiotHZI
>>560
違う

モデル定義とバリデーション定義が離れすぎていること
コンパイルできないから開発環境の恩恵をうまく得られないこと
バリデーションを書くのは開発者であるが開発者に馴染みのある言語はXMLやYAMLではなくJavaやC#であること

これらが問題点
0564デフォルトの名無しさん垢版2017/10/14(土) 17:24:16.70ID:6KISst0f
>>563
> バリデーションを書くのは開発者であるが開発者に馴染みのある言語はXMLやYAMLではなくJavaやC#であること

あんたはバリデーション処理とバリデーション定義をごっちゃにしてる。
バリデーション処理は動くコードで書くが、
バリデーション定義は動くコードではない。

JavaのXMLなんかも動くコードではないから
これは定義であり、定義の内容をJavaやC#で書く意味はない。
だってただのデータだぞ?ハッシュで持たせればいい程度の情報。
0565デフォルトの名無しさん垢版2017/10/14(土) 17:25:05.23ID:S4q9ZUfo
>>559
俺もその意見に賛成かなぁ

画面が変わったら変わった画面用のチェックが必要になってる気がするわ
0566デフォルトの名無しさん垢版2017/10/14(土) 17:25:21.74ID:ipiotHZI
>>561
違う

プレゼンテーションレイヤではオブジェクトが不正な状態を受け入れることが前提
不正な状態を検知する処理がバリデーション

ドメインレイヤではオブジェクトは不正な状態は受け入れない
プロパティの不正な値をセットしようとした瞬間に例外
メソッドに不正な引数を与えた瞬間に例外
これはバリデーションではない
ドメインレイヤでは契約を使う
0567デフォルトの名無しさん垢版2017/10/14(土) 17:25:55.08ID:6KISst0f
>>541の例で言えば

 validates :col2_value numericality: true, presence: true, if condition
 validates :col3_value numericality: true, presence: true, if condition
 validates :col2_plus_col3_number less_than_or_equal_to: 1000, if condition
 validates :col2_plus_col3_number less_than_or_equal_to: 10000, if condition

 validates :col4_text; maximun: 10, if condition
 validate :col4_registered

この部分がバリデーション定義。
簡単にYAMLにできるし、客が検証したい部分でも有る。

numericalityの内容とかconditionの内容がバリデーション処理(の一部)
0568デフォルトの名無しさん垢版2017/10/14(土) 17:27:05.32ID:6KISst0f
>>566
> ドメインレイヤではオブジェクトは不正な状態は受け入れない
> プロパティの不正な値をセットしようとした瞬間に例外
> メソッドに不正な引数を与えた瞬間に例外
> これはバリデーションではない

バリデーションに引っかかった結果をどう表示するか?が
プレゼンテーションでやるべきこと。

バリデーションそのものは使いまわすことができる。
0570デフォルトの名無しさん垢版2017/10/14(土) 17:28:02.59ID:ipiotHZI
>>564
それはあなただけが感じる特殊な感覚だよ
世界中のプログラマは設定ファイルを捨て去り属性やアノテーションを使うようになった
XMLよりYAMLの方が多少マシという点は認めるが上記の手法に比べればどんぐりのせくらべといったところだ
0571デフォルトの名無しさん垢版2017/10/14(土) 17:28:38.29ID:6KISst0f
>>570
> 世界中のプログラマは設定ファイルを捨て去り属性やアノテーションを使うようになった

設定ファイルを捨ててYAMLにしたの間違いだろw
0573デフォルトの名無しさん垢版2017/10/14(土) 17:30:30.98ID:S4q9ZUfo
お前ら、喧嘩するな
どこに持とうがチェック項目は増えても減ってもいないんだぜ

だったら一番やりやすい画面かな
0574デフォルトの名無しさん垢版2017/10/14(土) 17:32:16.56ID:6KISst0f
>>573
いや増えてる。画面でやると画面ごとにバリデーション処理が増えてしまう。
だから数を減らすにはより中心であるモデルで行う必要がある。
0575デフォルトの名無しさん垢版2017/10/14(土) 17:32:52.58ID:S4q9ZUfo
ファイルに外だししたからチェックしなくていいですなんて
んなわけねぇだろ

今時エロ本の竿役だってそんなこと言わねぇよ
0577デフォルトの名無しさん垢版2017/10/14(土) 17:35:14.23ID:ipiotHZI
>>572
JavaのBean ValidationやC#のDataAnnotationsを調べてみればいい
モデルとバリデーション設定を分離して管理する意味がないとわかるはずだ
0579デフォルトの名無しさん垢版2017/10/14(土) 18:20:50.90ID:6KISst0f
>>575
> ファイルに外だししたからチェックしなくていいですなんて
> んなわけねぇだろ

そんなこと言ってないよw
バリデーションという単純な部分を
外だしすると誰でもチェックできるようになるよ。

そもそもExcelでやっていたことだからね。
Excelという使いづらい形式がYAMLに変わっただけ
誰でもチェックできるってことの意味がわかったかな?


あ、YAMLに変わってプログラムからそれを
そのまま使うってところも違うか。
0580デフォルトの名無しさん垢版2017/10/14(土) 19:06:29.37ID:GDzf5CCz
YAMLが誰でも読み書きできると主張しているのはプログラマだけという事実について考える必要があるようだ
エクセルは誰でも読み書きできる
これはプログラマ以外のステークホルダーも同意している
0581デフォルトの名無しさん垢版2017/10/14(土) 19:35:21.74ID:LrE/Uk2a
xmlはパンピーには無理
スコープなんて意識できるわけねーし

っていうか俺でも辛い
xmlを編集できるツールがそもそもねーじゃん
責任持ってお前作って配れよ
0582デフォルトの名無しさん垢版2017/10/14(土) 21:47:43.86ID:4wM/EQmV
結局のところフレームワーク無しだとif文書きまくるのが最強ということですか?
いわゆるKISSに原則ってやつですね
0585デフォルトの名無しさん垢版2017/10/15(日) 00:42:30.20ID:RBDvyi+r
データはRDBMSでもテキストでもなんでもいいだろ
DAOで抽象化しとけば後から変えられる
メンテできるものにしろ
0587デフォルトの名無しさん垢版2017/10/15(日) 18:02:34.88ID:nlQ3NzZf
なんか盛り上がってるようだがとりあえず
>>533
に賛成票。
設定が正しいか目視で済ませずテストすべき。
目視チェックで済ませたところが往々にしてトラブルの元。
0588デフォルトの名無しさん垢版2017/10/15(日) 18:26:45.76ID:/8UsyUgn
> 設定が正しいか目視で済ませずテストすべき。

そのテストって実行結果を目視で調べるんだろ?

それか、テストのテストのテストのテストを書くわけないだろうから、
テスト書いて目視でそのテストが正しいか調べるんだろ?

どうせ最後は目視するしかないんだよ。
コードレビューとも言うね。

そんなのをやるぐらいなら
「十分な目ん玉があれば、全てのバグは洗い出される」方式を
利用した方がいいよ。

オープンソースでない場合、コードだと「十分な目ん玉」は集められない。
だから技術者ではない人でも検証可能な形にして「十分な目ん玉」を集めたほうが良い

これはコストのかけ方の問題だよ。重要かつ難しい所には技術者を割り当て
バリデーションとかいう単純な所は、誰でもできるようにして十分な数の目ん玉で対応する
0589デフォルトの名無しさん垢版2017/10/15(日) 18:43:04.37ID:hXjn0fon
バグってるかどうかはリリースすればわかる
瑕疵期間でも人件費はタダじゃねえからな
別にテストで全部見つける必要はない
瑕疵期間なしって契約ならテストで全部チェックするけどね
0590デフォルトの名無しさん垢版2017/10/15(日) 18:57:53.15ID:hZRxEBGG
>>588
コードレビューとテストは目的も確認の手段も違うじゃん
正しいメールアドレスの形式かどうかをチェックする場合とかを考えたら分かるだろ

それに仕様に間違いがないかどうかを誰もが確認できるようにすることと
コードがその仕様通りに動いているかどうかを確認することは
確認する対象が全く違う

自己正当化の論理に聞こえる
0591デフォルトの名無しさん垢版2017/10/15(日) 19:04:24.38ID:/8UsyUgn
>>590
> 正しいメールアドレスの形式かどうかをチェックする場合とかを考えたら分かるだろ

その場合だと「ある文字列が正しいメールアドレスの形式か?」という
ロジックは技術者が入念にチェックすべき重要なロジック。
そしてこれはisMailAddressみたいな名前の関数となる。

そしてユーザーが入力したある項目のバリデーションが
isMailAddressになっているか?は目視で確認すれば良い
これは技術者でなくてもできる。

何でもかんでもコストがかかる技術者を使うなっていうのはこういう話だよ。
バカは項目が存在する数だけ、漢字が使えないこと、@の前は.になってないこと
.を連続して2つ以上使わないこと、みたいなチェックをするからな。

メールアドレスのバリデーションが正しく動いているならば、
そのバリデーションを使う場所がいくつあろうが、
そのバリデーションが使われていることだけを確かめれば良いんだよ。
0592デフォルトの名無しさん垢版2017/10/15(日) 19:22:46.86ID:EYoRh89i
「社員に対して給料を振り込む」という文章を
「ooをxxする」という1文にしたいときって、
「社員」と「給料」の2つの目的語があるからどうすればいいの?
0593デフォルトの名無しさん垢版2017/10/15(日) 19:28:58.58ID:nlQ3NzZf
>>591
>>メールアドレスのバリデーションが正しく動いているならば、
>>そのバリデーションを使う場所がいくつあろうが、
>>そのバリデーションが使われていることだけを確かめれば良いんだよ。

確める内容はそれでOK
でも確める方法が設定ファイルの目視チェックでは不十分。
設定ファイルの各項目が実際の動作に反映されてるか動かしてみないと。

まあシステム間結合テストとか言われるようなテストフェーズでやる場合、実装担当はあまり関係ないことかもしれないが。
誰かがそのテストをする必要はある。
0594デフォルトの名無しさん垢版2017/10/15(日) 19:39:32.38ID:vM8WLXd+
設定ファイルに書いてあればOK
笑えないけど笑っちまった
設定ファイルの記述ミスは存在しない前提かよ
0595デフォルトの名無しさん垢版2017/10/15(日) 19:43:52.74ID:/8UsyUgn
>>593
> 設定ファイルの各項目が実際の動作に反映されてるか動かしてみないと。
それは画面やAPIごとに、ここではこの項目が使われていますって
画面に表示するだけでOK。それを目視で確認すれば良い。

>>594
> 設定ファイルの記述ミスは存在しない前提かよ

記述ミスは目視で調べろって話だろw
何を聞いてるんだか
0597デフォルトの名無しさん垢版2017/10/15(日) 20:00:30.48ID:/8UsyUgn
というかさ、目視を軽視してないか?
動作確認を過大評価してないか?

動作確認っていうのは確かに動作させたものに関しは
その通り動くだろうけど、動作させてない所はわからないんだぞ。
偶数かどうかチェックする関数、2と4と6でテストしてOKだからといって
8がOKになるとは限らない。コードのロジックを "目視" して
問題ないことを確認しているはずなんだが?

永遠の時間があれば全て動作確認すればいいだろうけど
実際にはそんな時間はない。だから動作させずに目視で確認できるように
そういう仕組を作っていくことが重要なんだよ。

時間をかけて努力をすることは偉くもなんともない。
なるべく時間をかけずに成果を上げるようにしないと
生産性は上がらないぞ
0598デフォルトの名無しさん垢版2017/10/15(日) 20:03:20.76ID:/8UsyUgn
>>596
それは見ただけでわかるような仕組みを作ってないから。

ゲームでよくあるデバッグモードみたいなものを
本気で実装した方がいいよ。
通常のプレイで見えないパラメータを、デバッグする人も見えないまま
デバッグするのは、時間を無駄に消費するだけ

デバッグモードを有効にしたら、見えないパラメータ
例えばこの項目のバリデーションは○○です〜みたいなものを
表示するようにすれば、見ただけでわかるようになる。
0599デフォルトの名無しさん垢版2017/10/15(日) 20:04:45.78ID:vM8WLXd+
テストも目視も要らないよ
とりあえずリリースしちゃいなよ
問題があればそれではっきりするだろ
説得するより怒られる方が楽って昔の偉いプログラマも言ってたぞ
0600デフォルトの名無しさん垢版2017/10/15(日) 20:09:59.40ID:/8UsyUgn
>>599
ベータ版リリースとか有るからね。

でも、それはちゃんと発生した問題を自動で
検出して通知する仕組みが必要だよ。
それがないと問題があっても教えてくれないし、
発生した問題の詳細もわからない。
言うほど簡単じゃない。
0605デフォルトの名無しさん垢版2017/10/15(日) 21:03:02.20ID:KCBqed/H
>>602
でかいソフトを書いたことないだろうな...
コードは正しくても実行するとうまく動かないとか経験したことないだろ
0606デフォルトの名無しさん垢版2017/10/15(日) 21:06:15.70ID:/8UsyUgn
>>605
その質問に、

ある と答えた場合
ない と答えた場合

それぞれあなたはなんて返してくるんですか?
いや、どうせどちらで答えても、的はずれな
文句言って終わるんだろうなと思いましてねw
0607デフォルトの名無しさん垢版2017/10/15(日) 21:13:49.98ID:zIm4LF54
>>606
いや、もうただの屁理屈じゃんお前の
設定ファイルの読み込み処理がバグってるかもしんねーじゃん
最終的な動作の確認は絶対必要じゃん

お客からしたら設定値なんて
ファイルに出そうがソースに埋め込もうが知ったこっちゃないじゃん
ただ、お約束した機能が動いているかどうかはお客さんとの約束でしょ?
その確認をしないでどーすん?
0608デフォルトの名無しさん垢版2017/10/15(日) 21:17:26.65ID:/8UsyUgn
> 設定ファイルの読み込み処理がバグってるかもしんねーじゃん

ならそこだけをテストすりゃいーだろ。
仕事は減らす方向に向かって頑張れよ。

人海戦術で時間をかけたらからって
偉くもなんともないんだぞ
0610デフォルトの名無しさん垢版2017/10/15(日) 21:22:09.90ID:/8UsyUgn
> ただ、お約束した機能が動いているかどうかはお客さんとの約束でしょ?
> その確認をしないでどーすん?

その確認をどーするって、お前は客にテストやりましたって
エクセルシートでも送りつけて、それが本当かもわからないのに
これ見て納得してくださいってやってるんだろ?何一つ証拠がねーよ。
それともテスト作業してる動画を何時間も見せてこれが証拠ですとでもやるつもりか?

コード見せたって客はその内容わからないかもしれないし、
テストコード見せたって、それがソースコードの形じゃやっぱりわからない。
エクセルファイル見せたって、それを本当にやったかどうかもわからない。
間違って記入しているかもしれない。何にもあてにならないよね。

俺が言ってるのは、客にも簡単にわかるような形でデータを作り
そのデータをそのままプログラムで使えって言ってるの。
客がそれみて納得すりゃそれでOKだし、そのファイルを
直接使うからもちろんその通りに動く。

客の検収作業が、そのまま目視による確認になってるんだが。
0611デフォルトの名無しさん垢版2017/10/15(日) 21:36:21.23ID:hZRxEBGG
>>591
メールアドレスじゃなく郵便番号くらいを例にしたほうがよかったかね
どういうメールアドレスを正しい形式とするかは要件によって変わってくるんだよ
RFCがあるからといって技術者が勝手に決められるものじゃないから

簡単な郵便番号の入力チェックでも
何をOKとして何をNGとするかは要件次第
その「目視の確認」で一体何が担保できるんだろうね?

1500001
150-0001
150−0001
150    (旧3桁)
150-01  (旧5桁)
150-9999 (存在しない)

あらゆるケースをすべてテストできるわけでもないしするべきでもないが
仕様通りに動くと自信を持てるレベルのテストはすべき
0612デフォルトの名無しさん垢版2017/10/15(日) 21:42:30.40ID:zIm4LF54
>>608
はぁ?馬鹿?
設定ファイルが間違ってる可能性は?
読み込みはうまく行っても
値が反映されてない可能性は?
それが設定ファイルのある特定の設定値だけバグる可能性は?

まあ、普通に仕様通りに動くこと確認した方が早いよね?
0613デフォルトの名無しさん垢版2017/10/15(日) 21:43:34.59ID:/8UsyUgn
> メールアドレスじゃなく郵便番号くらいを例にしたほうがよかったかね
> どういうメールアドレスを正しい形式とするかは要件によって変わってくるんだよ
> RFCがあるからといって技術者が勝手に決められるものじゃないから
>
> 簡単な郵便番号の入力チェックでも
> 何をOKとして何をNGとするかは要件次第
> その「目視の確認」で一体何が担保できるんだろうね?

メールアドレスや郵便番号でもなんでもいいが、
ある項目が「メールアドレス」や「郵便番号」であることが担保できる。

これにより仮にバグがあったとしても、一箇所を修正するだけで
すべてが修正されることが担保できる。

動かして確認する方法だと、ある箇所のバグが修正されたからといって
別の場所も同じように修正されるとは限らない。

目視の確認ができるようにしておくことで、工数が大幅に削減できた。
0615デフォルトの名無しさん垢版2017/10/15(日) 21:44:44.64ID:zIm4LF54
想像力が足りないから不具合が無いように見えるんだろうね
想像力足りなくてもこういうの経験ないのかな?
経験不足もあるのかな?
考えが幼いよ
0617デフォルトの名無しさん垢版2017/10/15(日) 21:48:35.14ID:/8UsyUgn
>>616
お前関数って知らないのか?
共通化の基本テクニックだぞ?

全てのメールアドレスや郵便番号の項目で
同じ関数を使うんだよ。

テストをするのはその関数のみ。
バリデーションとしてその関数を使っているかどうかを
設定ファイルに書く。

何度も同じ話をさせるな
0618デフォルトの名無しさん垢版2017/10/15(日) 21:53:28.83ID:zIm4LF54
>>617
かんけーねーんだよ
何度も言うけどファイルに出したのはテメーの勝手なんだよ
動くかどうかを証明しろって言ってるの

何が必要でしょうか?
0619デフォルトの名無しさん垢版2017/10/15(日) 22:00:17.33ID:/8UsyUgn
>>618
見えない情報がある時点で、動かした所で
どんな場合でも動くとは証明できないってのは理解できてる?

ソースコードを読めば動かさなくてもわかる問題でも
ソースコードを隠した状態だと動かした結果だけでは証明できなくなる。
0620デフォルトの名無しさん垢版2017/10/15(日) 22:03:56.10ID:zIm4LF54
>>619
俺の質問に答える気はあるのかな?
もちろん答えは千差万別だが

お前のソフトが動くことの証明をして欲しいんだよ

一度でもソフトを納品したことがあるならわかるよね?
上司におんぶで抱っこでそんなこと気にしたことなかった?
0621デフォルトの名無しさん垢版2017/10/15(日) 22:08:32.52ID:/8UsyUgn
>>628
> お前のソフトが動くことの証明をして欲しいんだよ

なんでお前もできてないことを俺がやらんといけないの?
って言ってるんだが。

動くことの証明はソースコードを見せる以外に不可能なんだよ。
0622デフォルトの名無しさん垢版2017/10/15(日) 22:09:42.31ID:/8UsyUgn
ソフトウェアの納品は、動くことの証明じゃない。

これだけやりました。やったという証拠です。信じてください。
バグはないと思います(実際には有るだろ?)
という意味でしかない。

気にしたことなかった?
0623デフォルトの名無しさん垢版2017/10/15(日) 22:10:40.16ID:/8UsyUgn
いや、ソフトウェア納品でバグが1つもないと
証明するものを出したというのであれば、
それを言ってくれて良いんだが?

バグが有ることは証明できるが
バグがない(正しく動く)ことは証明できない
常識なんだがねぇ。
0625デフォルトの名無しさん垢版2017/10/15(日) 22:20:08.75ID:/8UsyUgn
>>624
え? 信用してくださいドキュメントの話なんかしてないじゃんw
今まで通りのやり方で適当にでっち上げれば?

俺は少ない手間で必要十分なテストをするだけの話
0626デフォルトの名無しさん垢版2017/10/15(日) 22:26:02.41ID:zIm4LF54
>>625
いいや
ソフトウェアって上から下まで
さっきお前が言ったとおり
確実なものなんか何一つないよ
お前の十分だってお前の中の十分だろ?

俺等とは違うの
その差分を俺らとは違うお前は自分で埋めなければならない
そこに理屈はない
それが説得ってもんじゃん
人を見るのが嫌ならこの業界は向いてないね
0627デフォルトの名無しさん垢版2017/10/15(日) 22:31:22.39ID:/8UsyUgn
結局屁理屈でごまかしたかw

無能なお前らと違うと言っても
だから何としか言えんわw
0628デフォルトの名無しさん垢版2017/10/15(日) 22:41:19.56ID:zIm4LF54
>>627
結局、テスト仕様書もテスト結果も
全ては説得なんだよ

理論に飛躍があり過ぎる
ウォーターフォールのV字開発で
設定ファイルに外だししたから
テスト項目減りますなんざ
あり得ない理論なんだよ

まあ、当然説得なんで可愛い女の子が交渉してくれば通る可能性も無きにしもあらずではあるけどね
0629デフォルトの名無しさん垢版2017/10/15(日) 23:06:53.56ID:nlQ3NzZf
>>595
>>593
>>>> 設定ファイルの各項目が実際の動作に反映されてるか動かしてみないと。
>>それは画面やAPIごとに、ここではこの項目が使われていますって
>>画面に表示するだけでOK。それを目視で確認すれば良い。

なるほど。
各項目のUIを一通り動作させて、
>>598 で書いてくれたようなデバッグモード的表示やデバッグログで、動いたバリデータの書類を出力するってことならよさそうだ。
それなら設定ファイルの内容および設定ファイルの配置の正当性が確認できる。
0630垢版2017/10/16(月) 00:16:25.05ID:Qeq9VPfc
2008年くらいに.net FWの地雷踏みまくった事を鑑みると、
テスト仕様は要件定義から作成すべきだし、その実施も単体、結合レベルは機械的に掛けてもいいけど、総合は手でやるべきだろうなぁ。

「テスト対象はまともに動いていない」という仮説を、ケース毎に一つずつ潰していって、残るのが「正常に動いてる」って結果なのが試験で
「正常に動いてる」が先に立って「なぜならこう書いたから、こう動くはずで、現にそう動いてる」ってのは試験じゃなくて単なる確認では?
正直、単体テストでもテスト対象を作った言語を使わないでテストして欲しいところ。
0634デフォルトの名無しさん垢版2017/10/17(火) 19:34:45.23ID:lUBT12Jg
>コードは正しくても実行するとうまく動かないとか経験したこと俺はマニュアルどおりやったからこのコードは動かないけど正しいんだ!
0635デフォルトの名無しさん垢版2017/10/17(火) 20:15:05.57ID:EyAJ3Syg
「Object Oriented」は「オブジェクト指向」と訳されていますが、実はこれが大変な誤訳で、正しくは「目的志向」です。
つまり、何らかの目的があって、それを目指す(「指向」は向いているだけ)というわけです。
0637デフォルトの名無しさん垢版2017/10/17(火) 20:28:58.13ID:EyAJ3Syg
>>636
典拠をご提示いただきたい
0642デフォルトの名無しさん垢版2017/10/17(火) 22:34:25.19ID:EyAJ3Syg
>>641
Jittaさんが言ってることの方がガセネタですね
じゃあそれを根拠にわんくまに怒鳴り込もうと思います
ありがとうございます
0643垢版2017/10/17(火) 22:41:00.56ID:GZgPL7cm
まあ英語でObject orientedだと、大体は対象志向みたいな意味合いだけどな。
Objectって単語は、モノと言うよりも「認識できる何か」「動作や感情の対象」を指す。
動詞になると顕著で、「俺はこれに文句があるんだが」ぐらいキツい意味。
「I object to waiting」みたいな。

Ob + ject 。前に向かって投げたやつ。客観的に見ることができる物、が語源。
逆に、中に投げ入れるモノがinject。下に投げたものがsubject(自我、主観)。
0644垢版2017/10/17(火) 22:46:44.09ID:GZgPL7cm
>>636
単なる「モノ」はだいたいbody、matter、substance。
physical bodyとか使う。
天体の「体」もbody。heavenly-body。
0645デフォルトの名無しさん垢版2017/10/17(火) 22:54:02.93ID:0cEpFleP
>>644
素晴らしい「モノ」
優れている「モノ」
高品質な「モノ」
高機能な「モノ」

のモノはどれになるの?
0648デフォルトの名無しさん垢版2017/10/17(火) 22:55:57.78ID:EyAJ3Syg
>>643
つまりJittaさんが大正解ってこと?
0649デフォルトの名無しさん垢版2017/10/17(火) 22:59:32.89ID:xucK+Hbm
目的を指向するってメチャクチャ当たり前だなw 殊更言葉にするのが恥ずかしいくらい
0652デフォルトの名無しさん垢版2017/10/17(火) 23:31:17.25ID:EyAJ3Syg
責務駆動設計とか言うよね
0655デフォルトの名無しさん垢版2017/10/17(火) 23:38:24.92ID:EyAJ3Syg
>>654
いいね!
0656デフォルトの名無しさん垢版2017/10/17(火) 23:47:01.89ID:G9wCIPXR
Functional ProgrammingのFunctionにだって責務あるし
POAのProcessやDOAのDataにだって責務は有る

他と違って「オブジェクト」という抽象概念を中心に物事を考えるからオブジェクト指向という名前
んでオブジェクトってのは↓
a data structure that can contain functions as well as data, variables, and other data structures
https://www.merriam-webster.com/dictionary/object
0657デフォルトの名無しさん垢版2017/10/17(火) 23:58:04.35ID:EyAJ3Syg
Object oriented languageは
・カプセル化、継承、多態性をサポートするもの
・JavaやC++、Rubyなど

Object based languageは
・継承・多態性をサポートしないもの
・VBなど

orientedはbasedと似たような意味で、basedよりも多くの条件を規定する。

Object based languageを「オブジェクトを基本にした言語」と解釈するならば
Object oriented languageは「オブジェクトを本位にした言語」と解釈するのが妥当な気がする。

「本位」は中心にして基本にするという意味なので「基本」を強めてる感じ。
0658デフォルトの名無しさん垢版2017/10/17(火) 23:58:36.63ID:EyAJ3Syg
>>656
やっぱそうだよね、オブジェクトを中心にするっていうのがオブジェクト指向だよね
0660デフォルトの名無しさん垢版2017/10/18(水) 00:22:48.20ID:kh//WtC6
>>659
>>641の歴史を見てほしい、翻訳してほしい、よろしくお願いします
0661デフォルトの名無しさん垢版2017/10/18(水) 00:36:43.88ID:GswCLlj6
ピッタリの訳語がないから
新しく作るか (例 経済)
既存の言葉に新しい意味を持たせるか (例 自由)

ちなみに中国語訳では「対象」らしい
0662垢版2017/10/18(水) 00:58:52.74ID:a2+TOoEN
>>645
good one,
better one,
high-quality one,
とかでは?モノと言うよりは、何か指しとるでしょ、その言い回しで言うときには、モノは。

>>647
事象、作品、道具、衣服などなど、それだけでは存在に意味が存在しない類のやつ。転じて、流行りとか、大事な事を指したりする。
0666デフォルトの名無しさん垢版2017/10/18(水) 08:13:24.82ID:lHCL+31V
>>659
「モノ」「箱」「塊」とかなんでもいいような気がしてきた
どうせ実際に使う時は「社員」とか「敵機」とかになるんだし
0667デフォルトの名無しさん垢版2017/10/18(水) 14:09:11.49ID:hmGkDgR5
人間の方の理解のために「”もの“になにかやらせる」
「”もの“を複製して別な”もの“のパーツとして使う」
これわかりやすいっしょ?
どんどん再利用パーツ増えて複雑になってったらこうじゃないとキツイっしょ。
で提唱されたってのに、すぐにベテランプログラマーさんは
「この名前さあ、タイプすんのめんどくさいから「あ」「い」「う」でよくね?」と他人にわからない暗号にしたがったり
「オブジェクト指向ってさぁ、オブジェクト単位に分けるんっしょ?この再利用しない中身もさぁ
ぜんぶ用途別に名前つけてパーツに分類整理しなきゃ!」とかやりなさる…
0668垢版2017/10/18(水) 19:20:47.11ID:a2+TOoEN
そうなると、クラスって何だ、インスタンスって何だ、コピーなら、コピー元も何かの役割を果たしてたんだろ?みたいな明後日の事言われるからな。

プレスの金型と、それで作り出した製品くらいの言い方の方が伝わる。
たまに金型に便利な治具ついてることもあるし、付けることもできて、それはプレスせずに金型から直接使えますが、
その治具にメモとかつけると皆から見えたり、誰かに剥がされたりするので、必要がなければ製品に付けたほうがいいですよ、
何回プレスしたかのカウンタとかは治具につけたら良いですね。みたいに説明した事ある。

スーパークラスとかサブクラスも、同じように、互換品の金型と互換品とかそういう説明できるから、物理な型で説明すると割とわかってくれる。
0670垢版2017/10/18(水) 23:14:36.30ID:a2+TOoEN
プロトタイプベースな言語だと、コピーのメタファの方が的確になったり、まぁ難しいわ、もう自分が知ってる物を、1から人に教える順番を考えるのは。
0673垢版2017/10/19(木) 08:25:03.58ID:Qitn7VqG
>>671
わかるわ。耳が痛い。教育することになって逆に知る事も多かったしな。
若手の新アイディアは、素直に教えてもらってる。
たまに俺が相槌しか話してないうちに「出直します」って言うから、どうやらテディベアとしても活用されてる模様。
0676デフォルトの名無しさん垢版2017/10/19(木) 20:46:11.30ID:SO5YirTn
オブジェクト指向を理解させたければ
まずはオブジェクトを理解させることからはじめないと

クラスやプロトタイプは二の次でいいし
責務や役割は別レイヤーの話
0677デフォルトの名無しさん垢版2017/10/20(金) 06:47:53.32ID:2DRMxDJ6
DDDって結構やってるもん?
0678デフォルトの名無しさん垢版2017/10/20(金) 07:15:39.98ID:VprmOZRL
ディスプレーディスパッチドライバ。
0679デフォルトの名無しさん垢版2017/10/20(金) 07:46:42.44ID:l3SzA2hH
>>677
IT後進国の日本ではまだほとんど導入されてないね
非正規化DB 、非レイヤー化、貧血ドメイン、トランザクションスクリプトが主流
0680デフォルトの名無しさん垢版2017/10/20(金) 08:25:54.77ID:VprmOZRL
韓国に学べ!
0683デフォルトの名無しさん垢版2017/10/20(金) 08:54:44.62ID:2DRMxDJ6
>>679
>>682
完全に対立してるな。

個人的には比較的昔からある企業は前者で、若くて成功してる部類の企業は後者かな?と思うけど。

実際DDDやってるぜー、て現場はどういう特性なんだろ。
0684デフォルトの名無しさん垢版2017/10/20(金) 18:29:33.31ID:yLtxI7rs
要件定義や設計時にDDDの考え方を(一部)導入してるのと
実装含めて厳格にDDD導入してるのとで違うよね

前者は多いけど後者は少ない
>>679は実装者の視点
>>682は要件定義・設計者の視点
おそらく
0689デフォルトの名無しさん垢版2017/10/21(土) 11:03:31.78ID:hrRqQerQ
>>687
業務アプリを受託で開発するのが主戦場
iOSと同時開発必須

自分で直接販売するのはバクチだね
アプリ数多いといってもニッチはまだまだ足りてない
0694デフォルトの名無しさん垢版2017/10/22(日) 22:16:28.27ID:guBNBPv4
>>592
目的語でひとくくりにするとわかりにくいけど
日本語では名詞が述語をどう修飾するかは格で区別されるから
格を考えればよいかと

1.「振り込む」が述語ならば振込先は口座なので「社員の口座に」としたほうが良いかと
振り込む(社員の口座に:与格, 給料を:対格)

2.「社員に」を使うなら述語は「支払う」かな
支払う(社員に:与格, 給料を:対格)

3. 対格しか使いたくないんですということならば「社員の」という属格で対格を修飾するしかないんじゃないかな
振り込む(社員の給料を:対格)
0696デフォルトの名無しさん垢版2017/10/22(日) 22:52:37.75ID:6ZVx9hPm
すっごい不評な法令検索つくって賞もらっている大学教授
法令データベース「e-Gov法令検索」リニューアルにあたり、同法情報研究センターの協力教員である名古屋大学情報基盤センター(センター長:森健策)の外山勝彦(とやまかつひこ)
0697デフォルトの名無しさん垢版2017/10/24(火) 06:59:53.59ID:lnfs4xW4
DDDと言えば20項目の責務単位でドメインクラス作ったら一つのグラフ作るのに20個のクラスがデータベースに問い合わせちゃってパフォーマンスやばい

有識者のみなさんはどうやってるの?
0698デフォルトの名無しさん垢版2017/10/24(火) 07:10:47.55ID:vrotHuwu
DDDならドメイン層とインフラ層のレイヤーは分けろ

つまりドメインのクラスが個々に
直接SQL文でDB叩いたりしない
0699デフォルトの名無しさん垢版2017/10/24(火) 07:28:15.97ID:lnfs4xW4
>>698
例えばドメインクラス「作業時間」にhogeプロジェクトの作業時間を問い合わせた時、作業時間クラスがDBクラス使って作業時間を教えてくれるんじゃないの?

この辺解らないとパフォーマンスの問題でアクティブレコードに走っちゃいそうです
0700デフォルトの名無しさん垢版2017/10/24(火) 07:38:44.12ID:vrotHuwu
>>699
たとえばソシャゲみたいなWebアプリをイメージしてみよう
一個アイテムを見るたびにDBアクセスしてたら重いから
画面を遷移するときにまとめてローディングするよな?

だからそういう風にインフラ層で
ある程度まとめてデータ取ってきて
ドメイン層の内部ではDBに直接触らないようにする
0704デフォルトの名無しさん垢版2017/10/24(火) 12:15:40.46ID:lnfs4xW4
>>703
昔は画面単位にデータ取ってたけどトランザクションスクリプトアンチパターンになるから作業時間とか予算とかドメインでクラス分けたんだ

それぞれのクラスがデータベースに問い合わせるからウッホという状態に
0705デフォルトの名無しさん垢版2017/10/24(火) 17:47:57.40ID:cjHIRFnx
>>697
基本は集約一つにリポジトリ一つ
レポーティング用途の場合はドメインモデルやリポジトリを経由せずに
DBレイヤーに直接問い合わせるのも有り

ドメインモデルを経由しなければ
ドメインロジックが分散する可能性があるのでトレードオフを判断したり
それを避ける工夫が必要だったりする

Patterns, Principles, and Practices of Domain-Driven Designって本で
一つの章使ってレポーティングの実装パターンを紹介してるので読むといいと思う
0706デフォルトの名無しさん垢版2017/10/24(火) 19:37:04.66ID:zYnBGUyD
ドメイン駆動とORMって相性悪くない?

class Foo : ValueObject<Foo> { 〜 }
class Bar : ValueObject<Bar> { 〜 }
class Baz : ValueObject<Baz> { 〜 }

class Hoge : Entity<Hoge> {
private final Foo _foo;
private final Bar _bar;
public Hoge(Foo foo, Bar bar) {
Assert.notNull(foo);
Assert.notNull(bar);
_foo = foo;
_bar = bar;
}
public Baz queryBaz() {
// なんか計算する
return new Baz(...);
}
public Hoge doSomething() {
// なんか計算する
return new Hoge(..., _bar); // なんか計算した結果fooが変化する。_barはそのまま
}
}

ORMってこういうガチンコDDD的なオブジェクトってうまくマッピングしてくれないじゃん?
だからORM使おうとするとpublicプロパティに汚染されてゲロ吐きそうになる
かといってORMはDTOまでに留めてDTOとドメインオブジェクトのマッピングを手書きするってのはそれはそれでめんどくさい
0711デフォルトの名無しさん垢版2017/10/24(火) 21:36:46.21ID:zYnBGUyD
>>709
どうかな
さっきも書いたようにDDDに忠実にドメインモデルを構築するとpublicプロパティが無くなって完全コンストラクタでインスタンスを構築しなければならない
DTOのようにフラットな構造にならない点でもORMで扱いにくい
0712デフォルトの名無しさん垢版2017/10/24(火) 21:46:26.94ID:zYnBGUyD
そもそもDBが単にオブジェクトの置き場所になるってのも疑問だよ
RDBは個々のオブジェクトではなく集合としてのビジネスルールを表現するのに適している
単なるデータストアではない
1ヶ月の間に正当な休暇を間に挟まず3営業日連続で欠勤した従業員にはペナルティを与えるといった業務ルールがあったらSQLで解決するほうがスマート
0714デフォルトの名無しさん垢版2017/10/24(火) 21:58:23.29ID:8vhM38kM
>>712
> そもそもDBが単にオブジェクトの置き場所になるってのも疑問だよ

DDDだろうとトランザクションスクリプトだろうとDBの役割は変わらないよ
ドメインモデルから見てあたかも単なるオブジェクトの置き場であるかのように振る舞うっていうのは、
そう振る舞うように作ってるからそうなるのであって、DBから見たら、アプリがDDDで作られてるかどうかなんてわからない
0715デフォルトの名無しさん垢版2017/10/24(火) 22:02:14.66ID:vrotHuwu
>>712
じつはそういう考え方もアリだと思う
SQLやPrologでビジネスルール書くのもアリ

でも現実的にはDDDの
インフラ層にDBを隔離するやり方が無難だと思う

SQLでビジネスロジックを表現すると
シンプルな例だと分かりやすく感じても
実務レベルの複雑なルールでは非常に難解になる

OOでチマチマ差分を書いていく方が分かりやすい
これはなんでOOが主流なのかの理由でもあると思う
0716デフォルトの名無しさん垢版2017/10/24(火) 23:18:27.01ID:7kpfYeDE
>>712

ひっかけっぽい例だな
SQLかじったレベルじゃそれは書けない

普通にアプリでやったほうが柔軟性高そうだ
0717デフォルトの名無しさん垢版2017/10/25(水) 01:20:58.43ID:vWNNDC2i
>>712
RDBMS主体でやるプロジェクトもあるだろ
ただ古臭くて不便なことが多いからか
アプリケーション側でやるのがほとんど

技術者の数も違うからかな
0718デフォルトの名無しさん垢版2017/10/25(水) 07:21:56.95ID:xH/9oE/2
期待のデータベーススペシャリスト持ちが開発してくれたプログラム
1クラス1メソッドにSQLをぎっちり書いていてくれた
流石データベーススペシャリストだと思った
0724デフォルトの名無しさん垢版2017/10/25(水) 19:51:28.91ID:U0g+4+bj
オブジェクトにメソッドでリクエスト飛ばすと答が返ってくるならそれはそれでいいような…
0726デフォルトの名無しさん垢版2017/10/25(水) 22:52:11.24ID:Pb7+sINR
DBスキルつけても負の遺産と有害な社内規約のせいで役に立たないことが多いね
データアクセス層でオブジェクトにマップしたらもう二度と中は見たくない
0729デフォルトの名無しさん垢版2017/10/26(木) 00:00:20.94ID:g5KvQD5L
>>727
アスペすぎるだろ
お前が気をつけろ
0732デフォルトの名無しさん垢版2017/10/26(木) 02:05:07.05ID:1RkkpTof
JAVAが得意とかJAVASCRIPT経験5年とか書いてるの見て
まともなコード書けるやつだと思えるの?
0734デフォルトの名無しさん垢版2017/10/26(木) 04:59:02.77ID:tVSriKDm
java - コマンド。
Java - 言語。
JAVA - 茶。
0735デフォルトの名無しさん垢版2017/10/26(木) 07:20:00.13ID:mjDXX7Bg
>>723
VBの絵本でプログラムを覚えました
非常に解りやすく良書だと思います
御社のお役に立ちたいです
0740デフォルトの名無しさん垢版2017/10/26(木) 17:24:51.39ID:AKbjs7qE
読みにくくなるとかでクラス禁止になった

で、大卒正社員PMがクラス作った俺を高卒非正規はスキルが無いと滅茶苦茶言ってる

帳票の抽象クラスとそれを継承した3帳票のクラス作っただけなのに

つかボタンイベントで作られるメソッド以外禁止にする勢い
0741デフォルトの名無しさん垢版2017/10/26(木) 17:29:07.25ID:AKbjs7qE
前任者がボタンイベントのメソッドに処理をつらつら書いて完成させた成功体験が悪かったみたい

全部のメソッドに同じ処理をコピペしてるから修正の影響範囲がわけわからん
0746デフォルトの名無しさん垢版2017/10/26(木) 19:35:59.43ID:5JraUsKU
結局、ここで人を馬鹿にしてる奴等もいざ自分が説明する立場になったら
何もできんということは覚えておいたらええよ
0750デフォルトの名無しさん垢版2017/10/26(木) 20:12:16.99ID:t2R1m7Go
>>749
黙れ無職、はい論破
0751デフォルトの名無しさん垢版2017/10/26(木) 20:16:04.62ID:t2R1m7Go
作っておしまいなソフトは多いし
規模が大きくないか、仕様が変わらないようなところなのかもしれないし
個別に修正するときはコピペした方が影響の範囲は小さくなるし
一か所見れば処理がわかるってんならコードの見通しもいいし
ソースコード見ない段階であれこれ言うのはちょっとちょっとちょっと
0752デフォルトの名無しさん垢版2017/10/27(金) 17:35:48.74ID:2941eAj7
>>751
作ってお終いなら俺は文句言わないよ
改造とバグ修正を投げられたから困ってるんだ
関心が分散しまくってる
高卒非正規の脳じゃオーバーロードだ
0754デフォルトの名無しさん垢版2017/10/27(金) 17:42:56.24ID:2941eAj7
無職じゃないって
つかクラス化した場合の有効性をコストで可視化しろって
もうバグ満載でリリースしてデスマーチコースだ
IT業界らしくなってきた
0755デフォルトの名無しさん垢版2017/10/27(金) 17:55:24.25ID:d3nx2286
>>754
ごめんけど、ここはオブジェクト指向を諦めた人のスレじゃないから
コピペだらけのトランザクションスクリプトが至高だと悟ったなら、それでやっていけばいいじゃん
わざわざ啓蒙しに来なくていいよ
0759デフォルトの名無しさん垢版2017/10/27(金) 21:26:57.91ID:2kHVS/Sf
オブジェクト指向がダメって人は
言語何使ってるんだ?
オブジェクト指向言語のAPI使ってないってこと?
0762デフォルトの名無しさん垢版2017/10/28(土) 08:20:30.57ID:rZWSN5Vz
throw new AppException("ERR12345");

throw new AppException(ErrorCode.ERR12345);

throw new AppException(ErrorCode.BlogPostNotFound);

throw new BlogPostNotFoundException();

AppExceptions.ThrowBlogPostNotFound();

IAppException appExceptions = GetService<IAppExceptions>();
appExceptions.ThrowBlogPostNotFound();

どれがいい?
0765デフォルトの名無しさん垢版2017/10/28(土) 11:06:31.25ID:LD30atSw
diとiocの組み合わせの意義を教えてください

シングルトンをどこが持ってるかが重要なんですか?
0770デフォルトの名無しさん垢版2017/10/28(土) 15:39:27.71ID:5jO14XmG
オブジェクト指向の言語を使っても
オブジェクト指向でプログラムを作ることにはならんでしょうに
staticメソッドを中心にプログラム組むことだってできるし
それなりの規模がないとオブジェクト指向は効果を発揮しないのじゃないかな
0771デフォルトの名無しさん垢版2017/10/28(土) 15:42:18.02ID:5jO14XmG
そいえば旧VBは型の継承はサポートしてるんだよね
昨今は実装の継承はあまりやらない方がいんじゃないかって言われてるし
旧VBはオブジェクト指向言語と言っていいと思う
旧VB+ラムダ式の言語があれば最強な気がする
0774デフォルトの名無しさん垢版2017/10/28(土) 19:00:48.19ID:bXFe772l
>>773
あれあれ?ポリシーがないってだけ?

そのポリシーとやらは
オブジェクト指向にどう関係してくるんですか?
0777デフォルトの名無しさん垢版2017/10/28(土) 21:06:18.54ID:b0D8bUkC
「ナンバーズ-天才数学者の事件簿-」でFBIの技術官が犯人のwifi逆探知するのに
「ええ、ビジュアルベーシックで絞り込めば…」って言ってたし(ガクブル
0783デフォルトの名無しさん垢版2017/10/29(日) 22:10:12.67ID:8/yZ+26E
VBってまだサポートされてんだっけ
Coreになってからさっぱり話題にならなくなったけど
0784デフォルトの名無しさん垢版2017/10/29(日) 22:16:42.10ID:4sjZmv7g
JavaScript併用しなければならないWeb開発だと文法違い過ぎるから敬遠されるだろうね
0785デフォルトの名無しさん垢版2017/10/30(月) 07:04:36.23ID:s8k71vXD
VBは言語の問題でなく使う奴が糞

8割がスマートUIを書きモダンな設計を読みにくいと一蹴する

4重ループにカウンタ現役
0786デフォルトの名無しさん垢版2017/10/30(月) 07:11:07.87ID:s8k71vXD
VBAはオブジェクト指向が出来るように近代化して欲しいと思ったけどVBAごときでオブジェクト指向導入する規模とかヤバそうだから現状維持と緩やかな死が良いね
0787デフォルトの名無しさん垢版2017/10/30(月) 07:17:28.85ID:s8k71vXD
ER図とクラス図が似てくるのは危険な匂いしてますか?

正規化した物理設計レベルじゃ違うけど外仕レベルじゃ同等になっちゃう
0789デフォルトの名無しさん垢版2017/11/01(水) 17:29:31.91ID:qqAk/1TW
>>788
内部設計になってDBの正規化始めると確かに違います
ただ外部設計ではほぼ同じになるのでER図とクラス図に差が無いんです
ER図要るのかこれってなるので世間様はどう折り合い付けてるのか気になりまして
0790デフォルトの名無しさん垢版2017/11/01(水) 19:42:14.01ID:4uxV0O6/
データベースは実装の奥底にあるものなので設計では何も決めない
データベースなしの状態で動くところまで実装してようやく、そろそろ永続化の実装考えようかって話が始まる
0794デフォルトの名無しさん垢版2017/11/03(金) 00:25:37.71ID:g9SR2OMf
クラス依存症は、だいたいのところファンクションという概念すら理解できていないのが9割
クラスに格納されたデータという名詞的実体に安堵しているだけで
プログラムを書く才能も、システム設計する能力もないやつが
好き勝手にクラス図をかいて、ぼくのさいっきょなクラスチームを作るだけなんだよなあ

だから僕の考えたクラス構成という話題は出ても
そのクラスがどのように通信するかっていう話をオブジェクト指向信者は語らないの

なぜならばそのメッセージングを実装できないから
そのすばらしいクラスが単なるデータの塊でしかないことを
自分で書いた壮大な物語でカプセル化し、他人から見えなくしたいから

カプセル化って偉大だよなあ?
電卓やじゃんけんすら実装できないひ弱な自分を壮大なクラス図を書けばごまかせると錯覚できちゃうんだから
0795デフォルトの名無しさん垢版2017/11/03(金) 00:39:25.54ID:T1BwLucT
VB.Netはもう20年ほど前に完全に移行しているんだけどなぁ
VB馬鹿にするやつがどれだけオブジェクト指向理解してんのか疑問だな
0797デフォルトの名無しさん垢版2017/11/03(金) 01:02:36.32ID:EKwPnWZh
オブジェクトでプールして必要に応じて永続化してくれるようなサービスでもういいな
0798デフォルトの名無しさん垢版2017/11/03(金) 02:56:41.30ID:9CXEo34m
>>794
さすがに時代錯誤な感じ

今どきのメジャーな言語は
ほとんどクラス持ってるぞ
Java、C#、C++、Python、Ruby、PHP……
0800デフォルトの名無しさん垢版2017/11/03(金) 10:39:58.84ID:r8BoLq9w
間違ってないんだから問題ないだろ。

あとついでに無名クラスを持っている言語
PHP、・・・

クロージャーを持ってる言語
PHP、・・・

トレイトを持ってる言語
PHP、・・・

ジェネレータを持っている言語
PHP、・・・
0801デフォルトの名無しさん垢版2017/11/03(金) 11:12:35.69ID:CFYOACkT
PHPは最先端の言語だからな。だからこそ、バカには使いこなせない。
のに、バカがこぞって使うからクソ言語扱いされている。
0803デフォルトの名無しさん垢版2017/11/03(金) 11:53:34.15ID:OuG6RHrP
10年経ったことにも気づかない引きこもりがいる板だからな
10年前に見かけた与太を今日話すことに違和感をおぼえる知能もない
プログラミングできるわけじゃないから、技術的な話にも初心者の質問にも応えられない
「ただ」「昔見かけたもの」を「書く」だけ
0807デフォルトの名無しさん垢版2017/11/03(金) 23:15:38.46ID:+QQUmgGP
>>795
> VB.Netはもう20年ほど前に完全に移行しているんだけどなぁ
VB.netのリリースは2001年(16年前)なんだが...

> VB馬鹿にするやつがどれだけオブジェクト指向理解してんのか疑問だな
人の心配する前に自分の認知症の心配した方がいいぞ w
0808デフォルトの名無しさん垢版2017/11/03(金) 23:36:33.86ID:lQ0XoM3e
四捨五入してみろ
0810デフォルトの名無しさん垢版2017/11/04(土) 08:50:40.41ID:KxJ3WBAq
20年ほど前じゃない16年前だ <- これアスペすぎるだろ
0817デフォルトの名無しさん垢版2017/11/04(土) 12:51:55.25ID:zD8APvjd
ヒント:8進数。
0818デフォルトの名無しさん垢版2017/11/05(日) 19:58:02.68ID:B4RjlPFm
VBとCOBOLはいまさら覚えたくねえなぁ
C系と記述が違うのに先進性は無いとか鬱になる
0828デフォルトの名無しさん垢版2017/11/10(金) 22:57:56.01ID:7i6+bCDW
>>827
ガチアスペルガー症候群患者乙
0830デフォルトの名無しさん垢版2017/11/10(金) 23:31:12.69ID:8c9+Jy54
どうやったらこんなつまんないレスを返せるんだよ...
重症やな w
0833823垢版2017/11/11(土) 00:14:54.76ID:xhBZikg9
>>825は俺じゃねぇからな
0836デフォルトの名無しさん垢版2017/11/11(土) 01:09:18.75ID:QwHnz2ZY
>>832
オッサンか?
0838デフォルトの名無しさん垢版2017/11/11(土) 01:21:19.20ID:QwHnz2ZY
若いと思ってるっつーか実際若いしな
ガチとか使う奴=低脳、バカっぽいって発想がオッサンぽい
0842デフォルトの名無しさん垢版2017/11/11(土) 11:01:18.10ID:Zi5KnTyx
アスペクト指向プログラミングってのは具体的にどんなのかよく分からんわ
興味ないから
0844デフォルトの名無しさん垢版2017/11/11(土) 18:10:49.46ID:QwHnz2ZY
>>840
え?おまえって未成年か何か?
0846デフォルトの名無しさん垢版2017/11/11(土) 18:52:46.73ID:EGHwL5V1
おっさんは嫌いかい?
0847デフォルトの名無しさん垢版2017/11/11(土) 18:53:43.53ID:EGHwL5V1
おっさんは知識と経験と優しさでできています
残りの9割は脂肪です
0850デフォルトの名無しさん垢版2017/11/12(日) 11:03:42.20ID:hG4wTZ8S
おっさん煽りでスレ消化して楽しいんだろうか
0851デフォルトの名無しさん垢版2017/11/12(日) 11:10:51.09ID:H0u2BwIs
アスペ志向プログラミング。
0853デフォルトの名無しさん垢版2017/12/05(火) 13:42:11.58ID:x/Ziu4N3
やっぱり青木 淳いいな
若い時に心酔して、経験積むうちに忘れていたが
ようやく言わんとすることが分かつて来た
0854デフォルトの名無しさん垢版2018/01/04(木) 13:45:00.27ID:rLoh+wxC
2ちゃんねる自体、どこかの機能でデザインパターンつかわれてるの?
0855デフォルトの名無しさん垢版2018/01/05(金) 18:43:53.01ID:kDZQv7Ud
>>854
つこてるマメがちがうよ
0856デフォルトの名無しさん垢版2018/01/27(土) 22:10:53.07ID:FKF1aZVQ
クラス図とER図の違いって継承関係が
あるかないかだと思ってるんだけど、
DBのテーブルって継承はないわけじゃん、
継承とか知識レベル/操作レベルってDB設計的には
どう対応するの?
0857デフォルトの名無しさん垢版2018/01/28(日) 07:50:43.37ID:JtfoYsxK
いや、>>856が知らないだけで、ERモデリング技法にも
継承に相当するサブセット(部分集合)の表現は存在している
明らかに欠けているのはメソッド(ストアドプロシージャ)かな
0858デフォルトの名無しさん垢版2018/01/28(日) 08:06:43.20ID:9retBgHA
CRUDは外部的だね

データ保護に対しては各種制約を設けるしかない

それらを言語側で埋めるのがORマッピングだったりDAOパターンだったり
0859デフォルトの名無しさん垢版2018/01/28(日) 20:53:59.18ID:iKmgvq7C
>>857
いやそれは分かったが実際のテーブルはどうするんだよ
親クラスと 子クラスA 子クラスBのテーブル全部別々に
作るの?
ここでいいう親子は継承の親子関係のことで
外部キーでの関連のことではないものとする。
0860デフォルトの名無しさん垢版2018/01/28(日) 21:10:28.78ID:LAVjxJs1
考え方次第かな?

一つのテーブルに全カラム持たせるか差分情報だけのテーブルを連結するか
0861デフォルトの名無しさん垢版2018/03/31(土) 13:51:12.70ID:O6Ruc86y
オブジェクト指向の考え方を教えてください

指定した2点を通る線を描画するプログラムを作ろうと思っています。
・色
・線の太さ
こんなプロパティを持つクラス「DrawLine」を考えています。

さらにこのクラスを継承を用いて
・2点間のみ線を引く線分クラス
・2点を通る直線クラス
・2点のうち片方を始点に持つ半直線クラス
を派生させようかと思っています。

これとは別に描画のインターフェースを担うクラス「LineInterface」を用意しようと思っています
・線を引く
・線を消す
・2点の位置を変更を受け付ける
・色の変更を受け付ける
・線の太さの変更を受け付ける
・線分、直線、半直線の変更を受け付ける

さて、ここで疑問なのですが、インターフェースを担うクラス「LineInterface」は
内部に色や線の太さ、線分・直線・半直線の状態を記憶するbool値型のフラグ
ないしはenum型の値(線分・直線・半直線)を持つべきでしょうか?

最初はこの手のフラグには頼らない設計を心がけてみました。
色、線の太さ、線分・直線・半直線、これらの状態が変更されるたびに
クラス「DrawLine」のインスタンスを作成し直せばいいと思ったからです。
ただすぐに壁にぶち当たりまして、たとえば色を変更しようと思いクラス「DrawLine」の
インスタンスを作り直そうと思ったとき、それが線分クラスなのか半直線クラスなのか
直線クラスなのかは状態を記録しておかないと判断できないことに気付きました。
インターフェースクラスには最低限の内部状態はbool値enum値フラグとして保持しておくべきでしょうか?
0862デフォルトの名無しさん垢版2018/03/31(土) 14:36:01.69ID:c97ae/y4
筋が悪い
0863デフォルトの名無しさん垢版2018/03/31(土) 15:08:51.89ID:jo8oJ0bD
まず>>862を先に読んで「もっと何か具体的に言ってやれよw」と思ったが
その後>>861を頑張って読んだら、言いたい事は既に>>862に書いてあった
0865デフォルトの名無しさん垢版2018/03/31(土) 15:19:37.25ID:bjBtCztz
なぜか観てしまう!!サバイバル系youtuberまとめ
http://tokyohitori.hatenablog.com/entry/2016/10/01/102830
あのPewDiePieがついに、初心YouTuber向けに「視聴回数」「チャンネル登録者数」を増やすコツを公開!
http://naototube.com/2017/08/14/for-new-youtubers/
27歳で年収8億円 女性ユーチューバー「リリー・シン」の生き方
https://headlines.yahoo.co.jp/article?a=20170802-00017174-forbes-bus_all
1年で何十億円も稼ぐ高収入ユーチューバー世界ランキングトップ10
https://gigazine.net/news/20151016-highest-paid-youtuber-2015/
おもちゃのレビューで年間12億円! 今、話題のYouTuberは6歳の男の子
https://www.businessinsider.jp/post-108355
彼女はいかにして750万人のファンがいるYouTubeスターとなったのか?
https://www.businessinsider.jp/post-242
1億円稼ぐ9歳のYouTuberがすごすぎる……アメリカで話題のEvanTubeHD
https://weekly.ascii.jp/elem/000/000/305/305548/
専業YouTuberがYouTubeでの稼ぎ方具体的に教えます。ネタ切れしない方法は〇〇するだけ。
https://www.youtube.com/watch?v=Co9a9fHfReo
YouTubeで稼げるジャンルは〇〇動画です。YouTube講座
https://www.youtube.com/watch?v=_Nps8xb5czQ
0866デフォルトの名無しさん垢版2018/03/31(土) 15:23:11.79ID:c97ae/y4
test
0868デフォルトの名無しさん垢版2018/03/31(土) 16:04:12.88ID:fnj+62QA
とりあえずC#で書くとこんな感じか

class abstract LineBase{
 public float width{get; private set;}
 public Color color{get; private set;}
 public Point start{get; private set;}
 public Point end{get; private set;}

 // 初期値をセット
 public LineBase(引数){}
 public LineBase(LineBase instance){}

 // 共通メソッドを実装
 public void SetWidth(int width){}
 public void SetColor(Color col){}
 public void SetPoint(Point start, Point end){}
 public void Eraser(){}

 public virtual void Draw(){} // 仮想メソッド
}

class SegmentLine: LineBase{
 public SegmentLine(引数): base(引数){}
 public SegmentLine(LineBase instance): base(instance){}
 public overrider void Draw(){} // 線分の描画処理を実装
}

class StraightLine: LineBase{
 public SegmentLine(引数): base(引数){}
 public SegmentLine(LineBase instance): base(instance){}
 public overrider void Draw(){} // 直線の描画処理を実装
}
0869デフォルトの名無しさん垢版2018/03/31(土) 16:07:03.50ID:fnj+62QA
>>861
何のクラスかは正直どうでもいい
こんな感じで基底型のインスタンスをコンストラクタに渡してコピーしとけ

// 線分クラスを生成
LineBase segment = new SegmentLine(初期値を渡す);

// 線分のデータで直線クラスを生成
LineBase straight = new StraightLine(segment);
0870デフォルトの名無しさん垢版2018/03/31(土) 16:42:41.66ID:O6Ruc86y
>>869
最初線分を描いて、途中で気が変わってやっぱり直線を描きたいな、となったときは
インスタンスsegmentを消去したのち、インスタンスstraightを選択してDraw()を実行する
という理解でよろしいでしょうか?

さらにその状態で色を変えたいときはインスタンスstraightを選んだまま色を変えるということでしょうか?

インスタンスsegmentとインスタンスstraight、いま選んでいるのはどちらか?という情報は
どこかに格納しておくべきでしょうか?
0871デフォルトの名無しさん垢版2018/03/31(土) 19:12:42.71ID:NUZUQ+fU
>>861
・線の引き方の違いを継承で実装する
・線のデータをフラグで持つ

特にこの二点はオブジェクト指向として筋が良くない

・線の引き方はメソッドで実装
・データはフラグじゃなくオブジェクトで渡す

こっちの方がオススメ
0872デフォルトの名無しさん垢版2018/03/31(土) 19:51:14.18ID:O6Ruc86y
>>871
クラス「DrawLine」は単純なDraw()メソッドは廃止して代わりに

DrawStraightLine()…直線を描画するメソッド
DrawSegmentLine()…線分を描画するメソッド
DrawHalfLine()…半直線を描画するメソッド

を実装し、インターフェースからクラス「DrawLine」には

・2点の情報が格納された構造体
・色、線の太さの情報が格納された構造体

を渡す。

という理解でよろしいでしょうか?

ちなみにインターフェース上では線の引き方はフラグ等で格納しておいても構いませんか?
ユーザーがインターフェースに対して
SetSegmentLine()
などの命令を実行したらそれに応じてbool値に記憶させておくというのが常道でしょうか?
0873デフォルトの名無しさん垢版2018/04/01(日) 03:19:52.65ID:qrIxuUzF
>>872
前半はそう。継承を使うのはダメじゃないんだけど
継承を使いこなすのは非常に難しいので
慣れるまではメソッドをたくさん生やす方が分かりやすい


後半はフラグとかいらない
そういう発想がまだないんだろうけど
デザインパターン勉強するとよく分かる

オブジェクトの生成と使用を分けて
なるべく値の設定を生成の一回だけで済ますと
フラグの不整合のバグが減ってソフトが安定する
これがオブジェクト指向を使うメリットのひとつ

特にオブジェクトが常に動き回るゲームとかじゃなくて
作図ソフトだったら基本的に一度オブジェクトを作ったら
そのまま静的な図になるから位置は不変データにして
もし位置を修正するときにはオブジェクトを再生成する

なんでそうするかっていうとフラグがバラバラ増えていくと
どこで値を変更したのか不明で後でメンテが困難になってくるから
できる限り生成時に一括で設定するようにするの
0874デフォルトの名無しさん垢版2018/04/01(日) 11:40:58.30ID:eiVy9NnE
>>873
こんな感じでどうでしょうか。

インターフェースを担うクラス「LineInterface」から
実際に線を描画するクラス「DrawLine」に向けて
新たに以下のような3番目のクラス「Information」を作成し、このインスタンスを投げようかと思います。
クラス「Information」には2点の位置座標、色、線の太さ、半直線か直線か線分かの情報が格納されています。

Class Information
{
public:
  double x1, y1, x2, y2;
  int color;
  int lineWidth;
  bool leftExtendFlag, rightExtendFlag;


};

線を描画するのに必要な情報は全てこのクラスに格納・隠蔽します。
ユーザーから線に関する新たな情報を受け付けたら
0875デフォルトの名無しさん垢版2018/04/01(日) 11:44:40.29ID:eiVy9NnE
あ、失礼。途中で書き込んでしまいましたorz

ユーザーから線に関する新たな情報を受け付けたら
クラスInformationに用意した専用メソッドを通してメンバ変数にデータがセットされます。
直接メンバ変数を操作するわけではないので(bool型のフラグを直接いじることはない)
安全面でも良いかと

このインスタンスを受け取った「DrawLine」クラスはメンバ変数を直接読み込み(publicで
宣言したのでアクセス可能)、線を描画します。
書き換えはせず、新たなデータを受け取とるたびに「DrawLine」クラスのインスタンスを
新規に作成しようと思います(なのでデータはコンストラクタで受け取るのみ)。

こんな感じでオブジェクト指向になるでしょうか?
0876873垢版2018/04/01(日) 20:00:03.25ID:qrIxuUzF
>>874
>>875
細かいこと言うと第三のクラス名はまだしも「LineInfo」とかだろうね
実用ソフトだと「Line」だけじゃなく「Box」とか「Circle」とか増えてくから

細かいとこでキリがないけど
でもそれで組んでみればいいんじゃないの

OOPの要点を一言でいうと疎結合にすることで
ゴチャゴチャするようだったらまた設計を見直していく
0877デフォルトの名無しさん垢版2018/04/01(日) 22:44:15.70ID:eiVy9NnE
>>876
> 細かいとこでキリがないけど
> でもそれで組んでみればいいんじゃないの

了解しました、この方向で組んでみます

> OOPの要点を一言でいうと疎結合にすることで
> ゴチャゴチャするようだったらまた設計を見直していく

プログラムに関する本はちまたに溢れかえっているんですが
オブジェクト指向の設計に関する本ってなかなか見かけませんね
学ぶだけでなく説明する方も難しいのかもしれません>オブジェクト指向
0878デフォルトの名無しさん垢版2018/04/01(日) 23:09:11.53ID:qrIxuUzF
>>877
>オブジェクト指向の設計に関する本
探せばいっぱいあるよ

でも本格的なのはたいてい翻訳書で
分厚くて高くて難しいから読むの大変だとは思う
0880デフォルトの名無しさん垢版2018/04/01(日) 23:54:31.59ID:voVzLJKC
>>877
多分そもそもオブジェクト指向を「学ぶもの」と思っている時点で間違い。
あれは悟るものだ。

>>861
おそらくOOPの練習なのだろうけど、そもそも題材も悪い。
オブジェクトの切り方は例えば .NET でも見てみればいいでしょ。
Graphicクラスに全部メソッドが付いている。
https://msdn.microsoft.com/ja-jp/library/system.drawing.graphics(v=vs.110).aspx
というか、線分と半直線と直線を別のオブジェクトにする意味が分からない。
余計使いにくくなるだけだ。何をどう抽象化(共通化)すべきなのか、全く分かってない。

ただな、OOPを「初心者」が理解するのは不可能なんだよ。
心は>>873に書いてあるとおりだが、要するに、

・なかなか複雑になってメンテが辛くなってきた物を、多少なんとかするもの

であって、
初心者が組める範囲で複雑になることなんてあり得ないから、理解しようがない。
だから、「頭でっかち」方式で最初に学ぶのはかなり無理。
デタラメでもいいからやってみて、
自分で「ああこういう事をすると苦労するのか」と地雷を全部踏んでみれば納得するだろうし、
おそらくそっちの方が早い。そうしているうちに上達もするだろうし。

OOPで一番重要なのは「分割」だ。(粗結合化)
ところが初心者が組める規模では「分割」する必要なんてないから、
初心者は常に「継承」をこねくり回して練習しようとするが、それは明確な間違いだ。
それをいくらやっても意味がない。
「分割」しないと手に負えない規模の物を早く組めるようになり、
それを上手く「分割」出来るように努力することだ。
ここら辺の話は「プログラミング言語C++」に書いてある。
(今のOOPはC++作者が再定義したものだから当然ではあるが)
0882デフォルトの名無しさん垢版2018/04/02(月) 00:22:40.39ID:zddvN9B7
>>881
まあ君はやろうとしているだけかなりマシだよ。
やろうとせずに知ろうとだけする奴も多いからね。
そもそも、

・これこれこうで、後はよきにはからえ

と処理を投げられる物をオブジェクトにするべきであって、
逆に、そうでない物をオブジェクトにしても余計に話が混乱するだけ。
「隠蔽」も、初心者はとにかく「隠蔽」しようとするが、これも間違いで、
(外部から使うときに)そもそも見たくも知りたくもない物を「隠蔽」するんだよ。

といっても、やらないと分からないだろうから、まずは頑張れ。
0883デフォルトの名無しさん垢版2018/04/02(月) 04:18:10.81ID:3ewhMOuh
>OOPはC++作者が再定義したもの

元凶だよな
Javaも再定義してるけど
0884デフォルトの名無しさん垢版2018/04/02(月) 08:32:10.05ID:i02Vx/uo
(第1章 はじめに 2頁)
たとえば、CycはFredという名前の男が朝にひげをそるという話が理解できなかった。
Cycの推論エンジンは、この話の中に矛盾を見つけた。Cycは人間には電気の部品がないことは知っているが、
Fredが電気カミソリを持っていたので、エンティティ「Fredがひげそり中(FredWhileShaving)」
には電気の部品が含まれていると考えた。したがって、CycはFredがひげをそっている間、
Fredはそれでも人間なのかと尋ねた。

『深層学習』
著者:
Ian Goodfellow, イアングッドフェロー,
Yoshua Bengio, ヨシュアベンジオ,
Aaron Courville, アーロンカービル
0886デフォルトの名無しさん垢版2018/04/03(火) 00:23:48.15ID:cU9BUIMs
電気の部品が誤訳か
0887デフォルトの名無しさん垢版2018/04/03(火) 07:27:20.27ID:93hqFpFO
>>883
C++(というかその設計者)はSmalltalk(同)のメッセージングのOOPを
ユーザー定義型(=抽象データ型)のOOPとして再定義したわけだけど
JavaはOOPの何を再定義したの?
0891デフォルトの名無しさん垢版2018/04/03(火) 16:24:37.04ID:R6gDm2yr
一番上手くやってるのは Objective-C だと思う
0892デフォルトの名無しさん垢版2018/04/03(火) 19:48:24.93ID:J58Y9OWc
Obj-C好きなのだが中身がC丸出しなのがなぁ…
swiftは文法モダンに!でまた“ここで処理投げてます!”が
わからないようにする悪弊組み込まれちゃったし…
(それは退歩なんだってば)
0893デフォルトの名無しさん垢版2018/04/03(火) 20:48:38.44ID:MVEz7YW1
20年前はObjcet-Cなんて一部の物好きの研究者しか使ってなかった

FORTANやPascalと共に滅亡して時代はC++かJAVAの二強になると
堅く信じていた当時からすれば今のObject-Cの人気ぶりには隔世の感がある
0894デフォルトの名無しさん垢版2018/04/03(火) 21:27:13.17ID:/J95OWxU
objcが人気なんじゃなくてiPhoneが人気なだけ
swiftの普及の早さを見ればわかるでしょ、みんな嫌々objcを使ってたって
0895デフォルトの名無しさん垢版2018/04/03(火) 21:53:44.19ID:xHu3FOx+
使われているかどうかと人気があるかどうかは別だからね
嫌いだけど選択肢が少ないから仕方なく使っているって人も多い

だって実際に

> 嫌われる傾向が強いほかの言語には、「PHP」「Objective-C」
>「CoffeeScript」「Ruby」などが挙がっている。


https://builder.japan.zdnet.com/tool/35109803/

> Stack Overflowは、この嫌われている言語ランキングに
> 使用したデータを、求職情報ページの「Developer Story」ページから
> 集めた。Developer Storyは、開発者が自分の職歴や実績などを
> まとめて公開できるサービスだが、このページには使いたい言語と使いたくない言語のタグを追加できるようになっている。
>
> 嫌われる傾向が強いほかの言語には、「PHP」「Objective-C」
>「CoffeeScript」「Ruby」などが挙がっている。
>
> 一方、嫌う人が少ない言語には、「R」「Kotlin」「TypeScript」
>「Rust」「Bash」「Clojure」「Swift」「Python」「JavaScript」「Go」などが並んだ。
0896デフォルトの名無しさん垢版2018/04/03(火) 21:59:40.75ID:xHu3FOx+
こっちは別のデータ

https://news.mynavi.jp/article/20170330-a133/

> fossBytesに3月28日(米国時間)に掲載された記事「Which Are The Most Loved and Most
> Hated Programming Languages|2017」が、Stack Overflow Developer Survey 2017の
> 調査結果を引き合いに出し、開発者に愛されているプログラミング言語と嫌われている
> プログラミング言語のトップ25を伝えた。愛されているプログラミング言語1位は
> Rustで、これにSmalltalkとTypescript、Swift、Goが続いている。
>
> 嫌われているプログラミング言語トップ25は次のとおり。

> Visual Basic 6
> VBA
> CoffeeScript
> VB.NET
> Matlab
> Objective-C
> Assembly
> Perl
> Lua
> Hack
0897デフォルトの名無しさん垢版2018/04/04(水) 03:20:59.36ID:h2UR4/YM
>>895
なんでVBとかVBAが入ってないし
0898デフォルトの名無しさん垢版2018/04/04(水) 03:22:51.75ID:h2UR4/YM
>>896
そっちも Java がスルーされてるな
CoffeeScript は悪くないと思うんだけど
D とか Julia は呼ばれてないな
0902デフォルトの名無しさん垢版2018/04/04(水) 09:52:34.51ID:xIeCjOW7
お前のツッコミも余計
手ぶらの批判は誰でもできる
事実としてPharoの処理系は更新され続けてる
0903デフォルトの名無しさん垢版2018/04/04(水) 13:33:18.19ID:1Ww7GQWk
最近ようやくしょぼい専用VCS諦めてしょぼいGitHubクライアントを組み込みにしだしたみたいだね
0906デフォルトの名無しさん垢版2018/04/04(水) 16:15:15.27ID:Vp4f9mRG
インスタンス造り機に「このクラスのインスタンスを作れ」ってぶち込むより
クラスに自分のインスタンス造る機能が入ってて
「おまえのコピーをこの名前で作れ」の方が個人的には関与する言語機能が減って好き。
0907デフォルトの名無しさん垢版2018/04/04(水) 17:04:03.96ID:Pmay6Vdj
javascriptか
0908デフォルトの名無しさん垢版2018/04/05(木) 00:06:12.16ID:gzVEs0yB
>>902
> 事実としてPharoの処理系は更新され続けてる

更新されているからと言って現役ということにはならない
あたりまえのこと言わせんな
0909デフォルトの名無しさん垢版2018/04/05(木) 00:08:00.87ID:gzVEs0yB
>>906
> 「おまえのコピーをこの名前で作れ」の方が個人的には関与する言語機能が減って好き。

コピーしかできないのか?
なにもないところから作ることはできないのか?
コピーを作った後に、値を変更してインスタンスを完成させるのか?
0911デフォルトの名無しさん垢版2018/04/05(木) 09:23:27.96ID:ZXf9eqYN
それを言うなら Test.Default().Clone() とか Test.Default().Copy() かと

> 作った後に、値を変更してインスタンスを完成させるのか?

これってプロトタイプベースだから必要なわけではなく、クラスベースでもコンストラクタで普通にやってる作業だよね?
0912デフォルトの名無しさん垢版2018/04/05(木) 09:31:20.59ID:ZXf9eqYN
>>908
他の言語の場合は、更新程度なら必要条件にすらならないかもしれないけれど
Smalltalkみたいにドックフードとして食らうことが避けられず
動的かつ可塑性を最大の利点にしている言語・環境に限れば
更新(変化)し提供され続けていることは少なからぬ人に使われている証拠として十分だろうね
0913デフォルトの名無しさん垢版2018/04/05(木) 09:36:41.34ID:zY62GpOZ
ドックフードとして食らうことが避けられず
動的かつ可塑性を最大の利点にしている言語・環境
0920デフォルトの名無しさん垢版2018/04/05(木) 23:45:55.89ID:YZZKvgKX
>>912
作る人がいることの証明にはなってるが
使う人がいることの証明になってないよ

誰も使って無くても、更新し続けることはできるんだから
0921デフォルトの名無しさん垢版2018/04/06(金) 07:23:27.16ID:LPJ18IcZ
たとえばMatzはRubyをほとんど使わないけどRubyに変更を加え続けていたしそれは容易だ
Rubyに限らず通常の言語の場合たとえ使う人がゼロでもリリースし続けることは理論的に可能

しかしSmalltalkの場合、Smalltalkを使わずにそれに変化を加えることはできないんだよ
0922デフォルトの名無しさん垢版2018/04/06(金) 07:32:26.80ID:8wNEeXKm
>Smalltalkの場合、Smalltalkを使わずにそれに変化を加えることはできない

それが正しいとしても
Smalltalk処理系の開発者はその処理系を使い続けている
ってことになるだけで
Smalltalk処理系の開発者以外の人がその処理系を使い続けている
かどうかは分からないよな
0924デフォルトの名無しさん垢版2018/04/06(金) 09:04:24.09ID:MsWWfJyW
>>922
他の言語では 処理系開発者=利用者 には必ずしもならないが
Smalltalkではその特殊性から 処理系開発者=利用者 がほぼ成り立つ
したがって、Smalltalkは更新されリリースされていれば利用者は必ずいる

上にもあるがこれだけだよ君はいったい何と戦っていて何を証明したいんだ?
「利用者」の定義をしぼればいつかはSmalltalkの利用者はゼロにできるけど
それだと「俺ほどの人間のアンテナにひっかからないSmalltalkは死滅しているも同然」という情弱識者とたいしてかわらんぞ

もし本当にSmalltalkが実務等で使われているか知りたければ sorabito "smalltalk" とかでググるか
http://pharo.org/success/ にアクセスして事例を精査してみればいいと思うけど
実際のところSmalltalkがどうあろうが端から興味なんてないんだろ?
0925デフォルトの名無しさん垢版2018/04/06(金) 09:42:07.15ID:sTfZcU1Y
>>911
プロトタイプベースでもコンストラクタ定義すればいいだけだよな
0927デフォルトの名無しさん垢版2018/04/06(金) 10:15:31.78ID:MsWWfJyW
>>926
たぶん>>924 の = の誤りの指摘だと思うんで念のためお詫びと訂正しておくと、
これは「〜ならば」の間違いなので申し訳ないけど適宜読み替えてほしい
Smalltalkであっても利用者 = 処理系開発者 の関係は必ずしも成り立たない
ついSmalltalkのメッセージ式っぽく考えて交換法則を忘れてしまった^^;

まあ屁理屈をこねればSmalltalkにおける開発とはすなわち言語や環境の拡張に他ならないので
利用者はすべて処理系開発者だとも言えなくもないけどそれはさすがに言い過ぎだろうしここで主張したいことではない
0929デフォルトの名無しさん垢版2018/04/06(金) 10:39:28.53ID:8wNEeXKm
xがSmalltalk処理系の開発者ならばxはそのSmalltalk処理系の利用者である

というのが正しいとしても、処理系開発者以外に利用者がいるとは言えない
>>908>>920が言ってるのも「処理系開発者以外の利用者」についてだと思う
0931デフォルトの名無しさん垢版2018/04/06(金) 10:44:41.31ID:MsWWfJyW
>>929
こだわるね^^;
では処理系開発者をその言語の利用者にカウントしてはいけない合理的な理由を述べてよ
0933デフォルトの名無しさん垢版2018/04/06(金) 11:01:06.13ID:8wNEeXKm
>>931
>処理系開発者をその言語の利用者にカウントしてはいけない

誰もそんなことは言っていないわけだが

利用者が処理系の開発者だけの状況を、その言語は現役とか
その言語は普及しているとか言わないだろ
>>908>>920が言ってるのもたぶんそういうこと
0934デフォルトの名無しさん垢版2018/04/06(金) 11:48:03.10ID:MsWWfJyW
>>933
まず君の思う「現役」の定義を明確にしてよ
これまで誰も主張していない「普及」をいきなり持ち出してきたけど、それが答え?
もし一定のシェアをとっていない言語を「現役」と言ってはいけないって法があるなら
今のSmalltalkは誰が見ても明らかに違うだろうこれで満足?

ただシェアこそないがコミュニティはかつてないほど活発だしまして「死滅」からほど遠いのも事実
これをもって「今でも現役」と表現することも決して間違いではないと思うが違うのか?

そもそも>>900の「現役」は>>899を受けての「死滅」なぞしていないという意味でしかない
その文脈を読めてない>>901が自分の考える「現役」と違うってだけの単純な話を
なにをそんなにこだわって執拗につっかかり続けるのかわからん
Smalltalkが今も「現役」を名乗ると個人的になにか不都合でもあるの?
0935デフォルトの名無しさん垢版2018/04/06(金) 11:59:37.86ID:3wQ1F3ea
Objective-CがiOS絡みで再び出てきた時に自分が理解できず
「変態言語!変態言語!!」ってほざいてた頭ゆるいアンチApple老人が
いやあれはねとsmalltalkerが擁護するの見て
『ならsmalltalkも俺の敵だ!』ってやってるだけだからw
0936デフォルトの名無しさん垢版2018/04/06(金) 12:27:10.77ID:8wNEeXKm
>>934
912>更新(変化)し提供され続けていることは少なからぬ人に使われている証拠として十分だ

とか言い出すからおかしくなる
処理系が更新されてるから少なからぬ人に使われているのは間違いない、だから現役だって主張だろ
「少なからぬ人に使われている証拠」とかいうのがあるなら最初からそれを出せばいい

処理系が更新されているからと言って現役ということにはならないのだから
0937デフォルトの名無しさん垢版2018/04/06(金) 12:52:57.07ID:MsWWfJyW
>>936
なるほど「少なからぬ」を文字通り「普及」や相応のシェアを持っているという主張だと短絡して反発したわけね
これもやはり 「死滅」=利用者ゼロあるいは数名 に対し「そんな少なくはない」という程度の意味だと思うけど

では何人くらいが使っていれば「現役」を名乗っていいわけ?とにかくそれを明確にしてよ
0938デフォルトの名無しさん垢版2018/04/06(金) 12:58:53.40ID:8wNEeXKm
>>937
知らん
俺が言いたいのは

処理系が更新されているからと言って「少なからぬ人に使われている」ことにはならない
「少なからぬ人に使われている証拠」とかいうのがあるなら最初からそれを出せばいい

ってだけだし、>>908>>920が言ってるのもたぶんそういうこと
0940デフォルトの名無しさん垢版2018/04/06(金) 13:50:08.64ID:JkCTmz46
ってか利用者ゼロもしくは数名じゃないなら現役なんだったら、やっぱりDは現役じゃん
0941デフォルトの名無しさん垢版2018/04/06(金) 15:10:21.25ID:EuPCLdj/
>>938
改めて訊くけど処理系開発側になったらもう利用者としてカウントされなくなるのはなぜ?
利用者が処理系の気にくわない部分に手を加えてそれが採用されるパターンとかよくあると思うんだけど
それともその程度なら開発側とは考えなくても良いの?その場合の線引きは?
0942デフォルトの名無しさん垢版2018/04/06(金) 15:28:16.59ID:8wNEeXKm
>>941
なぜたったこれだけのことを理解できないのだろう

>処理系が更新されているからと言って「少なからぬ人に使われている」ことにはならない
>「少なからぬ人に使われている証拠」とかいうのがあるなら最初からそれを出せばいい
0944デフォルトの名無しさん垢版2018/04/06(金) 17:33:39.79ID:A2hg00U/
Smalltalk や Pharo をGoogleトレンドで調べてみると、Windows 95の 1/3 でWindows 3.1 やD languageと同等くらい
(なお、言語だけじゃなくOSと比較したのはSmalltalkは環境であるってのに敬意を評して)

https://trends.google.co.jp/trends/explore?q=Smalltalk,Windows%2095,Windows%203.1,Pharo,D%20Language

Smalltalk、もしかしたらWindows 3.1と同じくらいのユーザ数に使われてるかも知れんね。凄いね!
0947デフォルトの名無しさん垢版2018/04/06(金) 21:13:21.34ID:3wQ1F3ea
「売れてるアニメが勝ちなんだから売れてる証拠をおまえが出せよな!」
(相手にされない)
「ほらDVDの円盤の販売数を調べたぞ!ほっら売れてないからおまえの負け〜俺の勝ちー!」
(一同失笑)
0948デフォルトの名無しさん垢版2018/04/06(金) 21:39:10.60ID:BhlurXrp
脈絡なくアニメで例え出すのも意味不明でキメェし、
別のSmalltalkerがそれに普通に乗っかるのもキメェ
0949デフォルトの名無しさん垢版2018/04/06(金) 21:45:48.91ID:gJMJciRt
>>941
> 改めて訊くけど処理系開発側になったらもう利用者としてカウントされなくなるのはなぜ?
「処理系開発側になったらもう利用者としてカウントされなくなる」とは言っていない


話の順番が逆で
先にお前が「処理系開発側を利用者としてカウントする」などと
おかしなことを言ったから、お前の間違い指摘しただけ

ここでお前が言ったことを改めて言い直してみようか?

「利用者数がわからないので、処理系開発者を利用者に含めていいですか?」

良いというわけがなかろう?
0951デフォルトの名無しさん垢版2018/04/07(土) 10:19:42.41ID:f0JiZPxN
メーリングリストの投稿者数(重複除く)から見積もると
Pharo Smalltalkの利用者は数千人くらいはいる

Haskellのだいたい半分くらい
0954デフォルトの名無しさん垢版2018/04/07(土) 11:49:47.91ID:sP9L7wqi
それ人気が低い順にランキングで並べて表示してるだけで、利用者数の絶対値じゃないよ
Smalltalkは約20位でHaskellが約40位だけど、これはSmalltalkとHaskellの間に他の言語が20個あるという意味でしかない

そのリンクの下方にrawdataがあるけど(http://www.dataists.com/wp-content/uploads/2010/12/language_ranks1.csv)、
この中で絶対値はtagcountだけで、それだとsmalltalkが189に対しHaskellが1896で10倍の差がある
0955デフォルトの名無しさん垢版2018/04/07(土) 12:42:55.45ID:Of9pall5
複数のプログラミング言語を使いこなしてる奴なんて世界でも僅かだろ。
比較する資格すら持たない連中がシェアなるもので一喜一憂するのは何で?
0959デフォルトの名無しさん垢版2018/04/07(土) 13:44:56.97ID:Ohs7bjSh
>>924
"sorabito smalltalk" でググったら、

ベンチャーで最初にいたエンジニアがsmalltalkerでsmalltalkを採用したとか、
そのエンジニア(元CTO)は去年12月に辞めたとか、
いまの採用ページにはsmalltalkに一言も触れてないとか、

色々あったんだろうなって想像できて面白かったわ。ありがとうw
0961デフォルトの名無しさん垢版2018/04/07(土) 16:15:24.12ID:Bd8sR+xj
オブジェクト指向言語でメンバ変数やメソッドをpublicにすべきかprivateにすべきかは
長年議論されてきてることだけど、中には

「privateで変数やメソッドを宣言するくらいならその部分をクラスにまとめて外に追い出してしまえばいい」
「洗練されたプログラムは変数・メソッドともにpublicだけで十分」

という意見もあるんだけどこれってどう思う?
0962デフォルトの名無しさん垢版2018/04/07(土) 16:17:51.83ID:vVe4gpjb
pythonの方法は合理的
0963デフォルトの名無しさん垢版2018/04/07(土) 16:19:49.34ID:C4tJt4pN
> 「洗練されたプログラムは変数・メソッドともにpublicだけで十分」
洗練されて無くてもpublicだけで十分といえるので

「洗練されたプログラムである」という判断が別に必要になる
0965デフォルトの名無しさん垢版2018/04/07(土) 22:08:27.17ID:cSksy2F8
publicもprivateも両方とも有るのが良いよ
選択肢が無くなったり少なくなったりすると利用し難くなる事も有るし
使う人のレベルや理解度もまちまちなんだから
staticだらけでやる人がいても構わないし
どちらか一方になって片方が使えなくなる方がやだな
洗練されているかどうかは悦に浸っている人が勝手に浸かっていればいいし
0968デフォルトの名無しさん垢版2018/04/11(水) 03:06:46.30ID:AwbSOt+z
SmalltalkはTcl/Tk未満のゴミってことか…
オブジェクト指向の面汚しだな。死滅してくれて良かった
0969デフォルトの名無しさん垢版2018/04/11(水) 07:10:58.74ID:wpPEThCc
世のプログラム言語のほとんどがALGOL系といわれているがALGOLを使った事ない人がほとんどなのと同じじゃね?
0970デフォルトの名無しさん垢版2018/04/11(水) 07:18:41.53ID:/rBtvSvm
ちなみにSmalltalkが目指した遅延結合重視のメッセージングのオブジェクト指向は
C++で再定義され現在主流の抽象データ型のオブジェクト指向とはほぼ別物だから
アンチSmalltalkが「オブジェクト指向の面汚し」とか言ってもいまいち響かないよ
0972デフォルトの名無しさん垢版2018/04/11(水) 08:52:38.89ID:mEK/0CU7
そうなんだよすっかり主流から外れて久しいのにいまだにオブジェクト指向というと
メッセージを送るのがどうとか遅延結合がどうとか説明し出す自称識者が多くて困るよ
ほんと聞き手が混乱するだけだからやめてほしい

Smalltalkくらい遅延結合性を実践していればわからんでもないけどあれすら肝心のメッセージは非同期じゃないし
0973デフォルトの名無しさん垢版2018/04/11(水) 12:24:17.61ID:bG1z7LTF
意外とWindowsのCOMが上手い実装だった
0975デフォルトの名無しさん垢版2018/04/11(水) 12:51:33.38ID:mEK/0CU7
ゲイツもMSもGUIの模倣でこそジョブズやAppleに遅れをとったけどその後はSmalltalkから学んでいる
アラン・ケイも .NET のことは Java よりはマシと言ってた
http://tech.nikkeibp.co.jp/it/members/ITPro/ITARTICLE/20030605/1/

ジョブズも表層のGUIだけパクって終わりにしたLisa/Macを反省してNeXTSTEPを作らせたけどね
http://web.archive.org/web/20121016134054/http://americanhistory.si.edu/collections/comphist/sj1.html#soft
0976デフォルトの名無しさん垢版2018/04/11(水) 12:53:12.46ID:mEK/0CU7
>>974
メッセージに関してはそうだろうね
ケイもAltoにもっとパワーがあったらErlangみたいなのを試したかったって言ってたし
ただシステム全体としての動的性に関してはErlangやそれで作られたものとは比較にならない
0977デフォルトの名無しさん垢版2018/04/11(水) 12:57:13.75ID:bG1z7LTF
>>975
藤枝あほだな
0978デフォルトの名無しさん垢版2018/04/11(水) 14:26:33.25ID:J12WoVZ9
「クラスにメソッド送るシステムなんていまじゃ壊滅してる!
21世紀の現代の主流はC ++!」って5ちゃんねるで喚いてる人とか
そりゃ誰も相手したくねぇよw
0979デフォルトの名無しさん垢版2018/04/11(水) 15:19:48.90ID:mEK/0CU7
メッセージングのパラダイムを持ち出しておいて
メソッドとメッセージの区別すらついていない人がよくいるけどここにもいたかw

あと現在主流なのはクラスやそれに準ずるエンティティで抽象データ型を実現することで
その出自がC++というだけだよその程度の区別もつかないのか

たった2行の煽りでここまで致命的に間違えられるとかどんな才能だよ…
0980デフォルトの名無しさん垢版2018/04/11(水) 20:33:03.91ID:J12WoVZ9
はいはい、「俺の宗教の教義では俺の信じてるものは俺の神から、
俺の信じていないものは敵の神からもたらされたと決まっているから。」
いただきましたw
0982デフォルトの名無しさん垢版2018/04/11(水) 21:16:38.37ID:W3CRQm5Z
>>979
まあまあ、しょせんSmalltalkのメッセージはニセモノの出来損ないなんだから
細かいことに目くじらたてるもんじゃ無いよ
0988デフォルトの名無しさん垢版2018/04/12(木) 16:00:33.88ID:bfwDINZz
AngularJS
0989デフォルトの名無しさん垢版2018/04/12(木) 18:21:05.91ID:OewATdpF
メッセージはオブジェクトに送られる情報(多くの場合はエンティティ)
Smalltalk-72ではトークン列
Erlangなどではデータ列
Smalltalk-76以降はセレクター(多くは呼び出しが期待されるメソッド名)+引数(オブジェクト)
奇妙だけど他の言語でもSmalltalk-76以降に準じた解釈(メソッド名+引数)をそう称する場合が多い
一部の宗派でセレクター(メソッド名)のみをメッセージと称する場合もある(Objective-Cでよく見られる〕

メソッドはオブジェクトがメッセージを受けて行う操作
Smalltalk-72ではメッセージにパターンマッチする記述(リーダーマクロのようなもの)
Erlangには無いが、強いて当てはめればメッセージを受けたときの処理部分
Smalltalk-76以降ではクラスに属する関数がそれに当たる

もともと「メソッド」はメッセージを受け取った際に目指す状態である「ゴール」を記述する場とする予定だったが
Smalltalk-76でSimula-67スタイルのクラスとそれに内包される関数を用いる機構を採用したため
クラスに内包される関数とメソッドとの間に明確な差はなくなった

とか、とりあえずこんな感じで
0990デフォルトの名無しさん垢版2018/04/12(木) 18:40:29.87ID:+2RjvR+r
つまり、本当に非同期にメッセージパッシングしてるErlangは特別だけど、
Smalltalkのメッセージはメソッドコールと変わんないってことですね
0991デフォルトの名無しさん垢版2018/04/12(木) 21:28:54.61ID:pKim+X9U
メッセージがエンティティであることが重要で同期か非同期かは後付けでなんとかなる問題
たとえばIoなんかはそうなっているし、Concurrent Smalltalkという方向性もある

メソッドコールについてはさすがに静的に決定しているそれをメッセージと呼ぶのは滑稽だろう

動的メソッドコールについても例えば期待するメソッドが存在しない等で失敗したときに
メッセージを第一級オブジェクトとして参照可能な機構が組み込まれていないなどサポートを欠いていれば
その言語での動的コールをメッセージと称することはちょっと無理があるような
0992デフォルトの名無しさん垢版2018/04/12(木) 21:43:18.97ID:lUf8ZkQK
同期を非同期に変えるのに比べたら、静的なのを動的に変える方が簡単だし、後付けでどうとでなる問題だよ
0993デフォルトの名無しさん垢版2018/04/13(金) 09:04:27.08ID:QuE9cEqD
いずれにせよメッセージと称したい情報を必要なときにエンティティとして扱えるしくみがあればどうとでもできるよ
0994デフォルトの名無しさん垢版2018/04/13(金) 09:30:36.78ID:24eyc5OB
メッセージがメソッドコールだとしても、基底クラスに共通メソッドとして実装されているならそれはメッセージで間違いないだろ。
0995デフォルトの名無しさん垢版2018/04/13(金) 09:45:51.29ID:QuE9cEqD
メソッドコールと違いメッセージというからには送り手はその都合で情報を勝手に送りつけるわけだから
それを受け手がどう処理するかについて関知しないスタンスがとれなければさすがにダメだろう
0996デフォルトの名無しさん垢版2018/04/13(金) 10:39:38.86ID:YQSd9Cqd
そんなん待ち行列になってんじゃね?
つか、メッセージの実装って、結局メソッドコールなOSばかりだしな。
0997デフォルトの名無しさん垢版2018/04/13(金) 12:19:05.19ID:ybbP8EF+
Smalltalkのメッセージを全部非同期にしたら、信じられないくらい遅くなるかブッ壊れると思うよ

だからSmalltalkはメッセージの受け手が即座に処理してくれる事を期待してるし、何も関知してないなんてウソだよ
0999デフォルトの名無しさん垢版2018/04/13(金) 12:41:42.23ID:QuE9cEqD
「関知しない」は「どう処理するか」で「いつ処理するか」だけに限らない
SmalltalkでいえばdoesNotUnderstand:(Rubyならmethod_missing)相当の機構と
その際処理したいメッセージをエンティティとして扱える機構がないといろいろ厳しかろうという話
10011001垢版Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 199日 5時間 25分 16秒
10021002垢版Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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