[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 08/04 02:09 / Filesize : 316 KB / Number-of Response : 1037
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

カプセル化の有害性、オブジェクト指向は愚かな考え



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)

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メソッドで複雑なことしていない限りそのテストで十

458 名前:分だろうし
それでテストしきれないほど複雑なら別のモジュールに定義し直した方がいいだろう
[]
[ここ壊れてます]

459 名前:デフォルトの名無しさん [2020/06/27(土) 23:02:02.14 ID:kHv6hhb8.net]
>>444
それなりに複雑でメソッドを一つずつテストしたいけど
テストのためにオブジェクト分けるなんてイカれてると思うの
だってオブジェクトがテストのためにあるわけじゃないから
テストがオブジェクトのためにあるべきで、そこでですよ
オブジェクト内にテストを内包するのが正しいオブジェクト指向と結論するわけです

460 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:02:14.45 ID:gS37C1rZ.net]
>>442
顧客によって覆ることが何の関係があるの?

461 名前:デフォルトの名無しさん [2020/06/27(土) 23:02:29.65 ID:kHv6hhb8.net]
仕様が覆るのはあたりまえじゃん
それとアクセス修飾子の話は違うわ

462 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:02:36.66 ID:gS37C1rZ.net]
>>443
> 内部からのみ処理したいものだからprivateにするんだよ

テスト(外部)から処理したいんだろ
何矛盾したこと言ってるんだよw

463 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:03:54.57 ID:gS37C1rZ.net]
>>445
> それなりに複雑でメソッドを一つずつテストしたいけど
> テストのためにオブジェクト分けるなんてイカれてると思うの

複雑なメソッドは小さくしてください
設計がそもそも間違っています

テストのために小さく分けるのではなく
そもそも複雑なのが問題なのです。
問題を解決すればテスト可能になります。

464 名前:デフォルトの名無しさん [2020/06/27(土) 23:03:58.42 ID:kHv6hhb8.net]
>>448
だから、そこにジレンマがあるよねって話を最初からしてるつもりっす

465 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:04:46.01 ID:/AdLJL3G.net]
いや、この問題は言語と開発環境の問題だろ
概念は関係ないよ
visualstudioができちゃえば
できますよ
で終わりな話



466 名前:デフォルトの名無しさん [2020/06/27(土) 23:05:10.21 ID:kHv6hhb8.net]
>>449
僕は複雑なメソッドを大きく作ってるとは言ってないので
小さくしてくださいというアドバイスをいただいても困惑するばかりです

467 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:05:23.02 ID:UrcM2fcl.net]
逆に聞きたいけどpythonとかアクセス修飾子ない言語で、大規模プロジェクトがあったら、
ルール以外でアクセスはどう統制とってるの?

そういう言語の経験はWebくらいしか知らないから、全体何百万行(ステップ数でも人月でもいい)くらいのコードでこうしてた(る)ってのあったら教えて欲しい

468 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:06:53.54 ID:gS37C1rZ.net]
>>452
なぜできないんですか?

469 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:07:46.64 ID:XQLOkAsO.net]
>>454
あいつらサボってるからだろ

470 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:07:46.82 ID:gS37C1rZ.net]
誰でもできることができないなんて、能力がないなぁ

471 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:10:28.90 ID:npRplKHX.net]
お前らほんとプログラムのことしか知らないのな
品質を改善するときには品質を測るな これがテストの鉄則
タグチメソッドの入門でもよめ

472 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:12:05.09 ID:gS37C1rZ.net]
1.モノを作る前に品質を創れ
2.品質工学は統計ではない
3.科学的思考ではモノは出来ない
4.市場品質はすべて設計できまる
5.完全な設計は試験や検査は不要
6.品質評価はn=1でよい
7.品質を改善するときには品質を測るな
8.評価はあるべき姿を定義して、安定性はSN比で行う
9.直交表で設計の再現性をチェックする(パラメータ設計)
10. システムは複雑でなければ、改善はできない

473 名前:デフォルトの名無しさん [2020/06/27(土) 23:12:06.00 ID:kHv6hhb8.net]
>>457
ありがとー!タグっちゃん!

474 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:13:46.29 ID:gS37C1rZ.net]
どこから品質の話が出てきたのか知らんが、
品質とテストの話は

> 5.完全な設計は試験や検査は不要

これですかね?

475 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:19:08.91 ID:gS37C1rZ.net]
>>458はいくつか日本語の文章に問題があるな

1.モノを作る前に品質を創れ
2.品質工学は統計ではない        ×「品質工学は○○である」と言おう
3.科学的思考ではモノは出来ない     ×「○○的思考でモノは出来る」と言おう
4.市場品質はすべて設計できまる
5.完全な設計は試験や検査は不要     ×「不完全な設計は試験や検査が必要」と言おう
6.品質評価はn=1でよい
7.品質を改善するときには品質を測るな   ×「品質を改善するときには○○をしろ」と言おう
8.評価はあるべき姿を定義して、安定性はSN比で行う
9.直交表で設計の再現性をチェックする(パラメータ設計)
10. システムは複雑でなければ、改善はできない  ×「システムは複雑なら、改善ができる」と言おう

こう偉そうなことを言ってるのに、じゃあどうすればいいかを
相手に考えさせるのって、どうなんでしょうかね(苦笑)



476 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:24:56.40 ID:gS37C1rZ.net]
「品質が欲しければ、品質を測るな!」は
「品質が欲しければ、機能を測って改善しろ!」という意味みたいですな

つまりオブジェクトの品質を上げたければ
テストできるように機能を改善しろということですな
privateメソッドであれば、

477 名前:インターフェースを明確にして
機能に昇格させればpublicになるわけです。
[]
[ここ壊れてます]






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<316KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef