オブジェクト指向って自然な文法だな 3 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/04/02(日) 16:30:38.65ID:n7h/bBRg
前スレ
オブジェクト指向って自然な文法だな 2
http://echo.2ch.net/test/read.cgi/tech/1490506257/
2017/04/17(月) 21:56:46.03ID:LB/3uUQe
>>181
> コーヒーを飲むって動作は誰にさせると上手くいきますか?
メソッド=動詞を実行できる人

>>182
2つの物体の相互作用は、それぞれの物体の作用に分解できる
185デフォルトの名無しさん
垢版 |
2017/04/17(月) 22:04:31.38ID:D9tI2U/v
>>183
それを設計するとナメるという行為と石原さとみのおっぱいのたゆみ、それによるコーヒーの流れ、流れに応じた舌の移動、さらに石原さとみの悶えという不確定要素など複数のオブジェクト間のフィードバックループを形成しないといけない
現実をプログラムにするというのは非常に難しいものだ
2017/04/17(月) 22:16:18.42ID:VvYNlkfx
オブジェクトはメソッド実行するときはたいてい目的語
でもたまに、処理を移譲するよなときは主語になる

一定してないから混乱の原因
自信ついたあたりで現実のモデリングをしようとすると面食らう
2017/04/17(月) 22:26:26.94ID:n/MHuOf5
だいぶ前にこの類いのスレ立ててる奴が
「コーヒー」クラスが「ドリンク」メソッドで「プログラマー」に代入されてるジョークTシャツ持ってきて
「だからオブジェクト指向は〜」ってやってたのの本人による再放送でしょ。
キャットドア誰も相手してくれなくなったから。
2017/04/17(月) 23:55:38.00ID:a8QARk7l
メソッドは状態が変化する物に帰属させないとオブジェクト志向の意味ないよね
2017/04/18(火) 00:38:27.27ID:ibb6Zkrz
>>188
そんなことはないよ。
190デフォルトの名無しさん
垢版 |
2017/04/18(火) 07:13:33.23ID:YLExNRL3
去年.NET3.5の新規開発で
VB9.0を選択しちゃうウチの職場は
未だにオブジェクト指向を導入していません

そろそろオブジェクト指向開発を調査した方がいいでしょうか
191デフォルトの名無しさん
垢版 |
2017/04/18(火) 09:09:55.12ID:+QApwmMZ
その程度の仕事しかしてないということなので不要です
2017/04/18(火) 09:59:29.58ID:QQU8yDeJ
キャットドア問題も解決できないオブジェクト指向は不要
2017/04/18(火) 12:33:10.21ID:7gPK71Iv
NGワード:キャットドア
これでスッキリ
2017/04/18(火) 13:42:04.65ID:dT36T5gx
キャットドア厨はオブジェクト指向以外で問題解決してみてから言えよ
これやらないからカスなんだよ
2017/04/18(火) 17:45:27.51ID:QQU8yDeJ
>>194
オブジェクト指向以外に解決策を求めてる時点で草wwwwww
2017/04/18(火) 17:58:40.72ID:ymBV4AxE
cat.open(door), cat.open_door()
person.drink(cofee)
2017/04/18(火) 20:10:28.20ID:PoabM2Bb
何通りか解決してただろ
なんでリセットされてるんだよ
198デフォルトの名無しさん
垢版 |
2017/04/18(火) 20:35:48.45ID:MNbxM32c
>>197
悪魔の証明と化してる
199デフォルトの名無しさん
垢版 |
2017/04/18(火) 21:39:51.91ID:2/KqF/My
>>192
朗報だ
キャットドア問題をオブジェクト指向で完全に解決した
https://paiza.io/projects/9D_RVq0fdaUXDugXFTpp2g
200デフォルトの名無しさん
垢版 |
2017/04/18(火) 21:40:24.96ID:2/KqF/My
オブジェクト指向のおかげです
201デフォルトの名無しさん
垢版 |
2017/04/18(火) 21:41:20.30ID:2/KqF/My
オブジェクト指向完全に理解した、超簡単だった
2017/04/18(火) 22:37:17.80ID:PoabM2Bb
人間だけ中身からっぽでわろw
2017/04/19(水) 00:25:57.42ID:iVTtZEtx
恣意的な
2017/04/19(水) 10:30:31.20ID:kYerY5of
>>189
カプセル化しないの?
2017/04/19(水) 11:36:32.83ID:ZFpUIjRr
>>199
n種類の操作主体がいて、m種類の操作対象があるとき、DoorOpener的なクラスをm個作り、それぞれにnこのメソッドを作るのか?
操作主体が一つ増えると、既存のm個のクラスにそれぞれ一つのメソッドを追加する必要がある
また、操作対象が一つ増えると、あらたにn個のメソッドを作成する必要がある
2017/04/19(水) 12:10:38.64ID:rIlDsUIc
>>205
ドアを障子に変えてくれって要求があるかもしれないし、もしものことを考えて複雑に作るより今の要求を満たす必要最小限にしておけば作り直しやすいのじゃないかな
2017/04/19(水) 12:15:05.34ID:rIlDsUIc
>>204
カプセル化は頭空っぽの木偶の坊のためにある
オブジェクト指向の本質とは程遠い
2017/04/19(水) 12:20:37.70ID:rIlDsUIc
継承もカプセル化もオブジェクト指向には必要ない
クラスを作る、つまり型を定義する事こそがオブジェクト指向
2017/04/19(水) 12:29:42.19ID:xWugx3VW
複数性が重要事項
2017/04/19(水) 12:32:00.02ID:rIlDsUIc
文字コードを相互に変換するときいったんウニコードに変換するように、対象や主体をそれぞれ抽象化オブジェクトに変換すればよいのかもね

対象と主体の操作は抽象化オブジェクトに対して行うようにしておけば、対象や主体が増えたとしても抽象化オブジェクトへの変換だけ実装すればよい
2017/04/19(水) 12:55:20.19ID:rIlDsUIc
抽象化オブジェクトに変換を行うトランスフォーマクラスと抽象化オブジェクトに対する操作を行うプロセッサクラスがある

具象オブジェクトが追加されたときはトランスフォーマとプロセッサを変える必要がある

見通しはいいかもわからんね、抽象化オブジェクトの関係は一箇所に集約されるから
2017/04/19(水) 12:55:21.77ID:cvkGewar
pコードみたいだな
2017/04/19(水) 12:56:19.07ID:rIlDsUIc
やっぱオブジェクト指向最高だな
2017/04/19(水) 13:42:18.93ID:Rk+PkBJv
>>207
木偶の坊が何か実装するときに何も考えさせないためにカプセル化するんだと思ってたわ
2017/04/19(水) 13:49:21.08ID:ZFpUIjRr
>>206
> ドアを障子に変えてくれって要求があるかもしれないし、もしものことを考えて複雑に作るより今の要求を満たす必要最小限にしておけば作り直しやすいのじゃないかな
まあ、あのコードが最小限だとして、その範囲ですらOCPに違反してるんじゃないですかねって指摘なんだが。
2017/04/19(水) 19:01:16.59ID:rIlDsUIc
>>215
ocpは耄碌したメイヤおじさんの考えだろ
オブジェクト指向がブラッシュアップされる前の
無駄の塊だった頃の話だ

最新のオブジェクト指向では継承もカプセル化も
害悪でしかないことがわかってる
2017/04/19(水) 19:03:57.03ID:rIlDsUIc
>>214
オブジェクト指向が浸透するまでは有益だったかもしれないが、今や誰もがオブジェクト指向を熟知し使いこなす時代、カプセル化はロジックを不鮮明にするノイズでしかない
2017/04/19(水) 19:06:43.59ID:rIlDsUIc
メイヤおじさんは実装の継承を推奨する老害だからな
バージョン管理ソフト使えよと
2017/04/19(水) 19:09:12.02ID:rIlDsUIc
プレインクラスこそオブジェクト指向の本質
2017/04/19(水) 19:29:36.25ID:/l6NHl5b
>>217
不鮮明となるのであればそれは用件が曖昧であるためカプセル化できてないと俺は考える
エンジンの仕組みを知らなくてもアクセルを踏めば車は動くようにわざわざ考える必要もない事は隠蔽しちゃおうぜ!ってのがカプセル化だと思ってる

まぁ解釈はそれぞれだから合わせてもらわなくていいけどね
2017/04/19(水) 19:35:54.11ID:XuQTPPrh
フスマと回転扉で同じキャットドアで済むわけないじゃん
これを違うものとして組めないコードは問題

結局、キャットドアなんだよ
2017/04/19(水) 19:37:09.40ID:rIlDsUIc
>>220
それもそうだな
2017/04/19(水) 19:39:26.07ID:rIlDsUIc
>>221
ドアクラスの変数名をふすまにすればいと思うの
難しく考えずにシンプルな解決策を探そうよ
2017/04/19(水) 19:45:45.55ID:d/SqmCf2
>カプセル化はロジックを不鮮明にするノイズでしかない
寝言にもほどがある

中が丸見えで依存しまくってたら
何かするたびに処理の全体追わなきゃいけなくなるだろうが
2017/04/19(水) 19:52:16.42ID:XuQTPPrh
>>223
フスマと回転扉で同じキャットドアが使えると思ってらっしゃる?
2017/04/19(水) 19:56:33.37ID:qJxXjZRc
>>224
ほんとこれ

カプセル化のおかげでどこにバグがあるかもはっきりする
2017/04/19(水) 20:00:55.07ID:qOdNs+TP
>>225
はい
2017/04/19(水) 20:01:49.80ID:qOdNs+TP
>>224
依存しないように実装すれば良いが
2017/04/19(水) 20:02:59.08ID:qOdNs+TP
>>226
んなアホな、それは言い過ぎだわ
話盛ってるわ
2017/04/19(水) 20:05:24.07ID:d/SqmCf2
>>228
間違ってしちゃうかもしれないし、どっかで誰かがしちゃってるかもしれんだろ
2017/04/19(水) 20:07:46.83ID:d/SqmCf2
あまりにもオブジェクト指向が当たり前になりすぎて、それがもたらしてくれるものを忘れてるだけだ

Cに++なんてついてなかった時代
配列を関数に渡すとき一緒に配列の長さを引数で渡してた
地獄のような時代があったんだぞ…
2017/04/19(水) 20:11:22.44ID:/l6NHl5b
>>229
言い過ぎじゃない
カプセル化の意図は隠蔽と独立

ガス欠で動かなくなった車に対してタイヤ交換はしなくていい
問題を切り分けて問題解決の速度を向上させるためにカプセル化はとても有効
2017/04/19(水) 20:23:32.33ID:XuQTPPrh
>>227
ちょっと絵に描いてみなよ
2017/04/19(水) 20:26:00.72ID:3xQf6WAc
『"このパーツの動作は保障されている"がないとプログラムは工業製品にならない』
ってのが始まりだしね。

ある意味「企業向けオーダーメードプログラムを手作業で人月かけてやるのが
職業プログラマって仕事なんだよっ!!」って請負業者がプログラマ名乗って
コンシュマーに売る工業製品としてのアプリケーションプログラム販売が傍流みたいになってる日本じゃ
「動きゃいい」が蔓延するのもしかたがないこと
235デフォルトの名無しさん
垢版 |
2017/04/19(水) 20:33:37.46ID:lCKuRFX1
>>233
UMLでこの図なんていうんだっけ、名前は忘れたけどきちんと設計できる
https://www.fastpic.jp/images.php?file=0258982613.png
236デフォルトの名無しさん
垢版 |
2017/04/19(水) 20:34:11.59ID:lCKuRFX1
端末変えたからID変わってるから
237デフォルトの名無しさん
垢版 |
2017/04/19(水) 20:35:16.70ID:lCKuRFX1
>>232
それただのたとえ話じゃん
バグが寸分の狂いもなく立ちどころにわかるってのは言い過ぎだよ
238デフォルトの名無しさん
垢版 |
2017/04/19(水) 20:36:51.30ID:lCKuRFX1
>>231
構造体に配列の長さと配列をセットで持たせればいいのに
2017/04/19(水) 20:37:47.92ID:/l6NHl5b
>>237
それは設計不足
240デフォルトの名無しさん
垢版 |
2017/04/19(水) 20:41:15.47ID:lCKuRFX1
>>239
カプセル化に夢見すぎだよ
バグってる場所が3秒でわかるとか大嘘もいいところだよ
絶対嘘だね、どんなバグかもわかんないしさ
2017/04/19(水) 20:41:33.40ID:oz+MR2rn
まぁまぁ ロジックの中が見えてバグがどこで発生しているかもすぐに分かる純粋関数が最強ってことで
242デフォルトの名無しさん
垢版 |
2017/04/19(水) 20:42:40.87ID:lCKuRFX1
カプセル・スリー・セカンド
2017/04/19(水) 20:44:01.82ID:/l6NHl5b
>>240
誰が三秒って言ったのよ
速度向上と言ったまでさ

繰り返しになるけど所詮価値観の違いなので合わせてもらわなくていい
244デフォルトの名無しさん
垢版 |
2017/04/19(水) 20:46:48.18ID:lCKuRFX1
>>243
速度向上ならわかるけど
245デフォルトの名無しさん
垢版 |
2017/04/19(水) 20:49:45.97ID:lCKuRFX1
>>241
純粋関数ってメソッドの中でも再代入を許さないんだっけ?
それって遅くない? モナド使わないと現実的に厳しくない?
すべてがモナドになればよくない? そうしてできたのがC言語です
2017/04/19(水) 20:58:24.07ID:oz+MR2rn
>>245
そして構造化プログラミング、モジュールプログラミング、オブジェクト指向のカプセル化と来て
関数型に戻るわけですな
247デフォルトの名無しさん
垢版 |
2017/04/19(水) 21:02:34.85ID:lCKuRFX1
>>246
極端なところに正解はないと思うんだよ
バランスが取れているのが現実的に最も優れている
カプセル化してないオブジェクト指向が最高ってことになるのかな?とどのつまり
2017/04/19(水) 21:08:35.02ID:d/SqmCf2
ちょっとは人の話きけりょ
2017/04/19(水) 21:10:34.01ID:oz+MR2rn
カプセル化してないオブジェクト指向のメンバーなんて
読みにくいグローバル変数みたいなもんじゃない?
250デフォルトの名無しさん
垢版 |
2017/04/19(水) 21:18:19.43ID:lCKuRFX1
>>248
聞く、どうぞお話どうぞ
251デフォルトの名無しさん
垢版 |
2017/04/19(水) 21:20:38.66ID:lCKuRFX1
>>249
グローバル変数とは全然違う
フィールドはオブジェクトに属しています
オブジェクトがなければありません
オブジェクトを作って初めて使うことができます
オブジェクトのライフサイクルと運命をともにするからこそ
オブジェクト指向なんです
finalをつけるのがデフォ
2017/04/19(水) 21:41:01.53ID:/l6NHl5b
>>247
極端だろうが何だろうが正解なんかないさ
おまえはおまえの思いでやればいい

すべてを同じ枠に押し込めようとして八方塞がりにならないよう気をつけなよ
253デフォルトの名無しさん
垢版 |
2017/04/19(水) 21:56:25.91ID:lCKuRFX1
>>252
俺が俺の思いでやるのは当たり前のことだと思うんだよ
雨が降ったら傘をさせばいいと言ってるようなもの
当たり前じゃん?いう意味なくない?
プールで泳ぐときは服を脱げばいいみたいな
出かけるときは靴を履けばいいみたいな
価値観の違いにこだわってるのはそっちのほうなんじゃないかなって思いました
254デフォルトの名無しさん
垢版 |
2017/04/19(水) 21:59:29.16ID:lCKuRFX1
カプセル化しないオブジェクト指向がモダンで優れた設計っていうのは
>>252と俺の共通認識としてあるわけだから、その上で思いを語っていただけたら
2017/04/19(水) 22:03:04.69ID:/l6NHl5b
>>254
俺はカプセル化推奨だぞ
256デフォルトの名無しさん
垢版 |
2017/04/19(水) 22:06:05.25ID:lCKuRFX1
>>255
フィールドが全部finalだったらprivateなんて必要ないだろ?
つまり、カプセル化って必要なくない?
257デフォルトの名無しさん
垢版 |
2017/04/19(水) 22:07:41.10ID:lCKuRFX1
隠すメリットより公開するメリットの方が莫大だと思わない?
258デフォルトの名無しさん
垢版 |
2017/04/19(水) 22:18:28.62ID:lCKuRFX1
公開するメリット隠すデメリットを考えよう
2017/04/19(水) 22:22:01.02ID:/l6NHl5b
思わないなぁ
カプセル化って無駄を省いてわかりやすいものにして再利用しやすいよう作ることと思ってるからね

そもそもカプセル化はフィールドだけじゃない
インターフェースを用いて処理を委譲させるように設計してしまえばデータだけじゃなく処理を丸ごと隠蔽できるしオブジェクト間の依存関係も稀薄にできる
260デフォルトの名無しさん
垢版 |
2017/04/19(水) 22:26:31.08ID:lCKuRFX1
>>259
なるほどね、それはあるね
261デフォルトの名無しさん
垢版 |
2017/04/19(水) 22:27:13.48ID:lCKuRFX1
カプセル化完全に理解した
2017/04/19(水) 22:34:52.50ID:/l6NHl5b
おめでとう
まぁ俺はまだまだ勉強中だからうらやましいよ
2017/04/19(水) 23:01:17.77ID:KzpInSVx
>>256
通りすがりだが、年齢フィールドとか一定の幅に制限したい時に勝手に300歳とか設定されたら困るだろう。
だからprivateにしてメソッドやプロパティで0-120なりの範囲に制限するようにするんじゃないの?
2017/04/19(水) 23:08:00.65ID:qOdNs+TP
>>263
入力チェックをデータがやっていいものか
これは議論が別れるところですよ
2017/04/19(水) 23:10:42.57ID:2dTlCsss
>>208
代数的データ型で型を定義できるHaskellはオブジェクト志向言語だった……?
2017/04/19(水) 23:12:01.85ID:qOdNs+TP
>>265
代数的データ型とはなんぞや?
2017/04/19(水) 23:13:00.35ID:HSKBgTxb
「300歳なんてあるわけないからカチカチに型で数字の範囲を絞ればいいんだよ」
「300歳なんて異常な数字を送らないように送り手が責任を持つべきだ」
「300歳が送られてきても"数字がおかしい"って返事するようにすれば良くね」

どれがいいと思うかで、その人のそもそものスタンスとセンスがわかるな。
2017/04/19(水) 23:16:21.53ID:qOdNs+TP
>>267
俺ならチェックせずに文字列のフィールドにそのままセットしちゃうね、純粋オブジェクト指向
2017/04/19(水) 23:19:37.80ID:qOdNs+TP
type c = a or b
みたいな?
2017/04/19(水) 23:20:37.20ID:qOdNs+TP
これもオブジェクト指向と言ってもいいでしょう!
2017/04/19(水) 23:21:42.97ID:HSKBgTxb
ちなみに最後のがいちばんオブジェクト指向っぽくて
大きな仕様変更に強いゆるさがあると思うけど
カチカチが好きなタイプのプログラマーは"ゆるさ"の部分が
許せないのだろうな。
2017/04/19(水) 23:23:56.87ID:KzpInSVx
>>264
え、でもそうでもなきゃ、データの外部でデータチェックとかは関数型言語や構造化プログラミング的な発想だけど。
副作用あるのに、その発想は危険過ぎない?
他の誰かがその外部のチェック用クラスを使ってくれる保証は無いよ?
2017/04/19(水) 23:30:11.23ID:qOdNs+TP
>>272
必要なら必要になったとき必要な人が自分で作れば良いじゃん、自由と自己責任の精神だよ、ルールで縛られたガチガチのオブジェクトじゃままならぬ事もあるでしょう!
2017/04/19(水) 23:33:14.31ID:KzpInSVx
>>267
オブジェクトが各々責任を持つとするなら、それぞれのクラスでデータチェック(ダブルチェック)が正解なんだろうね。
じゃないと、その二つのクラスは二つで一つになる。
依存関係が出来てしまう。
違うクラスでも、年齢に関するデータなら受け取れるようにした方がいいんじゃ無いかな。

実際には依存関係呑み込んでどっちかしかチェックしないってのが多そうだが。
2017/04/19(水) 23:34:21.76ID:HSKBgTxb
"誰がその数値に責任を持ってるか"っしょ。
それを明確にできてればそこを修正すればいいけれど
「私は知らない」「私は受け付けない」「私の責任ではない」って
例外の責任が見えないと責任者探しから始めなくちゃいけなくて
後から来たプログラマが死ぬ。
2017/04/19(水) 23:37:47.94ID:KzpInSVx
。。。オブジェクト指向は事なかれ文化の日本と相性悪いんじゃ無いかと思えてくる文言ダネ^^;
2017/04/19(水) 23:39:15.89ID:qOdNs+TP
テストすれば良いじゃん
2017/04/19(水) 23:41:15.55ID:qOdNs+TP
ちゃんとオブジェクトが連携できてるかなって
そうだよ僕たちには結合テストがあるじゃないか
2017/04/19(水) 23:46:37.27ID:qOdNs+TP
値を変換するコンバータクラスと値をチェックするバリデータクラスがあれば良いじゃないか
責務の分離だよ
2017/04/19(水) 23:48:34.03ID:qOdNs+TP
データ保持するクラスがチェックまでやるのは複雑すぎるよ、素直じゃない
2017/04/19(水) 23:51:12.30ID:qOdNs+TP
オブジェクトも大事だがコラボレーションも大事
282デフォルトの名無しさん
垢版 |
2017/04/19(水) 23:52:23.70ID:zPBwEPLo
連投せずにまずは落ち着くのが大事
2017/04/19(水) 23:57:15.78ID:/l6NHl5b
目的の動きを満たせばだいたい正解なんだから熱くなるなよ
自分の意見を押し通したいのはわからんでもないがな
■ このスレッドは過去ログ倉庫に格納されています