カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、オブジェクトの実際の型を隠蔽したりすることをいう。
かつて偏差値の低い学校向けの情報処理系教科書において「カプセル化は大変すばらしいものであり絶対に使うように」と大体的に宣伝された。
一方、カリフォルニア大学バークレー校の有識者を中心とした「インターネットを作った人たち」は「階層化の有害性」として「カプセル化は絶対にやめろ」としている。
https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
カプセル化の有害性、オブジェクト指向は愚かな考え
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/06/18(木) 23:47:36.69ID:l/2SQUll352デフォルトの名無しさん
2020/06/27(土) 17:08:00.05ID:WDOSBdwF カプセル化こそ
すでに時代遅れだったんじゃねーの?
すでに時代遅れだったんじゃねーの?
353デフォルトの名無しさん
2020/06/27(土) 17:38:28.03ID:ut+wnsgT >>351
頭悪そう
頭悪そう
354デフォルトの名無しさん
2020/06/27(土) 17:59:51.27ID:kHv6hhb8 >>353
嘘つき!
嘘つき!
355デフォルトの名無しさん
2020/06/27(土) 18:27:35.27ID:e0+LQFD/ >>351
これまでの話を統合した結論として、
いまはgitなどバージョン管理差分確認ツールや
エディタやIDEの機能が充実してるから
言語機能でカプセル化して
「内部を意識しない」ように隠蔽したり制限するのではなく
開発ツールを駆使して内部を意識はするけど
ソースの仕様変更切り替えに対応しやすくなっている
やり方が主流
開発ツール進化によりカプセル化はその役割を終えた。
継承や抽象クラスやオーバーライドも非推奨
これをやると同じ名前のメソッドが沢山あって
IDEによるプロジェクト内キーワード全文検索を
阻害するから
これまでの話を統合した結論として、
いまはgitなどバージョン管理差分確認ツールや
エディタやIDEの機能が充実してるから
言語機能でカプセル化して
「内部を意識しない」ように隠蔽したり制限するのではなく
開発ツールを駆使して内部を意識はするけど
ソースの仕様変更切り替えに対応しやすくなっている
やり方が主流
開発ツール進化によりカプセル化はその役割を終えた。
継承や抽象クラスやオーバーライドも非推奨
これをやると同じ名前のメソッドが沢山あって
IDEによるプロジェクト内キーワード全文検索を
阻害するから
356デフォルトの名無しさん
2020/06/27(土) 18:38:03.92ID:kHv6hhb8 >>355
カプセル化しなかったら仕様変更がしやすいのか、なるほど
カプセル化しなかったら仕様変更がしやすいのか、なるほど
357デフォルトの名無しさん
2020/06/27(土) 18:45:55.84ID:e0+LQFD/ >>356
読解を間違えています
カプセル化をしないことで仕様変更しやすくなるのではなく
カプセル化を「しなくても」代わりに
開発ツールが充実してるから
ブランチ切り替えや差分確認でスマートな
仕様変更と仕様切り替えが可能です。
だからカプセル化はもう不要になりました。
読解を間違えています
カプセル化をしないことで仕様変更しやすくなるのではなく
カプセル化を「しなくても」代わりに
開発ツールが充実してるから
ブランチ切り替えや差分確認でスマートな
仕様変更と仕様切り替えが可能です。
だからカプセル化はもう不要になりました。
358デフォルトの名無しさん
2020/06/27(土) 18:50:33.85ID:UrcM2fcl それはカプセル化の使用有無に関係ないのでは
359デフォルトの名無しさん
2020/06/27(土) 18:52:34.90ID:kHv6hhb8360デフォルトの名無しさん
2020/06/27(土) 18:54:31.03ID:twDHZDh4361デフォルトの名無しさん
2020/06/27(土) 19:01:29.07ID:7UzCd1n0 IDEの助けがあるとは言え、grepした時の重複は勘弁して欲しい。
どれやねんっていつも思う。
本当にOOPってメンテしやすいんだろうか?
どれやねんっていつも思う。
本当にOOPってメンテしやすいんだろうか?
362デフォルトの名無しさん
2020/06/27(土) 19:03:28.66ID:kHv6hhb8 わかりました、grepを禁止します!
363デフォルトの名無しさん
2020/06/27(土) 19:07:51.73ID:kHv6hhb8 世界的超人気言語はC言語、Java、Pythonと変遷していってるわけだけれども
たしかにカプセル化の機能は時代とともに弱まってるように見える
たしかにカプセル化の機能は時代とともに弱まってるように見える
364デフォルトの名無しさん
2020/06/27(土) 19:10:52.99ID:e0+LQFD/ >>359
そのオブジェクト破壊って一体何を意味してる?
多少オブジェクトが破壊されたところで
アプリは動くし すぐバグになる訳じゃないだろう。
多少経験あるプログラマなら知らないオブジェクトへの
破壊的代入は軽率にはやらないだろうし、
オブジェクトのバックアップ変数作ったり少し考えれば
それくらいやるだろう。
やる時はどうしてもやる時はそうせざるを得ないからやる訳で
破壊するのにもそれなりの理由があるんだよ。
それをprivateとかprotectedするなんて余計なお節介
もいいところ
そして、そういう操作の是非は
gitでコードレビューできるだろ。
そのオブジェクト破壊って一体何を意味してる?
多少オブジェクトが破壊されたところで
アプリは動くし すぐバグになる訳じゃないだろう。
多少経験あるプログラマなら知らないオブジェクトへの
破壊的代入は軽率にはやらないだろうし、
オブジェクトのバックアップ変数作ったり少し考えれば
それくらいやるだろう。
やる時はどうしてもやる時はそうせざるを得ないからやる訳で
破壊するのにもそれなりの理由があるんだよ。
それをprivateとかprotectedするなんて余計なお節介
もいいところ
そして、そういう操作の是非は
gitでコードレビューできるだろ。
365デフォルトの名無しさん
2020/06/27(土) 19:13:53.12ID:npRplKHX カプセル化って一種の安全装置なわけだし、作業性とはトレードオフに
なるわな どちらかを選択するなら当然安全装置を選択するが
なるわな どちらかを選択するなら当然安全装置を選択するが
366デフォルトの名無しさん
2020/06/27(土) 19:26:08.84ID:D2Sdnpa5 使い捨てだの再利用しないだの
素晴らしい含蓄をみずほレベルの巨大案件に適用してれば歴史が変わっていたかも知れない
素晴らしい含蓄をみずほレベルの巨大案件に適用してれば歴史が変わっていたかも知れない
367デフォルトの名無しさん
2020/06/27(土) 19:29:44.84ID:kHv6hhb8 >>364
Javaでいうところのprivateやprotectedの値を書き換えたり参照したりといったことを
オブジェクトの破壊と言ってます
コードレビューできるっていうのはそれをやらないと洗い出せないってことでしょ
カプセル化の機能を使っていれば実装時に気付けることをレビューまで先延ばしにすることによって
得られることがそんなに多いのですかね
Javaでいうところのprivateやprotectedの値を書き換えたり参照したりといったことを
オブジェクトの破壊と言ってます
コードレビューできるっていうのはそれをやらないと洗い出せないってことでしょ
カプセル化の機能を使っていれば実装時に気付けることをレビューまで先延ばしにすることによって
得られることがそんなに多いのですかね
368デフォルトの名無しさん
2020/06/27(土) 19:37:50.49ID:kHv6hhb8 たとえばこの先Pythonが、名前が_から始まるメンバに外からアクセスすると
構文エラーになるようになった場合、動作するプログラムにカプセル化を破壊するような
操作がないことは明白になるのでとても便利だと思います
構文エラーになるようになった場合、動作するプログラムにカプセル化を破壊するような
操作がないことは明白になるのでとても便利だと思います
369デフォルトの名無しさん
2020/06/27(土) 19:42:29.28ID:npRplKHX Pythonぐらいの緩さが一番バランスいい気がする
人気があるのも納得
人気があるのも納得
370デフォルトの名無しさん
2020/06/27(土) 19:44:24.05ID:7UzCd1n0 >>368
dart的な感じ?
dart的な感じ?
371デフォルトの名無しさん
2020/06/27(土) 19:50:55.69ID:kHv6hhb8372デフォルトの名無しさん
2020/06/27(土) 19:53:28.59ID:kHv6hhb8 アクセス修飾子でアクセス制限をかけてしまうと
テストすることさえできなくなります
これがカプセル化の圧倒的な弱点です
テストすることさえできなくなります
これがカプセル化の圧倒的な弱点です
373デフォルトの名無しさん
2020/06/27(土) 19:55:33.60ID:kHv6hhb8 privateではありつつもテスト時などにアクセス可能なバックドアが必要で、それが現代のプログラミング言語には欠けていると思います
374デフォルトの名無しさん
2020/06/27(土) 20:15:27.61ID:7UzCd1n0375デフォルトの名無しさん
2020/06/27(土) 20:17:13.10ID:mehAi5n4 グローバル変数使用禁止の
public staticが唯一無二の解決策だというのにわからん奴がいるな
public staticが唯一無二の解決策だというのにわからん奴がいるな
376デフォルトの名無しさん
2020/06/27(土) 20:34:22.57ID:gS37C1rZ377デフォルトの名無しさん
2020/06/27(土) 20:35:14.22ID:gS37C1rZ >>372
テストするならpublicにすればいいだけ
テストするならpublicにすればいいだけ
378デフォルトの名無しさん
2020/06/27(土) 20:39:11.40ID:e0+LQFD/ まず重要な前提として
システムの仕様変更というのは
appのソースコードの変更だけではない。
データベースの変更や接続してる外部サーバや
ストレージに関連する仕様変更とかもある。
そして、カプセル化を初めとするオブジェクト指向の
設計技法はメモリ内の瞬間的なごく狭い範囲の
事しか考えてない。
外部環境の仕様が変わったり、フェイルオーバーなどの
不具合が起きてシステム全体のデバッグしたり
不具合調査するときに、app層がカプセル化されていたり
オブジェクト指向の技法が使われているほど
それらが邪魔になってやりにくくなるのは
想像に難くないと思う。
仮想化やクラウド化が進んでる最近では
こういう外部環境の隠蔽は逆に困るんだよ。
システムの仕様変更というのは
appのソースコードの変更だけではない。
データベースの変更や接続してる外部サーバや
ストレージに関連する仕様変更とかもある。
そして、カプセル化を初めとするオブジェクト指向の
設計技法はメモリ内の瞬間的なごく狭い範囲の
事しか考えてない。
外部環境の仕様が変わったり、フェイルオーバーなどの
不具合が起きてシステム全体のデバッグしたり
不具合調査するときに、app層がカプセル化されていたり
オブジェクト指向の技法が使われているほど
それらが邪魔になってやりにくくなるのは
想像に難くないと思う。
仮想化やクラウド化が進んでる最近では
こういう外部環境の隠蔽は逆に困るんだよ。
379デフォルトの名無しさん
2020/06/27(土) 20:46:30.95ID:npRplKHX >>378
オブジェクト指向の技法が使われているほど
それらが邪魔になってやりにくくなるのは
逆説的だがこれが利点の一つなんだ 手続き型だと
直したつもりになることが多々あり 新たなバクを生む
時間が多少かかっても形式的に処理するべき
オブジェクト指向の技法が使われているほど
それらが邪魔になってやりにくくなるのは
逆説的だがこれが利点の一つなんだ 手続き型だと
直したつもりになることが多々あり 新たなバクを生む
時間が多少かかっても形式的に処理するべき
380デフォルトの名無しさん
2020/06/27(土) 20:59:08.97ID:kHv6hhb8381デフォルトの名無しさん
2020/06/27(土) 21:00:30.56ID:kHv6hhb8 >>377
publicにしたら別のオブジェクトからアクセスされちゃうじゃん
そのメソッドは内部の状態と深い関わりがあって勝手に呼ばれると困っちゃうの
みたいなことあるじゃんテストのときだけpublicにするのはヤリマンだし
publicにしたら別のオブジェクトからアクセスされちゃうじゃん
そのメソッドは内部の状態と深い関わりがあって勝手に呼ばれると困っちゃうの
みたいなことあるじゃんテストのときだけpublicにするのはヤリマンだし
382デフォルトの名無しさん
2020/06/27(土) 21:03:21.73ID:kHv6hhb8 テストを別オブジェクトにするのが間違ってるのかもわからんね
データと関数をセットにしたものをオブジェクトと呼ぶように
データと関数とテストをセットにした自己メンテナンス完結型のものをアクターと呼ぶことにしようよ!
データと関数をセットにしたものをオブジェクトと呼ぶように
データと関数とテストをセットにした自己メンテナンス完結型のものをアクターと呼ぶことにしようよ!
383デフォルトの名無しさん
2020/06/27(土) 21:13:44.71ID:gS37C1rZ >>380
> テストは全メソッドやるでしょ
全メソッドやるかどうかはその人次第
テストするならpublicにする
それだけの話
テストするということは、そのインターフェースは
外部から使用しても良いということを意味する
テストされてるんだから仕様が変わったりしない
> テストは全メソッドやるでしょ
全メソッドやるかどうかはその人次第
テストするならpublicにする
それだけの話
テストするということは、そのインターフェースは
外部から使用しても良いということを意味する
テストされてるんだから仕様が変わったりしない
384デフォルトの名無しさん
2020/06/27(土) 21:14:19.20ID:gS37C1rZ385デフォルトの名無しさん
2020/06/27(土) 21:32:11.55ID:kHv6hhb8 >>384
いやいや、公開する必要のないメソッドを公開する意味がない
呼ばれちゃいけないタイミングはある、テストしてるかどうかとは関係ない
テストしてないコードはバグってるよ
人の問題で片付けてはいけない
いやいや、公開する必要のないメソッドを公開する意味がない
呼ばれちゃいけないタイミングはある、テストしてるかどうかとは関係ない
テストしてないコードはバグってるよ
人の問題で片付けてはいけない
386デフォルトの名無しさん
2020/06/27(土) 21:33:25.71ID:kHv6hhb8 テストやるときって前提となる状態を作ってからやるじゃん
公開して自由にアクセスできたら前提が成り立たない状態でアクセスされちゃうじゃん
テストエアプかい?
公開して自由にアクセスできたら前提が成り立たない状態でアクセスされちゃうじゃん
テストエアプかい?
387デフォルトの名無しさん
2020/06/27(土) 21:34:14.35ID:kHv6hhb8 ちなみにだけど僕は自動化テストは書いたことがない
書いたことないけど僕はテストにすごく詳しいんだ、わからないことがあったら聞いて
書いたことないけど僕はテストにすごく詳しいんだ、わからないことがあったら聞いて
388デフォルトの名無しさん
2020/06/27(土) 21:36:38.34ID:kHv6hhb8 privateなメソッドにテストが必要ないと思ってる人がいるのが僕は不思議
むしろprivateなメソッドこそテストするべきでpublicなメソッドはただのインターフェース
むしろprivateなメソッドこそテストするべきでpublicなメソッドはただのインターフェース
389デフォルトの名無しさん
2020/06/27(土) 21:38:48.09ID:kHv6hhb8 privateなメソッドにロジックが書かれていてそのテストを内包してるオブジェクトのことをアクターと呼ぶことにしようか
390デフォルトの名無しさん
2020/06/27(土) 21:45:24.83ID:OC6QjUii publicにしたからと言って緩和するだけで結局状態の保持をされて意味不明な動作をするところは変わらんで
staticおじさんの言うことを聞きなさい
staticおじさんの言うことを聞きなさい
391デフォルトの名無しさん
2020/06/27(土) 22:12:18.34ID:gS37C1rZ392デフォルトの名無しさん
2020/06/27(土) 22:15:42.36ID:kHv6hhb8393デフォルトの名無しさん
2020/06/27(土) 22:16:57.07ID:kHv6hhb8 テストエアプか?
テストのためだけにpublicにするなんてありえない
テストのためだけにpublicにするなんてありえない
394デフォルトの名無しさん
2020/06/27(土) 22:18:03.01ID:pxtmQ7+k395デフォルトの名無しさん
2020/06/27(土) 22:19:08.38ID:UrcM2fcl 外部からアクセスするテストをしなくて済むのがprivateだと思います^^
396デフォルトの名無しさん
2020/06/27(土) 22:19:09.22ID:kHv6hhb8397デフォルトの名無しさん
2020/06/27(土) 22:20:26.71ID:gS37C1rZ >>388
テストをするということは、それはインターフェースとして仕様がきっちりしていて
長い期間にわたって変更しない(されにくい)ということなんだよ
インターフェースが適当だったり変わりやすいものは
変わるたびにテストも変えなくてはいけなくなる
つまりテストのメンテナンスのコストが増えてしまう
インターフェースが適当だったり変わりやすいものを作るなという話じゃない
そういうのは作ってもいいがprivateにして、他のpublicメソッドを通して間接的にテストする
privateはテストしなくていいとかテストできないとかじゃなくて
インターフェースが(まだ)明確に決きめずに後回しにできるというメリットが有る
一方テスト可能な段階になったなら、それはインターフェースの仕様が明確に定義されているということ
(明確に定義されてないものをテストなんかできない)
明確に定義されたのならpublicにしていいわけ
テストをするということは、それはインターフェースとして仕様がきっちりしていて
長い期間にわたって変更しない(されにくい)ということなんだよ
インターフェースが適当だったり変わりやすいものは
変わるたびにテストも変えなくてはいけなくなる
つまりテストのメンテナンスのコストが増えてしまう
インターフェースが適当だったり変わりやすいものを作るなという話じゃない
そういうのは作ってもいいがprivateにして、他のpublicメソッドを通して間接的にテストする
privateはテストしなくていいとかテストできないとかじゃなくて
インターフェースが(まだ)明確に決きめずに後回しにできるというメリットが有る
一方テスト可能な段階になったなら、それはインターフェースの仕様が明確に定義されているということ
(明確に定義されてないものをテストなんかできない)
明確に定義されたのならpublicにしていいわけ
398デフォルトの名無しさん
2020/06/27(土) 22:20:30.54ID:nVWlQ22s ジャップにオブジェクト指向は100年早いみたいだな
脳死で全てにpublic staticって書いとけ
脳死で全てにpublic staticって書いとけ
399デフォルトの名無しさん
2020/06/27(土) 22:20:37.43ID:kHv6hhb8400デフォルトの名無しさん
2020/06/27(土) 22:22:06.34ID:gS37C1rZ401デフォルトの名無しさん
2020/06/27(土) 22:22:39.57ID:kHv6hhb8402デフォルトの名無しさん
2020/06/27(土) 22:23:50.09ID:gS37C1rZ403デフォルトの名無しさん
2020/06/27(土) 22:23:52.28ID:gUUFl8tS >>400
じゃあ、全部テストするときは全部publicだね
じゃあ、全部テストするときは全部publicだね
404デフォルトの名無しさん
2020/06/27(土) 22:24:28.59ID:kHv6hhb8 >>400
テストするときは前提の状態を用意してからやるもので
テストは実装が正しいか確認するためにやる
publicにして他のオブジェクトから自由に呼び出して良いですというものとはわけが違う
テストで呼んだから別のところでも呼んでいんだなんて道理は存在しない
テストエアプか?
テストするときは前提の状態を用意してからやるもので
テストは実装が正しいか確認するためにやる
publicにして他のオブジェクトから自由に呼び出して良いですというものとはわけが違う
テストで呼んだから別のところでも呼んでいんだなんて道理は存在しない
テストエアプか?
405デフォルトの名無しさん
2020/06/27(土) 22:25:10.97ID:kHv6hhb8406デフォルトの名無しさん
2020/06/27(土) 22:25:22.83ID:gS37C1rZ >>403
仕様が明確に決まってないようなものは
privateにしてテストをサボることができる
サボると言ってもpublicメソッド経由でテストするわけだが
あくまでメソッド単体でのテストをサボるだけ
仕様が明確に決まってないようなものは
privateにしてテストをサボることができる
サボると言ってもpublicメソッド経由でテストするわけだが
あくまでメソッド単体でのテストをサボるだけ
407デフォルトの名無しさん
2020/06/27(土) 22:25:38.25ID:zbAPoACG >>404
だからどうすんだよ
だからどうすんだよ
408デフォルトの名無しさん
2020/06/27(土) 22:26:14.09ID:gS37C1rZ409デフォルトの名無しさん
2020/06/27(土) 22:27:02.78ID:kHv6hhb8 >>407
そこで、僕に名案があります
テストを同じオブジェクトの中に用意するんです
そうしてデータ、メソッド、テスト、この3つを備えたオブジェクトをアクターと呼ぶことにしましょう
プログラミングパラダイムはアクターが主流の時代に突入します
そこで、僕に名案があります
テストを同じオブジェクトの中に用意するんです
そうしてデータ、メソッド、テスト、この3つを備えたオブジェクトをアクターと呼ぶことにしましょう
プログラミングパラダイムはアクターが主流の時代に突入します
410デフォルトの名無しさん
2020/06/27(土) 22:28:17.85ID:kHv6hhb8411デフォルトの名無しさん
2020/06/27(土) 22:28:55.27ID:gS37C1rZ412デフォルトの名無しさん
2020/06/27(土) 22:30:05.59ID:kHv6hhb8 テストという概念がオブジェクト指向の中にないからこのようなジレンマに陥るのです
そこで、オブジェクトの中にテストを入れてしまおうというのが僕が提唱する新時代の
プログラミングパラダイム、アクター指向です
そこで、オブジェクトの中にテストを入れてしまおうというのが僕が提唱する新時代の
プログラミングパラダイム、アクター指向です
413デフォルトの名無しさん
2020/06/27(土) 22:30:26.61ID:kHv6hhb8 >>411
壊れるに決まってるだろ、いい加減なこと言うなハゲ
壊れるに決まってるだろ、いい加減なこと言うなハゲ
414デフォルトの名無しさん
2020/06/27(土) 22:30:40.41ID:kHv6hhb8 privateなめんなよ
415デフォルトの名無しさん
2020/06/27(土) 22:30:57.83ID:gS37C1rZ >>413
なんだよw根拠言えないのかよw
なんだよw根拠言えないのかよw
416デフォルトの名無しさん
2020/06/27(土) 22:31:24.07ID:kHv6hhb8 >>415
お前が根拠言えよ
お前が根拠言えよ
417デフォルトの名無しさん
2020/06/27(土) 22:31:41.00ID:kHv6hhb8 壊れないことを証明してみせろ
418デフォルトの名無しさん
2020/06/27(土) 22:32:50.72ID:gS37C1rZ 壊れる要因がないので壊れない
419デフォルトの名無しさん
2020/06/27(土) 22:33:18.25ID:kHv6hhb8 早くしろよおら、全部publicにしてプログラム書いてみろよ、ぶち、壊してやるから
420デフォルトの名無しさん
2020/06/27(土) 22:36:21.73ID:kHv6hhb8 アクセス修飾子はテストのために変えるものじゃない
そこに現行のオブジェクト指向の限界がある
そこでオブジェクト内にテストまで用意しましょうというのが新時代のアクター指向
そこに現行のオブジェクト指向の限界がある
そこでオブジェクト内にテストまで用意しましょうというのが新時代のアクター指向
421デフォルトの名無しさん
2020/06/27(土) 22:37:15.69ID:paNjyoZf 現状のオブジェクト指向言語がウンコってことでいいよね
422デフォルトの名無しさん
2020/06/27(土) 22:38:06.59ID:gS37C1rZ > アクセス修飾子はテストのために変えるものじゃない
当たり前だろうw
テストというのは外部からインターフェースの仕様が明確に決まってるからこそできること
外部からのインターフェースの仕様が明確に決まったなら
それはpublicにしてよい
当たり前だろうw
テストというのは外部からインターフェースの仕様が明確に決まってるからこそできること
外部からのインターフェースの仕様が明確に決まったなら
それはpublicにしてよい
423デフォルトの名無しさん
2020/06/27(土) 22:38:47.14ID:kHv6hhb8 >>422
そんなの当たり前だろ
そんなの当たり前だろ
424デフォルトの名無しさん
2020/06/27(土) 22:39:05.28ID:gS37C1rZ だから当たり前の話をしてる
425デフォルトの名無しさん
2020/06/27(土) 22:40:35.80ID:kHv6hhb8 >>421
はい、そう言わざる得ないのが現状です
言語が悪いんじゃないプログラミングパラダイムにまだ進化の余地があると
前向きに捉えるのが良いと僕は思います
アクター指向言語がこれから出てくることを祈ります
はい、そう言わざる得ないのが現状です
言語が悪いんじゃないプログラミングパラダイムにまだ進化の余地があると
前向きに捉えるのが良いと僕は思います
アクター指向言語がこれから出てくることを祈ります
426デフォルトの名無しさん
2020/06/27(土) 22:40:49.92ID:kHv6hhb8 >>424
だから当たり前だろ
だから当たり前だろ
427デフォルトの名無しさん
2020/06/27(土) 22:41:07.23ID:kHv6hhb8 あ・た・り・ま・え
428デフォルトの名無しさん
2020/06/27(土) 22:41:23.91ID:5gWgsM/a え?privateなメソッドをテストしないって正気?
単に現状のオブジェクト指向言語と開発環境がテストのサポートできてないだけだろ
単に現状のオブジェクト指向言語と開発環境がテストのサポートできてないだけだろ
429デフォルトの名無しさん
2020/06/27(土) 22:42:31.56ID:kHv6hhb8 >>428
ねー意味分かんないよねー、ドン引きだよねー
ねー意味分かんないよねー、ドン引きだよねー
430デフォルトの名無しさん
2020/06/27(土) 22:43:30.93ID:UrcM2fcl >>399
リフレクション使ってでもやれって言うときはやりますけど?
そこら辺はルール作ってるはずで設計以前で明言されるべき
private要素に外部からアクセスしまくるようなことを許す設計やルールはどうかと思いますけどね
というか他の読み手が安心感を得るためでもある気がしますね
全部publicなプロダクトがあったとしてそれに新しいクラスやらを追加しろって言われたら神経質にならなければいけないw
逆にアクセス修飾子なしの言語はルールだけでやってるよね、あれ怖いわ
まあだいたいが単純なプロジェクトしかなさそうな言語だけど。。
リフレクション使ってでもやれって言うときはやりますけど?
そこら辺はルール作ってるはずで設計以前で明言されるべき
private要素に外部からアクセスしまくるようなことを許す設計やルールはどうかと思いますけどね
というか他の読み手が安心感を得るためでもある気がしますね
全部publicなプロダクトがあったとしてそれに新しいクラスやらを追加しろって言われたら神経質にならなければいけないw
逆にアクセス修飾子なしの言語はルールだけでやってるよね、あれ怖いわ
まあだいたいが単純なプロジェクトしかなさそうな言語だけど。。
431デフォルトの名無しさん
2020/06/27(土) 22:43:37.12ID:gS37C1rZ privateなメソッドをテストしないんじゃなくて
仕様が明確に固まってないからテストしてもメンテナンスのコストが増えるだけ
そういうのはprivateにしてpublicメソッド経由でテストする
それがやりにくいーっていうなら、そのprivateなメソッドの
仕様を明確に決めればpublicにすることができる
ようするに今やるか後回しにするかの問題でしか無い
仕様が明確に固まってないからテストしてもメンテナンスのコストが増えるだけ
そういうのはprivateにしてpublicメソッド経由でテストする
それがやりにくいーっていうなら、そのprivateなメソッドの
仕様を明確に決めればpublicにすることができる
ようするに今やるか後回しにするかの問題でしか無い
432デフォルトの名無しさん
2020/06/27(土) 22:44:43.36ID:kHv6hhb8433デフォルトの名無しさん
2020/06/27(土) 22:45:21.19ID:qZEydISP >>431
いやいやテストプロジェクトではprivateにアクセスできるってだけでいいでしょ
いやいやテストプロジェクトではprivateにアクセスできるってだけでいいでしょ
434デフォルトの名無しさん
2020/06/27(土) 22:45:36.87ID:kHv6hhb8 >>430
じゃあprivateでもテストすればいんじゃないでしょうか
じゃあprivateでもテストすればいんじゃないでしょうか
435デフォルトの名無しさん
2020/06/27(土) 22:52:10.82ID:kHv6hhb8 テストオブジェクトから呼び出すためだけに
オブジェクト内部の処理をpublicにするのはありえない
publicメソッド経由で呼び出すのは粒度が大きすぎて話にならない
リフレクション使えばテストできるんだからそういう機能を持ったテストライブラリを使うべき
オブジェクト内部の処理をpublicにするのはありえない
publicメソッド経由で呼び出すのは粒度が大きすぎて話にならない
リフレクション使えばテストできるんだからそういう機能を持ったテストライブラリを使うべき
436デフォルトの名無しさん
2020/06/27(土) 22:53:18.84ID:e0+LQFD/ インターフェース仕様にまだ決まってないだとか
確定なんて明確な区切りなんてものは
現実にはない。
まだ確定してなくても仮のものを仮定して
実装はできる。
確定した後にインターフェースを変えたくなったり
ある日根底から覆ったりする。
privateで制限した内容は顧客要求より強い効力を持つの?
だったら凄く有効だよな
でもそうじゃないだろ
確定なんて明確な区切りなんてものは
現実にはない。
まだ確定してなくても仮のものを仮定して
実装はできる。
確定した後にインターフェースを変えたくなったり
ある日根底から覆ったりする。
privateで制限した内容は顧客要求より強い効力を持つの?
だったら凄く有効だよな
でもそうじゃないだろ
437デフォルトの名無しさん
2020/06/27(土) 22:55:59.77ID:kHv6hhb8 リフレクションはオブジェクト指向にとっては黒魔術でしかないので正当なやり方ではない
この問題の本質はオブジェクト指向にテストの概念がないことにある
オブジェクト指向は規模の大きなシステムの品質を担保するために作られたわけだが
現代ではそれにテストも入れるべきなんだよ
データ、メソッド、テストこの3つを内包するオブジェクトを作ることこそが真のオブジェクト指向
この問題の本質はオブジェクト指向にテストの概念がないことにある
オブジェクト指向は規模の大きなシステムの品質を担保するために作られたわけだが
現代ではそれにテストも入れるべきなんだよ
データ、メソッド、テストこの3つを内包するオブジェクトを作ることこそが真のオブジェクト指向
438デフォルトの名無しさん
2020/06/27(土) 22:56:59.64ID:gS37C1rZ439デフォルトの名無しさん
2020/06/27(土) 22:57:06.02ID:UrcM2fcl >>434
メソッドレベルのテストをリフレクション使ってまでやれって言われたことないですけどねw
inoutがテストしなければならないほど複雑になる1つのメソッドを書くことがおかしいし、
粒度が大きすぎてって、それはinoutを整理しきれてない設計がおかしいのでは?
何でも値が入ってきます、全部1つのメソッドで作ってテストしてください、なんて無茶ぶりだとおもいますねw
メソッドレベルのテストをリフレクション使ってまでやれって言われたことないですけどねw
inoutがテストしなければならないほど複雑になる1つのメソッドを書くことがおかしいし、
粒度が大きすぎてって、それはinoutを整理しきれてない設計がおかしいのでは?
何でも値が入ってきます、全部1つのメソッドで作ってテストしてください、なんて無茶ぶりだとおもいますねw
440デフォルトの名無しさん
2020/06/27(土) 22:57:18.00ID:gS37C1rZ >>436
設計したこと無いの?
設計したこと無いの?
441デフォルトの名無しさん
2020/06/27(土) 22:57:58.35ID:kHv6hhb8442デフォルトの名無しさん
2020/06/27(土) 22:58:22.25ID:e0+LQFD/443デフォルトの名無しさん
2020/06/27(土) 23:00:01.68ID:kHv6hhb8444デフォルトの名無しさん
2020/06/27(土) 23:00:03.74ID:8YCrt6Qf privateをテストするしないっていう想定自体が理解できない
privateメソッドなら当然それを呼び出しているpublicなメソッドがあるはずで
そのpublicメソッドのテストに当然privateなメソッドのテストも含まれるはず
よっぽどprivateメソッドで複雑なことしていない限りそのテストで十分だろうし
それでテストしきれないほど複雑なら別のモジュールに定義し直した方がいいだろう
privateメソッドなら当然それを呼び出しているpublicなメソッドがあるはずで
そのpublicメソッドのテストに当然privateなメソッドのテストも含まれるはず
よっぽどprivateメソッドで複雑なことしていない限りそのテストで十分だろうし
それでテストしきれないほど複雑なら別のモジュールに定義し直した方がいいだろう
445デフォルトの名無しさん
2020/06/27(土) 23:02:02.14ID:kHv6hhb8 >>444
それなりに複雑でメソッドを一つずつテストしたいけど
テストのためにオブジェクト分けるなんてイカれてると思うの
だってオブジェクトがテストのためにあるわけじゃないから
テストがオブジェクトのためにあるべきで、そこでですよ
オブジェクト内にテストを内包するのが正しいオブジェクト指向と結論するわけです
それなりに複雑でメソッドを一つずつテストしたいけど
テストのためにオブジェクト分けるなんてイカれてると思うの
だってオブジェクトがテストのためにあるわけじゃないから
テストがオブジェクトのためにあるべきで、そこでですよ
オブジェクト内にテストを内包するのが正しいオブジェクト指向と結論するわけです
446デフォルトの名無しさん
2020/06/27(土) 23:02:14.45ID:gS37C1rZ >>442
顧客によって覆ることが何の関係があるの?
顧客によって覆ることが何の関係があるの?
447デフォルトの名無しさん
2020/06/27(土) 23:02:29.65ID:kHv6hhb8 仕様が覆るのはあたりまえじゃん
それとアクセス修飾子の話は違うわ
それとアクセス修飾子の話は違うわ
448デフォルトの名無しさん
2020/06/27(土) 23:02:36.66ID:gS37C1rZ449デフォルトの名無しさん
2020/06/27(土) 23:03:54.57ID:gS37C1rZ >>445
> それなりに複雑でメソッドを一つずつテストしたいけど
> テストのためにオブジェクト分けるなんてイカれてると思うの
複雑なメソッドは小さくしてください
設計がそもそも間違っています
テストのために小さく分けるのではなく
そもそも複雑なのが問題なのです。
問題を解決すればテスト可能になります。
> それなりに複雑でメソッドを一つずつテストしたいけど
> テストのためにオブジェクト分けるなんてイカれてると思うの
複雑なメソッドは小さくしてください
設計がそもそも間違っています
テストのために小さく分けるのではなく
そもそも複雑なのが問題なのです。
問題を解決すればテスト可能になります。
450デフォルトの名無しさん
2020/06/27(土) 23:03:58.42ID:kHv6hhb8 >>448
だから、そこにジレンマがあるよねって話を最初からしてるつもりっす
だから、そこにジレンマがあるよねって話を最初からしてるつもりっす
451デフォルトの名無しさん
2020/06/27(土) 23:04:46.01ID:/AdLJL3G いや、この問題は言語と開発環境の問題だろ
概念は関係ないよ
visualstudioができちゃえば
できますよ
で終わりな話
概念は関係ないよ
visualstudioができちゃえば
できますよ
で終わりな話
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 【青森・はぐれ子グマがラーメン店襲撃】「笑えないです」ボコボコにしてクマを返り討ち レジェンド男性はまぶたが腫れあがり骨折 ★2 [ぐれ★]
- 中国「高市許さん😡」ジャップメディア「熊!🐻!」 [809488867]
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
- 🏡
- 女子高校生におちんちを見せる 、 頭髪薄めが発生 [485983549]
- 今季最強寒気襲来!!!!
- 【高市早苗】習近平激怒か [115996789]
