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

■ このスレッドは過去ログ倉庫に格納されています
2017/04/02(日) 16:30:38.65ID:n7h/bBRg
前スレ
オブジェクト指向って自然な文法だな 2
http://echo.2ch.net/test/read.cgi/tech/1490506257/
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
目的の動きを満たせばだいたい正解なんだから熱くなるなよ
自分の意見を押し通したいのはわからんでもないがな
2017/04/20(木) 00:29:25.65ID:jJkbXdni
208 デフォルトの名無しさん[sage] 2017/04/19(水) 12:20:37.70 ID:rIlDsUIc

継承もカプセル化もオブジェクト指向には必要ない
クラスを作る、つまり型を定義する事こそがオブジェクト指向

265 デフォルトの名無しさん[sage] 2017/04/19(水) 23:10:42.57 ID:2dTlCsss

>>208
代数的データ型で型を定義できるHaskellはオブジェクト志向言語だった……?

266 デフォルトの名無しさん[sage] 2017/04/19(水) 23:12:01.85 ID:qOdNs+TP

>>265
代数的データ型とはなんぞや?

269 デフォルトの名無しさん[sage] 2017/04/19(水) 23:19:37.80 ID:qOdNs+TP

type c = a or b
みたいな?

270 デフォルトの名無しさん[sage] 2017/04/19(水) 23:20:37.20 ID:qOdNs+TP

これもオブジェクト指向と言ってもいいでしょう!


こんなん草生える
2017/04/20(木) 07:19:48.83ID:JH3XDWGN
チェックも色々とデータが必要なとき多いしな
2017/04/20(木) 11:36:45.75ID:vlFc/PD3
>>216
> ocpは耄碌したメイヤおじさんの考えだろ
> オブジェクト指向がブラッシュアップされる前の
> 無駄の塊だった頃の話だ
そうでもないけどね。
https://ja.wikipedia.org/wiki/%E9%96%8B%E6%94%BE/%E9%96%89%E9%8E%96%E5%8E%9F%E5%89%87
今でも、OOPの五大原則のひとつとしてあげられるのが普通。

> 最新のオブジェクト指向では継承もカプセル化も
> 害悪でしかないことがわかってる
そうなんだ、それは知らなかったよ。
2017/04/20(木) 14:18:44.61ID:Wfe8Hvf2
継承は特定の親に縛られすぎるのであまりよくないね。ってなってるが
カプセル化はむしろ危険な直接アクセスを防ぐ意味で常識になってる気が。
2017/04/20(木) 20:00:36.90ID:OWrdGWgc
やっぱりインターフェースこそオブジェクト指向だよな
2017/04/20(木) 20:17:41.83ID:JH3XDWGN
>>287
でもカプセル化って汎用性悪いじゃん
変数1つアクセスできないだけで実現したいことできなくなっちゃうかもよ?
2017/04/20(木) 20:22:03.18ID:jeWo4Dft
それもうわざわざクラス使わずに構造体使っちゃいなよ
2017/04/20(木) 20:29:03.08ID:nHxDShTL
悪い依存関係はそのコードの利用者にコピベプログラムを強いる
これ経験則な
292デフォルトの名無しさん
垢版 |
2017/04/20(木) 20:37:59.47ID:x1mUV01b
汎用性ならインターフェースと抽象クラスじゃねーの?
2017/04/20(木) 21:21:03.65ID:1ly+xIep
>>286

> 最新のオブジェクト指向では継承もカプセル化も
> 害悪でしかないことがわかってる

まーたくだらない嘘をつく
すぐにバレるのわかってるだろw

害悪でしかないならば、lintなどのツールで使うなって警告が出るはずだ。
そういったlintツールがない(継承やカプセル化を使った時にエラーにする方法がない)
もとから、害悪でしかないっていうのは完全に間違いだ。

反論があるならどうぞ
294デフォルトの名無しさん
垢版 |
2017/04/20(木) 21:40:16.04ID:NBs+Bll8
>>289
それ汎用性ちゃうで。
そんな内部実装の細かいとこ勝手に使われたら、バグ修正すらなんの影響があるか怖くてできんくなる。
結局特定用途にしか使えなくなる。
2017/04/20(木) 21:44:56.84ID:1ly+xIep
結局、privateっていうのは、

この変数は外部から直接触ることを想定していません。
決められた値以外を入れた時の保証はしませんし、
将来の変更で互換性がない形に変更する必要がありますので
参照しないでください

とコメントで書くわかりに、コンピュータでも理解できる
言語で書くってだけの話なんだよね。
2017/04/20(木) 21:46:00.98ID:1ly+xIep
あ、もちろんprivateを使ったほうが良いって話だよ。

コメントで長々書いても読まないし、
ソースを見ないかもしれない。

そういう時にコンピュータでも理解できる言語で書いていれば
コンパイル時にしっかりチェックしてくれる。間違いがない。
2017/04/20(木) 21:47:30.56ID:JH3XDWGN
>>294
クラスなんて使わなければいいのでは?
2017/04/20(木) 21:53:58.83ID:Rk6y34sG
>>293
帰納的な推理は往々にして間違うものなんだよ
2017/04/20(木) 21:55:36.70ID:1ly+xIep
>298
ちょっと邪魔しないで、

反論が出てくるかどうか待っている所だからw
2017/04/20(木) 21:56:45.24ID:Rk6y34sG
マンコが本当にあるなら俺のチンコが純粋であることの説明がつかないみたいな
301デフォルトの名無しさん
垢版 |
2017/04/20(木) 21:57:23.53ID:x1mUV01b
>>299
反論がでない=正当性が証明された
などと言うつもりかい?
2017/04/20(木) 21:58:02.87ID:Rk6y34sG
純粋チンコ型論理
2017/04/20(木) 22:03:33.81ID:Rk6y34sG
>>297
クラスわ使わないでどうやってデータを管理する?
配列か?
2017/04/20(木) 22:07:49.44ID:OWrdGWgc
カプセル化は正しい方向性だというのは賛成だが
lintで警告が出ないからという権威主義的な根拠はどうなのか
2017/04/20(木) 22:10:46.32ID:Rk6y34sG
>>290
構造体を使うとしてその構造体に連関する関数をどうやって整理する?

構造体ごとにファイルを分けるのは面倒だし、認知行動学的に考えて厳しくない?

整理することこそプログラミング、そのコストが低い言語が良い言語だと思うんだよね
306デフォルトの名無しさん
垢版 |
2017/04/20(木) 22:12:10.00ID:NBs+Bll8
>>297
せやな。
必要性がないと判断したんなら使わなければいいんじゃないか?
間違ってないと思うで。

ただまあ、構造体が必要になる所では、ほぼ間違いなくクラス化した方が使い方の見通しが良くなるで。
307デフォルトの名無しさん
垢版 |
2017/04/20(木) 22:12:52.70ID:x1mUV01b
自分で考えるってことをしないんだろ

他人の定めたルールが正当である
それが目に見える形とならねば虚構である

むなしいね
2017/04/20(木) 22:13:09.41ID:1ly+xIep
>>301
それで何か問題あるの?
2017/04/20(木) 22:14:14.53ID:1ly+xIep
俺様が決めたルール(=害悪でしかない)が正当であると思ってるんだろうねw

だから俺様以外が決めたルールであるかどうかを確認している。
さて反論は?
2017/04/20(木) 22:15:28.83ID:Rk6y34sG
俺は今ガリレオさんの気持ちだ
311デフォルトの名無しさん
垢版 |
2017/04/20(木) 22:17:39.49ID:x1mUV01b
>>308
おまえが満足するならそれでかまわないよ
別に誰かに認められるために学んでるわけじゃないし

もっとも残念ながら俺はカプセル化については推奨派なので反論とかするまでもなくどーだっていい
ただおまえの発想はかわいそうだと思うだけ
2017/04/20(木) 22:18:02.65ID:Rk6y34sG
死に際にそれでも地球は回っていると言ってのけたガリレオさんも気持ちだ
2017/04/20(木) 22:22:56.58ID:1ly+xIep
>>311
そういうことは最初から言わないか?

なんで俺に「反論がでない=正当性が証明されたなどと言うつもりかい?」と聞いた?
最初から「反論が言えなくても、正当かもしれないだろ!」と言えばいいじゃないか?

それがお前が本当に言いたいことだろ?

それならそれで俺は最初からこう答えるよ。
だから、お前が言っていることを正当だと他人に認めてもらうために、
お前は反論(信頼性があるソース)を出せって。

はい、で、信頼性があるソースは?
2017/04/20(木) 22:24:14.04ID:Rk6y34sG
それでもカプセル化は必要ない
lintはろくでも無いクラス設計がまかり通っていたときの負の遺産だ、javabeansやcomが盛んに作られた時代の名残だ、隠蔽して守られるより公開して守られるクラス設計を目指すべき
2017/04/20(木) 22:25:02.69ID:Rk6y34sG
>>313
ソースは俺
2017/04/20(木) 22:25:24.28ID:1ly+xIep
補足しておくと「継承やカプセル化が害悪でしかない」という仮説が
正しいという信頼性がある(俺様が決めたルールではないとう)ソースを出せ。
という話ね
2017/04/20(木) 22:26:09.67ID:Rk6y34sG
ソースは現代のガリレオです
よろしくお願いします
318デフォルトの名無しさん
垢版 |
2017/04/20(木) 22:27:09.43ID:x1mUV01b
>>313
見識が狭すぎるのは大変だよって言いたいだけさ

繰り返しになるけど俺はカプセル化について推奨派なので反論するつもりは全くない
おまえの論調は嫌いだがな
2017/04/20(木) 22:29:33.08ID:1ly+xIep
>>318
それを言うなら相手が違うだろ。

見識が広いやつに対して、
お前の広さを(証拠を出すことで)示してやれ!と言うべきだ。

それが俺も言っていることなんだけどなw

で、信頼性があるソースはよ
2017/04/20(木) 22:30:20.01ID:jeWo4Dft
>>305
俺の経験上はだけど、それオブジェクト志向じゃない方がむしろやりやすいで
2017/04/20(木) 22:30:37.36ID:nIwh3CMn
ソースは?の問いに対して
有無以外のレスを繰り返す相手を
それ以上いじめてはいけない
2017/04/20(木) 22:31:02.97ID:Rk6y34sG
昔は暗号化のロジックも隠すことで安全性を担保しようとしていたけど、駄目だったんだよ、現代ではロジックを公開できる暗号化こそが真に安全性を備えていることがわかっている

それと全く同じことでいくらプライベートにしようがリフレクション使いまくる現代のプログラミングでは役に立たない、パブリックにしても問題ないように作るのが真のオブジェクト指向
2017/04/20(木) 22:32:10.96ID:Rk6y34sG
>>319
ソースは今お前の目の前に居る
さあ
324デフォルトの名無しさん
垢版 |
2017/04/20(木) 22:32:34.93ID:x1mUV01b
>>319
そうかい
ならば俺にソースを求めることが見当違いだということにも気づいてくれ
2017/04/20(木) 22:33:31.06ID:Rk6y34sG
>>320
どうやるん? クラス作らないとできなくない?
2017/04/20(木) 22:33:55.62ID:1ly+xIep
>>322
その理屈を使いたいならば、ロジックは公開すべきある。
共通鍵暗号方式でも公開鍵暗号方式でも、秘密鍵(データ)は隠すことで安全性を保っている。

そのことから・・・と話をするべきだ。
2017/04/20(木) 22:35:08.71ID:Rk6y34sG
>>324
カプセル化が必要ないことを説明しろよ
328デフォルトの名無しさん
垢版 |
2017/04/20(木) 22:37:17.66ID:x1mUV01b
>>327
だからカプセル化について推奨派って言ってんじゃねーか
推奨派が必要ないと考えるわけねーだろーが

少しは考えて発言しな
2017/04/20(木) 22:37:44.90ID:Rk6y34sG
>>326
秘密鍵はパスワードとかそういう類の物だからそもそもプログラム内に持たないんだよ
2017/04/20(木) 22:39:55.49ID:1ly+xIep
>>329
プライベート変数は、ファイルに保存しろって言いたいわけ?
2017/04/20(木) 22:41:15.19ID:Rk6y34sG
>>330
秘密鍵はプログラムに書くものじゃないと言いたいのさ
2017/04/20(木) 22:43:19.76ID:1ly+xIep
>>331
だから秘密にしたいデータ(他のクラスから参照されたくないデータ)は
プログラムに入れずにファイルにしておけってことだろ?
2017/04/20(木) 22:43:43.47ID:Rk6y34sG
>>328
派閥でどうこう言うんじゃなくていち個人として良心から発言していただきたい、カプセル化が必要ないんだという思いと向き合うべきだと言ってるんだよ
334デフォルトの名無しさん
垢版 |
2017/04/20(木) 22:44:37.36ID:T8G8upSf
こいつ相当のバカだな
2017/04/20(木) 22:44:47.88ID:Rk6y34sG
>>332
違う違う秘密鍵はプログラムに書くものじゃないと言ってるんだよ
2017/04/20(木) 22:45:25.28ID:Rk6y34sG
リピートアフターミー
秘密鍵はプログラムに書くものじゃない
2017/04/20(木) 22:45:53.95ID:Rk6y34sG
カプセル化はオブジェクト指向じゃない
2017/04/20(木) 22:45:55.45ID:1ly+xIep
>>335
じゃあ他のクラスから秘密にしたいデータは?
2017/04/20(木) 22:47:11.97ID:Rk6y34sG
>>338
公開しなさい
2017/04/20(木) 22:47:42.98ID:1ly+xIep
>>322
> 昔は暗号化のロジックも隠すことで安全性を担保しようとしていたけど、駄目だったんだよ、現代ではロジックを公開できる暗号化こそが真に安全性を備えていることがわかっている

違う違う。それは「暗号化ロジック」は公開しろって話なんだよ。

リピートアフタミー「暗号化ロジック」は公開しろ。

それ以外の話は公開しろって意味じゃない。
2017/04/20(木) 22:48:28.32ID:1ly+xIep
>>339
なんで?

秘密にしたいデータは、暗号化ロジックじゃないよね?
公開する理由がない。
2017/04/20(木) 22:49:40.47ID:Rk6y34sG
>>340
暗号化ロジックは式という形式のデータです
343デフォルトの名無しさん
垢版 |
2017/04/20(木) 22:49:49.13ID:NBs+Bll8
password.txtに書いてgithubにコミットやろjk
2017/04/20(木) 22:51:10.30ID:1ly+xIep
>>342

暗号化ロジック = 式という形式のデータ

故に

式という形式のデータ = 暗号化ロジック

と言ってる?
それは明らかに間違いだよ。
2017/04/20(木) 22:53:29.90ID:1ly+xIep
式という形式のデータ、
そこにはいろんなロジックがある。
その沢山の種類のロジックの中で
暗号化ロジックだけは公開しろ
346デフォルトの名無しさん
垢版 |
2017/04/20(木) 22:54:17.23ID:x1mUV01b
>>333
べき論はよくわからんが、そこまで言うなら個人として伝える

カプセル化は絶対必要である
なんならオブジェクト指向のキモだとも考える
目的に特化させ再利用できるようにデザインすること
きちんとネーミングすること
多様性を持たせるならばインターフェースを用いて処理を実装し移譲すればよい

以上
2017/04/20(木) 22:55:25.78ID:zhxiAG0o
ID:rIlDsUIc = ID:Rk6y34sG だよね?
昨日はシラフで今日は酔っ払っているのかな?
2017/04/20(木) 22:56:30.20ID:Rk6y34sG
>>343
冗談じゃなくそういうのあるらしいね
awsのなんかあれ
2017/04/20(木) 23:07:28.95ID:nIwh3CMn
OOPに必要かどうかしらんけど
カプセル化は単に便利だよね
スコープ的な意味で
2017/04/20(木) 23:23:01.66ID:16AwdhdC
横からカプセル化の話題を眺めていたが、素晴らしいカプセル化のアイデアが湧いてきた!
2017/04/20(木) 23:29:07.88ID:jeWo4Dft
>>325
最初はクラスの下にでも書いたらいいよ
少なくとも中に書くよりは読みやすいし
後は必要に応じて慣れやね
2017/04/20(木) 23:49:33.09ID:hTP3eC2C
インターフェースこそオブジェクト指向だという意見に全面的に同意。
継承自体はクラス目線でモジュール化を進めた結果で得られる構造なだけであって、
インターフェースのように型を意識させることはない。
結果的にはインターフェース+基底クラスパターンが最強だと思うわ
2017/04/20(木) 23:59:45.86ID:zhxiAG0o
アルゴリズムを試行錯誤している時はグローバルな構造体の方が楽。
デバッグや保守の時はカプセル化されたオブジェクトの方が楽。
これはmutableとimmutableにも同じことが言える。

カプセル化しないmutableオブジェクトの方が考えやすいなら
プロトタイプ開発ではそうすればよい。
設計が決まったらできるだけカプセル化したimmutableオブジェクトに変えよう。
354デフォルトの名無しさん
垢版 |
2017/04/21(金) 00:06:49.24ID:T1EM2She
>>351
関数の名前に構造体の名前を入れるん? 面倒じゃない?
355デフォルトの名無しさん
垢版 |
2017/04/21(金) 00:08:09.71ID:T1EM2She
>>353
不変のものをカプセル化する意味あるのか?
フルオープンでよくね?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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