[表示 : 全て 最新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)

321 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 14:26:38.74 ID:Z/pHF8i9.net]
>>282
一般的な業務システムはデータベースに出し入れするだけだから深い階層構造にはならない。
データベースに出し入れする際の受け皿となる構造体が1層あるくらいだろ。

そもそもRDBは階層構造そのままぶち込めないし。

322 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 14:34:40.99 ID:Z/pHF8i9.net]
>>307
最近流行りのPythonで作られたシステムを見て回れば?
カプセル化は言語仕様で禁止されてるから強制的に>>1の言うとおりに作るしかない。

323 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 14:37:58 ID:Z/pHF8i9.net]
>>307
というか最初の開発で問題になるようなことではないからソースコードでは比較できないでしょ。
機能追加・改修案件で発生する問題の話だし。

324 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 14:50:29.02 ID:1p1mL4Jd.net]
初めに赤字が出たら続きはねーよw

325 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:01:24.90 ID:Z/pHF8i9.net]
これオブジェクト指向の善し悪しじゃないよね。
改修発生時に雲の上で決まった無茶な追加仕様にどれだけ耐えられる構造にできるかという話だ。

ただオブジェクト指向は昔ながらの教科書どおりにやると耐えられない構造になりがち。
もちろんオブジェクト指向でなくても発生する。
C言語でも発生する。

そうならないようコーディングの約束事を決めよう。
そうなってないかコードレビューはしっかりやろう。

326 名前:デフォルトの名無しさん [2020/06/27(土) 15:03:08.36 ID:kHv6hhb8.net]
>>311
へーPythonにはアクセス修飾子がないんだ知らなかった
命名規則でこれはprivateなものだよと示すわけね
JavaScriptみたい

327 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:04:29.05 ID:qJyof1ZF.net]
>>311
>カプセル化は言語仕様で禁止されてるから

ソースは?

328 名前:デフォルトの名無しさん [2020/06/27(土) 15:09:38.92 ID:kHv6hhb8.net]
Pythonにアクセス修飾子がないことはググればわかるじゃん

329 名前:デフォルトの名無しさん [2020/06/27(土) 15:09:51.10 ID:kHv6hhb8.net]
ソースは僕だ!



330 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:10:07.03 ID:Z/pHF8i9.net]
>>316
https://www.python.org/downloads/source/

331 名前:デフォルトの名無しさん [2020/06/27(土) 15:10:51.38 ID:kHv6hhb8.net]
マヨネーズの君とソースの僕

332 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:12:52.88 ID:qJyof1ZF.net]
>>310
構造体が別の構造体を参照してる

333 名前:データ構造は階層構造とは呼ばないということかな?

階層構造の深さがカプセル化やオブジェクト指向と何の関係があるの?
[]
[ここ壊れてます]

334 名前:デフォルトの名無しさん [2020/06/27(土) 15:13:38.77 ID:kHv6hhb8.net]
そう言えば日本の業務形態には貧血ドメインの方がよく適合するなんて話があったなあ
貧血って言うと悪い印象があるからシンドメインとかスリムドメインに言い換えて
スリムドメインの方が優れてるんだって風潮がそろそろ出てきても良いと思う

335 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:14:18.21 ID:qJyof1ZF.net]
>>317
“アクセス修飾子がない” == “カプセル化が言語仕様で禁止されてる”
=> False

336 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:15:51.79 ID:Z/pHF8i9.net]
>>321
それただのポインタだろ

337 名前:デフォルトの名無しさん [2020/06/27(土) 15:18:13.32 ID:e0+LQFD/.net]
そもそも、一昔前ならソフトウェアは
製品化して値段を付けて売るって考えがあったから
保守や仕様変更の影響範囲について関心が高かった。
だからオブジェクト指向は必要だったかもしれない

だが現在ではソフトウェアは基本無料が当たり前だし
プロジェクト依頼元の依頼を受けてオーダーメイドで
システムを作るから依頼元だけが金を払ってくれるの
であって
あとはスマホアプリを無料配布して
そのアプリで課金してもらって金を稼ぐみたいな
稼ぎ方だから、ソフトウェア自体に売却する価値はない。
売却する資産価値がないからオブジェクト指向で
保守する価値がない、使い捨てにすればいい。

実際、スマホアプリとかのほとんどが軽微なバグ
とか沢山潜んだままリリースされていて、ずっと
放置されてたりするじゃん。

338 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:19:44.46 ID:Z/pHF8i9.net]
>>321
ポインタは横の繋がり
上下関係ではない

深い階層化というのは、雲の上で決まった仕様に底辺開発者は意見できないということ。

深い階層化というのは、底辺開発者が受けてるパワハラなど雲の上は知らないということ。

339 名前:デフォルトの名無しさん [2020/06/27(土) 15:20:21.12 ID:kHv6hhb8.net]
>>323
では君と僕のカプセル化の定義が異なるだけじゃん
君のカプセル化の定義で僕が言ってることを解釈するからFalseになる
僕が言ってることは僕の定義で解釈したらTrueになる
アクセス修飾子が存在することをカプセル化可能と定義します
よろしくおねがいします



340 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:23:36.87 ID:qJyof1ZF.net]
>>327
“カプセル化可能” == “言語仕様でカプセル化を禁止している”
#=> False

341 名前:デフォルトの名無しさん [2020/06/27(土) 15:25:23.02 ID:kHv6hhb8.net]
>>328
だからさー君のカプセル化の定義を知らないしそれを言ってもらわないことには
真偽値だけ言われても僕どうしたらいいかわからないよーえーん(T_T)

342 名前:デフォルトの名無しさん [2020/06/27(土) 15:26:25.05 ID:kHv6hhb8.net]
カプセル化とはアクセス修飾子でprivateにできることを言います

343 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:28:46.34 ID:UrcM2fcl.net]
本当に?

344 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:31:32.87 ID:qJyof1ZF.net]
>>326

>>310
>一般的な業務システムはデータベースに出し入れするだけだから深い階層構造にはならない。

このレスに書いてる”階層構造”の定義を聞いてるに
全く違う”階層化”の話を出されても困る
特に考えてなかったんなら別にそれで構わない

345 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:32:44.69 ID:qJyof1ZF.net]
>>328
バグってた

“カプセル化不可能” == “言語仕様でカプセル化を禁止している”
#=> False

346 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:40:51.44 ID:Z/pHF8i9.net]
>>332
データベースで深い階層化が起こるとすれば、
・データベースの出し入れはストアドプロシージャ経由のみ
・誰かが作ったストアドプロシージャを叩くライブラリ
・末端開発者が見えるのはライブラリのみ

という状況

347 名前:デフォルトの名無しさん [2020/06/27(土) 15:45:38.60 ID:kHv6hhb8.net]
>>331
ホントっす

348 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:46:26.65 ID:ut+wnsgT.net]
ちがうよ

349 名前:デフォルトの名無しさん [2020/06/27(土) 15:46:32.04 ID:kHv6hhb8.net]
>>333
なんでFalseになるか説明できる?
できないんだったら君は間違ってる



350 名前:デフォルトの名無しさん [2020/06/27(土) 15:47:10.15 ID:kHv6hhb8.net]
>>336
何が違うんですか!?なんでですか?説明してください!

351 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:47:49 ID:UrcM2fcl.net]
内包してない?

352 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:48:03 ID:ut+wnsgT.net]
>>338
定義が違うから説明しろと言われても困る

353 名前:デフォルトの名無しさん [2020/06/27(土) 15:48:32 ID:kHv6hhb8.net]
>>340
説明くらいできるだろハゲ、横着すんな

354 名前:デフォルトの名無しさん [2020/06/27(土) 15:48:33 ID:PPBVSkWl.net]
ぬるぽ

355 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:52:34 ID:ut+wnsgT.net]
>>341
>>294

356 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 15:53:17 ID:ut+wnsgT.net]
>>341
安価ミス
>>297

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です






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

前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