- 1 名前:デフォルトの名無しさん [2020/06/18(木) 23:47:36.69 ID:l/2SQUll.net]
- カプセル化(英語: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)
- 357 名前:デフォルトの名無しさん [2020/06/27(土) 15:53:25 ID:kHv6hhb8.net]
- >>343
なるほどね、アレルギーが、そういうことね
- 358 名前:デフォルトの名無しさん [2020/06/27(土) 15:53:46 ID:kHv6hhb8.net]
- 恥かいた
- 359 名前:デフォルトの名無しさん [2020/06/27(土) 15:54:37 ID:kHv6hhb8.net]
- 安価ミスってんじゃないよ!!
納得した僕が馬鹿みたいでしょうが!!
- 360 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:55:00 ID:ut+wnsgT.net]
- 馬鹿なんじゃないの?
- 361 名前:デフォルトの名無しさん [2020/06/27(土) 15:56:18 ID:e0+LQFD/.net]
- ああもうめちゃくちゃだよ!
- 362 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 16:01:21 ID:7UzCd1n0.net]
- 何やってんだおめーら。
そのへんでやめとき。
- 363 名前:デフォルトの名無しさん [2020/06/27(土) 16:02:43 ID:kHv6hhb8.net]
- カプセル化には強度があります。
C言語のヘッダやJavaのprivateといった言語機能として カプセル化できることを強カプセル化と言います JavaScriptやPythonのように命名規則によって使用者に 知らせるカプセル化のことを弱カプセル化と言うのです。 >>348 僕のこと見直してくれてもいいです
- 364 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 17:08:00.05 ID:WDOSBdwF.net]
- カプセル化こそ
すでに時代遅れだったんじゃねーの?
- 365 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 17:38:28.03 ID:ut+wnsgT.net]
- >>351
頭悪そう
- 366 名前:デフォルトの名無しさん [2020/06/27(土) 17:59:51.27 ID:kHv6hhb8.net]
- >>353
嘘つき!
- 367 名前:デフォルトの名無しさん [2020/06/27(土) 18:27:35.27 ID:e0+LQFD/.net]
- >>351
これまでの話を統合した結論として、 いまはgitなどバージョン管理差分確認ツールや エディタやIDEの機能が充実してるから 言語機能でカプセル化して 「内部を意識しない」ように隠蔽したり制限するのではなく 開発ツールを駆使して内部を意識はするけど ソースの仕様変更切り替えに対応しやすくなっている やり方が主流 開発ツール進化によりカプセル化はその役割を終えた。 継承や抽象クラスやオーバーライドも非推奨 これをやると同じ名前のメソッドが沢山あって IDEによるプロジェクト内キーワード全文検索を 阻害するから
- 368 名前:デフォルトの名無しさん [2020/06/27(土) 18:38:03.92 ID:kHv6hhb8.net]
- >>355
カプセル化しなかったら仕様変更がしやすいのか、なるほど
- 369 名前:デフォルトの名無しさん [2020/06/27(土) 18:45:55.84 ID:e0+LQFD/.net]
- >>356
読解を間違えています カプセル化をしないことで仕様変更しやすくなるのではなく カプセル化を「しなくても」代わりに 開発ツールが充実してるから ブランチ切り替えや差分確認でスマートな 仕様変更と仕様切り替えが可能です。 だからカプセル化はもう不要になりました。
- 370 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 18:50:33.85 ID:UrcM2fcl.net]
- それはカプセル化の使用有無に関係ないのでは
- 371 名前:デフォルトの名無しさん [2020/06/27(土) 18:52:34.90 ID:kHv6hhb8.net]
- >>357
カプセル化せずに発生するオブジェクトを破壊するような変更を 差分確認で見つけ出せるわけですね、差分確認が重要ですね
- 372 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 18:54:31.03 ID:twDHZDh4.net]
- >>355
×これまでの話を統合した結論として ◯これまでの話はすっ飛ばしてボクの言いたいことだけを言うと
- 373 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 19:01:29.07 ID:7UzCd1n0.net]
- IDEの助けがあるとは言え、grepした時の重複は勘弁して欲しい。
どれやねんっていつも思う。 本当にOOPってメンテしやすいんだろうか?
- 374 名前:デフォルトの名無しさん [2020/06/27(土) 19:03:28.66 ID:kHv6hhb8.net]
- わかりました、grepを禁止します!
- 375 名前:デフォルトの名無しさん [2020/06/27(土) 19:07:51.73 ID:kHv6hhb8.net]
- 世界的超人気言語はC言語、Java、Pythonと変遷していってるわけだけれども
たしかにカプセル化の機能は時代とともに弱まってるように見える
- 376 名前:デフォルトの名無しさん [2020/06/27(土) 19:10:52.99 ID:e0+LQFD/.net]
- >>359
そのオブジェクト破壊って一体何を意味してる? 多少オブジェクトが破壊されたところで アプリは動くし すぐバグになる訳じゃないだろう。 多少経験あるプログラマなら知らないオブジェクトへの 破壊的代入は軽率にはやらないだろうし、 オブジェクトのバックアップ変数作ったり少し考えれば それくらいやるだろう。 やる時はどうしてもやる時はそうせざるを得ないからやる訳で 破壊するのにもそれなりの理由があるんだよ。 それをprivateとかprotectedするなんて余計なお節介 もいいところ そして、そういう操作の是非は gitでコードレビューできるだろ。
- 377 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 19:13:53.12 ID:npRplKHX.net]
- カプセル化って一種の安全装置なわけだし、作業性とはトレードオフに
なるわな どちらかを選択するなら当然安全装置を選択するが
- 378 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 19:26:08.84 ID:D2Sdnpa5.net]
- 使い捨てだの再利用しないだの
素晴らしい含蓄をみずほレベルの巨大案件に適用してれば歴史が変わっていたかも知れない
- 379 名前:デフォルトの名無しさん [2020/06/27(土) 19:29:44.84 ID:kHv6hhb8.net]
- >>364
Javaでいうところのprivateやprotectedの値を書き換えたり参照したりといったことを オブジェクトの破壊と言ってます コードレビューできるっていうのはそれをやらないと洗い出せないってことでしょ カプセル化の機能を使っていれば実装時に気付けることをレビューまで先延ばしにすることによって 得られることがそんなに多いのですかね
- 380 名前:デフォルトの名無しさん [2020/06/27(土) 19:37:50.49 ID:kHv6hhb8.net]
- たとえばこの先Pythonが、名前が_から始まるメンバに外からアクセスすると
構文エラーになるようになった場合、動作するプログラムにカプセル化を破壊するような 操作がないことは明白になるのでとても便利だと思います
- 381 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 19:42:29.28 ID:npRplKHX.net]
- Pythonぐらいの緩さが一番バランスいい気がする
人気があるのも納得
- 382 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 19:44:24.05 ID:7UzCd1n0.net]
- >>368
dart的な感じ?
- 383 名前:デフォルトの名無しさん [2020/06/27(土) 19:50:55.69 ID:kHv6hhb8.net]
- >>370
そうです、そのdart的な感じです dartを使ったことがないので僕は知りませんけど
- 384 名前:デフォルトの名無しさん [2020/06/27(土) 19:53:28.59 ID:kHv6hhb8.net]
- アクセス修飾子でアクセス制限をかけてしまうと
テストすることさえできなくなります これがカプセル化の圧倒的な弱点です
- 385 名前:デフォルトの名無しさん [2020/06/27(土) 19:55:33.60 ID:kHv6hhb8.net]
- privateではありつつもテスト時などにアクセス可能なバックドアが必要で、それが現代のプログラミング言語には欠けていると思います
- 386 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 20:15:27.61 ID:7UzCd1n0.net]
- >>373
そのへんJavaとかリフレクション駆使して回避してるので構造的、致命的な欠点とは言い切れないと思うよ。 リフレクションがバックドアと言われたらそれはその通りなので反論できないけど。
- 387 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 20:17:13.10 ID:mehAi5n4.net]
- グローバル変数使用禁止の
public staticが唯一無二の解決策だというのにわからん奴がいるな
- 388 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 20:34:22.57 ID:gS37C1rZ.net]
- >>373
テストでアクセスするならそれはpublicにすべきもの 言い換えると、テストですらアクセスしないものをprivateにする
- 389 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 20:35:14.22 ID:gS37C1rZ.net]
- >>372
テストするならpublicにすればいいだけ
- 390 名前:デフォルトの名無しさん [2020/06/27(土) 20:39:11.40 ID:e0+LQFD/.net]
- まず重要な前提として
システムの仕様変更というのは appのソースコードの変更だけではない。 データベースの変更や接続してる外部サーバや ストレージに関連する仕様変更とかもある。 そして、カプセル化を初めとするオブジェクト指向の 設計技法はメモリ内の瞬間的なごく狭い範囲の 事しか考えてない。 外部環境の仕様が変わったり、フェイルオーバーなどの 不具合が起きてシステム全体のデバッグしたり 不具合調査するときに、app層がカプセル化されていたり オブジェクト指向の技法が使われているほど それらが邪魔になってやりにくくなるのは 想像に難くないと思う。 仮想化やクラウド化が進んでる最近では こういう外部環境の隠蔽は逆に困るんだよ。
- 391 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 20:46:30.95 ID:npRplKHX.net]
- >>378
オブジェクト指向の技法が使われているほど それらが邪魔になってやりにくくなるのは 逆説的だがこれが利点の一つなんだ 手続き型だと 直したつもりになることが多々あり 新たなバクを生む 時間が多少かかっても形式的に処理するべき
- 392 名前:デフォルトの名無しさん [2020/06/27(土) 20:59:08.97 ID:kHv6hhb8.net]
- >>376
それはないわー テストは全メソッドやるでしょ 全部publicにしなければいけないなんて間違ってると思います! 僕はそれ間違ってると思います!
- 393 名前:デフォルトの名無しさん [2020/06/27(土) 21:00:30.56 ID:kHv6hhb8.net]
- >>377
publicにしたら別のオブジェクトからアクセスされちゃうじゃん そのメソッドは内部の状態と深い関わりがあって勝手に呼ばれると困っちゃうの みたいなことあるじゃんテストのときだけpublicにするのはヤリマンだし
- 394 名前:デフォルトの名無しさん [2020/06/27(土) 21:03:21.73 ID:kHv6hhb8.net]
- テストを別オブジェクトにするのが間違ってるのかもわからんね
データと関数をセットにしたものをオブジェクトと呼ぶように データと関数とテストをセットにした自己メンテナンス完結型のものをアクターと呼ぶことにしようよ!
- 395 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 21:13:44.71 ID:gS37C1rZ.net]
- >>380
> テストは全メソッドやるでしょ 全メソッドやるかどうかはその人次第 テストするならpublicにする それだけの話 テストするということは、そのインターフェースは 外部から使用しても良いということを意味する テストされてるんだから仕様が変わったりしない
- 396 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 21:14:19.20 ID:gS37C1rZ.net]
- >>381
> publicにしたら別のオブジェクトからアクセスされちゃうじゃん アクセスしても問題ないだろ? アクセスしても問題ないようにテストしてるんだから
- 397 名前:デフォルトの名無しさん [2020/06/27(土) 21:32:11.55 ID:kHv6hhb8.net]
- >>384
いやいや、公開する必要のないメソッドを公開する意味がない 呼ばれちゃいけないタイミングはある、テストしてるかどうかとは関係ない テストしてないコードはバグってるよ 人の問題で片付けてはいけない
- 398 名前:デフォルトの名無しさん [2020/06/27(土) 21:33:25.71 ID:kHv6hhb8.net]
- テストやるときって前提となる状態を作ってからやるじゃん
公開して自由にアクセスできたら前提が成り立たない状態でアクセスされちゃうじゃん テストエアプかい?
- 399 名前:デフォルトの名無しさん [2020/06/27(土) 21:34:14.35 ID:kHv6hhb8.net]
- ちなみにだけど僕は自動化テストは書いたことがない
書いたことないけど僕はテストにすごく詳しいんだ、わからないことがあったら聞いて
- 400 名前:デフォルトの名無しさん [2020/06/27(土) 21:36:38.34 ID:kHv6hhb8.net]
- privateなメソッドにテストが必要ないと思ってる人がいるのが僕は不思議
むしろprivateなメソッドこそテストするべきでpublicなメソッドはただのインターフェース
- 401 名前:デフォルトの名無しさん [2020/06/27(土) 21:38:48.09 ID:kHv6hhb8.net]
- privateなメソッドにロジックが書かれていてそのテストを内包してるオブジェクトのことをアクターと呼ぶことにしようか
- 402 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 21:45:24.83 ID:OC6QjUii.net]
- publicにしたからと言って緩和するだけで結局状態の保持をされて意味不明な動作をするところは変わらんで
staticおじさんの言うことを聞きなさい
- 403 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:12:18.34 ID:gS37C1rZ.net]
- >>385
> いやいや、公開する必要のないメソッドを公開する意味がない テストするのだから公開する必要があるだろ なにいってんだおめぇ
- 404 名前:デフォルトの名無しさん [2020/06/27(土) 22:15:42.36 ID:kHv6hhb8.net]
- >>391
お前が何いってんだハゲ privateだとテストできないのが困るのよねえと言ってんだろうが
- 405 名前:デフォルトの名無しさん [2020/06/27(土) 22:16:57.07 ID:kHv6hhb8.net]
- テストエアプか?
テストのためだけにpublicにするなんてありえない
- 406 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:18:03.01 ID:pxtmQ7+k.net]
- >>393
じゃあ、どうすんだよ って聞いてみたい
- 407 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:19:08.38 ID:UrcM2fcl.net]
- 外部からアクセスするテストをしなくて済むのがprivateだと思います^^
- 408 名前:デフォルトの名無しさん [2020/06/27(土) 22:19:09.22 ID:kHv6hhb8.net]
- >>394
同じオブジェクトにテスト書けば良いと僕は思います データ、メソッド、テストを備えたオブジェクトを特別にアクターと呼ぶことにしましょうという のが僕の提案です
- 409 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:20:26.71 ID:gS37C1rZ.net]
- >>388
テストをするということは、それはインターフェースとして仕様がきっちりしていて 長い期間にわたって変更しない(されにくい)ということなんだよ インターフェースが適当だったり変わりやすいものは 変わるたびにテストも変えなくてはいけなくなる つまりテストのメンテナンスのコストが増えてしまう インターフェースが適当だったり変わりやすいものを作るなという話じゃない そういうのは作ってもいいがprivateにして、他のpublicメソッドを通して間接的にテストする privateはテストしなくていいとかテストできないとかじゃなくて インターフェースが(まだ)明確に決きめずに後回しにできるというメリットが有る 一方テスト可能な段階になったなら、それはインターフェースの仕様が明確に定義されているということ (明確に定義されてないものをテストなんかできない) 明確に定義されたのならpublicにしていいわけ
- 410 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:20:30.54 ID:nVWlQ22s.net]
- ジャップにオブジェクト指向は100年早いみたいだな
脳死で全てにpublic staticって書いとけ
- 411 名前:デフォルトの名無しさん [2020/06/27(土) 22:20:37.43 ID:kHv6hhb8.net]
- >>395
あら、あーたはprivateなメソッドのテストはなさらないの? それで平気
- 412 名前:なの? []
- [ここ壊れてます]
- 413 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:22:06.34 ID:gS37C1rZ.net]
- >>393
テストというのはオブジェクトを使用するときの例でもあるんだから テストがやってることは、テスト以外でもやって良いんだよ テストでしか呼び出してないからって、privateにする必要はない
- 414 名前:デフォルトの名無しさん [2020/06/27(土) 22:22:39.57 ID:kHv6hhb8.net]
- >>397
そんなの関係なくメソッド書いたらテストもするでしょ テストされてないコードはすべてバグだよ public通してテストするのは粒度が大きすぎる
- 415 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:23:50.09 ID:gS37C1rZ.net]
- >>401
だからprivateをテストするということは、 そのメソッドは仕様が明確に決まったということなので publicにしていいんだよ
- 416 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:23:52.28 ID:gUUFl8tS.net]
- >>400
じゃあ、全部テストするときは全部publicだね
- 417 名前:デフォルトの名無しさん [2020/06/27(土) 22:24:28.59 ID:kHv6hhb8.net]
- >>400
テストするときは前提の状態を用意してからやるもので テストは実装が正しいか確認するためにやる publicにして他のオブジェクトから自由に呼び出して良いですというものとはわけが違う テストで呼んだから別のところでも呼んでいんだなんて道理は存在しない テストエアプか?
- 418 名前:デフォルトの名無しさん [2020/06/27(土) 22:25:10.97 ID:kHv6hhb8.net]
- >>402
言い訳がない、privateにするのはよそからアクセスさせないため テストするためにpublicにしていいわけがない、オブジェクト指向エアプか?
- 419 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:25:22.83 ID:gS37C1rZ.net]
- >>403
仕様が明確に決まってないようなものは privateにしてテストをサボることができる サボると言ってもpublicメソッド経由でテストするわけだが あくまでメソッド単体でのテストをサボるだけ
- 420 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:25:38.25 ID:zbAPoACG.net]
- >>404
だからどうすんだよ
- 421 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:26:14.09 ID:gS37C1rZ.net]
- >>405
> privateにするのはよそからアクセスさせないため テスト(よそ)からアクセスするのでpublicです
- 422 名前:デフォルトの名無しさん [2020/06/27(土) 22:27:02.78 ID:kHv6hhb8.net]
- >>407
そこで、僕に名案があります テストを同じオブジェクトの中に用意するんです そうしてデータ、メソッド、テスト、この3つを備えたオブジェクトをアクターと呼ぶことにしましょう プログラミングパラダイムはアクターが主流の時代に突入します
- 423 名前:デフォルトの名無しさん [2020/06/27(土) 22:28:17.85 ID:kHv6hhb8.net]
- >>408
テストのためにpublicにしたらオブジェクトが壊れるため テストのためにpublicにするのはオブジェクト指向的にありえない オブジェクト指向エアプか?
- 424 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:28:55.27 ID:gS37C1rZ.net]
- >>410
> テストのためにpublicにしたらオブジェクトが壊れるため 壊れないよ。
- 425 名前:デフォルトの名無しさん [2020/06/27(土) 22:30:05.59 ID:kHv6hhb8.net]
- テストという概念がオブジェクト指向の中にないからこのようなジレンマに陥るのです
そこで、オブジェクトの中にテストを入れてしまおうというのが僕が提唱する新時代の プログラミングパラダイム、アクター指向です
- 426 名前:デフォルトの名無しさん [2020/06/27(土) 22:30:26.61 ID:kHv6hhb8.net]
- >>411
壊れるに決まってるだろ、いい加減なこと言うなハゲ
- 427 名前:デフォルトの名無しさん [2020/06/27(土) 22:30:40.41 ID:kHv6hhb8.net]
- privateなめんなよ
- 428 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:30:57.83 ID:gS37C1rZ.net]
- >>413
なんだよw根拠言えないのかよw
- 429 名前:デフォルトの名無しさん [2020/06/27(土) 22:31:24.07 ID:kHv6hhb8.net]
- >>415
お前が根拠言えよ
- 430 名前:デフォルトの名無しさん [2020/06/27(土) 22:31:41.00 ID:kHv6hhb8.net]
- 壊れないことを証明してみせろ
- 431 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:32:50.72 ID:gS37C1rZ.net]
- 壊れる要因がないので壊れない
- 432 名前:デフォルトの名無しさん [2020/06/27(土) 22:33:18.25 ID:kHv6hhb8.net]
- 早くしろよおら、全部publicにしてプログラム書いてみろよ、ぶち、壊してやるから
- 433 名前:デフォルトの名無しさん [2020/06/27(土) 22:36:21.73 ID:kHv6hhb8.net]
- アクセス修飾子はテストのために変えるものじゃない
そこに現行のオブジェクト指向の限界がある そこでオブジェクト内にテストまで用意しましょうというのが新時代のアクター指向
- 434 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:37:15.69 ID:paNjyoZf.net]
- 現状のオブジェクト指向言語がウンコってことでいいよね
- 435 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:38:06.59 ID:gS37C1rZ.net]
- > アクセス修飾子はテストのために変えるものじゃない
当たり前だろうw テストというのは外部からインターフェースの仕様が明確に決まってるからこそできること 外部からのインターフェースの仕様が明確に決まったなら それはpublicにしてよい
- 436 名前:デフォルトの名無しさん [2020/06/27(土) 22:38:47.14 ID:kHv6hhb8.net]
- >>422
そんなの当たり前だろ
- 437 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:39:05.28 ID:gS37C1rZ.net]
- だから当たり前の話をしてる
- 438 名前:デフォルトの名無しさん [2020/06/27(土) 22:40:35.80 ID:kHv6hhb8.net]
- >>421
はい、そう言わざる得ないのが現状です 言語が悪いんじゃないプログラミングパラダイムにまだ進化の余地があると 前向きに捉えるのが良いと僕は思います アクター指向言語がこれから出てくることを祈ります
- 439 名前:デフォルトの名無しさん [2020/06/27(土) 22:40:49.92 ID:kHv6hhb8.net]
- >>424
だから当たり前だろ
- 440 名前:デフォルトの名無しさん [2020/06/27(土) 22:41:07.23 ID:kHv6hhb8.net]
- あ・た・り・ま・え
- 441 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:41:23.91 ID:5gWgsM/a.net]
- え?privateなメソッドをテストしないって正気?
単に現状のオブジェクト指向言語と開発環境がテストのサポートできてないだけだろ
- 442 名前:デフォルトの名無しさん [2020/06/27(土) 22:42:31.56 ID:kHv6hhb8.net]
- >>428
ねー意味分かんないよねー、ドン引きだよねー
- 443 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:43:30.93 ID:UrcM2fcl.net]
- >>399
リフレクション使ってでもやれって言うときはやりますけど? そこら辺はルール作ってるはずで設計以前で明言されるべき private要素に外部からアクセスしまくるようなことを許す設計やルールはどうかと思いますけどね というか他の読み手が安心感を得るためでもある気がしますね 全部publicなプロダクトがあったとしてそれに新しいクラスやらを追加しろって言われたら神経質にならなければいけないw 逆にアクセス修飾子なしの言語はルールだけでやってるよね、あれ怖いわ まあだいたいが単純なプロジェクトしかなさそうな言語だけど。。
- 444 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:43:37.12 ID:gS37C1rZ.net]
- privateなメソッドをテストしないんじゃなくて
仕様が明確に固まってないからテストしてもメンテナンスのコストが増えるだけ そういうのはprivateにしてpublicメソッド経由でテストする それがやりにくいーっていうなら、そのprivateなメソッドの 仕様を明確に決めればpublicにすることができる ようするに今やるか後回しにするかの問題でしか無い
- 445 名前:デフォルトの名無しさん [2020/06/27(土) 22:44:43.36 ID:kHv6hhb8.net]
- >>431
仕様が固まってないからprivateにするんじゃねーんだよ おめーさてはプログラミングエアプか?
- 446 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:45:21.19 ID:qZEydISP.net]
- >>431
いやいやテストプロジェクトではprivateにアクセスできるってだけでいいでしょ
- 447 名前:デフォルトの名無しさん [2020/06/27(土) 22:45:36.87 ID:kHv6hhb8.net]
- >>430
じゃあprivateでもテストすればいんじゃないでしょうか
- 448 名前:デフォルトの名無しさん [2020/06/27(土) 22:52:10.82 ID:kHv6hhb8.net]
- テストオブジェクトから呼び出すためだけに
オブジェクト内部の処理をpublicにするのはありえない publicメソッド経由で呼び出すのは粒度が大きすぎて話にならない リフレクション使えばテストできるんだからそういう機能を持ったテストライブラリを使うべき
- 449 名前:デフォルトの名無しさん [2020/06/27(土) 22:53:18.84 ID:e0+LQFD/.net]
- インターフェース仕様にまだ決まってないだとか
確定なんて明確な区切りなんてものは 現実にはない。 まだ確定してなくても仮のものを仮定して 実装はできる。 確定した後にインターフェースを変えたくなったり ある日根底から覆ったりする。 privateで制限した内容は顧客要求より強い効力を持つの? だったら凄く有効だよな でもそうじゃないだろ
- 450 名前:デフォルトの名無しさん [2020/06/27(土) 22:55:59.77 ID:kHv6hhb8.net]
- リフレクションはオブジェクト指向にとっては黒魔術でしかないので正当なやり方ではない
この問題の本質はオブジェクト指向にテストの概念がないことにある オブジェクト指向は規模の大きなシステムの品質を担保するために作られたわけだが 現代ではそれにテストも入れるべきなんだよ データ、メソッド、テストこの3つを内包するオブジェクトを作ることこそが真のオブジェクト指向
- 451 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:56:59.64 ID:gS37C1rZ.net]
- >>432
じゃあ何のためにprivateにするんだよ? テスト(外部)からアクセスするんだろ
- 452 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:57:06.02 ID:UrcM2fcl.net]
- >>434
メソッドレベルのテストをリフレクション使ってまでやれって言われたことないですけどねw inoutがテストしなければならないほど複雑になる1つのメソッドを書くことがおかしいし、 粒度が大きすぎてって、それはinoutを整理しきれてない設計がおかしいのでは? 何でも値が入ってきます、全部1つのメソッドで作ってテストしてください、なんて無茶ぶりだとおもいますねw
- 453 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:57:18.00 ID:gS37C1rZ.net]
- >>436
設計したこと無いの?
- 454 名前:デフォルトの名無しさん [2020/06/27(土) 22:57:58.35 ID:kHv6hhb8.net]
- >>436
privateはプログラムの話だから客は関係ないだろ 客がメソッドコールするわけじゃないからな
- 455 名前:デフォルトの名無しさん [2020/06/27(土) 22:58:22.25 ID:e0+LQFD/.net]
- >>440
あるよ、そしてそれが何度も顧客によって 覆ったこともな。
- 456 名前:デフォルトの名無しさん [2020/06/27(土) 23:00:01.68 ID:kHv6hhb8.net]
- >>438
内部からのみ処理したいものだからprivateにするんだよ テストはしたいけどテストのためだけに他のオブジェクトからも 呼び出せるようにはしたくないよねって話をしてるんだ僕は
- 457 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:00:03.74 ID:8YCrt6Qf.net]
- privateをテストするしないっていう想定自体が理解できない
privateメソッドなら当然それを呼び出しているpublicなメソッドがあるはずで そのpublicメソッドのテストに当然privateなメソッドのテストも含まれるはず よっぽどprivateメソッドで複雑なことしていない限りそのテストで十
|

|