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

2 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 23:48:12.14 ID:l/2SQUll.net]
大雑把にいうと、教科書の上では素晴らしく、最初は良くても、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。医学的にいえば「手術ができない存在」であるといえる。

3 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 23:48:21.02 ID:l/2SQUll.net]
オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。

4 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 23:49:03.96 ID:l/2SQUll.net]
実例

XNA(M

5 名前:onoGame)では標準で3Dモデルを手軽に扱えるModelクラスが用意されている。 1行で読み込み、1行で描画できる素晴らしいものだ。

ただしこのModelクラスを使うと頂点データは遮蔽されておりアクセスできない。 物理演算エンジンに食わせるのにどうしても頂点データが必要なのにだ。

世界中の誰もが同じ問題で悩んでいるようでstackoverflowに回避策が書いてあった。頂点データをGPUに送信した直後にGetData関数でそのまま返してもらうトリッキーなコードでめでたく回避できた。

しかし、時は流れこの方法では動かない環境が登場した。iOSやAndroidだ。こいつらが採用するOpenGL ESはGPUとの通信が一方通行だ。そこで事前に3Dモデルから頂点データを抜き出し別ファイルに保存しておくという一段とトリッキーな方法で回避する。みごと1モデルのファイルが2個になりました。

さらに時は流れた。あるとき謎の不具合が発生。連日連夜のデバッグ作業。原因は片方のファイルの更新を忘れていただけでした。

カプセル化は恐ろしいね!!
[]
[ここ壊れてます]

6 名前:デフォルトの名無しさん mailto:sage [2020/06/18(Thu) 23:50:00 ID:RTNtaITn.net]
仕様変更
それは雲の上で決まったことなので底辺社畜のITドカタにはどうすることもできない。
意見を言おうにも雲の上にいる奴らの顔すら知らない。
それこそが階層化で起きることだ。

オブジェクト指向云々ではない。

7 名前:デフォルトの名無しさん mailto:sage [2020/06/18(Thu) 23:50:50 ID:vbQxaIet.net]
シンプルなほうが解読しやすいよね
散逸して現物しか残ってない場合とか特に

8 名前:デフォルトの名無しさん mailto:sage [2020/06/18(Thu) 23:51:52 ID:aKnQJHa5.net]
副作用の起きない処理はpublicでも問題ないだろうな
問題が起きるとすれば運用側の問題

9 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 23:53:22.90 ID:evvN6o0n.net]
データベースに出し入れするだけの業務システムなんかは問題ない。
データベース上のデータなんてグローバル変数となんら変わらない。
クラスは構造体としてしか使わないから深い階層化も起きないし。

10 名前:デフォルトの名無しさん [2020/06/18(木) 23:54:18.03 ID:evvN6o0n.net]
>>2
C++が流行りだしたころに、これ言ったら変な目で見られたわ。
設計能力と未来を見通す能力がある人限定なんだよ。
大人数だと低い方に合わされるから、大人数プロジェクトには不向き。優秀な少数精鋭プロジェクトなら良いんだけどね。



11 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 23:54:53.81 ID:evvN6o0n.net]
日本の場合はカプセル化されてようがいまいが基底クラスなんて弄ったら再テストしなきゃいけないから
同じ機能を持ったクラスを作るので意味が無い

12 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 23:55:28.61 ID:/lqvqqb1.net]
そもそもアランケイの考えたものと今のオブジェクト指向が違うっていうね
オブジェクトなんて名前を使ったせいでオブジェクトが重要だと勘違いしてるし全員
よって失敗
ただ発展には貢献したそれだけ

13 名前:デフォルトの名無しさん [2020/06/18(木) 23:56:10.69 ID:TSP7N+np.net]
昔作ったクラスを継承したり再利用したりなんて殆どない

データと関数数個だけで済むものを
無駄にクラス化して
ヘッダと実装にわけて無駄にコード追いにくくするのはあかん

14 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 23:57:06.18 ID:MtNDH7Ee.net]
>>4
この実例は良くないよね
Modelクラスが何かにラップされてるならその元を探して改良すべきなのに
それやらないでトリッキーな方法で回避するから余計面倒になってる

15 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 23:58:55.32 ID:YGaYv0dq.net]
>>13
その相手が壮大なオープンソースのフレームワークで
改変した修正パッチが開発チームから拒絶されたら死ぬ。

フォークしても誰がメンテナンスするんだよ

16 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 23:59:22.80 ID:bx1rTxjv.net]
内部に状態を持つな

17 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 23:59:49.19 ID:q6R3f09j.net]
オブジェクト指向で設計やるとしばしば手段が目的化してしまって不必要に複雑化する

18 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:00:25.84 ID:/31ICsy6.net]
privateの考え方自体は悪くないんだが、
privateの必要性を理解できる人間はそもそもprivateを必要としないんだよ
そしてprivateが必要な人間はprivateの本質を理解せずにおかしな使い方をしてしまう
こういうジレンマは何にでもある

19 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:01:18.25 ID:+IhkHRGD.net]
カプセル化は机上の空論ってのは頭いい人しかいないチームでしか通用しない
日本のIT土方みたいに想像を絶する馬鹿が無限に湧いてくる現場ではコードを守るために不可欠

20 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:01:50.77 ID:2JP1keJd.net]
無駄に継承しまくるのが害悪なだけ



21 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:02:19.49 ID:wxIbXk9M.net]
あとになって公開できないなら隠蔽するなってことだろ
ずっと保守し続けて、公開してくれって言われたらすぐ設計変更して公開できるなら別にかまわん
でもずっと保守し続けるかどうかは予算や人事で決まるんだから、それらに関われないと責任持てんわな

22 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:03:06.93 ID:BXl5HLPF.net]
想像を絶する馬鹿が想像を絶するカプセル化をしてしまうんだよなあ……

23 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:04:23.05 ID:mHF7j7mX.net]
特定の事例はオブジェクト指向とかクラスが悪いわけじゃなくて
その設計が失敗してるだけですね

24 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:05:13.42 ID:bOeh/ohg.net]
>>4
OpenGL ESはファイルからテクスチャ1枚読み込むのにもアホみたいに面倒臭いからなw
OpenGLの手法すら使えないとか何故そこまで削った…って感じだし

25 名前:デフォルトの名無しさん [2020/06/19(金) 00:06:06.77 ID:wn9UnRAm.net]
OOPにすらついていけない本物のバカには無理ってだけ
まあOOPが無理ならどんなプログラミングも無理だけど

26 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:06:46.04 ID:OaIc6ajp.net]
路線バス、タクシー、レンタカー、自家用車の4つを使ってオブジェクト指向を説明して欲しい。

難しすぎて全然頭に入らない。

27 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:07:21.87 ID:c3NGwjmZ.net]
時代はDDDって聞いたんだけど

28 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:07:51.60 ID:cOWnS532.net]
余計な例えは無意味
そもそも変数とか関数とか引数とか理解しとんのか

29 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:08:22.59 ID:Vry7Dmyh.net]
じなあガンダムで例えてくれ

30 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:08:50.90 ID:ih59 ]
[ここ壊れてます]



31 名前:xFoN.net mailto: オブジェクト思考は糞
関数の引数と戻り値だけ信用すれば良い
オブジェクトに状態持たせるフィールドなんて可読性落ちるだけなのに理解できない一周も二週も遅れてるやつが声高に叫んでるのは笑えるw
[]
[ここ壊れてます]

32 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:09:59.54 ID:DxHcuyZI.net]
>>4
頂点データは常に見られるようじゃないとダメだろ…
レンダリングエンジンとの結びつきどうなってるんだ?

33 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:11:36.72 ID:A+kahko2.net]
>>30

>>252
ざっくり見た感じVRAMに送り込んでオリジナルは破棄だな。
もともとXBOX360のフレームワークだからリソースがいまほど潤沢じゃない前提の設計だな。

それがOpenGL ESの「VRAMが書込専用」という追加仕様の襲来で火を吹いた感じだな
https://github.com/MonoGame/MonoGame/blob/develop/MonoGame.Framework/Platform/Graphics/Vertices/VertexBuffer.DirectX.cs
https://github.com/MonoGame/MonoGame/blob/develop/MonoGame.Framework/Platform/Graphics/Vertices/VertexBuffer.OpenGL.cs

34 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:12:19 ID:Z/R3v37q.net]
>>31
そんな仕様変更が入る方がおかしいんじゃないかな

35 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:12:37 ID:CAQAyB0l.net]
>>32
そのくらいの仕様変更はザラにある

36 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:12:54 ID:Vvw9/CQL.net]
おっそろしーなぁ

37 名前:デフォルトの名無しさん [2020/06/19(金) 00:13:25 ID:+NZQ8ymG.net]
オブジェクト思考って何?
誰か説明して

38 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:13:53.03 ID:0YXkLCwz.net]
カプセル化は新人や増援部隊に変な事させない為の仕組み
開発者全員が高度なプロフェッショナルならただの足枷でしかない

39 名前:デフォルトの名無しさん [2020/06/19(金) 00:14:23.01 ID:sx6tbUfu.net]
オブジェクト原理主義者のコードを引き継ぐ事になった時の絶望感は異常

40 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:15:15.75 ID:yjfNCK7+.net]
iPhoneアプリ開発に必須のobjective-cやswiftもカプセル化はできない。
人工知能で大流行のpythonもカプセル化はできないようになってる。

これらはアクセス非推奨だがアクセス自体はできる



41 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:15:51.85 ID:a/1dBbgF.net]
「カプセル化は悪」「カプセル化はオブジェクト指向ではない」というのがやっと広まりだした。

42 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:16:10.62 ID:GyiKM2YL.net]
仕様変更の恐ろしさは異常

43 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:16:29.89 ID:sB9nUpkw.net]
未来予測できるが勝負所

44 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:17:11.14 ID:Xum0r1kt.net]
>>5
深い階層化って利点あるの?

45 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:17:23.63 ID:HW2oJRWs.net]
怖いですねえ

46 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:20:35.02 ID:f1TZFQAl.net]
カプセル化は隠蔽体質ってことですね

47 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:30:03 ID:EiviKE7C.net]
>>4
そもそも設計が間違ってるのをオブジェクト指向のせいにしてるんじゃねーよハゲ

48 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:49:19.41 ID:8/oqYbS2.net]
>>45
XNA作ったマイクロソフトの超エリートたちですら設計ミスをするくらいオブジェクト指向は難しい。

49 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 01:06:57.53 ID:brGXdq3V.net]
ECS

50 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 01:27:35.28 ID:gQU/M+Sr.net]
> オブジェクト指向の発案者であるアラン・ケイもコーディング規約
> (頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、
> アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。

つまり
1. privateという概念(アンダースコアという概念)自体はOK
2. ただしprivateでも外部からアクセスできるようにすること
という話



51 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 03:21:23.63 ID:sPM5NjRd.net]
経験的に言えば、ライブラリや部品的なクラスでは、カプセル化はかなり有効で、
安全になる。
ところがアプリ自体の中にクラスの場合、隠蔽しても余り意味が無い事が
分かって来た。
ファイルツリービューの中のデータを隠して、メインウィンドウのクラスからいじれないように
しても、アプリの場合にははっきり言って意味が無い。

52 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 04:46:03 ID:8+I0eawj.net]
>>49
そのアプリを複数人でいじってるんなら、ライブラリやらの恩恵と同じ効果があるんじゃね?

カプセル化の是非は、グローバル変数の弊害の話と本質は同じだよね
影響範囲を狭くした方がミスは防げるが、柔軟性は失われる

53 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 06:36:33.75 ID:wpvtDg0l.net]
>>48
ちょっと違うな
ST80でもOWでもVWでも共通だが
privateはあくまでもプロトコルの一つという設計だから外部からアクセスできるように・・という考え方ではないよ
具体的な扱われ方としてはインスタンス専用のローカルメソッドのような使われ方をする

なおprivateプロトコルは全てではないが
他のオブジェクトからコールするとデバッガに落ちるように仕組んでたりする
(外部からは使わせないよってこと)

54 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 07:02:17.44 ID:wpvtDg0l.net]
>>49
データを誰が保持するのかって問題はMVCの当初から大問題にはなってたからね
単純にModelが必ず持つという形にすると指摘した問題が必ず発生するから

経緯的にPluggableMVCへと変遷しどこからでもupdateプロトコルを受け付けることができるようになった
データはMVCのどれも保持しなくなり、ひとまずの決着がついたが
この形式であっても誰がどのようにupdateをかけているのか逐一コーディングしなければならない問題が残ってた

そこで現在ではデータを保持するAspectAdaptor系は
いわゆるアクセサを書く必要もなくなり通知を受け取るだけで動作するようになっている
(updateのためにアクセサを呼ぶなどということはしない)

55 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 07:18:54.82 ID:gQU/M+Sr.net]
>>51
> 他のオブジェクトからコールするとデバッガに落ちるように仕組んでたりする

殆どの言語はprivateにアクセスできる

56 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 07:22:21.49 ID:XaRstyom.net]
OOは業務システム向き
組み込みだと細分化し過ぎるんじゃね?

57 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 09:36:31.93 ID:wpvtDg0l.net]
>>53
目的が違うので
private配下のメソッドは外部から呼ばれることを意図しない(ことになっている)
のとbehaviorにさえアクセスを許さなかったりする

ただこれは言語仕様としてコントロールしているわけではないので
あくまでも慣例として扱われてる
適当なクラスを作ってprivateプロトコルに適当なメソッドを組めば好きに外部から呼び出すことは出来る

そうは言っても慣例破ってるコードはすぐ見つかってしまうのでまあよろしくないことになる

58 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 11:11:36.05 ID:t8sp3Lp3.net]
>>11
アランケイのは、完璧なものから取り除いていくような感じだったな

59 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 11:46:38 ID:gQU/M+Sr.net]
>>55
private配下のメソッドは外部から呼ばれることを意図しない(ことになっている)
頭文字にアンダースコアを付けるなどの命名規則で縛る程度のも、外部から呼ばれることを意図しない(ことになっている)

60 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 11:54:17.24 ID:I4TvFtlH.net]
>>54
業務システムだとDBいじくるだけだから深い階層構造に関わることはまずないだろ。
DBというグローバル変数をクラスという名の構造体にコピーして、編集して、書き戻すという単純作業の繰り返し。



61 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 12:44:14.84 ID:dtaC8DdL.net]
隠蔽って言うからおかしくなる
privateは一貫性を守るために変更可能性のスコープをオブジェクト内部に限定するためのものであって、内部状態の秘匿が目的じゃない
というかオブジェクトの内部状態が外から分からないようなものはテスト出来ないでしょ
ダメだろそんなクラス

62 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 16:09:36.39 ID:sPM5NjRd.net]
>>50
>そのアプリを複数人でいじってるんなら、ライブラリやらの恩恵と同じ効果があるんじゃね?
個々のクラスをじっくり丁寧に作って、データを変更する専用のメソッドをきっちり
作り上げれば安全性は確かに高まる。
これは、人数の多いプロジェクトなら可能だと思われる。
ただ、個人製作のアプリだと、そこまでクラスを作りこむのは時間が掛かりすぎてとても
効率が悪くなる。
結局、個人製作レベルだと、ファイルツリーニューの中のデータを変更する際にやってはいけないことなどの注意事項をどこかのテキストファイルなどに書いておいて
データはpublicにしておいて、それに気をつけながら、アプリの他のクラスからでも普通に書き込みアクセスするように
した方が開発時間は少なくて済むようだ。

63 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 16:12:27.76 ID:sPM5NjRd.net]
>>59
その気持ちも分かる。
しかし、その一方で、例えば fopen()のようなライブラリ関数を使う際、
FILE構造体の中身までしっかり公開されてなくても、fopenの使い方が
しっかり説明されいればそれで十分であり、逆にFILE構造体の中を勝手に見て、
それを前提にプログラムしすぎることは、FILE構造体の中身が変更になった
場合に問題となる。

64 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 17:22:18.89 ID:gQU/M+Sr.net]
>>60
> 結局、個人製作レベルだと、ファイルツリーニューの中のデータを変更する際にやってはいけないことなどの注意事項をどこかのテキストファイルなどに書いておいて

それをソースコードの中に書くんでしょ? privateって

65 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 17:31:41 ID:I4TvFtlH.net]
結論:privateにしたら、必ずgetterを用意しておきましょう。

66 名前:デフォルトの名無しさん [2020/06/19(金) 17:34:28 ID:sPM5NjRd.net]
>>62
昔から言われていることなんだけど、ソースコード以外の場所にちゃんと
フローチャートなり、データの構造や関数の関係図、何らかの図など
プログラム中に書きにくい注意事項をどこかに予め書いておくと、
プログラムにとても役立つんだ。

67 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 22:59:31 ID:wpvtDg0l.net]
>>60
そこは考え方次第だからねー
asyncでいいならファイルツリーはすべてNodeクラス配下で汎用的に扱う方が楽なので
俺ならそうする
コードも少なくて済むし扱いやすい
常にsyncって話になるとfsevent見て反映させる

カプセル化のメリットは全体像を知らなくても扱えるように理解して努力していれば
結果的にコストが下がることにあるけれど
オブジェクト扱ってるのに中身は関数で組んでいる人が混じると割と悲惨なことに(なった)

68 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 23:03:14.16 ID:wpvtDg0l.net]
>>64
それよりもテストコードが含まれてないソースは信用できないね個人的に
コードが更新される時ドキュメントも更新されるとは限らないし
ドキュメントには本当に必要な情報がなかったりもする・・

69 名前:デフォルトの名無しさん [2020/06/20(土) 18:55:53 ID:EGdSCTAj.net]
こっちでも始まったのか

70 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 19:10:33 ID:Zs4RBEp5.net]
>>66
でもチェックしにくいとこってデバイス絡みや使ってるUIのライブラリの変な仕様のとこだろ
テストコードなんて動くの?



71 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 19:23:07.65 ID:H+D2eLk6.net]
>>68
デバイスを使う「ソフトウェアコード」のテストをするんだから、
デバイスのテストをしても意味がないぞ

「デバイス」のテストなのか、デバイスを使う「ソフトウェア」のテストなのか
どちらを対象としたテストなのかをはっきりさせよう

デバイスのテストはデバイスのテストで別にやる
両方を同時にテストしようとするな

72 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 19:47:22 ID:Zs4RBEp5.net]
>>69
でも全部ひっくるめて正常に動いて欲しいんだろ?
どう組んだら正しいのか誰もわからないものでプログラマをぶん殴る口実がほしいと

73 名前:デフォルトの名無しさん [2020/06/21(日) 21:47:24.01 ID:yZ1Fm+rk.net]
>>64
> プログラム中に書きにくい注意事項をどこかに予め書いておく
これが必要になる場面って大抵は設計が歪んでいる

74 名前:デフォルトの名無しさん mailto:sage [2020/06/21(日) 22:27:56.93 ID:TM3DTGpo.net]
>>68
>でもチェックしにくいとこってデバイス絡みや使ってるUIのライブラリの変な仕様のとこだろ
そういうところを切り出してモックなら動くことを示してソフト側は悪くないって
言い張るための技術だぞ。

75 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 01:08:56.89 ID:hoXOIHD6.net]
https://video.twimg.com/ext_tw_video/1273820540352909313/pu/vid/270x478/HZq8qYhba4upqVyw.mp4

76 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 14:03:05.97 ID:Amhn2FuL.net]
頭が悪いやつが多い業界だし、カプセル化は有用だと思うがな
勝手に変更させない、有用に変更しても理解できないので変更しないほうがいいって
2重の意味で

77 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 15:11:05.61 ID:o6bKn79R.net]
>>1
そのカリフォルニア大学ソースどこ?
むしろ、彼らの作成するソース(github)を見るとオブジェクト指向で、@private(JSDoc)を律儀に記述しているけど。
ん?JavaScript以外?C#やJava?
privateをサポートする言語でカプセル化しない馬鹿なんてこの世に存在するの?

78 名前:デフォルトの名無しさん [2020/06/23(火) 23:33:42.34 ID:JaUjApVc.net]
>>74
そういうクラスを作る側が頭が良くて
利用する側がどうせ頭が悪いという傲慢さが
オブジェクト指向が批判される原因だと思うわ。

大体 既に書かれたコードの記述で
新規プログラマーのコーディングを制限しようと
言う考えが傲慢以外の何物でもない。


お前らの言う頭の悪い奴は元のクラスのprivateを
publicに変えるかもしれないし
Personというクラスの隣に
Person2と言うクラスを複製してそっちの方をpublicに
変えて利用するかもしれない。
でもそれって止められるわけないだろ?
それを言語仕様で止めようとしてる事がどうかしてる
元のクラスが使いにくくて変えたいから変えたいんだよ。

それに5重6重にカプセル化されたオブジェクトなんて
邪魔でしかないんだよ。デバッグしにくいし

79 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 23:58:42.49 ID:AMcrD26I.net]
いや、止められるだろ。。そのままリリース出来る方がおかしいだろ

80 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 00:33:12.84 ID:Vx2zY5TL.net]
むしろクラスを作る側が>>76みたいな頭の良い人から身を守るために必要
想定してない使用法でバグった時に責任とりたくないもん
Person2に不具合があっても俺には関係ないから好きにやってくれ



81 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 00:57:36 ID:I5+T+Giv.net]
https://video.twimg.com/ext_tw_video/1266492233030627329/pu/vid/720x1280/AvyTiTS0EeNdp3DS.mp4?tag=10

82 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 01:13:12.47 ID:ZBvJ9IFx.net]
カプセル化の弊害とかいいつつ
カプセル化すら理解してなくて草生える

83 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 01:57:06.31 ID:W7e3ICMc.net]
>>76を見てると、オブジェクト指向を批判しているのはバカが過剰に騒いでいるだけなんだなと良く分かるw

84 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 02:39:07 ID:gVxDDgwX.net]
今一番勢いのある言語であるPythonは完全なプライベートじゃ無いんだよな

85 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 03:02:02.88 ID:irp07WaX.net]
>>81
匿名性のSNSの限界。
記名性だと色々と能力が分かって、無視される。

86 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 04:52:29.63 ID:evfa9tXu.net]
>>76
何がいいたいのか全くわからん。

例えばお前が言ってる頭の悪いやつが、
ローカル変数をグローバル変数に変えるかもしれんよな?
そういう場合、なんだっていうんだ?
ローカル変数が悪いって話をしてるのか?
それを止められないからローカル変数は邪魔といいたいのか?

87 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 07:20:27.23 ID:ib1NZqNH.net]
>>84
まあ、しょうがねぇよなって話じゃん

88 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 07:21:13.77 ID:ib1NZqNH.net]
初めの書き手が悪いんじゃなくてあくまで変更したやつの責任

89 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 12:20:09.25 ID:irp07WaX.net]
>>76
というか、MFCみたいに修正が推奨されて無い場合は

90 名前:除いて、
自社開発のプログラムであれば、能力がある人にはあなたが修正するのを
上司が許可してくれると思うんだ。
もし、修正を許可してもらえないなら、実績が足りて無いか能力のアピールが足りてない。
[]
[ここ壊れてます]



91 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 12:31:25.83 ID:bZ0w8eld.net]
オブジェクト指向の肝は擬人化と依頼だからな
頼む相手の内部状態を勝手に変えないってのは
無茶重要でしょ 

92 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 13:17:22 ID:U8BVWvkL.net]
>>88
>オブジェクト指向の肝は擬人化と依頼だからな
初めて聞いた

93 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 13:54:42 ID:bZ0w8eld.net]
擬人化キャラ(クラス)の関係性で物語を生成する=オブジェクト指向
そんなかんじで習ってそのまま理解してたな ちなみに学校は恥ずかしくて
言えないような底辺学校

94 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 14:29:54 ID:+bJy5A36.net]
依頼はどことなく委譲って分かるけど擬人化はただのスケベじゃん

95 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 14:40:07.82 ID:bZ0w8eld.net]
>>91
頭わるくてまともな学校にいけない奴らに
教えるために先生が工夫してくれたんだろうね 依頼ってのも困ったら
依存心の高い奴らに教えるのにそういう言い回ししたんだろうね
いま思えばなかなか立派な先生だったな 口は臭かったが

96 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 15:16:35.37 ID:W7e3ICMc.net]
>>92
分かりやすく噛み砕いて教える方法としては良いと思うけど、>>88のように一般的に通じるつもりでいきなり独自用語を使うと話が変な方にいくから、不特定多数を相手にするときは一般的な用語を使った方がいいぞ。

97 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 16:47:31.01 ID:ZBvJ9IFx.net]
>>91
本来人間相手にしかに使わない依頼や委譲って言葉を使ってる時点で擬人化してる

98 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 16:51:31 ID:ZBvJ9IFx.net]
擬人化と依頼のメタファは一般的
オブジェクト指向に限らないけどOOを説明する際によく使われたから

Tell Don’t Ask
media.pragprog.com/articles/jan_03_enbug.pdf
https://martinfowler.com/bliki/TellDontAsk.html

99 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:00:14.27 ID:z1f+Mb2g.net]
>>76

> お前らの言う頭の悪い奴は元のクラスのprivateを
> publicに変えるかもしれないし
> Personというクラスの隣に
> Person2と言うクラスを複製してそっちの方をpublicに
> 変えて利用するかもしれない。

ねーよw
もう少し基礎知識学んでから出直してこい。
まず、ライブラリの中身を書き換えること自体、ありえない。

たぶん、見ず知らずの人達が書いたコードを共有する仕組みから知らないのだろう。

100 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:25:00 ID:vlqGopWc.net]
>>96
いや、そもそもできちゃうじゃん
そして別にできてもいいじゃん
それが嫌だとしたらそれをドキュメントに書いとけよ
ソースには書けないし書いても消せるからさ



101 名前:デフォルトの名無しさん [2020/06/24(水) 19:30:57 ID:6CkV8gwI.net]
>>96
いや、周囲や協力会社(依頼元クライアント側プログラマ)
にこれやるやつゴロゴロいるんだって
ソースファイルでもテーブルでも何でも他人が書いたやつ
複製して仕様変更に対応するんだわ。
privateとかカプセル化なんて笑っちまうよマジで
でも意外と何とかなってる、複製したあとはレガシーコードは
全部捨てちまうんだわ

職場で新人研修で「抽象クラスって何のために作るんですか?」
って毎回のように訊かれるけど
「俺にも分からない。必要性を感じたことも、便利だと思った
事も無い。」って正直に答えてる。
オブジェクト指向の入門書に当然のようにabstract紹介
されてるけどそれの有用性を的確に説明している
教科書を見たことがない
interfaceのほうは重要性は分かるしちゃんと説明している

102 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:4 ]
[ここ壊れてます]

103 名前:2:39 ID:J59L1bOF.net mailto: >>98
abstractは
上の方の人達が未知の設計概要として会議で使う
コーダーじゃない営業や客とのコミュニケーション用
[]
[ここ壊れてます]

104 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:53:36 ID:GEcMOOIw.net]
>>75
これだろ
https://ja.m.wikipedia.org/wiki/DARPAモデル

DARPAモデルとは、インターネットの持つべき通信機能を階層構造に分割したモデルである。

アプリケーション層、トランスポート層、インターネット層、ネットワーク層の4層で構成される。

DARPAモデルという呼称は、インターネットの研究開発を行っていたDARPAに由来する。
元々は確固たる仕様や定義はなく、IPやTCPやUDPなどの仕様中に個々に、あるいは暗黙の前提として存在していたものだが、後からRFC 1122で1つにまとめられた。


IP群はプロトコルとサービスをカプセル化する事によって抽象化する。
通常、より上位層のプロトコルはその目的の達成に役立てるために、より下位層のプロトコルを用いる。
これまでIETFはインターネット・プロトコル・スタックをRFC 1122で定義された4層から変更した事はない。
IETFは7層からなるOSI参照モデルに従うような試みはせず、また標準化過程(Standards Track)にあるプロトコル仕様やその他の構造上の文書をOSI参照モデルに対して参照する事もしない。

https://ja.m.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:UDP_encapsulation.svg

RFC 3439では、インターネット構造に関して第3章の序文に"Layering Considered Harmful (階層化の有害性)"と題された節が有り、
「階層化」という考え方が概念的および構造的にさまざまな利点を持っているが、
実装面では層単位で同じような最適化が繰り返し発生することによる無駄な処理により効率的な実装を阻害し、複雑化を招くことがあり、
また低層部分のみに存在するデータにアクセスできない場面が発生するなど、

インターネット・プロトコルの目指す「単純化」という原則に反することもあることが明記された。

105 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 20:04:30.89 ID:GEcMOOIw.net]
>>75
ググったら日本語訳もあった
www5d.biglobe.ne.jp/stssk/rfc/rfc3439j.html

106 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 21:01:40.99 ID:7L466iYI.net]
>>98
抽象クラスは単なるテンプレ
クラスを作る際の約束事を規定できる
具体的には実装忘れやメソッド名を間違えるのを防げる
自分のような忘れぽい人間には役立つ

107 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:26:02.81 ID:z1f+Mb2g.net]
>>98
> 「俺にも分からない。必要性を感じたことも、便利だと思った事も無い。」って正直に答えてる。

正直なのはいいけど...なんで、privateの有効性がわからないのに、カプセル化を批判するのか。
無知の批判ほど、初心者が誤解を生む原因になるからやめてほしい。

例えばだよ。
何の言語をよく使うのか不明だが...標準ライブラリってあるじゃん?
その標準ライブラリのクラスに「呼び出したら破綻する(内部処理実装用の)メソッドや変数」が定義されていたら、どうする?
クラスを使う人に呼び出してほしくない機能はprivateにするべきでしょ。
実装する側の都合だけじゃなくて、クラスを使うユーザーのことも配慮して使うものだよ。

OOPアンチとOOP活用者の絶対的な違いは自作したクラスを使う人のことを深く考えているかどうか。そこだよ。

108 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:30:44.22 ID:MQA513Hf.net]
>>103
使う側と作る側が完全に分離した環境に当たったことがない
win32apiや.netframeworkを作る人以外にそんな需要ってあるの?

109 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:31:32.44 ID:evfa9tXu.net]
>>104
win32apiや.netframeworkを作る人には需要があるって認めたの?

110 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:32:45.63 ID:z1f+Mb2g.net]
って、わからないのは抽象クラスかいッ!
なんか、アンカを間違えたような間違えていないような微妙な回答をしてしまった...。
まぁ、抽象クラスは>>102に書かれている通りって事で。



111 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:34:51.23 ID:MQA513Hf.net]
>>105
俺が作るならいらん
状態をクラスのインスタンスが内部に保持してしまうのは害にしかならない

112 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:42:26.10 ID:MQA513Hf.net]
なんか今までノリでクラスで作ってきたのを止めると物凄くスキルアップするぜ

一度はオブジェクト指向をやってみるのもいいかもなってのは思う
クラス構造で便利なものとそうでないものは当然ながらこの世にはあって
そのほとんどが実はクラスにしないほうがうまくいくものばかりだ
大半の処理は
入力→処理→出力
の繰り返しであってこれのまとまりが
機能となる
ただ極稀にクラス構造で考えた方が便利な構造のものもある
役に立つのはその時だけだ
そしてそのケースは極めて稀である

113 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:43:14.13 ID:z1f+Mb2g.net]
>>104
.netは勿論、Android、iOSネイティブ、バックエンド node.jsやPython、mbed(組み込み)、
まぁ、一部private機能をサポートしていない環境はあるけど、作る側・使う側の意識は常に持つよ。

.netを知っているってことは、Nugetのことは知っていると思うけど...
gradleとか、npmとか、github等と連携させて他人の作ったライブラリの自動追加及びアップデートの仕組みはいくらでもある。

てか、自分で作ったコードですら、作る側・使う側は意識するよ。
過去に作った自分のソースなんて、他人が作ったソースみたいなものだし。
内部実装を理解していないと使えないソースなんて使いこなせるほど俺の頭はよくないよ。

114 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:44:48.06 ID:evfa9tXu.net]
>>107
> 俺が作るならいらん
つまり、俺が作らないなら、必要だって言ったのと同じことだよね

115 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:47:38.19 ID:evfa9tXu.net]
最初からオブジェクト指向は大規模なものを
複数の人で作るためのもので
それをわかってないから、

「俺が一人で作るようなものならいらん」

なんて発言が出てしまうんだよな

116 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:52:50.78 ID:7L466iYI.net]
>>109
内部実装を理解していないと使えないソースなんて使いこなせるほど俺の頭はよくないよ。
まあこれだよね 
頭いいやつには必要ない技術かもね 凡人には必須だとおもうけどな
あと設計思想とかそんな面倒な話じゃなくてシンプルに補完ができるのが楽 

117 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:54:20.40 ID:VGKuFIs7.net]
>>107
内部に保持するのが良いとは言わんが外部に公開すれば良いってもんでも無いでしょ
いつ何時外部から状態が変更されても破綻しないように責任持てと言われても
僕は頭が悪いから無理です

118 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:55:53.79 ID:evfa9tXu.net]
そもそもprivateっていうのはコミュニケーションの道具で
privateって書いていなければ、好き放題アクセスしてOKという意味に
捉えられるかもしれないわけだ。

コメントの高度版なのだからコメントなくてもできるのは当たり前
だがそうすると修正が難しくなる

俺が作るなら〜っていうのはコミュニケーションが
必要ないから言える話

119 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:58:49.48 ID:z1f+Mb2g.net]
>>112
まぁ、そうだな。
ただ、面白いのが...
頭のいい人がOOPに漬かると、余裕ができた分、コンピューターの仕組みにとらわれずエンドユーザーの事を全力で配慮した品質の高い製品を作れるようになる。

120 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:59:48.33 ID:z1f+Mb2g.net]
アンカまた間違えた...



121 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 23:00:40.93 ID:z1f+Mb2g.net]
間違えてなかった。もうダメだ...

122 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 23:26:13.24 ID:MQA513Hf.net]
>>113
構造体でまるっと渡してやるよ

123 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 23:27:50.80 ID:MQA513Hf.net]
>>111
逆だな
デカければでかいほどオブジェクト指向で組むのはやめた方がいい
内部の状態遷移を誰も理解できない

124 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 23:31:43.79 ID:MQA513Hf.net]
そもそもさ
クラスで状態を保持するソースってさ
実装全部見て
何やるとどう状態遷移が起こるのか把握しないと使えないじゃん
これが最高にダルイ
もう年取ったしこんなの付き合ってらんない面倒臭くて

125 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 23:32:23.15 ID:fkg3GZzF.net]
単なるモジュール切り離しのための技術の一つだよ。
バカが騒ぎまくったせいでクソみたいなインターフェイスによる切り離しで
逆に見通しが悪くなることが多くなった。
細かい粒度で使うような技術じゃない。

126 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 23:41:46.40 ID:MQA513Hf.net]
>>121
いや、単純に面倒臭いだけでメリット皆無じゃん

127 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 00:13:01.48 ID:JeYxH76v.net]
内部に状態変数をもたれたらグローバル変数の比ではないほど厄介。
単体テストやデバッグが壮大なことになる。

128 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 00:16:04.75 ID:JeYxH76v.net]
「状態によって挙動が変わる」ものが何十個も何百個も集まったら誰も把握しきれない。誰も制御しきれない。

129 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 01:13:10.51 ID:h5MGZkZK.net]
>>119
>内部の状態遷移を誰も理解できない

使う側は内部の状態遷移なんて理解する必要ない
理解しないと使えないようならその設計が悪い

130 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 01:41:45 ID:Q34w5rfS.net]
内包してる初期化フラグ一つで
全く同じ入力に対して全く異なる出力が出てくるんだから
こいつは厄介だよ

勘がいいやつはこれだけでこの仕組みを使わない



131 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 03:09:24.52 ID:9YSX2wtH.net]
>>124
だからオブジェクト指向で小さくするんだよね

132 名前:デフォルトの名無しさん [2020/06/25(木) 03:13:43.10 ID:AD4h9H61.net]
>>110 君頭悪いねってよく言われない?

133 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 03:15:57.10 ID:9YSX2wtH.net]
>>128
言われない。むしろお前のほうが言われてるだろ。

134 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 04:09:57.03 ID:3STWDldz.net]
お前ら頭悪いね

135 名前:デフォルトの名無しさん [2020/06/25(Thu) 05:35:58 ID:AD4h9H61.net]
レス番まで指摘されても自分のおかしい発言に気づけないとはいとあはれ

136 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 05:40:21 ID:hNcIaCHg.net]
いいぞ、もっとやれ

137 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 07:10:48 ID:MncJLzSh.net]
内部を知る必要ない。インターフェースだけ守れ

138 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 07:22:24.62 ID:/bWSJldt.net]
彡 ⌒ ミ
(´・ω・`) 頭がなんだって?

139 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 07:30:13.69 ID:p+gLKGcc.net]
>>122
めんどくさくて新しい(もう20年以上前からメジャーではあるが...)考え方についていけません、てだけだろw

お前が懸念している内部の状態遷移が見えないというのは、見えなくていいように作り、見えなくていい部分だけを隠すんだよ。
お前の大好きな従来の手続き型だって、下手に作れば手続きを呼び出す順序や渡すべきデータの構造や内容が訳分からない複雑なものになるだろう。

単に自分の知ってる手法では良い

140 名前:設計を知っていて問題点を避けられる、よく知らない手法は問題を回避する方法がわからなくて問題のある手法と思えてしまう、ただそれだけのこと。 []
[ここ壊れてます]



141 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 07:32:40.30 ID:U43KJZDw.net]
クラスの状態はクラスが知ってれば良い
という思想なんじゃねえの?
オブジェクト指向は?

142 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 07:35:44.39 ID:Q34w5rfS.net]
>>136
テストするんですが〜

143 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 07:53:57.86 ID:Q34w5rfS.net]
>>135
違うだろ
内部の状態が見えないのにテストなんかできないだろ
そのクラス使ってある限りそいつの状態次第で色んな動作しちまうんだから
はっきり言ってクラスは欠陥製品
特に内部に状態を保持するような使い方は害悪

144 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 08:19:04.16 ID:p+gLKGcc.net]
>>138
お前はオブジェクトの状態として、外部に影響

145 名前:与える外部仕様の状態と、外部に影響を与えない内部仕様としての状態を混同してないか?
文字列のオブジェクトが文字列"abcd"を持つとして、それは外部に影響を与えるものだから、privateのメンバとして保持されていようがテストケースとしてそれを与えて状態を設定してテストすればいい。
一方、その文字列がどういう実装で保持されているか、ヒープなのか固定配列なのか、参照カウンタやさらに複雑な仕組みを使っているのかといった内部仕様的な状態は、このクラスを他と組み合わせてテストする段階ではテストする必要がない。こういう部分は、先にクラス単体のテストで保証しておけば良い。
そういう切り分けができない作りになっているなら、それは設計が悪い。
[]
[ここ壊れてます]

146 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 08:42:04.56 ID:Q34w5rfS.net]
>>139
いや、MSのクラスだってなんかよくわからん動作するのあるし
いいとか悪いとかじゃなくて状態を保持したら地獄行き

覚えといてね

147 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 08:57:56 ID:rghIsJSV.net]
>>122
めんどくさいのはその通り。
テスト駆動開発の本とか読んでどういうオブジェクトを引数にすると
テストしやすいかが理解できてくるとありがたさがわかってくる。
オブジェクト設計とか言い出す馬鹿は無視しろ。

148 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 08:58:07 ID:XTsRyKlX.net]
>>120

> そもそもさ
> クラスで状態を保持するソースってさ
> 実装全部見て
> 何やるとどう状態遷移が起こるのか把握しないと使えないじゃん
> これが最高にダルイ
> もう年取ったしこんなの付き合ってらんない面倒臭くて

だ、か、ら、
それを解決するためのオブジェクト指向だ つってんだろ!
クラスをオブジェクト指向も意識せずに、ただただ構造体みたいに実装して使うから、そうなるんだよ。

149 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 09:10:36 ID:p+gLKGcc.net]
>>140
どのクラスを指して言ってるのか知らないが、それはそのクラスの仕様自体の複雑さかお前の理解不足が原因で正しい挙動が分かってないとか未定義動作をさせているとかでないの?
状態を保持するのが問題なのではなく、知っておくべき状態、情報を知らずに上手くいかないのをオブジェクト指向のせいにしているだけのように見えるぞ。

150 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 09:17:11.38 ID:rghIsJSV.net]
状態をできるかぎり持たない方がいいってのはその通り。
ただ通信ソケットみたいなもの実装しようとすればどうしても状態を持つわな。
コネクション張るオーバーヘッドが小さくない時点で、性能出そうと思えば状態をもつしかないので。



151 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 09:21:43.95 ID:H2Spozu7.net]
オブジェクト指向って設計手法であると同時に
責任の切り分け手法でもあるんだよね 別の共同体(無償で手伝う気なしって意味で)
と作業する場合は必須でしょ

152 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 10:04:43.33 ID:Q34w5rfS.net]
>>142
は?メソッド全部staticにしてみろ
大半の問題が解決する

153 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 10:09:16 ID:XTsRyKlX.net]
>>146
解決しねーよ!むしろ、問題が多発するわ!
それ以前に、何の問題が解決するんだよ。

154 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 10:09:53 ID:Q34w5rfS.net]
>>145
いやー、クラス内で状態を保持するクラスが大量に呼ばれてて
本来はそれらの全ケースを網羅する必要があるが作業者の裁量で省略されてる状態じゃないっすか?
切り分けじゃないッスよね?
クラスAとクラスBがそれぞれチェックされててもそれらが合わさったことでバグが発生してる可能性もあるンスから
テストはちゃんとやるのであれば状態全網羅でしょう

ぶっちゃけ無理っすわ
状態を保持をやった時点で地獄行き

覚えた?確定事項よ

155 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 10:11:45 ID:Q34w5rfS.net]
>>147
グローバル変数さえなければ入力に対してぜってー決まった出力しか出ないのに何が問題出るの?
頭おかしいんじゃない?
○○構造のとき作りにくいってのはあると思うけど
わかりやすさでこれ以上はないよ

156 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 10:18:17 ID:H2Spozu7.net]
>>148
クラスAとクラスBがそれぞれチェックされててもそれらが合わさったことでバグが発生してる
可能性もあるンスから

こうなったときにAもBも直す必要がないでしょってこと どちらかを直すかは共同体
同士のパワーバランスで決まるんだけどねw そこはまあ大人になるしかない

157 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 10:20:16 ID:XTsRyKlX.net]
>>148

> >>145
> いやー、クラス内で状態を保持するクラスが大量に呼ばれてて
> 本来はそれらの全ケースを網羅する必要があるが作業者の裁量で省略されてる状態じゃないっすか?

何いってるんだ、こいつ。
クラスの基本的な仕組みから理解していないのか。
状態はインスタンスの数だけ持つことになるけど、呼ばれるロジックは一つだよ?
一つのロジックだけをテストすればいいのに、君はstatic化することで、わざわざ一つの状態につき一つのロジックを用意しようとしている。
つまり、君は一つのインスタンスにつき、一つのロジックを記述することで膨大な数のテストをしなければいけない状況を自分で作っている訳だ。

お前のやり方の方が無理ですわ。

158 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 10:27:24 ID:Q34w5rfS.net]
>>150
いや、わからないよね?
クラスCで使うためのクラスAとクラスBであるなら使えなきゃしょうがないじゃん
まあ、他でも使ってるなら安全牌はクラスC用のクラスAクラスBの複製だけどw

159 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 10:28:11.21 ID:Q34w5rfS.net]
>>151
バカの相手はできんわ

160 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 10:29:59.55 ID:XTsRyKlX.net]
しかも、1つの状態につき、一つのロジックを書くってことは...似たようなクラスが10個必要になったら、そのクラスのロジックを10回、コピペするわけだ。

で、その後、ロジックを修正することになった場合...10回、コードを書き直すの?
そっちの方が無理ですわ。

いっそのこと、staticにしないで、10個の状態が1個のロジックを参照するようにしておけば、ロジックの修正は一回で済む。
そっちの方が断然、楽だね。



161 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 10:31:50.71 ID:XTsRyKlX.net]
>>153

ブーメラン刺さってますよ。
私は仕事するので、その間に頑張って言い訳でも考えていてね!

162 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 10:38:02 ID:H2Spozu7.net]
>>152
もしかしてインスタンスの意義がわかってないのか?

他でも使ってるなら安全牌はクラスC用のクラスAクラスBの複製だけどw

まさしくこの状態を作りたいからクラスAクラスBのインスタンスをつかうんだけどな

163 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 10:41:15 ID:Q34w5rfS.net]
>>156
え?何言ってるの?

164 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 11:34:09.20 ID:emOdy//g.net]
クラス使わない人ってどうするんだろ
構造体?
全部インタプリタみたいな感じ?

165 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 11:40:28.84 ID:h5MGZkZK.net]
スレ主の愚痴はオブジェクト指向かどうかと関係ない
単に設計やテストのやり方を知らないだけ

166 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 12:22:45 ID:9YSX2wtH.net]
>>138
> 内部の状態が見えないのにテストなんかできないだろ

ん?全部publicにしておけばテストできるって話じゃないの?
もしくはprivateであっても、privateを読み書きできる機能があればテストできるでしょ?

167 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 12:25:19.77 ID:XTsRyKlX.net]
クラス使っても、staticにするとか訳のわからない事を言い出すし、根本的にオブジェクト指向を理解していない人達が愚痴っているだけだよな。

むしろ、何でもstaticにするのはC言語やC++言語から入った初心者なら誰もがやる失敗。
そんな初心者の失敗をいい歳したおっさんが、オブジェクト指向を批判しながらstaticを勧めるから駄目なんだよ。
我々からすれば、俺らの黒歴史時代の経験を何で上から目線で偉そうに語っているんだ?って感じだね。
流石に、上から目線で語る程、俺の黒歴史は酷くなかったぞ。

168 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 12:43:43.74 ID:KZb+gCmD.net]
カプセル化が要らない、と言うのなら、

誰もがデータを読み書きできる状態でどうやってアトミック処理を保証するのか

を教えて欲しいな。
もしかしたら大発明かも。

169 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 12:49:36.79 ID:Q34w5rfS.net]
>>160
内包されるよりいくらかCool
ただ、そこまでpublicにできるならstaticにしてほしい
実行時にstatesがnoneでないと正しく動かないんですよこのメソッドって
言われても知らねーよそんなのって感じ
じゃあstatesはどうやってnoneにするんだべって
俺に調べさせるのやめてもらっていい?

もっと言えばstaticにすればそんなことないじゃん?

170 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 13:01:46.41 ID:9YSX2wtH.net]
>>163
内包したらテストできないだろ?



171 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 13:06:39.24 ID:XTsRyKlX.net]
そもそも、クラスって正常に動く前提で使うものであって、なんで、クラスを使う側がクラス内部動作をテストしないといけないのかわからん。
クラスのテストは、クラスを実装する側の責任だろうに。

...というツッコミをそろそろしてもいいかな?

172 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 13:17:56 ID:p+gLKGcc.net]
>>165
それに類することをすでに>>139で指摘したんだが、自分考えに凝り固まった意固地なおじさんには通じなかったようだ。

173 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 13:23:03 ID:p+gLKGcc.net]
>>163
そのstatesがnoneでなければならないという仕様は、そのクラスの使い方として外部に明示すべき仕様だろう。そそういう情報が示されていないならドキュメントの不備だし、そういう仕様が公開されていても外部からstatesの値を参照または設定できないのなら設計の不備だろう。
延々と繰り返し指摘しているように、それはオブジェクト指向そのものの問題でなく正しく設計、運用がされていない問題だろう。

174 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 13:29:58.05 ID:XTsRyKlX.net]
>>166
あっ、ほんとだ。

175 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 15:28:55 ID:xmAi/11M.net]
カプセル化の最大のメリットは中で何をしているかどうなっているかは気にせずに
外からは引数を与えると仕様通りの値が戻ってくるというところだよね?

176 名前:デフォルトの名無しさん [2020/06/25(木) 16:47:53.33 ID:CiEXbKUP.net]
グローバル変数に格納されている値で関数の挙動が変わるより悲惨だぞ。
グローバル変数が見えないんだから。

177 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 16:52:12.11 ID:BM3o+zlw.net]
ん?

178 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 17:00:47.93 ID:XTsRyKlX.net]
ID変えて振り出しに戻るって奴?

179 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 17:03:53.35 ID:p+gLKGcc.net]
ここまで話の通じない奴だと思うと相手するのがバカらしくなってくるね。まさに徒労という言葉がふさわしい。

180 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:27:44.23 ID:RQlIhWFK.net]
>>39
カプセル化こそが善
カプセル化こそがOOPのうまみ



181 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:35:56.42 ID:oGWS7APt.net]
全部staticってどうするんだろう
メソッドの引数すごいことになってそう

182 名前:デフォルトの名無しさん [2020/06/25(木) 20:15:30.81 ID:LQ8CyLE7.net]
オブジェクト指向のあらゆる用語が
ノムリッシュみたいになってると思う

JavaScriptが発展して、クラス名と同じ名前の
ファイル名にしなくていい事が分かったわけじゃん
それどころかクラスすら必要なしでオブジェクトが作れる事が
分かったわけじゃん
クラス名と同じ名前のコンストラクタなん定義しなくても
オブジェクトが作れる事が分かったじゃん

オブジェクトとは詰まるところ連想配列と大して違いが
ないキーと値で構成された入れ物でしかない事がわかった。
この「連想配列と違いがない」というシンプルな真実が
どれだけありがたいことか

クラスを始めとする様々なルールは
ソフトウェア設計上の重要な概念かと思ってたら
単なるJavaの変な言語仕様でしかなかったわけだ。
変数を「フィールド」
関数を「メソッド」
関数を「コンストラクタ」
こう言い換える必要がどこにある?

こんなノムリッシュなバズワードに
今までどれだけ煙にまかれて
シンプルな真実が見えなくなってたことか

183 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:22:00.90 ID:9YSX2wtH.net]
>>176
3行でまとめて

184 名前:デフォルトの名無しさん [2020/06/25(木) 20:24:37.53 ID:LQ8CyLE7.net]
それに加えて
「継承」「抽象クラス」「オーバーライド」
「カプセル化」「ポリモーフィズム」
こんな用語は必ずしもやるのが正しいものではないし
やればやるほどシステムを必要以上に複雑にして
邪魔にしかならないものばかり

それなのに
「オブジェクト指向の本質は継承とカプセル化とポリモーフィズムだ。」
なんて馬鹿げた事を言い始めるノムリッシュな奴が出始めて

JavaScriptならオブジェクトの内部に
別のオブジェクトを入れるという一瞬の操作で
終わるものを「委譲」など余計な用語を定義して

わざわざ定義しなくてもいいようなくだらない
小難しそうな用語だらけになって
「お前はooの概念を正しく理解してない」
という偉そうな批判がどれだけ飛び交うことか

185 名前:デフォルトの名無しさん [2020/06/25(木) 20:31:34.09 ID:LQ8CyLE7.net]
webフレームワークの
MVCの「モデル」ってそんなに重要ものなのか?
「モデル」なんてものがSQLやDBMSを隠蔽して
何がありがたいと言うのか
むしろ隠蔽されて困ることの方が多いんじゃないか?
何故一度テーブル作成時にて定義した
大量の列定義を
またモデル層のフィールド定義で2度もやり直さないといけないのか
要らないだろ。「モデル」なんて

最近は従来軽視されてきたクライアントサイドJavaScriptの
方がよっぽど重要なことが分かってきて
ReactやVueのようなクライアントサイドフレームワークが
重要視されてるわけじゃん

「オブジェクト指向」って結局何がありがたいのよ?

186 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:03:02.32 ID:9YSX2wtH.net]
1行でまとめて

187 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:03:32.44 ID:9YSX2wtH.net]
> 「オブジェクト指向」って結局何がありがたいのよ?

多くの人で作業分担し、協力してプログラムを作れる所

188 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:03:50.52 ID:9YSX2wtH.net]
ReactやVueはオブジェクト指向

189 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:03:50.90 ID:lu0UaGfG.net]
>>177
Javaなんてクソを
オブジェクト指向の代表として考える
かわいそうな子

190 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:04:45.08 ID:9YSX2wtH.net]
>>183
Javaはオブジェクト指向を採用した言語の一つだよ
いつから代表になったのさ
お前が代表だと思っていて、代表だと思ってる自分自身を批判してるだけじゃんw



191 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:05:53.76 ID:lu0UaGfG.net]
>>180
抽象化を理解できないかわいそうな子

192 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:09:21.00 ID:9YSX2wtH.net]
>>185
お前の文章の話をしてるんだが。
そもそも読んでないのに、抽象化が何の関係があるんだ?

193 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:17:15.89 ID:lu0UaGfG.net]
>>184
>>177
>クラスを始めとする様々なルールは
>……
>単なるJavaの変な言語仕様でしかなかったわけだ。

で、「いつから代表になったのさ」がなんだって?
数スレも遡れないようじゃ生きていくの大変だろうに……

194 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:43:56.18 ID:9YSX2wtH.net]
だから読んでないと言ってるw

195 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 02:54:16.76 ID:uM2i3sYA.net]
関数化したりクラス化したらプログラムが高速化したんだけどGCが発生するタイミングが細かくなったってことでええんか?

196 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 07:35:03 ID:eLfJJdHb.net]
オブジェクト指向は整理術
棚なんて要らん棚があるから余計な物も管理する羽目になると床置する人が現実に居るのと同じ

197 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 08:53:43.63 ID:crXMwmqp.net]
まああまりに糞な抽象化だともう全部publicでレコードとして扱えやとは思うな。
抽象化を万能なものと思い込みすぎな馬鹿が多すぎるからオブジェクト指向に対する誤解が生まれる。

198 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 09:44:19.22 ID:8zz5Zpvs.net]
っていうか抽象化ってどんな仕様のどの部分を一括に扱ってるのか?
ドキュメントがないと最悪
ここの仕様は特殊だからこれとは別にしないとなって話ができない
ドキュメント書かないなら抽象化するな
害悪でしかない

199 名前:デフォルトの名無しさん [2020/06/26(金) 09:50:43.03 ID:Op8/e6Io.net]
>>190
直置きはダメだが
ほとんどの場合「棚をしまう為の棚」
「それをしまう為の棚、それをしまうための棚…」
ってなってる

で、「ハサミ使いたいんだけどどこにあったっけ?」
って探すのに非常に苦労する。
見つけやすくするための棚だったはずなのに。

それどころか
棚「ハサミは内部で使うから自分で使わなくていいです。
『切る 』という目的だけに集中して、そう命令してください」
と、棚に言われる。
しかし切られた結果を見ると自分が欲しかった結果と微妙に
違うことがよくある。
だから「もう俺が直接切るから、いいからハサミをよこせ」
っていう話になる。


あと抽象化については
「これは抽象的な棚なので中には何も入っていません。
私を参考にした具体的な棚が何処かにあると思うのでそれを
探してください。」となる。

じゃあ「具体的な棚って一体どれだ?なんか長い名前の棚が
やたら沢山あるけどどの棚から探せばいいんだ??」
となる

200 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 09:55:00.00 ID:50iMo9Ym.net]
>>193
たとえ話はややこしいだけで何の意味もないから
具体的な事例で言えよ



201 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 09:55:48.09 ID:50iMo9Ym.net]
具体的に何のことを言ってるのか
考えなきゃならんようなたとえ話に価値はねーからな
説明が下手すぎる

202 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 10:13:27.50 ID:wYfFflLL.net]
>>193
整理が下手なやつの例をあげて、だから整理はすべきでないと言ったって意味がないだろう。

203 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 10:36:41.37 ID:klgKDCEw.net]
このスレにstaticおじさん、絶対沸いてるだろ。

204 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 10:41:42.69 ID:s43csjES.net]
>>193
だから具体的な問題>>162に答えてくれよ。
複数のプロセス・スレッドが勝手気ままにデータを処理しても問題ない、というならおめでたいわ。

205 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 10:42:57.59 ID:8zz5Zpvs.net]
>>198
そんときだけ使えばいいじゃん
それ以外じゃ使うなよ

206 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 10:54:38 ID:crXMwmqp.net]
>>198
アルゴリズムレイヤーでアクセスを無駄に禁止するようなクラスは有害でしかない。
適切なpublic具合というものがある。
例えばc++のstd::vectorなんかはかなりオープンアクセスなクラスだがあれが適切なんだよ。
でもって馬鹿に適切なアクセス制御なんて無理ってこと。
変に細かくするな。
馬鹿はクラスレベルで制御なんかしないでいいからモジュールレベルでアクセスするapiだけ公開してろってこった。

207 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 10:58:13.55 ID:uqHA56uo.net]
適切なpublic具合

208 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 11:23:09 ID:TcIyIoqu.net]
トレードオフを理解できてないうちはどっちもどっち
物事の一面しか見れてない

>>190や>>193の比喩は理解の程度が知れるという意味ではすごく有意義

209 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 11:38:31.41 ID:TyDtokvS.net]
適切なpublic具合=ジャイアンルール

210 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 11:48:31.80 ID:klgKDCEw.net]
>>200
たぶん、162はクラスユーザーが呼び出した処理を実行している最中に内部処理を呼び出したら破綻するけど、いいのか?って言いたいのだと思う。
適切なアクセス修飾子をつけろは同意だが、彼に言うことではないと思う。



211 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 11:51:10.08 ID:klgKDCEw.net]
まぁ、スレッドがどうこうは...private関係あるのかな?って感じですが。

212 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 12:36:59.06 ID:s43csjES.net]
>>199
好き勝手にデータに読み書きできるのに、どうやって「その時だけ」を保証するんだよ。

結局カプセル化必須じゃねぇか。
何のアイディアも無しか。アホらしい。

213 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 13:04:36 ID:8zz5Zpvs.net]
>>206
そういう場所だけそうすればいいじゃん
全部そうなら無能過ぎてプログラム組む前にもっとやることあるんじゃないかなぁ

214 名前:デフォルトの名無しさん [2020/06/26(金) 13:19:36.46 ID:SlEx0yXd.net]
大昔、Javaやりだしてイキりだしたやつらが、オブジェクト指向もできない
老害とか騒いでいた歴史がある。そんな老害から見ると、gcに難しい事をまかせて、
馬鹿を吊り上げる仕組みなんだよなあ〜と皆言っていたのを思い出した。
今はPythonね。もっさ〜として、ダサすぎ。でも「俺AIの最前線だぜ」とか勘違い。
歴史は繰り返すのだ。

215 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 13:22:51.90 ID:TcIyIoqu.net]
atomicityを保証するのを
呼び出し側の責任とするのか呼び出された側の責任とするのかは
pros/cons考えて使い分ければいい話でカプセル化必須とかにはならないよ

使う前にopenして終わったらcloseしてください的なAPIと
open/close含めて全部やってくれるAPIの違いと同じこと

216 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 14:22:11.40 ID:d6LVEoDZ.net]
>>208

> イキりだしたやつらが、
> 馬鹿を吊り上げる
> ダサすぎ。

うわぁ。典型的老害だな。

217 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 14:30:22.45 ID:uqHA56uo.net]
すげえ、スレタイも日本語になってなくて、さらにまともな議論にすらなってないのに盛り上がってるw
オブジェクト指向じゃないやつのオブジェクト指向型言語のコード見れると思ってきたが、カオスだなw

218 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 17:24:31.99 ID:MKv++1da.net]
staticおじさんの詭弁ばかり

219 名前:ナ議論にすらならないから、もう、staticおじさん隔離スレ作った方がいいかもね。

【隔離】オブジェクト指向アンチスレ
みたいな感じで。
[]
[ここ壊れてます]

220 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 17:45:37.11 ID:pGd8NqU0.net]
>>212
もういっそのこと、こんなんでどうだろうか?
【老害】staticおじさんと戯れるファンの集い【詭弁】



221 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 18:11:48 ID:QQ2hFNnS.net]
カプセル化はオブジェクト指向に限らずあるんだが
privateにして外からアクセス不能にすることをカプセル化だと思ってる奴は完全に勉強不足

222 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 18:24:19.05 ID:xc/k+9g/.net]
privateとprotectedの使い分けってみんなどうしてる?
俺は昔はpublic以外はよほど理由がない限り全てprivateにしてたんだけど、最近はよほど理由がない限り全てprotectedにするようになったわ。

223 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 18:33:11.88 ID:50iMo9Ym.net]
protectedはよくわからんので基本private
必要になったらprotected
必要ないならprivateでいい
変更してはいけないというルールはないんだから

224 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 18:33:48.93 ID:eLfJJdHb.net]
オブジェクト指向は素晴らしいだろ
金正恩という概念から好きなだけ金正恩を生み出せるんだぞ
staticじゃ1匹しか生み出せない
その1匹が糖尿で死んだら北朝鮮は成り立たない

225 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 18:36:58.13 ID:eLfJJdHb.net]
金与生は金正恩を継承したクラス
もしくは金日成の多態

226 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 18:37:59.75 ID:eLfJJdHb.net]
将軍様クラスのプロパティに性別があったとは思わなかったけど

227 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 18:38:24.42 ID:50iMo9Ym.net]
つまらんよ

228 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 18:39:33 ID:eLfJJdHb.net]
北朝鮮人ならえげつない死刑

229 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 18:42:48 ID:QQ2hFNnS.net]
金正恩というデータから好きなだけ金正恩産み出すのはオブジェクト思考に限らずできるんだが
オブジェクト指向と全く関係ない
勉強不足

230 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 18:59:47 ID:MKv++1da.net]
>>214
> privateにして外からアクセス不能にすることをカプセル化だと思ってる奴は完全に勉強不足

それな。
カプセル化はクラス使用者にとって必要な機能やデータを公開し、その他内部実装を秘匿することで標準ライブラリの如く使いやすいクラスを作りましょうという実にシンプルなものなのにね。

>>215
基本的にはprivate。自分が定義したメンバ変数やメソッドを継承先がどのように使うのか想像ができないのなら、privateにした方がいいと思っている。
継承先で意図しないメソッドの呼び出しや、変数の使い方をされたら困るからね。
当然、継承先での用途を考えた上でprotectedを使う場合もあるけどね。



231 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 19:08:51 ID:QQ2hFNnS.net]
いやもうお前らprivateとかprotectedとかいう言葉を使ってカプセル化を語るのやめたほうがいいよ
privateという機能がなくてもカプセル化は実現できるから
百歩譲ってデータ隠蔽だけをカプセル化と呼ぶにしても、privateのように外からのアクセスを不能にする機能がなくてもカプセル化は実現できるし

232 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 19:12:26 ID:fnCF+h71.net]
>>224
そんな方法あるんだ、どうやってやるの?

233 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 19:34:06.00 ID:eLfJJdHb.net]
>>222
オブジェクト指向でしか出来ないことがあるとでもw

234 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 19:47:03.28 ID:crXMwmqp.net]
pimpleパターンくらいは知っとけよ。。
てかカプセル化について馬鹿みたいにこだわる奴でまともなインターフェイス設計できる奴見たことねーわ。
リファクタリングもしないで一発で正解にたどり着けるとでも考えてるんだろうな。

235 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 19:48:24.03 ID:SG/+b/+N.net]
pimple 覚えた pimple ニキビ 覚えたpimple pimple

236 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 20:33:23.82 ID:QQ2hFNnS.net]
オブジェクト思考言語アレルギーの老害は論外として

特定のオブジェクト指向言語を習得している人は無数にいても、
オブジェクト指向そのものを理解してる人は殆どいなそう

237 名前:デフォルトの名無しさん [2020/06/26(金) 20:37:52.02 ID:Op8/e6Io.net]
>>229
それってオブジェクト指向という概念そのもの
がおかしいものだからですよね?
っていう議論をずっとしてるんですが
誰にでも理解出来て納得出来ることが正しい
ことだと思うんですが

238 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 20:43:25.43 ID:ODDHilOW.net]
> オブジェクト指向そのものを理解

どういうこと?
アランケイがどう考えたとか
OOPがどういう成り立ちだとか

239 名前:そういういこと? []
[ここ壊れてます]

240 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 20:54:59.05 ID:0CWC8I0Q.net]
アランケイが考えたオブジェクト指向は洗練され完成されたオブジェクト指向なのです。
初号機が最強であるのはどこの世界でも同じことです。
初期版が完成です。改良などありえません。



241 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 21:47:56.68 ID:ks+n8Bmz.net]
第一、privateサポートしてない言語なんて普通にあるしな。Javascriptなんてそうだし。

242 名前:223 mailto:sage [2020/06/26(金) 21:51:49.87 ID:ks+n8Bmz.net]
あ、ID変わっちゃった。223です。

243 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 22:03:26.05 ID:TcIyIoqu.net]
>>223
>カプセル化はクラス使用者にとって必要な機能やデータを公開し、その他内部実装を秘匿することで標準ライブラリの如く使いやすいクラスを作りましょうという実にシンプルなものなのにね。

カプセル化といった時に一般的な定義は2種類あってそれはそのうちの1つで情報隠蔽(Infomation Hiding)とほぼ同じ意味

もう一つはデータとそれを操作する関数/メソッドを一つの単位に束ねることを言う(隠蔽されてるかどうかは気にしない)

人によっては2つを合成した定義でカプセル化という言葉と使ってるので
まともな議論をしたければどういう定義でカプセル化と言ってるのか確認する必要がある

244 名前:223 mailto:sage [2020/06/26(金) 22:20:46 ID:ks+n8Bmz.net]
自分が議論したいというよりは...
このスレ主と>>138みたいな謎方向の議論をする人の思うカプセル化について、そりゃ違うだろって言いたいだけ。

215への回答は聞かれたから答えただけで深い意味はない。

245 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 22:21:20 ID:0CWC8I0Q.net]
>>235
違う違う。情報隠蔽のことをカプセル化と間違っていってる人がいるだけ

カプセル化の定義は必要なものだけをインターフェースとして提供する
必要ないものは隠蔽するってことなんだが

全部必要だから公開しているのに、カプセル化されてない!って言うやつがいるだけ

246 名前:デフォルトの名無しさん [2020/06/26(金) 22:33:13 ID:Pmgb6tek.net]
>>237
それが正しいという一次ソースあるん?

247 名前:デフォルトの名無しさん [2020/06/26(金) 22:33:39 ID:Pmgb6tek.net]
ないんだったらそれあなたの感想ですよね

248 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 22:34:17 ID:TcIyIoqu.net]
>>237
>カプセル化の定義は必要なものだけをインターフェースとして提供する
>必要ないものは隠蔽するってことなんだが

情報隠蔽と何が違うの?

249 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 22:35:17 ID:0CWC8I0Q.net]
>>240
情報隠蔽は、情報隠蔽しなければカプセル化じゃないって騒ぐが
必要なものだけを公開するなら、情報隠蔽しなくてもカプセル化

250 名前:223 mailto:sage [2020/06/26(金) 22:40:01 ID:ks+n8Bmz.net]
俺は...カプセル化の本質さえ抑えておけば、言葉としての違いは気にしないけどな。

privateにすること=カプセル化だと勘違いしていても、そいつがカプセル化の有り難みを理解できているのなら、深入りしないだけだよ。

言葉の定義にどこまで拘るかは議論の相手次第。

だが、staticおじさん、貴方は駄目だ。
俺のような細かいことを気にしないレベルの人間ですら駄目だわ。
昔からオブジェクト指向を批判し続けて初心者に誤解を与える老害だから見つけ次第、徹底的に叩く。



251 名前:デフォルトの名無しさん [2020/06/26(金) 22:42:23.17 ID:Pmgb6tek.net]
オブジェクト指向を勉強してる意識高い系のアホが
引数も戻り値も使わず、全部インスタンス変数使ってる例を見て
僕はstaticおじさんになっちゃいそう

252 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 22:49:00.20 ID:TcIyIoqu.net]
>>241
必要なものだけを公開するってことは
必要じゃないものは公開しない、つまり隠蔽しているんだから同じじゃない?

“隠蔽”の捉え方が違うのかな

253 名前:デフォルトの名無しさん [2020/06/26(金) 22:50:30.87 ID:Pmgb6tek.net]
構造化プログラミングをできるようになって
データと関数をオブジェクトとしてまとめるともっと良いかもと
オブジェクト指向を身につけるならいんだけど

オブジェクト指向では名詞を抜き出すんだ
そうやってオブジェクトを分ければ良いプログラムができあがるんだと
オブジェクト指向に幻想抱いてるアホが作ったプログラムは手に負えん

254 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 22:50:54 ID:0CWC8I0Q.net]
>>244
隠蔽を必須としてる、隠蔽のことだけをカプセル化と言ってるやつがいる
それが間違いということ

255 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 22:51:29 ID:0CWC8I0Q.net]
>>245
オブジェクト指向に幻想抱いてる天才が作ったプログラムなら手に負えるだろ?

256 名前:デフォルトの名無しさん [2020/06/26(金) 22:52:06 ID:Pmgb6tek.net]
>>247
天才は幻想を抱かない

257 名前:デフォルトの名無しさん [2020/06/26(金) 22:52:57 ID:Pmgb6tek.net]
僕は天才だからわかる
僕のどこが天才なのかは説明できないけどわかって

258 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 22:53:19.24 ID:0CWC8I0Q.net]
>>248
どうでもいいよw
プログラムが手に負えるかどうかは、アホかどうかが焦点だろって話
お前が長々と書いてることに意味がない

259 名前:デフォルトの名無しさん [2020/06/26(金) 22:54:34.05 ID:Pmgb6tek.net]
>>250
焦点はそこじゃない、どこみてんのよ!
構造化プログラミングの実装技術の先にオブジェクト指向があることを
理解してない人間をアホと言ってるんだよ、焦点はそっち

260 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 23:08:18.29 ID:0CWC8I0Q.net]
>>251
だからオブジェクト指向自体には問題がないって言ってるんでしょ?



261 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 23:08:49.57 ID:0CWC8I0Q.net]
人の話と技術の話の区別ぐらいつけよう。
人をいくらアホだ馬鹿だと叩いても
技術を否定したことにはならない

262 名前:デフォルトの名無しさん [2020/06/26(金) 23:09:53.77 ID:Pmgb6tek.net]
ListやStack、HTTP Clientといったものはオブジェクト指向と見事に調和するんだけど
それは変えられることがないから、これはこういう機能のものだってのが決まっていて
システムの仕様が変わっても変更されることがない

いっぽうでビジネスドメインにオブジェクト指向を適用しようとすると
仕様がころころ変わるから最初の設計ではうまくいかなくなることが多い
仕様が変わったらオブジェクトの設計もやり直せるならいんだけど
一度システムが動き出したら数万〜数億の人が影響受けるから
なかなか変えられないのが実際のところ
カプセル化されると困るというのはそういう状況の話じゃないかと僕は思いました

ドメインの安定性によってオブジェクト指向の適否は左右されると天才の僕は提言します

263 名前:デフォルトの名無しさん [2020/06/26(金) 23:12:02.84 ID:Pmgb6tek.net]
>>252
オブジェクト指向に幻想を抱くアホを作り出すオブジェクト指向の功罪は大きい
実装と離れて語られるオブジェクト指向は宗教と言っても良い

264 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 23:18:57.04 ID:0CWC8I0Q.net]
>>255
お前がそうであってほしいと願ってるのはなぜ?w

265 名前:デフォルトの名無しさん [2020/06/26(金) 23:20:58.30 ID:Pmgb6tek.net]
>>256
何いってんだお前

266 名前:デフォルトの名無しさん [2020/06/26(金) 23:21:20.47 ID:Pmgb6tek.net]
僕が願ってるのは世界平和だけ

267 名前:デフォルトの名無しさん [2020/06/26(金) 23:35:54.37 ID:n1YsnRgt.net]
カプセル化するなら
一切ソースコードレビューしなくていいんだな
変数やメソッドの命名もインデントも全部
適当にやるからな
文句つけるならテストの結果だけで文句を言って
くれよ、ソースコードには文句言うなよな。
例外をキャッチする必要もないな。
俺が利用するクラスで発生した問題はそのクラス内部の
責任だ。内部事情は意識しなくてもいいんだからな。
おっとロギングも内部事情だからやる必要ないな。
そんな事情は利用側は知りたくもないし結果だけが
欲しいんだもんな。

逆にこれらを押し付けるなら全部publicで問題ないよな。
クラスの内部を知りたいってことだからな。

「↑こいつはカプセル化が何なのかを理解してない。」


カプセル化おじさんがどうせこう言うだろうから先に
言っておいたわ。

268 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 23:45:57 ID:0CWC8I0Q.net]
>>259
「↑こいつはカプセル化が何なのかを理解してない。」

いや、先に言っておくと言っても、俺も同じこと言うんだが、
それで言われることを予測していたんだろ?
反論までは用意してないの?

269 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 23:50:21 ID:ks+n8Bmz.net]
珍しくこの手のスレでは比較的、リアルな批判がでたかも。

汎用性の無いビジネスドメインをオブジェクト指向を意識しながらクラス化したところで、メリット薄いよね?って話はまぁ、理解できる。
でも、ビジネスドメインを構成するクラスを汎用性の高いクラスだけで構成させることができれば、大分スッキリする。
いや、ほんと、そこがオブジェクト指向信者の腕の見せ所なんだがな。

たぶん、ビジネスドメインの責務分割の仕方を誤って神クラスを作ってしまうパターンにはまってるのかも。

270 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 23:56:26.67 ID:ks+n8Bmz.net]
でも、まぁ...開発者の立場次第にもよるのかも。
俺みたいに自社開発しているエンジニアだったら、利益を上げるレベルの品質を根拠にいくらでも納期を伸ばしてもらえるので、ド丁寧なオブジェクト指向プログラムを書く余裕があるけど、受託開発になると納期がギリギリに設定されがちだし(偏見?)、そんな最中、丁寧なコードなんて記述できるかって言われると...まぁ、どうなんだろうね。



271 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 23:58:23 ID:34AfLaws.net]
「状態によって挙動が変わる」ものが何十個も何百個も集まったら凡人には把握しきれない。

ましてや内部の状態が読み取りすらできないとなれば絶望的なことになるのバカでもわかる。

ウェブシステムや業務システムみたいにデータベースという巨大グローバル変数群を構造体にコピーしては書き戻すというのを繰り返すだけだと深い階層化が発生しないから問題は起きないんだろうね。

272 名前:デフォルトの名無しさん [2020/06/26(金) 23:59:12 ID:5Zl1C0wL.net]
>>260
お前が俺の書いたことに反論してみろ
お前が言う真のカプセル化とやらを説明しろ。

273 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 23:59:54 ID:TcIyIoqu.net]
>>259
前半はコードの品質をどういう観点から担保するかという話
例外やロギングはどういう責務/役割をどこに持たせるかという話
どちらもオブジェクト指向特有のものではない

274 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 00:00:02 ID:ihk0yOtr.net]
問題が起きやすいのはハードウェアに近い低層と、ライブラリ層と、ビジネスロジック層なんかに分業している分野だろうね。

275 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 00:05:48.57 ID:n2G2JMaM.net]
>>261
お前の主張の最大のメリットであるスッキリがお前の主観でしかない
そもそも設計書とソースの構造を一致させるための設計技術ではないのかな?

276 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 00:09:26.27 ID:ihk0yOtr.net]
データベースを使っているようなシステムはまず深い階層化は起きない。
RDBと階層化は相性が悪いからね。
それなのに深い階層化を使っている気分になっている人が多い。

ハードウェア制御絡みの本当に深い階層化を経験している人とは住んでいる世界が違う。

だから話が噛み合わない。

277 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 00:31:59 ID:npRplKHX.net]
みんな難しく考えすぎw
オブジェクト指向はインテリセンスが効くんで便利
それで納得しろよ これがないとダルいだろ

278 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 00:33:18 ID:0UrSdNRf.net]
>>267

> お前の主張の最大のメリットであるスッキリがお前の主観でしかない

事実を主観でしかないと批判されましても困るね。
実際、汎用性の高いクラス...それこそ、listやstack、http cliant並みに汎用性の高いクラスだけでプログラムが書かれてたらスッキリするだろ。
代替案があるなら、どうぞ。

> そもそも設計書とソースの構造を一致させるための設計技術ではないのかな?

何の話?

279 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 00:47:38 ID:eG65KKvD.net]
スッキリって何?コードが短くなるの?
頭悪いから50行以上は読めないんだけど

280 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 00:51:39 ID:n2G2JMaM.net]
>>270
いや、スッキリの定義は?
俺が見たらねっとりしてることない?



281 名前:デフォルトの名無しさん mailto:age [2020/06/27(土) 00:53:32.69 ID:kHv6hhb8.net]
>>263
その深い階層を扱うのはC言語でしょう?
C言語はオブジェクト指向です!

282 名前:デフォルトの名無しさん mailto:age [2020/06/27(土) 01: ]
[ここ壊れてます]

283 名前:02:58.36 ID:kHv6hhb8.net mailto: >>261
ドメインが安定してるところはオブジェクトを作って
ゆるふわなところは骨組みメソッド作る感じ?
それなら僕と同じです
[]
[ここ壊れてます]

284 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 01:03:48.38 ID:0UrSdNRf.net]
いや、普通にOOPのコードだけど...。
逆に、list,stack並みに...で、なぜ伝わらない。
当たり前すぎて伝わらなかったのか、初めて聞いた単語だから伝わらなかったのか。
このスレの連中だと高低差激しすぎてコミュニケーションが難しいな。

285 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 01:04:44.30 ID:0UrSdNRf.net]
>>274
あっ、はい。そうです。

286 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 01:08:16.33 ID:0UrSdNRf.net]
>>274
強いて言うのなら、ドメインが安定しているところに見える範囲がオブジェクト指向信者とオブジェクト指向使いとstaticおじさんで、どれくらい違うのかな

287 名前:って感じですが。 []
[ここ壊れてます]

288 名前:デフォルトの名無しさん mailto:age [2020/06/27(土) 01:11:06.46 ID:kHv6hhb8.net]
こうなるんだったらもっとこういうオブジェクトにすれば
良かったと思うことがザラにある
今最高にきれいでも未来の仕様変更でど汚くなることもある
いま汚くても未来の仕様変更がきれいにできることもある
その見極め方が僕には未だにわからない

289 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 01:11:51.83 ID:F7GoDPAy.net]
>>269
いや動的になる分、効きづらくなるだろばか。
それでもモジュール切り離しの視点で良いこともあるってのがオブジェクト指向の旨みなわけだが。
依存逆転のモジュール構造が作りやすいってだけの話なのにバカが変な哲学持ち出すから
カスみたいな輩がお前はわかってない、俺が真の意味を理解してるとか言い出すわけだよ。

290 名前:デフォルトの名無しさん mailto:age [2020/06/27(土) 01:20:22.14 ID:kHv6hhb8.net]
依存性を逆転させて良いことがあるっていうんですか!?



291 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 01:27:34.87 ID:BNc+T5Ob.net]
1万行超えてもスクロールして作業するのか?

292 名前:デフォルトの名無しさん mailto:age [2020/06/27(土) 01:28:03.05 ID:kHv6hhb8.net]
業務で扱うようなある程度複雑な仕様をどう設計して実装するか
みんなでプログラミングして比較してみたいねー

293 名前:デフォルトの名無しさん mailto:age [2020/06/27(土) 01:31:55.47 ID:kHv6hhb8.net]
>>281
内容によるんじゃないかな
みっちりコントロールフローが1万行あったら嫌だけど
御経がほとんどを占めてたらわかるだろうし徳が高まりそう

294 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 02:14:37 ID:n/FbqQvh.net]
>>282
業務というのはIBM(International Business Machines )より
パンチングカードの集計から始まっているので
主にアンケート調査結果や在庫管理プログラム
の設計ということになるだろう

295 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 06:21:43.43 ID:pgI/H4Wp.net]
>>282
業務に限らず、OOPに限らず
そもそもはそれが問題なんよ
複雑さそのものが
ある程度以上複雑なモンは人類にはムリなんよ
それが人類とプログラミングの関係なんよ

サンプルプログラムや学校の課題書いたり
趣味で小さいの書いてる連中と
ある程度以上複雑なモンを書いてる連中とはまずそこからして
想定してるもんが違いすぎる

296 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 07:01:10 ID:U90iCGW6.net]
>>285
きっと>>282は
小さな趣味プログラムでも大きな業務プログラムでも
ほらね、カプセル化したコーディングだとあーだこーだ
だからいったじゃん
「カプセル化は絶対にやめろ!」
という結論にもっていきたいだけだお

297 名前:デフォルトの名無しさん [2020/06/27(土) 07:42:28.66 ID:e0+LQFD/.net]
「オブジェクト指向は高度で複雑な事をやる技術者
だけが恩恵を受けられるもので簡単なシステム
書いてるような凡人プログラマは恩恵を
感じにくい。」

だったら入門書でそんなもの教えるな
初心者プログラマにソケット通信や
システムコールやカーネルみたいな話を
いきなり教えるんか?

298 名前:デフォルトの名無しさん [2020/06/27(土) 07:44:28.06 ID:e0+LQFD/.net]
凡人にとってオブジェクト指向は
邪魔でしかないんだよ。

高度な技術者の勝手な利便性を
凡人に押し付けるな。
凡人の方が大多数なんだよ。

299 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 07:54:23.66 ID:BNc+T5Ob.net]
何でプログラムやってるんだ?
もっと簡単なことがあるだろ

300 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 08:29:03.79 ID:0UrSdNRf.net]
>>286
どうだろ。
staticおじさん(「オブジェクト指向ってしっくりこないんです」の記事を書いて炎上、詭弁を重ねて意固地にstaticを薦めた有名な老害)じゃないのなら、まだ、大丈夫なんじゃね?



301 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 08:38:52.96 ID:0UrSdNRf.net]
それ以前に、カプセル化は絶対駄目の結論に持っていこうとしているのか?
日が変わるとID変わるから、誰が誰だかよくわからなくなってきた...。

302 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 09:43:50.27 ID:8YCrt6Qf.net]
何事も程度次第
ただ丁度良い程度を知るのは少数の天性のセンス持ちだけで
凡人には理解できなかったり極端に走ったりする

俺は凡人とセンス持ちの間、というか凡人の域を超えられないのかなあ
プログラム書くたびにどの程度で済ませるか、いつも迷ってる

303 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 10:00:13.69 ID:pgI/H4Wp.net]
OOP批判の大半はクラス設計の難しさによる
OOPによってもたらされたクラスライブラリが
十分に使いやすいのに対して
自分でクラスやインタフェースを作ろうとしたとき
納得の行かない結果になる

問題の切り分けが出来ず
再利用性のある単位ぴったりにフォーカスできず
一緒にあるべきものを別にしたり
別にあるべきものを一緒にしたり
縦に割る物を横に割ろうとしたり
いろんな判断をあやまった結果

最後に、クラス設計が悪いのではなくてOOPそのものが悪いと断ずる

304 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 10:09:46.57 ID:twDHZDh4.net]
>>287
別に初心者だってオブジェクト指向の恩恵は受けられるだろう。良くあるコンテナや文字列とかの基本的なものだってオブジェクト指向的なものだし。

それに初心者の内からオブジェクト指向について知っておく、慣れておくことは重要だろう。
世の中の便利なライブラリやフレームワーク等の多くはオブジェクト指向で作られているからそれを使えるようになるために必要。
自分で設計するのも初めは難しいが、理屈や理論を学びながら実例に触れ、試行錯誤しながら徐々に慣れていく。

何より、初心者だからとオブジェクト指向をまったく触れずに手続き型のみで経験を積んで、ある程度自分なりのノウハウや経験論を身に付けてから別のパラダイムを取り入れようとすると、中にはアレルギー反応を起こして適応できなくなってしまう人もごく稀にいるから。

305 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 10:47:57.21 ID:n2G2JMaM.net]
長い上に全く中身がないな
スッキリ以上のオブジェクト指向のメリットは出てないからね

これで技術者やってるつもりなんだから早く死ねよ

306 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 11:57:57.12 ID:0UrSdNRf.net]
>>295
お前の無駄口程、無駄な発言は無いけどな。

307 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 12:40:58.84 ID:ut+wnsgT.net]
カプセル化って別に外部からのアクセスを不能にすることじゃないよ
外部から『直接的』にアクセスさせることを避けて、そのかわり外部向けにわかりやすい何かを提供すること
現実のカプセルのように、扱いにくいものを隠して扱いやすく提供すること
別にカプセル化してもリフレクションやその他諸々で遠回りなアクセスが可能なこともある
カプセル化ってのはかなり意味の広い言葉で、「臭いものに蓋」みたいなこと全般をカプセル化と呼ぶ
極端な例だと、関数にわかりやすい名前をつけることで関数内部を見なくて済むようにすることもカプセル化と呼ぶ

308 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 12:43:14.13 ID:npRplKHX.net]
>>288
いやいや兵隊がよくわからないのに使えるするのが
オブジェクト指向の利点の一つだろ つかそれができないなら
オブジェクト指向にする意義がない まあ兵隊がよくわからないのに
使えるぐらいのオブジェクト指向ができるなら、設計した本人たちは
そもそもオブジェクト指向にしなくても出来ちゃうって逆説はあるわな

309 名前:デフォルトの名無しさん [2020/06/27(土) 13:14:49.52 ID:e0+LQFD/.net]
>>293
その通りだと思う
オブジェクト指向で作られたOSSの、ライブラリは
とても便利だし、役に立つと思う。

なら初心者や凡人へはクラスをインポートして使い方
のみを教えるべきで、クラスの作り方なんて
教えない方が親切だと思う

正直、自分でクラスなんて作りたくないし
組織内のメンバーが作成したローカル内の
クラスなんて利用や継承したくないし
自分が作ったクラスを誰かに利用して
欲しくない、使い捨てで十分。
再利用性は以前自分が書いたコードを複製
して微修正すればいいよ、
自分が書いたコードだから修正箇所は
把握して

310 名前:る。


JavaScriptやpyみたいな言語はオブジェクト指向
導入してるけどクラスの作成は必須じゃない
だけどJavaみたいな静的言語はクラスの作成が
必須になってる。ここがおかしいと思う。
クラス作ること強制してる言語仕様やフレームワークは
おかしいと思う。
[]
[ここ壊れてます]



311 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 13:26:54.01 ID:eG65KKvD.net]
再利用しない前提ならそりゃ無用の長物だわな

312 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 13:45:44.90 ID:ssxfEnBq.net]
そして再利用しようとすると微妙に仕様が変わって結局中身を改造しないといけなくなる罠。
汎用的なパーツ以外はクラス化すると余計手間かかるな。

313 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 13:51:13.06 ID:eG65KKvD.net]
なんというかprivate云々とかそういう次元の話じゃないよねこれ
なんか脱力した

314 名前:デフォルトの名無しさん [2020/06/27(土) 13:56:46.31 ID:kHv6hhb8.net]
再利用しなくてもテストしやすくなったりするからオブジェクトは素敵な概念だと思うよ

315 名前:デフォルトの名無しさん [2020/06/27(土) 13:58:08.98 ID:kHv6hhb8.net]
修正が必要になったとき、それを使う側に影響を与えないっていう性質があっていっぱいちゅき

316 名前:デフォルトの名無しさん [2020/06/27(土) 13:58:50.41 ID:kHv6hhb8.net]
まあ修正の程度にもよるんですけどね!(げきおこ

317 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 14:06:34 ID:UiFDXh57.net]
JavaをdisるJava全否定のスレッドなのね

318 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 14:13:22 ID:UrcM2fcl.net]
このスレタイの主張、可能なら複数の言語で、
オブジェクト指向で書かれたそれなりの量のコードを、
それより機能的で保守性があって行数も少なくて万人が読みやすいようにリファクタリングするとかして証明して欲しいなあ

それがプログラマの矜持ってもんだと思う
コードで語れってね

319 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 14:22:56.55 ID:Z/pHF8i9.net]
>>273
カプセル化はC言語でもできる。

320 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 14:23:12.65 ID:1p1mL4Jd.net]
バカなやつほど長文で演説した挙げ句オブジェクト指向のメリットをスッキリ以上のモノを挙げられない
レスしにくるなよ惨めだから



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

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になるわけです。
[]
[ここ壊れてます]

478 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:31:52.99 ID:npRplKHX.net]
>>462
ホントにタグチメソッド知らなかったのか?
その割には理解が早いな

ようするにバクをなくしたいのだろ?
それならバクがでるかどうかのテストをすることが自体がずれてるんだ
そんなことは最終段階でやることじゃないんだ どうせモグラたたきになる  
最初の設計段階で徹底的にいじめ抜け
どれだけ変更に強いかをテストするんだ
品質が欲しければ,機能を測れ これにつきる

479 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:40:30.32 ID:gS37C1rZ.net]
>>463
では「機能を測る」とは?
どうやって測るのかを言ってみましょう
できるかな?w

480 名前:デフォルトの名無しさん [2020/06/27(土) 23:41:10.95 ID:ZFnYFbMi.net]
単体テストとどう違うの?



481 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:41:18.54 ID:gS37C1rZ.net]
>>463
> その割には理解が早いな
あんなもん当たり前のことを誰かがまとめただけだからね
デザインパターンと一緒。
よく知られたものに、名前をつけてるだけ

482 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:42:26.37 ID:gS37C1rZ.net]
>>465
複雑なものを複雑のままテストをしても意味がない
シンプルにテスト可能な形に設計を変えることがテストの目的の一つ
ようはprivateはpublicになるように設計を変えろということ

483 名前:デフォルトの名無しさん [2020/06/27(土) 23:43:10.60 ID:ZFnYFbMi.net]
単体テストって結合してからテストするの?

484 名前:デフォルトの名無しさん [2020/06/27(土) 23:46:52.77 ID:ZFnYFbMi.net]
王家秘伝のレシピ教えてやるよ。

#define private public

皆には内緒だぞ。

485 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 01:34:12.55 ID:wUTwjqhp.net]
>>469
#define ディレクティブを使用して、通常 C および C++ で行うように定数値を宣言することはできません。
C# の定数は、クラスまたは構造体の静的メンバーとして定義することができます。
そのような定数がいくつかある場合は、それを保持するための "Constants" クラスを個別に作成することを検討してください。

486 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 02:01:57.56 ID:pODeKu4C.net]
privateメソッドの直接テストしたいけど可視性を変えたくない場合は
リフレクションを簡単に使えるようにしてるテストフレームワークだったりライブラリ使えばいい

ちなみにGoやRustはprivateもテストできる仕組み持ってる

487 名前:デフォルトの名無しさん mailto:age [2020/06/28(日) 05:51:03.49 ID:qNzQpEfW.net]
>>469
あざーす!国王あざーす!

488 名前:デフォルトの名無しさん mailto:age [2020/06/28(日) 05:51:56.56 ID:qNzQpEfW.net]
>>471
ええなー

489 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 09:51:30.71 ID:lfkBrldT.net]
>>463
ソフトウェアの作り方も知らずにタグチメソッド真に受けたら、
糞みたいな品質のものしかできんぞw
単体テストってのは設計の一部なんだよ。品質テストとは全く異なる。
抽象論でタグチメソッドを適用しようとしてる輩が一番ヤバい。

490 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 10:22:04 ID:4vfVPlvE.net]
なんだミニ四駆のモータに学ぶことでもあんのか?って思ったら
品質100%の更に上の話じゃねーか

現場の単体テストもロクにやらないクソが問題になってるITでそんなもんいらん



491 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 12:40:59.37 ID:L5Cpw8A4.net]
中の磁石が強いほどトルクが上がって回転数が下がる
磁力が弱いほどトルクが下がって回転数が上がる

492 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 13:22:34.10 ID:S7usk0qp.net]
>>326
わかりやすい

493 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 18:21:30.86 ID:3Si3AZJb.net]
privateのテストってリファクタリングの妨げじゃないのか

494 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 18:55:54.96 ID:nHckGJvd.net]
開発体制が複数の会社でピラミッド状の階層化されてたら指揮系統的に相当厳しいだろうね。

495 名前:デフォルトの名無しさん [2020/06/28(日) 19:33:26.78 ID:JoVMtTbA.net]
Javaの修飾子宣言鬱陶しくて

496 名前:ルんと嫌い []
[ここ壊れてます]

497 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 14:12:08 ID:EmVrB3rr.net]
明示的な状態管理は、(不可能ではないにせよ)管理すべき状態の量が増えてくると非常に困難になってくるところ、関数型言語の考え方を取り込むことによってその負担を軽減できるのではないかーーという意見もあるようだけど、
このスレの人(カプセル化肯定派・否定派いずれも)としてはどう?

498 名前:デフォルトの名無しさん [2020/06/29(月) 19:41:29.30 ID:bVpw4tuk.net]
カプセル化の可否はともかく
階層化の有害性についてはこう思います。
例えばディレクトリを階層化のすると
親ディレクトリと子ディレクトリに同じデータを重複格納
する人が出たりしてデータの二重管理が発生
しやすくなると思います。
そのうちどれが正なのか分からなくなります。
あと単純に子供に格納するほどデータのアクセスパスが
長くなってどこにあるのか探し出すのが大変になると
思います。

これはオブジェクトの階層構造でも
JSONなどの構造についても言えることだと思います。

499 名前:デフォルトの名無しさん [2020/06/29(月) 20:06:40.16 ID:cYsf6eW3.net]
プログラムで階層化なんて意識したことないけど問題起こったことない
分野が違うのかな

500 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 20:18:08.97 ID:6d9dL1u1.net]
そう、問題が起こるのはいつも人間関係です



501 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 20:19:42.34 ID:tYVp58Ca.net]
つまり、人間関係の問題を持ってきても、技術を否定したことにはならないのです。

502 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 21:42:10.57 ID:P3P3vIj6.net]
>>483
>>1に書いてあることが理解できない?

503 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 23:35:22 ID:L39gVdue.net]
>>482
そこで挙げている階層化の問題だが、階層化せずフラットに格納すれば解決するのか?
階層化しないということは同じレベルに大量の物が同格に並ぶわけだが、そうなると目的の物を探すのが困難になりすでにあるデータと同じものを重複して格納する危険性があるだろう。
またアクセスパスが長くなるというが、フラットな構造で多数の物を適切に命名しようとすれば階層的な名前付けが役立つはずだが、それすら長くなると忌避するなら場当たり的に短い名前を着けていっていずれ収集が着かなくなるだけでないの?
お前さんが挙げた階層化の問題は階層化の仕方が悪い(下手な)だけで、階層化をしなければ解決するというものではなかろう。

504 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 05:33:42.93 ID:v2qXZCJh.net]
結局、分類だったり抽象化のやり方がクソってだけの話だろ。
フラットにしようが階層にしようが、クソな分け方したらどうにもならんてだけの話だ。

505 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 08:05:51.26 ID:GiU27GCt.net]
https://monobook.org/wiki/%E9%9A%8E%E5%B1%A4%E5%8C%96%E3%81%AE%E6%9C%89%E5%AE%B3%E6%80%A7

506 名前:デフォルトの名無しさん mailto:age [2020/06/30(火) 08:11:00.58 ID:PIU/381m.net]
>>486
ぴえ?

507 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 10:40:18.75 ID:J3IrN4Ey.net]
>>1が例に上げてるRFC3439は「Layering Considered Harmful」という強い言葉を使ってるが
レイヤ化は万能じゃなくデメリットもあるという当たり前のことを書いてるだけ
もちろん「カプセル化は絶対やめろ」なんてことは書いてない

メリット・デメリットを把握した上で
状況に応じたトレードオフの判断ができない人(>>1)には
ソフトウェアの設計はできない

508 名前:途中から見た。 mailto:sage [2020/06/30(火) 19:35:05 ID:g7PLkMcM.net]
なんか、privateメソッドのテストでもめているけど、なんで。
そもそも、privateメソッドを外部から呼び出してテストしないといけない場面が想像できないのだが。
クラスライブラリのコードを紛失したとか笑えないケースを想定しているの?

509 名前:デフォルトの名無しさん [2020/06/30(火) 19:48:43 ID:MKfuvp+I.net]
gitや自動ビルドツールの存在がなかった時代の
オブジェクト指向技術は淘汰されてもいいんじゃない?

昔はこれらがなかったからカプセル化で神経質に
防御してたけど
今は無理にパッケージを固めてやり取りすることが
なくなって

gitでソースを差分転送して再ビルドする方式に
切り替わった
旧仕様はブランチを切り分けといて復旧が簡単に
なって、仕様変更に対してそこまでビビらなくて良くなった。

それと自作のアプリのオブジェクトで
webからインストールしたライブラリや
フレームワークが自動生成して提供するもの以外で
それほど長時間状態を保持するような巨大なオブジェクト
構造を自作設計して作成することがあるか?
あるとすれば
webのセッションや
オープンワールドやFPSみたいなゲームくらいか

510 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 20:19:26 ID:v2qXZCJh.net]
今でもSIerなんかはコード書き換えないことに固執してるから可視範囲に対して神経質なんだよ。



511 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 20:27:32.13 ID:+5DxT57L.net]
>>492
それは「テストの時にだけpublicに変えればいいじゃん」か「privateはpublicに内在してるから直接テストする必要ないじゃん」のどっちの意味ですか?

512 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 20:58:39.82 ID:Ya6sc1A9.net]
>>492
コード紛失してなくても他社開発のをガッチャンコだと手が出せないでしょ。

513 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 20:58:42.09 ID:ww2Xd+MO.net]
× テストの時にだけpublicに変えればいいじゃん

○ テストがやりにくいというのは設計がまずいということ
自然な形でpublicになるような設計を改善すべきだ

514 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 20:59:02.71 ID:Ya6sc1A9.net]
小規模なら問題ない

515 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:38:14 ID:BIUXizBX.net]
他社のコードをテストすんの?

516 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 22:07:21.34 ID:GiU27GCt.net]
>>497
はぁ?バカはレスすんなよ

517 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 22:42:13.84 ID:zKRJDZmr.net]
>>499
そりゃ結合試験はするだろ

518 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 23:23:26.17 ID:BIUXizBX.net]
>>501
結合試験時に他社コードのprivateメソッドを態々呼出してテストすんの?

519 名前:途中から見た。 mailto:sage [2020/07/01(水) 00:09:32.11 ID:vgPSMoJs.net]
>>495
よくわからないが...強いて言うなら後者?
第一、クラスって実装者が責任を持ってテストするものだろう。
なんで、privateで定義されたものをpublicにして呼び出そうとするのかも、正直、わからない。
ブラックボックステストでもしたいの?
まぁ、ブラックボックステストってprivateメソッドを呼び出せば成立するかというと、違うと思うけど。
正直、何がしたいのかわからなさすぎて困惑している。

520 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 00:11:23.37 ID:Dh09feZF.net]
>第一、クラスって実装者が責任を持ってテストするものだろう。
これが守られてりゃこのスレみたいな議論は起こらんわ。



521 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 00:22:36 ID:dTufBNXb.net]
守るも何もクラスに不具合があれば実装者の責任だろ
って言うのが通用しないのか?

522 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 00:26:31 ID:Dh09feZF.net]
責任といってももういない奴に責任は取れんわな。

523 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 00:33:27.93 ID:XAYXSYxH.net]
客先に納めたプログラムを客先が勝手に変更したら責任は外れる契約になってると思う
これは弊社の納めたプログラムではありませんってなるから
社内で引き継いだなら文句を言うのは自由だが任された者がなんとかしろの精神だろ

524 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 00:43:31.96 ID:Dh09feZF.net]
クラスごとにしっかりテストがあって
引き継ぎがしっかりされる職場ばかりなら何の問題もないだろうね。
とても幸せな世界でいいですね。

525 名前:デフォルトの名無しさん [2020/0 ]
[ここ壊れてます]

526 名前:7/01(水) 01:04:03.02 ID:Ke5amsYp.net mailto: まだ続いてたか
結局問題は出来の悪いモジュールをどうするかって話だろ
[]
[ここ壊れてます]

527 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 01:36:00.07 ID:bx11ZQ99.net]
違うよ
visualstudioがテストプロジェクトでprivateをpublicみたいに呼べるようにするだけ

528 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 06:19:16.09 ID:y/Wgtnem.net]
>>503
privateを呼び出す必要があるってのはUnit Testの時で、実装者とテスターが同一人物かどうかは関係ないよ。
オブジェクト指向に限らずテスト理論の話になっちゃうんだけど、プロジェクトや規格で指定されるUnit Testの種類によってはpublic経由でprivate呼び出してたら組合せ爆発してテストドライバやスタブの開発やレビューだけで多大な工数が必要になってやってられなくなる。
なので十分に単純化されたprivateを含めて関数毎にテストする必要が出てくるのよ。

529 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 06:46:59.11 ID:5jdJ/dE3.net]
>>501
> そりゃ結合試験はするだろ

統合試験って言うことは、当然標準ライブラリの
テストも行うんだよな?例えばprintf関数のテストとか

530 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 06:53:14.54 ID:lozEWamw.net]
>>511
> public経由でprivate呼び出してたら組合せ爆発してテストドライバやスタブの開発やレビューだけで多大な工数が必要になってやってられなくなる。

そういうことだよね。だからそれはpublicメソッドが行ってる機能が多すぎるわけで
複数のpublicメソッドに分解するわけ。これが設計。

適切な関数の行数って思ったより短いものだから。
俺の場合、一部のcaseテーブルのようなものを除いてロジックと呼べるようなものがあるコードは
長いもので1関数30行〜40行程度半分以上は10行程度だよ



531 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 08:23:11.98 ID:y4QPMVjI.net]
>>512
何時何分何秒地球が何周回ったときに言いましたかーみたいな煽りだな

532 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 08:27:13.77 ID:3Re1TFuk.net]
>>512
そりゃprintf使うシステムの結合テストならもちろん結合テストのセンスでprintfもテストするよ。
ユニットテストの粒度とは違って「〜が標準出力されること」ってテスト項目になるけど。

533 名前:途中から見た。 mailto:sage [2020/07/01(水) 11:10:06.09 ID:LiVkSFt2.net]
結合テストと総合テストって同じ意味なのか?

534 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 12:14:34.41 ID:hgyYQ8XK.net]
総合テストって検収テストと同じじゃね?

535 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 12:24:10 ID:wljUBRxY.net]
テストの呼び方はプロジェクトによって違うからなんとも言えんなぁ

536 名前:途中から見た。 mailto:sage [2020/07/01(水) 12:36:28.97 ID:LiVkSFt2.net]
なんというか...コミュニケーションがまともにとれていないのでは?

恐らく、他人の作ったライブラリに対して単体テストをお前はやるのか?という意図で聞いた質問に、結合試験はするだろと回答したり、
結合試験と総合試験という字面で見ると似ているけど全然違う話を混在させたり、
似ているようで関係のない話を持ち出して混沌としているな。

語りたい事の本質が行方不明になっているように見える。

537 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 14:20:36 ID:JqIYLyXt.net]
>>512は総合じゃなく統合って書いてるぞ

結合テストのことを統合テストと呼ぶところもある
結合の度合いによって結合、統合、総合とそれぞれ分けてるところもある

単なる読み間違いなのか結合 = 統合の意味で使ってるのかは知らんけど

538 名前:途中から見た。 mailto:sage [2020/07/01(水) 14:54:20.92 ID:LiVkSFt2.net]
うわっ!恥ずかしいミスをしてたのは自分だったか。あとで、読み直す...。

539 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 17:50:33.35 ID:1PwA88RR.net]
visualstudioのテストプロジェクトが不甲斐ないってだけやし

540 名前:デフォルトの名無しさん [2020/07/02(Thu) 19:42:17 ID:84e/i8uV.net]
privateメソッドテストするとか正気?
テストしなくてよくするためのprivateだろ



541 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 19:49:51.80 ID:iX514c6x.net]
テストする必要があるというのは
全部書き直した方がましということだが

542 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:08:44.37 ID:/yt09sjO.net]
>>523
特大クラス一つの

543 名前:中に全部privateでメソッド作成したら
どういう理由で全メソッドテスト免除になるの?
[]
[ここ壊れてます]

544 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:10:40.42 ID:/yt09sjO.net]
マイクロソフトに頼らんで独自にテストプロジェクト作ってるような会社はできてんで
visualstudioの都合でテストやりたくないって言ってるだけだろクズども

545 名前:デフォルトの名無しさん [2020/07/02(木) 20:46:21.86 ID:Vurtjy2V.net]
関数どころか変数に至るまで一つ一つ丁寧に検査してましたわ。

546 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 21:29:57 ID:lIo9GiA1.net]
>>525
どんだけ巨大なクラスでも全部privateだと外から一切呼び出せないデッドコードになるのでテストする意味さえないだろ。

547 名前:デフォルトの名無しさん [2020/07/02(Thu) 21:35:43 ID:UKbwg08G.net]
>>528
せやかてpublic通してたら結合テストじゃんw

548 名前:デフォルトの名無しさん [2020/07/02(Thu) 21:36:02 ID:UKbwg08G.net]
unit testの意味わかっとんのけ?

549 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 21:37:29 ID:7zBU/W9S.net]
プロジェクトによって違ってたなあ

550 名前:デフォルトの名無しさん [2020/07/02(Thu) 21:40:09 ID:UKbwg08G.net]
>>531
せやろ、ワイの会社も結合テストのことをunit testと呼んでるわ
本当のunit testはやってない



551 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 22:14:17.02 ID:/yt09sjO.net]
>>528
Form1とかそんな感じじゃん

552 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 07:01:01.95 ID:Ul5hp/bW.net]
>>525
誰も使わんからテスト不要だね

553 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 08:34:55.79 ID:zR3byV+3.net]
>>532
それは珍しいな

554 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 08:56:10.03 ID:N+TCe3uh.net]
これは酷い。RFC 3439はネットワークの仕様の話であってオブジェクト志向なんか
一切関係ないし、プログラミングの話でもない。

偏差値が低い学校でだけ教えてた事実なんてないしアメリカの大規模システムは
全部OOでカプセル化が基本。

的外れすぎて開いた口が塞がらない。これ書いた人間が全く一切わかってないのはよくわかった。

555 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 09:22:53.27 ID:r9jTvXIP.net]
>>536
わざとバカなことを言って他の人が本気で反論や議論してくるのを笑ってる可能性もゼロではないが、まあ単に本物のバカという可能性のが高いと思う

556 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 10:20:55.42 ID:N+TCe3uh.net]
>>537
本気感が凄いね。反論とかしようがない1から10まで間違ってるレベルだし。

557 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 10:22:52.04 ID:N+TCe3uh.net]
こんなんでもRFC確認する人なんてほとんどいないだろうし、クラウドがあるじゃないですか!
のレベルの日本ではショーンK的に通用しそうというか、結構このスレでも通用してるのがおっかない。

558 名前:デフォルトの名無しさん [2020/07/03(金) 10:25:42.60 ID:lDWf2b6S.net]
Javaで外クラスから内クラスのprivateメンバが見れるのはなぜですか?

超論理的思考によるとどう考えても理論に欠陥があり矛盾してる。
みなさんはこのJavaにおけるクラス体系をおかしいと思いながら割りきって使ってるのですよね?

559 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 10:27:37.08 ID:N+TCe3uh.net]
単に道具だから自分で考えて必要なら使えば良い訳で。

カプセル化ってのはつまり部署ごとにお前のところはお前で責任を持て、
お前が変えたからって他の部署に仕事をさせるな、ということだから、
それができてればなんでも良い。

560 名前:デフォルトの名無しさん [2020/07/03(金) 11:40:51 ID:x82j4VqA.net]
複数の開発会社が絡む大規模案件と
一社開発や個人開発の小規模案件を
ゴッチャゴチャにして同列で語り合うから、話が噛み合わないし、話が終わらないんよ。



561 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:47:43 ID:Gy+Up1+B.net]
>>542
各クラスの仕様を明確にするのか仕様を決めずに実装するかの差だよ
開発手法の差だが開発規模の差ではない

562 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:51:37 ID:uIgOlo/V.net]
>>543
仕様が明確じゃないのにテストする意味あるの?
それともprivateメソッドの仕様を明確にするの?

563 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:53:31 ID:N+TCe3uh.net]
そもそもOO

564 名前:ニかは大規模開発するために出てきた手法だから個人で小さいもの
作ってるなら関数でもスパゲッティでも本人わかってりゃいいわけだし、昔は
関数でも部署ごとで話し合ってちゃんとやってたけど、どうしても直接アクセスして
変更の際ぶっ壊れるようなものを作るやつが出るから、じゃあもう見せなきゃそういう
事態は起こらないということで実際それはうまくいってる。

個人のソフトとかは好きにすれば良いし、好きにできるようになってるんだから
それぞれ道具を自分の必要に応じて使って勝手にやれば良い。
[]
[ここ壊れてます]

565 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:59:07 ID:Gy+Up1+B.net]
>>544
「privateはxunit testingしなくていい」と言われる理由はそこだ
他のクラスとの関わりとして必要な仕様は非privateメンバのみに着目すればいい
publicメンバの振る舞いが変わらずすべてのテストをパスできるならprivateがどう変更されようが他のクラスからは関係ないからな

566 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:07:31 ID:uIgOlo/V.net]
つまりprivateをテストするってことは仕様が明確になってるわけで
publicにしても問題ないってことだよね

567 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:07:34 ID:Gy+Up1+B.net]
勢いで書いたから非privateとpublicがごっちゃになってるけどこの手の話題でpublicと書いてあったら全部非privateと読み替えて下さい

568 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:10:41.37 ID:BB9T+E2r.net]
>>540
超論理的思考によるとって、論理を超えた思考なんかされたって会話にならないから、論理的思考をした上で疑問があれば相談してくれ。

569 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:16:49.80 ID:N+TCe3uh.net]
Privateをテストするかどうかはプロジェクトごとのテストのやり方次第だし、
なんのテストかにもよるわけで。

デベロッパーテストなら当然するだろうし、リグレッションテストで普通は
プライベートメソッドをテストしないだろう。

その辺はカプセル化とかOOとかはあまり関係の無い話。

570 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:22:55.88 ID:hDsckVNf.net]
privateもテストしろよハゲ



571 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:26:06.83 ID:sqXfkC+n.net]
privateをpublicにしてもいいよねって言ってるやつは、改修で命名とかしたことないんかな

572 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:26:36.41 ID:hDsckVNf.net]
どこの現場でも通じないトンデモ理論を前面に出して話してんじゃねーぞガイジ

573 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:29:48.69 ID:Gy+Up1+B.net]
>>551
クラスの仕様変更でpublicになったときに追加すればいい
極端な話、複数のpublicメンバの中でprivateAとprivateBが使われてて各privateの挙動は実装者の想定と実は違ったとしてもすべてのpublicメンバの挙動が仕様通りなら(クラス仕様変更して変なバグを引く羽目になるまで)なんの問題もない
その時対処する事案

574 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:55:27.30 ID:MMMvRh6C.net]
privateな状態を確認するテストのがテスト数が減る。
二つのpublicなメソッドの関連をテストする場合、
n*m になるが
状態が k 個の場合、 (n + m)*k になるわけだよ。
無理にpublicだけのテストを書くことがどれだけアホか。

575 名前:デフォルトの名無しさん [2020/07/03(金) 13:00:40 ID:lDWf2b6S.net]
Javaで外クラスから内クラスのprivateメンバが見れるのはなぜですか?

論理的思考によるとどう考えても理論に欠陥があり矛盾してる。
みなさんはこのJavaにおけるクラス体系をおかしいと思いながら割りきって使ってるのですよね?

576 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:19:27.55 ID:Gy+Up1+B.net]
>>555
privateテストでテスト数減るならその方がいいのは自分も同意

誤 privateはテストしなければならない
誤 privateはテストしてはならない
正 必要なテストだけ簡単になるように書けば良い

577 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:48:21.04 ID:BB9T+E2r.net]
>>556
https://ja.coder.work/so/java/17371

578 名前:デフォルトの名無しさん [2020/07/03(金) 14:48:27.68 ID:lDWf2b6S.net]
>>558
それは内クラスから外クラスが見えることの説明。
わたしの質問はなぜ外クラスから内クラスのprivateメンバが見れるのか?

579 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 15:31:34 ID:/F47has6.net]
>>525
もしかして 神オブジェクト?

580 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 15:33:00 ID:/F47has6.net]
よく見たら全部privateか。
...いや、そんなの誰が呼ぶんだ。



581 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 15:36:50.41 ID:FAOrvW1R.net]
しらんがな、言ったやつがコードサンプルでも出さなきゃ説明力足りてないから分からんだろ
外部クラスがどうのとか言ってるやつもな。Javaの外部内部の関係も理解が曖昧なんだろ

582 名前:デフォルトの名無しさん [2020/07/03(金) 16:46:44.22 ID:q5wbDGG6.net]
Javaって修飾子付けないとpackage privateがデフォルトだからその事言ってんじゃね?
package privateとは言い換えればpakage内publicと同じだから

583 名前:デフォルトの名無しさん [2020/07/03(金) 16:51:38 ID:36TwtcUk.net]
じゃあpimplで。

584 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 16:55:37 ID:hDsckVNf.net]
>>554
言い訳こいてんじゃねーよ
単体テストにpublicもprivateもねーよ
全メソッドテストしろや

585 名前:デフォルトの名無しさん [2020/07/03(金) 16:58:29 ID:36TwtcUk.net]
弊社はC2カバレッジ100%に満たないものは出荷できませんけどね。

586 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:19:33.24 ID:Gy+Up1+B.net]
c2の100%は分野次第だがwebや基幹程度なら無駄と欺瞞で逆に信用できない

587 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:47:09.01 ID:DQKehNsV.net]
それな

588 名前:デフォルトの名無しさん mailto:age [2020/07/03(金) 19:19:16 ID:TUVANe+h.net]
>>566
普通そうだよね

589 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 19:53:44 ID:FArQoHTp.net]
特に組み込みはC2カバレッジが常識なんだけど、ISO26262では関数カバレッジでOKという不思議。

590 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 20:32:31.27 ID:Gy+Up1+B.net]
>>569
分野によるって言ってるだろ
人命関わらないgui優先で運用回避がまかり通る分野全般はカバレッジなしやc0カバレッジ70%(自動生成コード除く)とかなんだよ



591 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 21:06:04.59 ID:DQKehNsV.net]
あー、ここ組み込みとかのやつらが多いのか!納得だわ

592 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 03:14:27.24 ID:1AXxY7r6.net]
>>559
そりゃインナークラスは親クラスのメンバーなんだから
親クラスから見えるのは当たり前。

巨大クラスを作ってその中にインナークラスが大量にあるような
コードならそれはカプセル化できてない。Java使ったから自動的に
カプセル化できるものでも適切なOOの設計になるわけでもない。
それらがやりやすいような言語なだけ。

適切に使えば、インナークラスを使わなかった場合パブリックで
メンバーにアクセスさせなければいけないのに対して、インナークラスの
メンバーはアウタークラス以外には見えないわけだから、よりカプセル化は
進んでいる。

593 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 03:31:41.97 ID:1AXxY7r6.net]
親クラスは不適切だった。インナークラスはアウタークラスのメンバーなんだから
メンバーを見られるのは当たり前。

594 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 08:51:34.07 ID:+L2cGNSv.net]
>>572
組み込み開発やってるけど、ちゃんと最先端の勉強をしている人はオブジェクト指向理解しているよ(別にOOP自体は普及しきったノウハウだが)。
言語はC/C++言語ほぼ一択だけど。(他はRustくらいだが、まだ普及しない)

まぁ、WEBやアプリ開発等、我々から見て抽象レイヤーで使われるノウハウを軽視するおじさん上司も多いし、組み込みに残念なプログラマーが多いことは否定しないけど。

595 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 09:02:21.50 ID:+L2cGNSv.net]
>>566
カバレッジテストとアクセス修飾子って関係あるの?
カバレッジテストを合格するためにpublicにするとか、本末転倒じゃね?

596 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 10:13:15.22 ID:6t8LAACC.net]
>>576
ねーよ
黙って100%にしろや

597 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 10:19:47.88 ID:+L2cGNSv.net]
話の流れからして、テストのためにpublicにしろに読み取れたけど、ミスリード?
まぁ、そんな馬鹿な話、あるわけねーか。

598 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 10:30:23 ID:xLCX+W2/.net]
>>578
いいよ
100%にできる方法でやって

599 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 10:45:14.19 ID:MjvraXl0.net]
草、どんな立場だよw

600 名前:デフォルトの名無しさん [2020/07/04(土) 11:02:29 ID:pmIasW6W.net]
publicにしなくてもリフレクション使ったりすればええんやで
privateだからテストしないなんてプログラマとしてありえない



601 名前:デフォルトの名無しさん [2020/07/04(土) 11:03:03 ID:pmIasW6W.net]
C2 100%は新人でも最低ライン

602 名前:デフォルトの名無しさん [2020/07/04(土) 11:06:53 ID:pmIasW6W.net]
テストの仕方を知らない教えない会社があるんだなー

603 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:08:56.73 ID:M3d71N9d.net]
>>576
> カバレッジテストとアクセス修飾子って関係あるの?

当然関係ないよ。(ここらへんで関係があるとか言ってるのはアホからだ

604 名前:ウ視していい。)
privateになってようが、それはpublic経由でテストするのだから
カバレッジは変わらない

テストのしやすさが変わるだけ。もしprivateのままだとテストしづらいなら
そのprivateの仕様を明確にしてpublicにして問題ないような設計に変えるだけのこと
[]
[ここ壊れてます]

605 名前:デフォルトの名無しさん [2020/07/04(土) 11:13:54 ID:pmIasW6W.net]
>>584
publicにしないとテストできないってどんな言語?
privateのままテストしたらええやんけ
unit testは最小単位でテストすることでテストのコストを
最小化するものだからpublic経由でprivateなメソッド呼び出してたら
unit testの意味をわかってないアホの極みだしテストのためだけにpublicにするよう
設計に手をいれるのは本末転倒

606 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:14:51 ID:9ghyGMpS.net]
とある大手家電メーカー勤めだが、以前までC2カバレッジ必須でやってたんだけど、色々な計測の結果じつはユニットテストでカバレッジに時間かけるよりシステムテストに時間かけたほうが品質が上がるという結果が出てからはユニットテスト必須じゃなくなったわ。

607 名前:デフォルトの名無しさん [2020/07/04(土) 11:14:53 ID:pmIasW6W.net]
テストの仕方って教えないものなんだなー

608 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:16:50 ID:M3d71N9d.net]
外部から使うかどうかという(間違った)考え方で
privateにするかpublicにするかを決めてると
例えば、全文検索エンジンなんか最低限
文書の登録メソッドregisterと検索メソッドsearchだけでいいってことになってしまう

しかし全文検索エンジンとかいうのは内部で
高速なデータ検索を行うためにいろんなアルゴリズムやデータ構造を
使っているわけで、それらを(実際に使用例ができるかどうかは別として)
汎用的に使えるようにライブラリとして分離すればいいわけ

privateにするかpublicにするかっていうのは、そのシステムで外部から使うか?ではなくて
オブジェクトとして外部から使うかなわけで、privateでテストしづらいようなものは
別オブジェクトに分離とするとか設計をみなすべきってことなんだよ

609 名前:デフォルトの名無しさん [2020/07/04(土) 11:18:52 ID:pmIasW6W.net]
>>588
privateのままテストしたらオブジェクト分ける必要ないよ
privateのままテストする方法がわからないからオブジェクトわけましょうなんて愚の骨頂
愚かの極み

610 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:18:58 ID:M3d71N9d.net]
>>585
> publicにしないとテストできないってどんな言語?

そんな話はしてない
可能不可能な話はしていない
やりやすいかどうかの話をしている
コストを考えなきゃいかんよ?

できるけど大変っていうのは、問題を何も解決してない
ちゃんと設計をせずに関数のインターフェースを定義せずに
無理やりprivateのテストをしても、private=外部から使わない=変更しても問題ないわけで
それに対してテストをしていると、変更しても問題ないはずのprivateメソッドを変更したら
テストが失敗するってことになるのでよくない



611 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:20:06 ID:M3d71N9d.net]
>>589
お前はprivateメソッドを変更したときの
影響の大きさがわかってないよね

612 名前:デフォルトの名無しさん [2020/07/04(土) 11:23:05 ID:pmIasW6W.net]
>>590
privateでテストできないならpublicに設計し直すんやって言ってたじゃん
privateのままでテストするのに何も大変なことなんてない
テストのためだけに設計し直すのは頭おかしい

テストされてないメソッドが存在する方が問題だよ
外部から使わないから問題ないよねって感覚で勝手に修正されるわけないだろw
メソッド書き換えたらテストも修正するのは当たり前

613 名前:デフォルトの名無しさん [2020/07/04(土) 11:24:25 ID:pmIasW6W.net]
>>591
わかってないのはそっちの方、unit testでカバーしてなかったら
仕様通り動いてるのを確認できない

614 名前:デフォルトの名無しさん [2020/07/04(土) 11:26:55 ID:pmIasW6W.net]
privateなメソッドであっても事前条件も事後条件もある
unit testでカバーしてれば壊れてないことを確認できるからリファクタリングが可能になる

615 名前:デフォルトの名無しさん [2020/07/04(土) 11:27:43 ID:1AXxY7r6.net]
大規模システムでずっと来てるけどカバレッジって初めて聞いた。調べたら
アメリカだと航空宇宙とか自動車とかでやるみたいね。

ERPで分岐ごとにやってたら多分完成まで数世紀かかるよw

privateとかpublicとかは単に現場次第だよね。正式なQAメソッドではそこまで
言わないし、どうで

616 名前:もいいというか、臨機応変にやるとこ。 []
[ここ壊れてます]

617 名前:デフォルトの名無しさん [2020/07/04(土) 11:30:38 ID:pmIasW6W.net]
>>595
臨機応変にやるのは会社を首にならないためですよねw
それは社会をどうやって生き抜いていくかサラリーマンとしての心得じゃないですか

プログラマとして品質の高いプログラムを作るためにC2 100%は最低条件ですよ

618 名前:デフォルトの名無しさん [2020/07/04(土) 11:33:41.81 ID:1AXxY7r6.net]
>>596
プログラマって言ったってサラリーマンと対して変わりがないくらい幅広いわけで。

大規模ビジネスシステムで分岐ごと全部テストしてたらピラミッド建設みたいな事に
なりますw

619 名前:デフォルトの名無しさん [2020/07/04(土) 11:36:02 ID:1AXxY7r6.net]
ちなみに臨機応変にやるとこなのは会社首とかはどうでもよくて、
ユニットテストはなに、リグレッションは、アクセプタンスはってのは
QAのメソッドとして確立してるけど、JavaのPrivateがどうするかみたいなのは
完全に現場次第だから。

世界標準はないでしょ。

620 名前:デフォルトの名無しさん [2020/07/04(土) 11:39:33.69 ID:pmIasW6W.net]
>>597
大規模システムってみずほとか?
テストは組み合わせを考えると膨大になるのだけれども
最小単位のunit testだとそうでもなくてだからこそunit testは大事なんよ

Salesforceは知ってる?クラウド型のサービスでアプリ作ったりできるんだけど
カバレッジが75%以下だとデプロイできなくなってる

大規模だからビジネスシステムだからテストしなくていいはちょっと今の時代ありえない



621 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:39:35.50 ID:MJUVFEDB.net]
昔の組み込みの少ない経験だけでイキってるんやろ

622 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:40:52.54 ID:M3d71N9d.net]
>>592
> privateでテストできないならpublicに設計し直すんやって言ってたじゃん
> privateのままでテストするのに何も大変なことなんてない

自分で答え言ってるじゃんw
privateでテストできないならpublicに設計し直すんだから
privateのテストは大変じゃなくて必要ないってこと

623 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:41:39.32 ID:M3d71N9d.net]
>>593
> わかってないのはそっちの方、unit testでカバーしてなかったら
> 仕様通り動いてるのを確認できない

ユニットテストでカバーしないなんて一言も言ってないんだが?
何に反論してるんだよ

624 名前:デフォルトの名無しさん [2020/07/04(土) 11:41:45.39 ID:pmIasW6W.net]
>>598
現場次第だから現場に従うんだっていうのはそれはサラリーマンとして生き残るために
そうせざるを得ないだけだよね、品質の高いプログラムを作るなら常にテストはしないといけない
世界標準がないからいんだっていうのじゃないよ

625 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:42:23.92 ID:M3d71N9d.net]
>>594
> privateなメソッドであっても事前条件も事後条件もある
> unit testでカバーしてれば壊れてないことを確認できるからリファクタリングが可能になる

最初からpublic経由でテストするって言ってるよね?

626 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:43:01.27 ID:czCytfqY.net]
あたい知ってるよ
カバレッジテストを合格するために、privateをpublicにしてメソッドを呼び出せばいいんだよね。

あたい知ってるよ
カバレッジテストを合格するために、メソッドの中に記載されている条件文全て消せばいいんだよね。

あたい知ってるよ
カバレッジテストを合格するために、メソッドの中に記載されているコードを全部消せばいいんだよね。

627 名前:デフォルトの名無しさん [2020/07/04(土) 11:43:01.49 ID:pmIasW6W.net]
>>601
privateのテストは必要だよ
privateでテストできないからpublicにすると言ってるのは君の方
僕はprivateでテストするべきだって立場

628 名前:デフォルトの名無しさん [2020/07/04(土) 11:43:56.50 ID:pmIasW6W.net]
>>602
君はprivateのテストは書かないってことだから
privateのメソッドはunit testでカバーされてないよねってこと

629 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:44:22.90 ID:M3d71N9d.net]
>>606
> privateのテストは必要だよ

だから何度も言ってるがprivateでテストしたいと思ったら
publicに変更するんだから、privateのテストはしなくてすむと言ってる

お前短絡思考なんだよ。
privateはprivateのままテストしなくちゃいけないんだって思ってるだろ

630 名前:デフォルトの名無しさん [2020/07/04(土) 11:44:50.09 ID:pmIasW6W.net]
>>604
それはunit testにならないよってこと
privateのメソッドをテストできてないよってこと



631 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:45:01.10 ID:M3d71N9d.net]
>>607
> 君はprivateのテストは書かないってことだから
> privateのメソッドはunit testでカバーされてないよねってこと

なんですぐ上でprivateはpublic経由でテストするって言ってるのに
理解できてないの?

632 名前:デフォルトの名無しさん [2020/07/04(土) 11:45:43.09 ID:pmIasW6W.net]
>>608
テストしたいからpublicにするのが間違ってて
privateのままテストするのがオブジェクト指向として正当なやり方

633 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:46:08.10 ID:M3d71N9d.net]
>>609
> それはunit testにならないよってこと
> privateのメソッドをテストできてないよってこと

publicメソッド経由でテストしますがなにか?
publicメソッド経由でテストするのが大変なものは
設計を変更すべきなんだよ

634 名前:デフォルトの名無しさん [2020/07/04(土) 11:46:12.42 ID:pmIasW6W.net]
>>610
public経由でのテストはunit testではないよってこと

635 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:47:15.08 ID:M3d71N9d.net]
>>611
> テストしたいからpublicにするのが間違ってて
> privateのままテストするのがオブジェクト指向として正当なやり方

だからprivateのままpublicメソッド経由でテストすりゃいいじゃん(笑)
何度も言ってる。

それが難しいなら、それはコードがすでに複雑である証拠なので
複雑なものを直さないでテストすると破綻する

636 名前:デフォルトの名無しさん [2020/07/04(土) 11:47:24.81 ID:pmIasW6W.net]
>>612
だからテストのためにオブジェクト変えてるのはprivateのテストを知らないだけだから
本末転倒だってこと

637 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:47:48.99 ID:M3d71N9d.net]
>>613
> public経由でのテストはunit testではないよってこと

その根拠は?お前のユニットテストの定義は?
それはどこで勉強したこと?

638 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:48:47.27 ID:M3d71N9d.net]
>>615
> だからテストのためにオブジェクト変えてるのはprivateのテストを知らないだけだから

複雑だからオブジェクトを変えてるんだよ
アホなのか?

privateのテストはpublicメソッド経由でやる
それが難しいなら、コードが複雑だから設計を治す

639 名前:デフォルトの名無しさん [2020/07/04(土) 11:48:55.01 ID:1AXxY7r6.net]
>>599
アメリカの某有名パッケージだね。

その界隈では知ってる限りunit testでカバレージを求められることは無いし
GAFAあたりでも分岐ごとにやらないはず。エッジケースをどうするかとかは
聞かれるけど。

だいたいデベロッパーテストで全分岐をカバーしたところであまり意味はないし。
どのみちQAに回すわけで他人がやんなきゃ意味ない。

カバレージという概念を求められるのが少なくともアメリカでは航空宇宙や
自動車のようだし、良い悪いは別として、これが求められるようなところは
OOとかカプセル化とかが大事なプロジェクトとはちょっと違うよね。

千人のデベロッパーに五百人のテスターで組み込みとかやらないでしょ。
いや知らんのでイメージだけど。

640 名前:デフォルトの名無しさん [2020/07/04(土) 11:49:13.09 ID:pmIasW6W.net]
>>614
public経由したらunit testではないよってこと
privateメソッドをテストすることは難しいことではないよ



641 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:49:55.50 ID:M3d71N9d.net]
>>619
> public経由したらunit testではないよってこと

だからその主張の根拠は何?
お前のオレオレルールの話なんか
何のやくにも立たないだろ

642 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:50:29.94 ID:MJUVFEDB.net]
誰のためにユニットテストするの?w
語ってるべき論は誰かを想定しちゃってない?w

643 名前:デフォルトの名無しさん [2020/07/04(土) 11:50:46.08 ID:pmIasW6W.net]
>>616
unit testは最小単位だから、世界共通の定義
publicを経由してたら内部でどんなにprivateなメソッドを呼び出しまくってても
unit testになるなんて、定義はどこにもないのでpublic経由はunit testに当てはまらない

644 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:51:29.32 ID:MG3qPS+J.net]
名前をつけるとpublicだろうがprivateだろうがテストしなきゃいけない
→つまり無名にしてその場で使い捨てればテストしなくてOK!

645 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:51:49.54 ID:M3d71N9d.net]
もう答えがすでに出てる話をまだづつても無意味なんだけどなw


t-wadaのブログ
https://t-wada.hatenablog.jp/entry/should-we-test-private-methods#%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E7%B5%8C%E7%94%B1%E3%81%A7%E3%83%86%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B


私の回答
短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。

ほとんどのプライベートメソッドはパブリックメソッド経由でテストできるからです。プライベートメソッドは実装の詳細であり、自動テストのターゲットとなる「外部から見た振る舞い」ではありません。

ただし、この議論にはプロダクトコードもテストコードも自分で書いていることという前提があります。プロダクトコードに手を入れられず、テストコードも無いレガシーコードに対しては、リフレクションは強力な手段です。

プライベートなメソッドのテストに関しては、4つの考え方があります。

パブリックメソッド経由でテストする
別クラスのパブリックメソッドとする
テスト対象の可視性を(やや)上げる
プライベートのまま、リフレクションでアクセスしてテストを書く
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。

646 名前:デフォルトの名無しさん [2020/07/04(土) 11:52:44.14 ID:pmIasW6W.net]
>>617
privateのテストはprivateを直接テストしないとunit testにならないよ

647 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:52:52.72 ID:M3d71N9d.net]
>>622

> unit testは最小単位だから、世界共通の定義
> publicを経由してたら内部でどんなにprivateなメソッドを呼び出しまくってても
> unit testになるなんて、定義はどこにもないのでpublic経由はunit testに当てはまらない

それはお前の定義であって、なんの根拠もないことはわかってる

648 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:53:29.28 ID:M3d71N9d.net]
>>625
> privateのテストはprivateを直接テストしないとunit testにならないよ

何度も「根拠を言わないことを繰り返す」のは
根拠がないからってことだよねw

649 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:53:30.11 ID:czCytfqY.net]
>>615

<

650 名前:a href="../test/read.cgi/tech/1592491656/605" rel="noopener noreferrer" target="_blank" class="reply_link">>>605の皮肉と同じだよな。
テストのために、コード書き換えてどうするんだよってね。
[]
[ここ壊れてます]



651 名前:デフォルトの名無しさん [2020/07/04(土) 11:53:42.19 ID:pmIasW6W.net]
>>624
誰だよそれ、YouTuberか?
権威主義的に誰かにすがりつくような真似をするな!

652 名前:デフォルトの名無しさん [2020/07/04(土) 11:54:47.69 ID:pmIasW6W.net]
>>627
根拠は示したけどね、理解する気がないだけなんじゃない?

653 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:54:52.11 ID:M3d71N9d.net]
>>628
> テストのために、コード書き換えてどうするんだよってね。

お前の目的は、テストがしづらい複雑なコードを変えないことなの?(笑)

それともちゃんとテストが出来るコードを開発することなの?
どっちなのさ

目的を理解してるか?

654 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:55:05.15 ID:MJUVFEDB.net]
「メソッド単位のunit テストを強制されてるのです」ww

655 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:55:51.40 ID:M3d71N9d.net]
>>628
> 誰だよそれ、YouTuberか?

え? t-wadaさんを知らないってそれまずくね?w

https://twitter.com/t_wada
プログラマ。TDD 実践者。power-assert-js 作者。
『テスト駆動開発』『プログラマが知るべき97のこと』『SQLアンチパターン』を翻訳/監訳しました。
(deleted an unsolicited ad)

656 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:56:33.70 ID:M3d71N9d.net]
プログラマでテスト駆動開発者の@t_wadaさんをお招きした
社内勉強会での様子をお届け!#メルカリな日々
https://mercan.mercari.com/articles/19386/

657 名前:デフォルトの名無しさん [2020/07/04(土) 11:56:48.02 ID:pmIasW6W.net]
>>632
TDDとか知らないの?

658 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:57:31.94 ID:czCytfqY.net]
>>631
おめーこそ、テストの目的を理解してんのか、カス。
privateが記述されているってことは、外部から呼び出したら駄目なメソッドだ。
それを外部から呼び出して単体テスト合格とかふざけんな。
テストなめてんだろ。

659 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:58:00.26 ID:M3d71N9d.net]
>>635
TDDで有名な人の名前って知ってる?


t-wadaのブログ
https://t-wada.hatenablog.jp/entry/should-we-test-private-methods#%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E7%B5%8C%E7%94%B1%E3%81%A7%E3%83%86%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B

https://twitter.com/t_wada
プログラマ。TDD 実践者。power-assert-js 作者。
『テスト駆動開発』『プログラマが知るべき97のこと』『SQLアンチパターン』を翻訳/監訳しました。


> 私の回答
> 短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
>
> パブリックメソッド経由でテストする
(deleted an unsolicited ad)

660 名前:デフォルトの名無しさん [2020/07/04(土) 11:58:12.80 ID:pmIasW6W.net]
>>633
有名な人を自分は知ってるんだ、だから自分が正しいんだって論旨かの?
その人のことを君は知ってるんだ、すごいねwww



661 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:58:45.56 ID:M3d71N9d.net]
>>636
> おめーこそ、テストの目的を理解してんのか、カス。
> privateが記述されているってことは、外部から呼び出したら駄目なメソッドだ。

↑それ(外部から呼び出したらだめだ!)はテストの目的じゃないよw

662 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:59:28.07 ID:czCytfqY.net]
で、でたー!!!
有名人の権威に頼る詭弁!
流石、詭弁のプロッ!

663 名前:デフォルトの名無しさん [2020/07/04(土) 11:59:33.33 ID:pmIasW6W.net]
>>637
知らない、誰それ、興味もない
人の名前覚えて品質の高いプログラム作れるようになるわけじゃないし
そういうこと頑張ってるのってただの意識高い系じゃない?www

664 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:59:35.76 ID:M3d71N9d.net]
>>638
> 有名な人を自分は知ってるんだ、だから自分が正しいんだって論旨かの?

そこはさぁ、専門家が言っていることは正しいんだって言うべきじゃね?w

専門家以外に、誰を信じればいいのか知らんが

665 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:00:04.79 ID:M3d71N9d.net]
>>641
つまりそういうこと。お前は「テスト技術」に興味がない

666 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:01:48 ID:M3d71N9d.net]
なぜ日本でTDDの専門家といって一番目に出てくるような人を知らないで
テストの話について語っているのか?
勉強したら必ず何度も目にする名前だろうに

667 名前:デフォルトの名無しさん [2020/07/04(土) 12:05:38.40 ID:pmIasW6W.net]
>>643
僕は@t_wadaさんを知らないだけですよ

有名な人の名前を知ってるから自分はテスト技術に興味があって正しい知識を持ってるんだって思ってる?
論理を無視した権威による詭弁としか思えないし、それってただのマウンティングにしかならないんじゃないですか?

俺はt_wadaさんのこと知ってんだぞ!!おめーどーなっても知らねえからな!みたいな中卒ヤンキーのマインドを
お持ちなのはわかったけど、議論の向き先としてそっちで良いのって僕は思いましたよ

668 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:06:25.67 ID:M3d71N9d.net]
> 僕は@t_wadaさんを知らないだけですよ
その意味がわかってないんだろ?

お前は勉強した必ず目にする名前を知らないって言ってるんだよ
つまり勉強したことがないってこと

669 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:07:22 ID:XvIYAIJA.net]
いいんじゃね、全てのメソッドをテストしたけりゃすればw
ただそれを強制されてることが一般的だと思って奴がいるのは滑稽だなw

670 名前:デフォルトの名無しさん [2020/07/04(土) 12:08:56 ID:pmIasW6W.net]
>>646
人の名前覚えて悦に入る人の心境がわからないんだよなー
僕はプログラムのことにしか興味がないから
誰がそれを書いたのかよりも書いてある内容の方に興味がある
執筆者の名前を覚えて勉強した気になってるだけじゃないの?



671 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:09:30.14 ID:M3d71N9d.net]
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。

別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。

テスト対象の可視性を(やや)上げる
例えば Java では、同一のパッケージからのみアクセスできる可視性があり(正式名称ではありませんが
「パッケージプライベート」と呼ばれます)、テストを同一パッケージに配置することでテストから
アクセスできるような設計を行うことがあります。(ただし、この質問の場合は JavaScript なので、この手段はとれません)

プライベートのまま、リフレクションでアクセスしてテストを書く
リフレクションは最後の手段であり、強力な手段でもあります。プロダクトコードに手を入れることが
できない状況や、レガシーコード(テストコードの無いコード)に対する「仕様化テスト(Characterization Test)」を
書いているような状況では、リフレクションは唯一の、かつ強力な手段になります。プライベートメソッドに
テストを書くことのデメリットを理解しつつ、黒魔術の強力さを堪能しましょう。
(ただし、この質問の場合は JavaScript なので、この手段はとれません。JavaScript は比較的緩い言語ですが、クロージャの情報隠蔽は非常に強固です)

まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

672 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:10:37.41 ID:M3d71N9d.net]
>>648
> 誰がそれを書いたのかよりも書いてある内容の方に興味がある

>>649にあなたが興味があるはずの「内容の方」書きました。
本当に興味があるなら読んでね(読まないだろうけどw)

673 名前:デフォルトの名無しさん [2020/07/04(土) 12:14:01.28 ID:pmIasW6W.net]
>>650
著作権法に違反してない? 大丈夫?

僕はt_wadaさんを知らないし、信奉する立場でもないので
t_wadaさんがそう言ってるからそうなんだと思うことはないよ

内容に興味があるっていうのは、書いてあることをそっくりそのまま
自分の考えにするということではなくて自分の経験や知識に照らし合わせて
自分の考えを持つってことだよ

僕はその文章を読んでprivateメソッドをテストするべきだと思った

674 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:15:48.22 ID:M3d71N9d.net]
> 著作権法に違反してない? 大丈夫?

もはや技術の話に反論できなくなったか
引用の範囲で著作権は関係ないな(爆笑)

> 僕はt_wadaさんを知らないし、信奉する立場でもないので
あのさぁ、お前。「t_wadaを知らない」という人の話じゃなくて
その人が言った内容についての話をしろよ

675 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:16:19.37 ID:M3d71N9d.net]
> 僕はその文章を読んでprivateメソッドをテストするべきだと思った

それはあなたの感想です。考えは何も述べていません。

676 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:18:15.28 ID:czCytfqY.net]
>>639

> ↑それ(外部から呼び出したらだめだ!)はテストの目的じゃないよw

別に、デバッグ目的で一時的にprivateメソッドを呼びたいのなら、勝手に呼んでどうぞ。
だが、テスト工程...特に単体テストでprivateをpublicにするのはアウト。
本来、呼ばれないはずのprivateだったメソッドが呼ばれてしまえば、本来、不合格だったはずのカバレッジテストに合格してしまう可能性が出てくるし、privateメソッドを呼んだことで、本来ありえないクラス内部状態を作ってしまったら、単体テストの結果も変わってしまう。

テストは本番と同じ状態を保たないと駄目だよ。
プログラマーの開発工程におけるデバッグ及び動作確認とテストを混同させていないか?

677 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:19:20.76 ID:XvIYAIJA.net]
最後の行ありそう

678 名前:w []
[ここ壊れてます]

679 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:19:46.76 ID:M3d71N9d.net]
>>654
> だが、テスト工程...特に単体テストでprivateをpublicにするのはアウト。

ウォーターフォール開発?
テストで問題が出ても問題を上流に戻したらだめって
バグが出ても直したらいかんのかよw

680 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:20:53 ID:M3d71N9d.net]
>>654
> プログラマーの開発工程におけるデバッグ及び動作確認とテストを混同させていないか?

今はプログラマーの開発工程におけるデバッグの話ですよ?
動作確認でprivateメソッドを呼んでテストなんてしませんから



681 名前:デフォルトの名無しさん [2020/07/04(土) 12:21:57 ID:pmIasW6W.net]
>>652
大丈夫かなって正直に思っただけ、君が引用だと思っててもt_wadaさんが勝手に転載してんじゃねえ
ぶっ殺すぞと思ってたらやばいじゃん、t_wadaさんって人を僕は知らないから
君がすごくぶっ殺されたりとかしないかなって思っただけ

t_wadaさんの話を振ったのは君ですよ
t_wadaさんを知らないのかー遅れてるーうひょーって有頂天になって書き込んでたのは君ですよ
僕は内容の話をしましたよ

682 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:22:14 ID:czCytfqY.net]
> テストは本番と同じ状態を保たないと駄目だよ。

これを曲解されても困るから補足説明するけど、単体テストって、クラス単体のテストのことな?
クラスを動かすための環境は自由に変えてもいいけど、クラスそのものを弄りかえるなって意味だからな?

683 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:24:12.62 ID:xAj06qrt.net]
テストがでかけるアサートと本番動作は普通は異なるがな。
なんでも統一させようとして無理が出るから public, privateの議論はくだらんなと思うわけだ。

684 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:28:01.42 ID:czCytfqY.net]
>>657
>>631でなんで、俺に反論した。

685 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:33:59.87 ID:M3d71N9d.net]
>>658
やっぱりまだ人の話を続けるんですねw

t_wadaさんが言った「内容」の話をしましょうね
負け組おじさんw

686 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:34:18.71 ID:M3d71N9d.net]
>>661
知らんがなw

687 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:35:58.47 ID:M3d71N9d.net]
>>660
クラスを動かすための環境というのはクラスの外界ってことはわかってるか?
クラスの外界は変えていいから、テストコードから呼び出すし
クラスの中で呼んでいる外界をモックやスタブで置き換えていいんだよ

688 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:37:35.05 ID:exw+beGf.net]
テストの前提として、テストされるコードをいじってはいけない
テストのためにコードをいじってテストが終わったらコードを戻すんだと
本来のコードが仕様通り動くことが保証できない
いじるのなら納品物が変わってくる

689 名前:デフォルトの名無しさん [2020/07/04(土) 12:38:43.12 ID:pmIasW6W.net]
>>662
t_wadaさんを知らないのかーって言ったのは君で
これがt_wadaさんの神々しい高貴な文章なんだーと引用したのは君じゃん

僕はそれを読みました。読んだ感想を今から言います。よく聞いてください。
privateメソッドをテストするべきだと思いました。

690 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:43:46.70 ID:M3d71N9d.net]
>>665
> テストの前提として、テストされるコードをいじってはいけない
> テストのためにコードをいじってテストが終わったらコードを戻すんだと

いるじもなにもコードなんか変更しないだろ



691 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:44:39.72 ID:M3d71N9d.net]
>>666
だからお前の感想は聞いてないって言ったよね?
少しはまともな意見も言えるかと思えば感想しかいない。
まあ意見を言った所で専門家よりも説得力がでるとは思えないがなw

692 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:47:54.13 ID:9ghyGMpS.net]
>>654
ユニットテストする時は原則毎回新しいインスタンス作るので内部状態はリセットされるよ。
シングルトンがユニットテストやりにくいって言われる理由はこれ。

693 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:48:05.39 ID:M3d71N9d.net]
>>666
> t_wadaさんを知らないのかーって言ったのは君で

それは違うよねw

俺がとある専門家の「意見」を持ってきたら、
そいつは誰だーって言い出したのはお前だよねw

↓はい証拠

629 名前:デフォルトの名無しさん[] 投稿日:2020/07/04(土) 11:53:42.19 ID:pmIasW6W [22/31]
>>624
誰だよそれ、YouTuberか?
権威主義的に誰かにすがりつくような真似をするな!

694 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:58:30.51 ID:wkevF9GB.net]
privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね

695 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:01:25.78 ID:M3d71N9d.net]
専門家の意見としては

パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。


別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。

696 名前:デフォルトの名無しさん [2020/07/04(土) 13:02:51.44 ID:pmIasW6W.net]
>>670
君が先にその人を出して
僕が誰それなんでそんなの書いたのって聞いただけだよ
そしたら君がt_wadaを知らないのかーって有頂天になったんじゃん

君はt_wadaさんに憧れてるんでしょ?
だからt_wadaさんが書いた文章を引用したんでしょ
憧れとは理解とは最も遠い感情だってプリキュアが言ってました

僕が誰に憧れてるかはわかりますね?

697 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:06:20.56 ID:M3d71N9d.net]
>>673
> 僕が誰それなんでそんなの書いたのって聞いただけだよ

だから人に興味があるってことだよね?

無名の人なら、そんな無名なんか知るかー
有名な人なら、権威にすがるなー
っていうんでしたっけ?w

どちらにしろ意見に興味がなく
最初から「人」に文句をつけようと思って、誰か聞いたんでしょ?

698 名前:デフォルトの名無しさん [2020/07/04(土) 13:10:46.18 ID:pmIasW6W.net]
>>674
t_wadaのブログってリンク提示されてもなにそれとしか思わないから
君がt_wada本人でこれが僕の考えだって示したならなるほどそういうことか
privateメソッドはテストするべきだって思うけど

議論の最中にt_wadaのブログを出されても何いってんだこいつとしか思わない
よくよく話を聞いてみると君はt_wadaさんのことが大変気に入っていて
憧れていてt_wadaさんの言うことは絶対だと思っている

君はt_wadaさんの権威にすがってるだけのつまらない人間なのじゃないかと僕は疑っています

699 名前:デフォルトの名無しさん [2020/07/04(土) 13:12:22.76 ID:pmIasW6W.net]
外人が書いた本を翻訳しただけで専門家でもなんでもないんじゃない?

700 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:12:24.10 ID:M3d71N9d.net]
> t_wadaのブログってリンク提示されてもなにそれとしか思わないから

はい、内容を呼んでないと自白しましたw
なんのために内容の一部まで引用したと思ってるんでしょうかね

読まずに誰それと「人」に文句をつけるための
質問しかしませんでした。



701 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:12:47.77 ID:M3d71N9d.net]
>>676
お前の希望を言われたもなぁw

702 名前:575 mailto:sage [2020/07/04(土) 13:13:09.28 ID:sra5+07B.net]
なんで今朝の575からこんなに進んでるの...

703 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:13:57.68 ID:MJUVFEDB.net]
子供の喧嘩ですw

704 名前:デフォルトの名無しさん [2020/07/04(土) 13:13:59.57 ID:pmIasW6W.net]
>>677
どうしてその内容を引用したの?
君はそれが正しいと思ったの? その根拠は提示できる?
できないでしょ、君はt_wadaを専門家だと思ってて
専門家の言うことは正しいのだ、だから内容が正しいのだと思い込んでいる
だからその内容を引用して何かを示した気になってるだけ

705 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:14:24.44 ID:M3d71N9d.net]
>>679
根拠ない主張を繰り返すだけのやつが登場するとそうなるよw

706 名前:デフォルトの名無しさん [2020/07/04(土) 13:14:41.46 ID:pmIasW6W.net]
>>678
外人が書いた本を翻訳したら専門家なのか? そっちの方が希望じゃん

707 名前:デフォルトの名無しさん [2020/07/04(土) 13:15:16.84 ID:pmIasW6W.net]
>>682
専門家という肩書の権威にすがりつく君のことかな?

708 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:15:33.49 ID:M3d71N9d.net]
>>681
正しい根拠はすでに上の方で何度も言ってるじゃんw
それを補完するために専門家の意見を持ってきただけで
じゃあ反対にお前の言うことが正しいという根拠はなんだよ?

709 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:15:46.59 ID:xAj06qrt.net]
>>665
その辺は結局組織がどうコードを管理するかってだけの話だ。
バカみたいにがんじがらめにした結果誰もコードをいじらない(リファクタリングしない)
ってことにしかならん。

710 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:16:11.64 ID:M3d71N9d.net]
>>683
> 外人が書いた本を翻訳したら専門家なのか? そっちの方が希望じゃん

翻訳「も」してるだけだろw



711 名前:デフォルトの名無しさん [2020/07/04(土) 13:17:04.15 ID:pmIasW6W.net]
>>668
t_wadaさんの文章はt_wadaさんの感想でしかないよ

712 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:17:18.71 ID:M3d71N9d.net]
どうやら翻訳は副業らしいなw

713 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:18:06.68 ID:M3d71N9d.net]
>>688
意見と感想の違いぐらいつけようよw

話は簡単じゃないか
t_wadaさんの意見と
お前の感想

説得力があるかどうかだよ

714 名前:575 mailto:sage [2020/07/04(土) 13:18:30.04 ID:sra5+07B.net]
とりあえず、落ち着け。
議題がよくわからんが、落ち着け...落ち着くのだ。

715 名前:デフォルトの名無しさん [2020/07/04(土) 13:19:53.55 ID:pmIasW6W.net]
>>687
いやいや翻訳だけが全実績じゃん
t_wadaさんがprivateメソッドをテストせずにとても
すばらしいシステムを構築していま全世界で使われてますってことないじゃん

翻訳したからまるで本物の執筆者のように思われてあたかも専門家のように思い込まれてるだけで
専門家でもなんでもなくただの翻訳者だよ

716 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:20:32.65 ID:MJUVFEDB.net]
いいんだよ、元から不毛なネタのスレだw

717 名前:デフォルトの名無しさん [2020/07/04(土) 13:21:46.90 ID:pmIasW6W.net]
>>690
君が説得力を

718 名前:感じたら意見になり、
説得力を感じなかったら感想になるってだけじゃんそれ
なにそのガバガバな日本語運用

わかりましたでは今から僕が君を説得してみせます、よく聞いてください
privateメソッドはテストするべきです
[]
[ここ壊れてます]

719 名前:575 mailto:sage [2020/07/04(土) 13:21:53.40 ID:sra5+07B.net]
>>693
それもそうか(諦め)
内容は読んでないけど、まぁ、ROMるか。

720 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:22:11.62 ID:M3d71N9d.net]
>>692
なんでググらないでウソ書くの?
そうやって他の人を騙そうとしてるでしょ

https://t-wada.hatenablog.jp/entry/clean-code-that-works
職業はコンサルタントであり、プログラマです。最近では技術顧問としてもいくつかの会社を支援しています。
また、自分の自由になる時間には、オープンソースソフトウェアの開発を行っています。
本業はプログラマでありコンサルタントですが、副業としては技術書の出版、具体的には監訳や翻訳に関わっています。

JavaScript でテストを書く際のハードルを大幅に下げるために開発した power-assert は、
Mocha や Jest と組み合わせて使え、 AVA には既に内蔵されており、ありがたいことに世界中で使われるプロダクトまで育ちました。

ひとつ例を挙げるなら、アリババグループで採用頂き、アリペイやアリババクラウドのテストに使われているという話です。



んで、こういう人に比べて、お前はなにかすごいことしたの?



721 名前:デフォルトの名無しさん [2020/07/04(土) 13:25:12.35 ID:pmIasW6W.net]
>>696
営業努力の賜物やろな、頑張ってるんやなt_wadaさん

僕がなにかしたのかという質問ですが僕はすごいことを発見しました
privateメソッドはテストした方が良いです

722 名前:デフォルトの名無しさん [2020/07/04(土) 13:25:49.67 ID:pmIasW6W.net]
ほんまt_wadaさん好きやな

723 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:26:38 ID:M3d71N9d.net]
>>698
t_wadaさん以外にすごい人がいたら教えて下さいw

724 名前:デフォルトの名無しさん [2020/07/04(土) 13:31:25 ID:pmIasW6W.net]
>>699
他人に憧れをいだいて必要以上に持ち上げるのが僕は気持ち悪く感じます
僕はすごい人ですが、君に憧れられるのは気持ち悪いです、なのでごめんなさい

725 名前:デフォルトの名無しさん [2020/07/04(土) 13:31:55 ID:pmIasW6W.net]
振ってしまってなんかごめんなさい

726 名前:デフォルトの名無しさん [2020/07/04(土) 13:33:19 ID:pmIasW6W.net]
他人を必要以上に持ち上げるのって自分に自信がない人がやりがちなので
アドバイスするとしたら色々経験したがいんじゃないかということですね

727 名前:デフォルトの名無しさん [2020/07/04(土) 13:34:54.50 ID:KKcCItOc.net]
IT掲示板群 ttp://x0000.net/forum.aspx?id=15

学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン(画像有り)
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0

☆ VMを書いた(C#) * x86ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip

728 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:48:28.05 ID:iuca8iKQ.net]
根拠が聞けるかなと思ったターンで
他人の引用を持ってきて権威に頼っただけである場合
議論は終了である
続ける価値がないから

729 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:50:52.32 ID:M3d71N9d.net]
いえ、自分と同じ意見を言ってる人を持ってきただけなので
話は続いてますよ?

でもなぜか、話の続きをやめてしまっているのです。
なぜでしょうね(笑)

730 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 14:09:00.83 ID:xhESn47n.net]
プログラム板でコード使って語りもしない時点で両者どちらも無能
プログラマならコードで主張



731 名前:デフォルトの名無しさん [2020/07/04(土) 14:17:35.76 ID:pmIasW6W.net]
>>706
有能さんあざーす!コードどこ?

732 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 14:19:05.65 ID:JeoapmHS.net]
privateメソッドとしてどの程度複雑なことをやらせるか、privateメソッドをどの程度使うかについて、感覚の違う2つのスタイルがあるんじゃないか?

一方の極は、privateメソッドには極めて単純なことしかさせず、少しでも複雑な内容なら(他のヘルパークラス等の)publicメソッドに切り出すスタイル。
「privateはpublic経由でのみテストする(直接はテストしない)」という方針を採る場合には、privateメソッドの内容は非常にシンプルな内容に限らざるを得ないし、逆にそうしないと>>555指摘の組み合わせ爆発の問題を回避できない。
>>624>>649で紹介されている議論や、>>588はこの立場なんだろう。
このスタイルでは、下記のスタイルでは1つのprivateメソッドで処理できる内容を、複数のクラスに属するメソッドの協調関係で処理することになる。
これを適切な機能分化がされていると肯定的に捉えるか、必ずしも汎用性があるわけではない小さなヘルパークラスが増えることになり、見通しが悪くなると否定的に捉えるかは考え方によるだろう。

もう一方の極は、privateメソッドだからといって、内容をシンプルに限らなければいけない必然性はないというスタイル。>>589は、こちらの立場なんだろう。
このスタイルでは、public経由でprivateのテストをするというのは現実的ではないから、privateメソッドでも直接テストの対象とすることが必要になる。言語機能の関係でprivateを直接テストすることが難しい場合には、テストのやり方に工夫が必要になる。
メリット・デメリットは前記のスタイルの反対。

こんなふうに整理できるんじゃないかと思うが、どうだろう。

733 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 14:19:16.92 ID:xhESn47n.net]
>>707
主張したいことがあるんでないの?
それを示すコードもあるやろ?

734 名前:デフォルトの名無しさん [2020/07/04(土) 14:20:14.26 ID:pmIasW6W.net]
>>709
でも僕無能だからコードないよ
君有能だからコードあるよ
早く出すよ

735 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 14:22:23.00 ID:xhESn47n.net]
>>710
俺は別にプログラムのこのスレタイについて主張したいことないからなあw
君はプログラマでプログラムについて何か主張したいんだろ?

736 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 14:23:09.56 ID:kiJuYkd6.net]
privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね

737 名前:デフォルトの名無しさん [2020/07/04(土) 14:23:22.38 ID:pmIasW6W.net]
>>711
関係ないよ、早くコード出すよ

738 名前:デフォルトの名無しさん [2020/07/04(土) 14:23:44.26 ID:pmIasW6W.net]
早くコードだすよ!

739 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 14:27:56.17 ID:xhESn47n.net]
>>714
あーこっちがきちがいだったかw
触れないようにするわ

740 名前:デフォルトの名無しさん [2020/07/04(土) 14:28:29.45 ID:pmIasW6W.net]
www



741 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 14:33:12.47 ID:xhESn47n.net]
このように、コードを使わず偏った主張するやつはだいたい頭がおかしい
この板ではこうやって簡単にこういう奴をあぶり出しできるんよな

742 名前:デフォルトの名無しさん [2020/07/04(土) 14:34:10.41 ID:pmIasW6W.net]
>>717
君、コード出してないよ
コード出すよ

743 名前:デフォルトの名無しさん [2020/07/04(土) 14:34:57.85 ID:pmIasW6W.net]
早 く コ ー ド 出 す よ !

744 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 14:51:30.64 ID:xhESn47n.net]
>>719
^^

745 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 14:56:58.97 ID:M3d71N9d.net]
>>708
> privateメソッドとしてどの程度複雑なことをやらせるか、privateメソッドをどの程度使うかについて、感覚の違う2つのスタイルがあるんじゃないか?

privateとかpublicとか関係なく、複雑なことをやらせるなよ
関数はせいぜい一画面程度(50行)ぐらい、大半は20行以下にするもんだ

746 名前:デフォルトの名無しさん [2020/07/04(土) 15:00:38 ID:pmIasW6W.net]
はいはいどうせt_wadaがそう言ってたんだろ

747 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:01:31 ID:M3d71N9d.net]
>>722
また「人」の話かよw

748 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:02:35 ID:M3d71N9d.net]
権威ある専門家が言ってることだから間違ってます
俺は認めませーんって。どういう気持で言ってるんだろうねw

749 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:04:45.61 ID:M3d71N9d.net]
俺は「そいつは権威ある専門家

750 名前:セ!」って指摘しただけで
勝ったつもりにはなれないなぁ(笑)
[]
[ここ壊れてます]



751 名前:デフォルトの名無しさん [2020/07/04(土) 15:05:05.57 ID:pmIasW6W.net]
t_wadaはなんて言ってるんだよ!

752 名前:デフォルトの名無しさん [2020/07/04(土) 15:05:39.57 ID:pmIasW6W.net]
t_wada原理主義

753 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:06:52.47 ID:iuca8iKQ.net]
必死だなw

754 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:07:21.60 ID:gUMCer1d.net]
今までたくさんのキチガイPGを見たが
privateメソッドだからテストしないとか言ってるやつだけは許さない
テメーの金玉はここで潰す

755 名前:デフォルトの名無しさん [2020/07/04(土) 15:10:41.07 ID:pmIasW6W.net]
ごりごりーごりごりー
そうだ!すりつぶした粉で大根餅作ろうよ!

756 名前:575 mailto:sage [2020/07/04(土) 15:11:12.87 ID:sra5+07B.net]
>>729
問題なのは、そのprivateの挙動をどうやって確認するのかって話なのかな?

単体テスト?総合テスト?それとも実装中しながらのデバッグ作業の話?

正直、未だにどこで揉めているのかわかりません。
誰か議題教えて。

757 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:13:12.65 ID:iuca8iKQ.net]
>>731
> 正直、未だにどこで揉めているのかわかりません。

自転車置き場

758 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:14:01.93 ID:M3d71N9d.net]
>>731
1. public、privateに限らずコードはシンプルにするべき
2. シンプルであるなら、privateはpublicメソッド経由でテストできる
3. publicメソッド経由でやったらprivateがろくにテストできないというなら設計が間違ってる
4. 設計上の問題はバグと言ってもいい。バグなんだから直せ

ここまではあってる

759 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:17:09 ID:gUMCer1d.net]
>>731
設計書見ろよゴミカス
書いてないなら死にまくれ

760 名前:575 mailto:sage [2020/07/04(土) 15:21:35 ID:sra5+07B.net]
>>734
なんで、スレの流れに沿って説明しただけの俺がゴミカス呼ばわりされるのかもわからん。何このスレ。
>>576 >>578でも俺の意見ですらない部分に的外れな回答がつくし。



761 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:24:14 ID:M3d71N9d.net]
動けばOKって考えてる人がどれだけ多いかだな
テストを自動化するという考えがない
シンプルな設計をするという発想がない
動けば設計に問題はないと考えている

762 名前:デフォルトの名無しさん [2020/07/04(土) 15:29:27 ID:pmIasW6W.net]
>>735
Welcome to Underground

763 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:32:02.34 ID:NXT3QGLz.net]
>>733
あってるの1だけじゃないかw

764 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:34:57 ID:iuca8iKQ.net]
叩き台つくった(´・ω・`)
https://ideone.com/1XhPwl

765 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:39:15 ID:e19OrKR5.net]
なんかやべえ流れになってるな
とりあえずつっこんどくと
1. unitテストの定義に世界共通の定義など存在しない
2. unitテストという単語はプロジェクト用語であり、プログラム用語ではない
3. マーティンはunitテストという単語と自動テストの単語わけたらいいんじゃない?と提案してる。xunit
4. publicとprivateはクラス設計のため、もっと言えばクラス間の責任範囲のために存在している
5. xunitテストのためだけにprivateをpublicにするのは誤り。本当にやりたければリフレクションでもすればいい
6. c2カバレッジ100%するかどうかは分野次第
7. 我々は十分なシステムを作るのが目的である。完璧なプログラムを作ることが目的ではない。そして十分な利益を獲得することが目的でもある

766 名前:575 mailto:sage [2020/07/04(土) 15:57:07.88 ID:sra5+07B.net]
ちなみに、的はずれって100%君のことね。まぁ、そんなの今更どうでもいいか。

実際、クラスをどんな風にテストするのか興味あるね。

767 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:03:21.65 ID:e19OrKR5.net]
やだよ組み込みが普通だと思ってる人との会話なんかしたくない

768 名前:575 mailto:sage [2020/07/04(土) 16:32:24 ID:sra5+07B.net]
そんなー。

769 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:32:41 ID:IaMjsjOG.net]
>>735
なんだ早く死ねよ

770 名前:575 mailto:sage [2020/07/04(土) 16:36:24 ID:sra5+07B.net]
まぁ、Android開発(アセンブラレベルからJavaアプリレベル)をやってるから、たぶん、大丈夫なはず。

組み込み=staticおじさんのレッテルが貼られがちだけど、
私はstaticおじさんじゃないんだけどなー...



771 名前:
まぁ、アセンブラレベルの階層になると、オブジェクト指向要素なんて微塵もないけど。
[]
[ここ壊れてます]

772 名前:575 mailto:sage [2020/07/04(土) 16:37:37.70 ID:sra5+07B.net]
>>744みたいな知的障害者が時々沸くのはなんで?

773 名前:575 mailto:sage [2020/07/04(土) 16:46:14.68 ID:sra5+07B.net]
もういいや。アホくさ。こんなスレ覗いたのが間違いだったな。
人生を無駄にした気分だ。
このスレを覗く時間を使って別して作業してた方が有意義だったよ。

>>744
君はID変えながら死ね死ね連呼しているみたいだけど、気を付けた方がいいよ。あばよ、中身がない死ぬべき技術者さん。

774 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:53:03.01 ID:4XE5L1k5.net]
プ板、と言うか専門板なんてそれぞれの話題を餌にマウント取り合ったり罵り合ったりする所だから。
相手にしたら負け。

775 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 17:09:48.00 ID:O/jhkl6h.net]
言語の制約によって思考が制約されてる典型例

カマッてくれる人が量産されて>>1が喜んでる

776 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 18:16:38.54 ID:sCZUG34Z.net]
privateメソッドのテストしないとか言ってるカスとまともに会話するメリットないだろ

777 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 18:35:31.64 ID:gmurOIZf.net]
まあテストやるって言ってもこれくらい意見が違って揉め事になるってのは
結構普通だったりするからそういう勉強にはなってるんでないの。

778 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 20:02:50.07 ID:M3d71N9d.net]
このスレの結論

短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。

パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。

別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。

テスト対象の可視性を(やや)上げる
例えば Java では、同一のパッケージからのみアクセスできる可視性があり(正式名称ではありませんが
「パッケージプライベート」と呼ばれます)、テストを同一パッケージに配置することでテストから
アクセスできるような設計を行うことがあります。(ただし、この質問の場合は JavaScript なので、この手段はとれません)

プライベートのまま、リフレクションでアクセスしてテストを書く
リフレクションは最後の手段であり、強力な手段でもあります。プロダクトコードに手を入れることが
できない状況や、レガシーコード(テストコードの無いコード)に対する「仕様化テスト(Characterization Test)」を
書いているような状況では、リフレクションは唯一の、かつ強力な手段になります。プライベートメソッドに
テストを書くことのデメリットを理解しつつ、黒魔術の強力さを堪能しましょう。
(ただし、この質問の場合は JavaScript なので、この手段はとれません。JavaScript は比較的緩い言語ですが、クロージャの情報隠蔽は非常に強固です)

まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。

779 名前:デフォルトの名無しさん [2020/07/04(土) 21:00:07.43 ID:42LT/T3f.net]
>>752
三行以上は読んでもらえないから工夫が必要。

780 名前:デフォルトの名無しさん [2020/07/04(土) 21:07:29.85 ID:n1PM9L+Z.net]
ガワだけのクラスが出来上がるな

#include <iostream>
using namespace std;

class Test{
private:
int methodPrivate(const int x)const{
return 2*x;
}
public:
int method(const int x)const{
return methodPrivate(x);
}
};

int main() {
Test test;
cout << test.method(3) << endl;
return 0;
}

この調子で全部のメソッドにペアになるprivateメソッド作って徹底的に隠蔽してしまえば、相手から調査されることはない

そして上流の方から指定されているメソッドはスッカラカン
実質的に何もしない
名前があるだけ

この技法をprivate開発と名付けよう
相手側に技術が流出することがない



781 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 2 ]
[ここ壊れてます]

782 名前:1:08:27.02 ID:NXT3QGLz.net mailto: >>752
×このスレの結論
◯ぼくの主張の結論
[]
[ここ壊れてます]

783 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 21:10:05.29 ID:NXT3QGLz.net]
>>755
間違えた
×ぼくの主張の結論
◯ぼくがまとめた、偉い人が書いた本の受け売り情報

784 名前:デフォルトの名無しさん mailto:age [2020/07/04(土) 21:41:09.24 ID:pmIasW6W.net]
本人の経験が感じられなくて薄っぺらいんだよなあ

785 名前:デフォルトの名無しさん mailto:age [2020/07/04(土) 21:43:15 ID:pmIasW6W.net]
僕の高い知性と豊富な経験に基づく主張を聞いて欲しい
privateメソッドはテストした方がいい

786 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 21:56:15 ID:gmurOIZf.net]
>別クラスのパブリックメソッドとする
>プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
>示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
>プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
>プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
>コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
これだけは意味ある意見ではあるな。他はカスみたいな理由だが。

787 名前:デフォルトの名無しさん [2020/07/04(土) 22:11:41 ID:42LT/T3f.net]
カバレッジ測定ツール高いし持ってないので、private直接テストしたい。

788 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 22:19:33 ID:O/jhkl6h.net]
>>759
>>プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
>>示唆している場合があります
わかる

>>コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
これは選択肢の一つであって常にそうすべきなわけではないんだよね
クラスの分割基準とテストを書く書かないの基準は別だから

789 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 22:19:58 ID:O/jhkl6h.net]
プライベートだとテストしにくいので、パブリックメソッドとして抽出し、普通にテストしましょう
これが本音

790 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 22:47:43.56 ID:1l6Tw/KB.net]
https://i.imgur.com/FG4MVEW.jpg



791 名前:デフォルトの名無しさん [2020/07/05(日) 00:43:13.75 ID:9F15TCk0.net]
プライベートがテストできるということはホワイトボックスなわけでユニットテスト段階でしょ。
そもそもプライベートをテストするにはソース自体書き換えないと呼べないじゃん。

ソース自体書き換えてテストするようなことはビジネスの世界ではあんまり無いしテストと
なったらブラックボックスが普通。

てかもはやテストの話でカプセル化やOO関係ないな。

792 名前:デフォルトの名無しさん [2020/07/05(日) 01:18:10.47 ID:LRfXHt7v.net]
ホワイトやブラックについて語るのは時期が悪いというか、国家を危険にさらす可能性さえあるからね。

もう少し社会情勢に気を配ろうよ。

793 名前:デフォルトの名無しさん [2020/07/05(日) 01:32:28.51 ID:LRfXHt7v.net]
昔のホームページにはサイタマップというものがあった。

794 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:04:25.24 ID:9F15TCk0.net]
埼玉県民にはそこらへんの草でも食わせておけ

795 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:11:14.07 ID:58eR5uXa.net]
>>764
> ソース自体書き換えてテストするようなことはビジネスの世界ではあんまり無いしテストと

まさかpublic・privateメソッドのテストをテスト工程でやる、
public・privateメソッドを書いた人と別の人がやるって思ってないか?

public・privateメソッドを実装中に、その作ったもののが正しく動くかどうか
public・privateメソッドのソースを書いた人が、書いてる段階でテストするんだから
当然ソースを書いて(書き換えて)テストするに決まってるじゃん

お前は、その後の(統合)テスト工程でソースコードを変えてテストとか言ってるだろw

796 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:46:27.47 ID:9F15TCk0.net]
>>768
なんなのその口調気持ち悪い。

大規模開発だとテスト工程を別の人間が何度もやるのは当たり前だよ。
デベロッパ個人のテストはコーディングの範疇なのでもちろん個人ではやるが
それほど大事ではない。

組み込みで車のブレーキ制御とかは全く別の話だろうがOOとかカプセル化とは
基本かけ離れた分野。

797 名前:デフォルトの名無しさん [2020/07/05(日) 02:48:43.07 ID:LRfXHt7v.net]
テストしない理由を考えるのは。

798 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:50:28.66 ID:58eR5uXa.net]
>>769
> 大規模開発だとテスト工程を別の人間が何度もやるのは当たり前だよ。

大規模開発だとpublicやprivateメソッドのテストを別の人がやるって?
テストコード専用に書く人でもいるのかよw
それはどこの話だ?事例の一つぐらい持ってきてから言え

799 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:51:54.42 ID:9F15TCk0.net]
>>771
某アメリカ製のパッケージとかだな。

むしろテストコード専門に書く人いないのかよ。じゃあOOとかカプセル化とか
必要なほどの規模じゃないか体制がおかしいな。

800 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:53:01.58 ID:58eR5uXa.net]
> 某アメリカ製のパッケージとかだな。

だから事例は?



801 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:54:30.54 ID:58eR5uXa.net]
ユニットテストのコードを他の人が書いて、どうやってTDDをやるのか不思議なんだがw

先にテストコード書く人がテストコードだけ書いて、
これに通るように実装しろ!
これがTDD(テスト駆動開発)だ!
とか言ってる所とかでもあるんか?

事例を持ってきてくれ

802 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:56:40.99 ID:9F15TCk0.net]
だからユニットテスト自体が少なくともビジネス分野では大事じゃないと
上にも書いてあるが。

事例なんか出せるわけないだろ。中の人なんだから。

803 名前:デフォルトの名無しさん [2020/07/05(日) 02:58:40 ID:LRfXHt7v.net]
製品についてネットに書き込むときは、法務と企画のハンコ必要なので。

804 名前:デフォルトの名無しさん [2020/07/05(日) 02:59:12 ID:LRfXHt7v.net]
ちなみに法務俺、規格俺だけど。

805 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 03:03:18.34 ID:9F15TCk0.net]
今関わってる製品とかソース10万ファイルくらいあってそれぞれのファイルに
分岐なんか少なくとも数十から数百はあると思うが、その数百万から数千万、下手したら
億の分岐を全部全パターンテストするの?

テストなんてそのあとファンクショナルやってリグレッションやってアクセプタンスやって
ってあるのに、ユニットテスト「だけ」でそれでしょ?

サグラダ・ファミリアかな?

806 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 03:03:49.83 ID:58eR5uXa.net]
>>775
中の人だから事例が事例を出せないってことは、
お前の会社以外でやってないってことだろw

807 名前:デフォルトの名無しさん [2020/07/05(日) 03:04:01.72 ID:LRfXHt7v.net]
正しいとか正しくないとかどうでも良いので、privateのテストをさせてほしいものですね。

808 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 03:05:23.08 ID:58eR5uXa.net]
>>778
> 今関わってる製品とかソース10万ファイルくらいあってそれぞれのファイルに
> 分岐なんか少なくとも数十から数百はあると思うが、その数百万から数千万、下手したら
> 億の分岐を全部全パターンテストするの?

それユニットテスト関係ないよね?

手動で全パターンをテストするの?
答えはお前自身が言えるはずだよね?

809 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 03:06:25.42 ID:58eR5uXa.net]
ユニットテストなんかしてねーよ
ソース修正するたびに、
億の分岐全パターン手動テストしてるんだよ!

って言ってほしいな?
まだかな?

810 名前:デフォルトの名無しさん [2020/07/05(日) 03:13:56.54 ID:LRfXHt7v.net]
けんか腰は知能が高いと言われるム板に似合わないんだよな。
ユーモアを交えて会話するべきだと思います。



811 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:06:24 ID:9F15TCk0.net]
>>779
知ってる限りGAFAでもERP各社あたりでもやってないけどね。

試しに(ドイツだが)SAPあたりにカバレージどれだけですかって聞いてみれば?
何それ美味しいの?だよ。

まあこういう人は何言っても無駄だし下手に事実いうと発狂するからもう相手は
おしまい。

812 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:11:13.84 ID:58eR5uXa.net]
ではGoogleの事例

https://feb-acchan.hat
enablog.com/entry/2018/03/11/214344

現状について
Googleでは、420万ほどのテストが存在して、1日1億5千万テストケース
実行されていて(150million test execution/dayだからあってますよね?)、
1テストケースあたり35回実行されているらしいです。

そして、これらがすべて自動テストであり、手動テスト率が驚異の0%!
ただし、UX系のテストは手動だそうです。
UIのテストなどは自動化できるが、UXはさすがにまだ人手とのことで、
人の感覚などが関係するUXテストがAIによってテスト可能で人の仕事が無くなるといった日はまだ到来していません。

自動テストですが、毎テストごとに420万テストケースを実行しているわけではなく、
全テストケースを実行するのは一定の間隔で、普段は修正に対して依存があるテストだけを実行しているそうです。

813 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:13:30.65 ID:58eR5uXa.net]
Googleの考え方

https://www.publickey1.jp/blog/11/post_144.html

テスターはデベロッパーがテストできるようにするのが仕事
このようにEngineering Productivityのメンバーのレポートラインと
所属を分けることのメリットを、Whittaker氏は次のように書いています。
ここにグーグルの品質管理の大事なポイントがあるようです。

一般にテストは製品開発の最後の段階で行われることが多く、製品チーム/開発チームの
中にテストチームを抱えても、テストフェーズ以外は手持ちぶさたになってしまうため、
多くの開発組織ではテストチームは製品チーム/開発チームとは別に存在し、
必要なときに登場してテストを行う、というケースがほとんどです。

====以下重要====

ところがグーグルではEngineering Productivityに属する、テストのノウハウを持ち支援を
行うエンジニアたちは、前述のように各製品チームに所属しています。

そう、グーグルではテストチームではなく、製品チームが自身で品質管理を負っている。
各デベロッパは自身でテストすることを期待されている。テスターの仕事は、自動テストの
インフラを確立することと、それによってデベロッパ自身がそれをプロセスの中で実行できるようにすること。
テスターはデベロッパーがテストできるようにするのだ。

各製品チームは、Engineering Productivityのメンバーの支援を受けつつ、自分たちの責任で
テストを行わなければならない、ということがグーグルのテストを行う際のポリシーのようです。

814 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:14:26.63 ID:58eR5uXa.net]
https://www.publickey1.jp/blog/11/post_144.html

Whittaker氏はさらに次の記事「How Google Tests Software - Part Two」で、
エンジニアに与えられる3つの役割についても触れています。

Softweare Engineer in Test(SET)
テストのしやすさ(Testability)にフォーカスした役割。デザインレビューをし、
品質やリスクをチェック。コードをテストしやすいようにリファクタリングする。
ユニットテストや、テストフレームワーク、自動テストも書く。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

815 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:16:28 ID:58eR5uXa.net]
「コードをテストしやすいようにリファクタリングする。」

っていうのがまさにprivateでテストしたいのに
public経由でテストできない

ならばテストしやすいようにリファクタリングしましょうって話になってる

816 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:18:26 ID:58eR5uXa.net]
https://monoist.atmarkit.co.jp/mn/articles/1705/24/news008.html

C/C++かつxUnit系ツールは、数分調べるだけでも数種類見つかります。
今回はその中の1つ「Google C++ Testing Framework(以下、GoogleTest)」の
使い方を紹介します。

Google Testとは、IT業界の巨人、グーグル(Google)製の
単体テストフレームワーク(C/C++用)です。MinUnitと比べて高機能で、
さまざまな使い道があります。ただし、MinUnit同様、テストコードを記述するため、
C/C++をある程度知ってることが前提です。

817 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:19:35 ID:9F15TCk0.net]
>>785
テスト件数が問題なのではない。オートメーションすればファンクショナルレベル
でのテストはいくらでも流せる。

新しいファンクション・メソッドを書くたびに、あるいは変更をするたびに
全ての条件を網羅して、それをテストケースにして、コード自体をモディファイして
テストした後、結果をドキュメント化してまたコードを元に戻すということはやらないという話。

プライベートのファンクション・メソッド単位でC2100%テストしていくというのは
そういうこと。

818 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:22:02 ID:58eR5uXa.net]
米Google、JavaScriptユニットテストフレームワーク「JS Test」をオープンソースで公開
https://mag.osdn.jp/11/10/03/1012250

米Googleは9月29日、JavaScriptユニットテストフレームワーク「Google JS Test」を発表した。
元々はGoogle社内のプロジェクトで利用されていたもので、ライセンスはApache License 2.0。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

819 名前:デフォルトの名無しさん [2020/07/05(日) 04:27:51 ID:9F15TCk0.net]
いや、だからそういうツールがあるのなんて常識だが、privateはテストしない。
上にも書いてるがprivateはソース自体弄らないとテスト自体できないわけで、
そういうツールが自動でソースを弄ってコンパイルし直してprivateのメンバーを
全パターンするわけでは、当たり前だけど、無い。

クラス単位でパブリックのメソッドに対してテストコードもセットで書くということは
当然ある。

820 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:29:16 ID:58eR5uXa.net]
facebook / j



821 名前:est
https://github.com/facebook/jest

https://jestjs.io/ja/
Jest はシンプルさを重視した、快適な JavaScript テスティングフレームワークです。
[]
[ここ壊れてます]

822 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:31:02 ID:9F15TCk0.net]
全くわかってないなこりゃ。

823 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:33:27 ID:58eR5uXa.net]
反論すりゃいいのにw

824 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:34:11 ID:58eR5uXa.net]
憶測に基づいた発言はいらないよ?
俺はGoogleやFacebookとユニットテストに関連する事例を上げただけ

825 名前:デフォルトの名無しさん [2020/07/05(日) 04:34:11 ID:LRfXHt7v.net]
テストの専門家だからそう思うのでは。

826 名前:デフォルトの名無しさん [2020/07/05(日) 04:49:06.73 ID:LRfXHt7v.net]
完ぺきにテストしたからといって製品の完全性を保証することはできません。
したがってテストしないほうが良いのです。

827 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:52:22.10 ID:58eR5uXa.net]
ほらなw

完璧にテストした所で落ちない飛行機はありません
したがってテストしないほうがいいのです

と言い始めた
事例と自分の考えの矛盾を正せず、頭が狂い始めた証拠。
ここから荒らしと変貌する前触れだな

828 名前:デフォルトの名無しさん [2020/07/05(日) 04:53:23.27 ID:LRfXHt7v.net]
食いついてきた。
嘘みたい。

829 名前:デフォルトの名無しさん [2020/07/05(日) 04:58:23.98 ID:LRfXHt7v.net]
privateもテストさせていただけるとありがたいけど、禁止するのが正しいことになってるからな。

830 名前:デフォルトの名無しさん [2020/07/05(日) 04:59:58.66 ID:LRfXHt7v.net]
Visualstudioのテストエクスプローラを使うと考えが変わるのでは。
道具の問題かもしれない。



831 名前:デフォルトの名無しさん [2020/07/05(日) 05:53:15.48 ID:9F15TCk0.net]
ユニットテストというのはプロジェクトによってかなり幅があるわけで、
当たり前の話だがテストオートメーションのプログラムが勝手にコード
弄ってコンパイルしなおしてPrivateをテストするわけが無いのだよ。

832 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:05:37.56 ID:58eR5uXa.net]
↑みたいなことを言ってるやつがGAFAは〜と
なんのソースもなしに言ってるわけだよ
こんなやつの話を聞くやつがいると思うかね?

833 名前:デフォルトの名無しさん [2020/07/05(日) 06:06:03.12 ID:9F15TCk0.net]
ずれるかもしれないが下のような場合、privateにnullを突っ込んだらヌルポだが
privateをわざわざコード弄ってまで別にテストするようなことは少なくとも
ビジネスソフトでは知ってる限り無い。組み込みとかは知らんし必要ならやれば良いけど。

class ChinTester {
public void testChin(int[] len) {
if (len==null){System.out.println("You are a woman");
return;}
if (len.length<11){ uncS(len);}
else{funcB(len);}
return;}

private void funcS(int[] len){
if (len.length<9){System.out.println("Smallest");
}else{System.out.println("Smaller");}
return;}

private void funcB(int[] len){
if (len.length<14){System.out.println("Medium");}
else if (len.length<16){System.out.println("Bigger");
}else{ System.out.println("Wow!");}
return;}
}

834 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:21:04.56 ID:9F15TCk0.net]
あと日本のNTTデータから降りてくるような大企業案件とかもやったことが無いので知らん。
アメリカのビジネス系一般の話。

835 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:25:10.48 ID:M+BkbwUs.net]
>>805
そのコードを見ただけで素人ってわかるよw

836 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:27:32.73 ID:9F15TCk0.net]
はいはいそうですね。

837 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:33:43.45 ID:M+BkbwUs.net]
1. 関数名が意味不明
2. インデントがめちゃくちゃ
3. スペースを入れる所が統一されていない
4. lenが配列なのはなんでだ?
5. nullを情報として扱うな
6. 戻り値なしなのに関数の最後でreturnを書くな
7. 数値(長さ?)判定と文字出力を同じ関数に同居させるな
8. テストするなら、長さを入力し文字列を返す関数を作れ

なんでたったこれだけの関数で
こんなにレビューの指摘項目が存在するんだかw

838 名前:デフォルトの名無しさん [2020/07/05(日) 06:38:43.59 ID:9F15TCk0.net]
口調が気持ち悪い人は相手しても仕方ないからほっとくとして、上の例だと(に限らず)
funcSとfuncBをテストするためにはコード弄らなきゃいけないし、そもそもtestChin()で
リクワイアメントとエッジケースは全てテストするんだから、無駄にテストが倍以上に
なるしそれも手動になる。

普通のケースだとtestChinに対するテストコード書いて、変更があればそれを流す形になる。
上にさんざコピペが貼られたテストツールはそういうのを自動で流すツール。

テストケース流したいからfuncSとfuncBをパブリックにするというのはカプセル化
できてないし、ましてコード弄ってまでテストするのを手順化するというのは普通はやらない。

書いてる最中にコードちょろっと入れて確認するようなことはあって、それもユニット
テストといえばユニットテストだが、手法としてプロジェクト単位で公式にやるような
ものでは普通は無い。

車のブレーキ制御とかならそこまでやって欲しいが、OOとかカプセル化とはちょっと
違う話。

839 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:42:42.57 ID:M+BkbwUs.net]
> funcSとfuncBをテストするためにはコード弄らなきゃいけないし、そもそもtestChin()で
public経由でテストできるだろw

840 名前:デフォルトの名無しさん [2020/07/05(日) 06:45:32.12 ID:9F15TCk0.net]
>public経由でテストできるだろw
と、いうわけでPublicをテストすれば十分だしPrivateは(普通は)やらないという事を
やっとご理解いただけたようですな。

>>768ではこんな事言ってましたが。
>当然ソースを書いて(書き換えて)テストするに決まってるじゃん



841 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:47:04.12 ID:M+BkbwUs.net]
>>810
他の言語を勉強したほうがいいぞ
どうもお前は、絶対に来るはずがない値が引数に渡された時、
そのテストしろって言ってるようだからな

「絶対にありえない値」なんだから仕様なんて作らない
他の型がない言語だったら、引数に渡されるオブジェクトなんか
それこそ無限に値なんてありえるだから

privateでも、ソースコードを修正して引数渡せるなら
そのテストをかけって言ってるようなもん

842 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:47:52.42 ID:M+BkbwUs.net]
>>812
> と、いうわけでPublicをテストすれば十分だしPrivateは(普通は)やらないという事を

頭悪そうだなw

この場合publicメソッドを呼んだらprivateメソッドを呼び出すんだから
privateメソッドのテストになってるだろ

843 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:47:57.37 ID:9F15TCk0.net]
少なくともグーグルの面接で絶対こないからテストしないとか言ったら
速攻落ちるよ。むしろ絶対こないのをやるものだからね。

844 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:49:10.31 ID:M+BkbwUs.net]
>>768

> まさかpublic・privateメソッドのテストをテスト工程でやる、
> public・privateメソッドを書いた人と別の人がやるって思ってないか?
>
> public・privateメソッドを実装中に、その作ったもののが正しく動くかどうか
> public・privateメソッドのソースを書いた人が、書いてる段階でテストするんだから
> 当然ソースを書いて(書き換えて)テストするに決まってるじゃん

と言ってますが、今の話と何の関係があるんですか?
「誰がテストするか」の話なんですが?

845 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:50:26.40 ID:M+BkbwUs.net]
>>815
だからpublicメソッド経由でテストしてるじゃんw

お前は、内部でprivateメソッドを呼び出しているから
publicメソッドのテストには、privateメソッドがそんな値を返そうが
そのテストは書かないのか?

846 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:53:15.16 ID:M+BkbwUs.net]
例えば>>805 の話だと
testChinがpublicメソッド、そのメソッドのテストとして
引数に1(なんで配列か知らんが)となるものを渡したら
Smallestが返ってくることというテストを書く

それは実際には内部でprivateメソッドを呼び出しているのだからfuncSのテストになってる
カバレッジを計測したら、privateメソッドであるfuncSの該当行は実行した(テストした)と計測される。

847 名前:デフォルトの名無しさん [2020/07/05(日) 06:54:07.51 ID:9F15TCk0.net]
え、コーディング中にちょろっとコード書いて動作確認とかを「テスト」って
呼んでたの?そりゃ噛み合わないわ。

開発手法の話をしてる時に「テストする」というからにはテストケースを書いて、
手動にしてもコードにしても実行したログくらいは残すものだが。

君はメソッド作る時エッジケースやらネガティブテストやら考慮に入れつつケースを
書いて実行したログも残してるの?変更のたびにやるの?やらんだろ。

848 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:56:15.75 ID:M+BkbwUs.net]
>>819
どれにレスしてるの?
ユニットテスト(かつ自動テスト)の話しかしてないんだが
お前がどこを呼んでそう思ったのか
具体的に指摘してみて

849 名前:デフォルトの名無しさん [2020/07/05(日) 06:56:44.73 ID:9F15TCk0.net]
publicをテストしたらprivateも呼ばれてるからprivate単位でテストしてる!って
ブレブレやなw

publicから呼ばれないprivateなんて一体誰がなんのために書くんだよw

850 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:57:27.80 ID:M+BkbwUs.net]
>>819
> 君はメソッド作る時エッジケースやらネガティブテストやら考慮に入れつつケースを
> 書いて実行したログも残してるの?変更のたびにやるの?やらんだろ。

変更のたびって、お前変更のたびにメソッドの仕様が変わるのか?
いきあたりばったりで開発してるんだな



851 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:58:49.78 ID:M+BkbwUs.net]
>>821
最初からそう言ってるだろ?
ブレるも何も、最初からそう言ってる



> 私の

852 名前:回答
> 短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
>
> ほとんどのプライベートメソッドはパブリックメソッド経由でテストできるからです。プライベートメソッドは実装の詳細であり、自動テストのターゲットとなる「外部から見た振る舞い」ではありません。
[]
[ここ壊れてます]

853 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:00:51.32 ID:M+BkbwUs.net]
あ?まさかprivate関数の処理のテストをすればいいのに
private関数単独ででテストしなきゃだめだって思ってるのかw

あはは、関数単位でテストするのがユニットテストだって思ってるようだな
こりゃ、お・わ・ら・い・だw

854 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:02:37.00 ID:BTTSshKd.net]
メソッド単位でテストしろって言うのが組み込みおじさんだから話にならんよ

855 名前:デフォルトの名無しさん [2020/07/05(日) 07:03:05.56 ID:9F15TCk0.net]
なんだこいつ気持ち悪い。

856 名前:デフォルトの名無しさん [2020/07/05(日) 07:07:17.25 ID:9F15TCk0.net]
日本語もjavaも通じないからどうにもならない。
突然噛み付いてくる気持ちの悪いのは100%の確率でおかしいな。

857 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:08:18.45 ID:M+BkbwUs.net]
というふうに「技術」の話にレスができなくなったら
「人」(=俺)の話にすり替えるのが常套手段な

858 名前:デフォルトの名無しさん [2020/07/05(日) 07:13:21.25 ID:9F15TCk0.net]
というかお前は誰だよ。Private単位でコード書き換えてもやるって言ってる
人間がいたからPrivate単位では通常のビジネス系ではやらないという流れなのに
突然「お前は素人だあ!」とか噛み付いてきても知らんがな。

タブもスペースもトランケートされる2ちゃんでインデントがとかくだらない
ことでマウント取りにくる暇があったらまず日本語を学べ。

以上。

859 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:21:09 ID:BTTSshKd.net]
「privateメソッド」を直接テストしろって言う人はどうするのがいいって言うの?

a 全てprivateメソッドに対しても外部にリフレクション等を使用したテストを書くべき
b privateメソッドにアクセスできるクラスなどにpublicなテストコードを書くべき
c もっと言い方法がある、こうだ!

860 名前:デフォルトの名無しさん [2020/07/05(日) 07:22:11 ID:LRfXHt7v.net]
>>830
王家秘伝の技がある。



861 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:24:08 ID:M+BkbwUs.net]
>>830

>>798 じゃねーの?w

> 完ぺきにテストしたからといって製品の完全性を保証することはできません。
> したがってテストしないほうが良いのです。

つまり

privateにしたらテストできません。だからしないほうがいいのです。
完璧にテストした所で落ちない飛行機はありません
したがってテストしないほうがいいのです

862 名前:デフォルトの名無しさん [2020/07/05(日) 07:24:58 ID:9F15TCk0.net]
しかしよくチンコのサイズテストwにマジで噛みつけるもんだ。

863 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:29:06 ID:M+BkbwUs.net]
>>833
あ、そういうテストだったの?w
コードしか見てないよw

864 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:30:17.21 ID:M+BkbwUs.net]
Chinってちんこのことだったんだな
funcSとかfuncBとかfoo、barみたいに意味がない単語じゃん
コードがクソすぎて意味が伝わらないいい例だな

865 名前:デフォルトの名無しさん [2020/07/05(日) 07:34:08.81 ID:9F15TCk0.net]
無い場合You are a womanで9以下なら小さい、16越えりゃWow!で名前が
チンテスターなんだからわかってる人間は多いだろうな。

866 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:36:44.58 ID:M+BkbwUs.net]
>>836
じゃあint型の配列のlen(長さ)ってどういうこと?
配列がnullなら女で配列が複数あれば男?
何が複数なの?

867 名前:デフォルトの名無しさん [2020/07/05(日) 07:36:59.87 ID:9F15TCk0.net]
ちなみにfuncなんとかというのは君の好きなグーグルあたりでも例ではよく使うわな。
BとSもbigとsmallだろうと英語得意なら当たりがつくけどね。なぜABじゃなくてBS
なのか。そもそもoutに出てんだし。

868 名前:デフォルトの名無しさん [2020/07/05(日) 07:38:39.33 ID:9F15TCk0.net]
>>837
行があればChinkoクラスを作るとこだがスペースいらないで
intじゃなくてヌルポが出るものがarrayだからそれの長さで表してるだけだよ。

869 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:44:01.87 ID:M+BkbwUs.net]
> intじゃなくてヌルポが出るものがarrayだから
・・・

Java知らんのか?整数かつオブジェクトでも使えばいいじゃないか
具体的には教えてやらんよ。自分で勉強しな

870 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:46:53.71 ID:wXNAUX4A.net]
privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね



871 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:49:38.56 ID:y7MN16M9.net]
>>824
いや、やってもいいだろ
お前がやりたくないのは「たまたま」VisualStudioでやりにくいってだけの理由だろ
早く死んでね

872 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:53:17 ID:M+BkbwUs.net]
こういう事やって、NULLチェックが4倍に増

873 名前:えたー、テストも増えたーって
言ってるやつがいるなんて驚き。馬鹿かとw 以下擬似コードな

public func(value) {
 // valueのNULLチェック
 処理
 処理
 処理
}

public func(value) {
 // valueのNULLチェック
 foo(value);
 bar(value);
 baz(value);
}
private foo(value) {
 // valueのNULLチェック
 処理1
}
private bar(value) {
 // valueのNULLチェック
 処理2
}
private baz(value) {
 // valueのNULLチェック
 処理3
}
[]
[ここ壊れてます]

874 名前:デフォルトの名無しさん [2020/07/05(日) 07:56:16 ID:LRfXHt7v.net]
プロは俺だけだったか。

875 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 08:03:19.96 ID:FjEgCO9/.net]
そもそもprivateメソッドだからテストしないとか言ってるキチガイにまともな返答なんかいらない

そんなのどこの職場でも認められるわけないから
publicメソッド通したprivateメソッドに自分が想定したケースの値が全部入る保証なんかない
ある特定のケースのみそのメソッドの処理が欲しいときにしか呼んでないことあるだろ
つまりメソッド自体のテストはできてないしその方法でコードカバレッジ100%は無理だし
そもそもpublicから呼び出したprivateのコードカバレッジを100%にするなんて
作業が狂気過ぎてまともな脳みそ持ってるやつならやる前に無駄って理解できる

バカは早く死んでね

876 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 08:06:02.24 ID:M+BkbwUs.net]
そもそもprivateメソッドだからテストしないとか言ってるキチガイには
この言葉を授けよう

t-wadaのブログ
https://t-wada.hatenablog.jp/entry/should-we-test-private-methods#%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E7%B5%8C%E7%94%B1%E3%81%A7%E3%83%86%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B


私の回答
短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。

ほとんどのプライベートメソッドはパブリックメソッド経由でテストできるからです。プライベートメソッドは実装の詳細であり、自動テストのターゲットとなる「外部から見た振る舞い」ではありません。

ただし、この議論にはプロダクトコードもテストコードも自分で書いていることという前提があります。プロダクトコードに手を入れられず、テストコードも無いレガシーコードに対しては、リフレクションは強力な手段です。

プライベートなメソッドのテストに関しては、4つの考え方があります。

パブリックメソッド経由でテストする
別クラスのパブリックメソッドとする
テスト対象の可視性を(やや)上げる
プライベートのまま、リフレクションでアクセスしてテストを書く
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。

877 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 08:10:31.93 ID:FjEgCO9/.net]
>>846
そいつプロジェクトで仕事したことあるのか怪しい部類じゃね?

878 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 08:16:36 ID:IUsMolpf.net]
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?

879 名前:デフォルトの名無しさん [2020/07/05(日) 08:25:21.85 ID:9F15TCk0.net]
public通したprivateは単体としては怪しいというのはその通りだけど、
そもそも呼ばれないprivateを書くバカはいないわけで、条件があるから
書いてんだよね。で、条件をpublicの段階でテストするわけだから
ほぼ通ってるわけだよ。

上のチンコテストだとnullから16まで流せば全部通る。

違いは、上の例でprivateにnull突っ込んだらヌルポだわな。そこをテストするのは
コード変えなきゃいけないし、OOの大規模ビジネスソフトではそういうことは
やらない。それをやらなきゃいけない環境なら関数型でもいけるはず。

880 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 08:31:48.84 ID:ckfZDtdO.net]
>>849
できない時点でこの話は終わりさ
やらないわけには行かないんだから
90%できてても残り10%をどうやってもやる方法がないんだから
その方法はどうやっても採用できないし
わざわざする理由もない
別の方法ではできるんだから



881 名前:デフォルトの名無しさん [2020/07/05(日) 08:33:02.53 ID:9F15TCk0.net]
>>840
君のがpublic privateに関しては言ってることは正しいんだが
底抜けのバカだなあ。

整数かつオブジェクトwこのレベルの人と話してたのかw

はあ。。。

なんかいやになっちゃった。

882 名前:デフォルトの名無しさん [2020/07/05(日) 08:35:22 ID:9F15TCk0.net]
>>850
いやだから16まで流せば全部できてるけど。

ビジネス系ではやらないよ。組み込みで全部
テストしなきゃいけないというならわかるので
すれば良い。ただOOの手法とは違う。

デベロッパー千人のところでやってるの?
やってないでしょ?

883 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 09:13:35 ID:iCbhqS6F.net]
通ってればいいっていうなら単体テスト全否

884 名前:閧セろw
結合テストなりで全部やりゃいいって話になる。
[]
[ここ壊れてます]

885 名前:デフォルトの名無しさん [2020/07/05(日) 09:23:53.74 ID:9F15TCk0.net]
>>853
だからその線引きをどこでやるのかっていう事で、
privateまで全部テストケース書いてエッジケースもネガティブも
全部やるなら関数型で良いんだよ。

別にバカにする気は無いし、関数型のが難しい場面もたくさんあるが、
大規模(デベロッパーだけで数百人)のOOプロジェクトやった事ある?

886 名前:デフォルトの名無しさん [2020/07/05(日) 09:30:39.94 ID:9F15TCk0.net]
上のチンコの例で言えば、funcSとfuncBのテストをテストケース書いて
コードを書き換えた上でやってドキュメントなりログなりで残すの?

だったらpublicでやれば良いし、そうやってpublicにするなら関数型でも
おんなじ事でしょ。

チンコがnullなのか16以上そこそこでかいのかまでしか関係ないわけで
privateがnullをハンドリングしてないとか無駄なんだよ。もちろん
命に関わるようなところではそれくらいの厳格さが求められる場合も
あるだろうが、普通のビジネスソフトではそこまでやらない。

他のチームが関わる場所を少なくするためにカプセル化するわけで、
そんな全部publicにしたら意味ないんだよ。

887 名前:デフォルトの名無しさん [2020/07/05(日) 09:41:54.39 ID:LRfXHt7v.net]
弊社はC2カバレッジ100%未満は出荷できませんけどね。

888 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 09:42:35.87 ID:j0cUMVMZ.net]
>>854
線引じゃねーよクソ野郎
publicでたまたま呼ばれた1パターンと
privateの網羅テストが同じになってたまるかアホかよ
クラスのなかにあるのでpublicから呼ばれたときだけ動けば
ルーチンとして不出来でもOKなんてあるわけないだろ
お前はクソだからもう死ねよ

889 名前:デフォルトの名無しさん [2020/07/05(日) 09:45:43.25 ID:9F15TCk0.net]
>>857
まあじゃあ君はprivateまでテストケース書いてやっとけば良いんじゃない?
誰も止めてないし。大規模ビジネスソフトでは世界的に言って普通ではないというだけで。

僕はあんまり関わることのないレベルの世界だけど、まあ多分一生関わらないので
君が良いならそれで良いと思うよ。

890 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 09:51:39.34 ID:BTTSshKd.net]
>>857
君は大変なんだねwテストがんばれーwww



891 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 09:54:43 ID:bzHIXl0a.net]
>>858
落としどころとしてはそんなところで良いんじゃね?
問題なのは「privateはテストするべきではない」なんて変な教義を押しつける人の方なんで。

892 名前:デフォルトの名無しさん [2020/07/05(日) 10:02:55.49 ID:9F15TCk0.net]
>>856
正直QAやってたのは随分前の話だから最近のQAツールは知らんけど、
privateが全部通ってれば100%なわけで、そもそもprivateがある理由は
使われるためなんだから普通は誰も一回も使ってない場合なんかはないわな。
レベルが高くなると通らないケースも出るだろうが。だから線引きってこと。

チンコテストならnullから16までやれば100%通ってる。privateかpublicかって
のは関係ない。ただしprivateはnullをハンドリングしてない。それをどうするかって話。

893 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 10:03:22.77 ID:iCbhqS6F.net]
>>854
お前こそ大規模プロジェクトやったことないだろw
それだけ大規模だと逆にテストコード書かんわ(nttデータとかアクセンチュアとかな)
そんなクソプロジェクトを引き合いに出されても知らんわw

894 名前:デフォルトの名無しさん [2020/07/05(日) 10:05:36.79 ID:9F15TCk0.net]
>>860
「べきでは無い」とは思わないけど、privateをデベロッパーの個人的な
チェックを超えてテストすることを求められるとしたら、何かプロジェクト的に
おかしいとは思う。

895 名前:デフォルトの名無しさん [2020/07/05(日) 10:08:05.85 ID:9F15TCk0.net]
>>862
だから僕もNTTデータとかは知らんと上に書いてるけれども。

アメリカの大規模ソフトは中の人だし、他の会社のデベロッパも何人も知ってるので、
実際にアメリカの業界は知ってる。

君の「クソブロジェクト」ではないプロジェクトは会社名は出す必要はないが
例えばアメリカのERPとかそのレベルでなんなの?

896 名前:デフォルトの名無しさん [2020/07/05(日) 10:09:56.64 ID:9F15TCk0.net]
だいたい質問を質問で返す人は答えるのに不都合がある人。

数百人のデベロッパーのプロジェクトをやったことなくても全く問題は
ないんだが(ロッキードのミサイルの制御の人とか数百人もいないし

897 名前:)、
「あるよ」とは帰ってこない。
[]
[ここ壊れてます]

898 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 10:15:56.23 ID:bzHIXl0a.net]
>>863
だからそれは別の話なんだからさ。
「privateなら必ずしも単体テストする必要はないけどやりたいならやれば?」
これでいいじゃん。

899 名前:デフォルトの名無しさん [2020/07/05(日) 10:19:00.51 ID:9F15TCk0.net]
>>866
ちょっと弱いかな。「普通はやらんけどやりたかったりやる必要があるならやれば?」

くらい?privateを全部テストケース書いてエッジやネガティブやるとなると多くの場合
サグラダファミリアになるし、普通はやらない。

でもやりたいならやれば良いとは思うのでだいたいそういう感じか。

900 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 10:31:49.01 ID:BTTSshKd.net]
組み込みおじさんはそこに義務感を感じ、他者に強要するのだろう
難儀なこった



901 名前:デフォルトの名無しさん [2020/07/05(日) 10:37:41 ID:9F15TCk0.net]
組み込みとかだと多くの場合そもそもOOあんまりいらんと思うのよね。

人工呼吸器の制御とかだときびしくやらないといけないのはわかるし、
やってない人工呼吸器とか俺も付けられたくないけどさw

OOのメソッドとかはちょっと違う話だわな。カプセル化とかは数百人になると
生きてくる。個人的には自分一人の個人プロジェクトでも使うけど。
数年後にまたやる羽目になったりした時に楽なので。

902 名前:デフォルトの名無しさん [2020/07/05(日) 10:45:19 ID:MQ9nuMmc.net]
>>847
それは僕も思ってた
机上の空論っぽいんだよね

903 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 10:53:33 ID:kFjTOHVy.net]
>>867
どこに差があるのかよくわからんが、どちらにしても一行目は問題ないにしても
二行目はここに存在しない敵を攻撃している印象。
いちいち関係ない話を絡めなくてもいいじゃんと思うが、二度も書くということは
そっちが主張したい本音ということかな?

904 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 10:55:30 ID:sn+7aSX4.net]
OOPは理解している人とOOPを理解していない人が単体テストについて不毛な争いをするスレかな?

905 名前:デフォルトの名無しさん [2020/07/05(日) 10:58:45.46 ID:9F15TCk0.net]
>>871
いや、元々がpublicじゃなくてprivate単位でやれという話からなんだからその話だよ。

publicでprivateの分岐通ってるなら良いじゃんといなら誰も否定していないのでは?

逆にprivateで一度も通ってない部分があっても良いじゃんとも言っていないような。
if文書くのに絶対通らない物を書く人いるわけないでしょw

ただ、公式なテストとして、privateのレベルでテストケース書いてログ残してコード
書き換えてコンパイルし直してやるというのは少なくとも普通のビジネスのソフトとしては
一般的なベストプラクティスではないし普通はアメリカの大手一流ではやらないということ。
例外はあるとしても。

906 名前:デフォルトの名無しさん [2020/07/05(日) 11:03:24.23 ID:LRfXHt7v.net]
土台が腐ってたら。
全部検査するほうが楽。

907 名前:デフォルトの名無しさん [2020/07/05(日) 11:04:34.60 ID:9F15TCk0.net]
幸いそういうのには当たったことはないw
上に書いたように例外は認める。

908 名前:デフォルトの名無しさん [2020/07/05(日) 11:09:23.64 ID:MQ9nuMmc.net]
アメリカの大手一流ってどこだろ?

909 名前:デフォルトの名無しさん [2020/07/05(日) 11:11:04.89 ID:MQ9nuMmc.net]
アメリカや大手や一流が正しいとは限らないけどね
ボーイングの飛行機があんなことになってるように

910 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:11:13.65 ID:9F15TCk0.net]
まあ会社的にはプログラマなら全員知ってるとこ。それ以上は言わん。



911 名前:デフォルトの名無しさん [2020/07/05(日) 11:13:19.35 ID:9F15TCk0.net]
>>877
だからボーイングの制御系とかはそもそも全然別の話。

もちろん正しいとは限らないけど標準なのは確かだわな。
日本初のOOより優れたこういうメソッドがある!というなら
もちろん喜んで聞くけどね。

912 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:14:37.74 ID:kFjTOHVy.net]
>いや、元々がpublicじゃなくてprivate単位でやれという話からなんだからその話だよ。
>ublicでprivateの分岐通ってるなら良いじゃんといなら誰も否定していないのでは?

そう、それが一致しているならいちいち関係ない話を絡めなくてもいいんでは?
public経由のテストで十分網羅できるのにそれでもprivateメソッド単位のテストが
必要なんて主張している人いたかな?そこに誤解があるんじゃないの?

913 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:15:16.65 ID:9F15TCk0.net]
>>880
いるから揉めてるんすよ。

914 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:16:31.89 ID:M+BkbwUs.net]
>>881
それはどれ?レスを教えて

915 名前:デフォルトの名無しさん [2020/07/05(日) 11:17:47.72 ID:MQ9nuMmc.net]
アメリカの大手の一流がそうしてるから正しいのだという権威にすがった論理を
展開されておられたのでその会社ってど

916 名前:ソらの会社なのって聞いてみたんだけど
そんな会社本当にあるの?
[]
[ここ壊れてます]

917 名前:デフォルトの名無しさん [2020/07/05(日) 11:18:34.49 ID:MQ9nuMmc.net]
t_wadaの次はアメリカの大手一流か、議論の根拠が権威ばっかりやな

918 名前:デフォルトの名無しさん [2020/07/05(日) 11:21:40.50 ID:9F15TCk0.net]
例えばこの方。

848デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?


メソッド全部ちゃんとエッジケースやネガティブまでやれって業界があるのは
わかるし、必要だとも思うけど、それはOOのビジネス系だでは普通やらないということを
言ってただけなんだけど、バカだアホだお前は素人だといろんな方面から変に噛みつく
やつばかりでもう僕はいやになっちゃった。この人が噛み付いてきたということではないよ。

もちろんまともな人のが多いんだろうけどおかしな人のが目立つからね。

919 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:22:22.08 ID:/MeFbFCW.net]
いちいち論点ずらすな。
お前ら、何で争ってるんだよ。

920 名前:デフォルトの名無しさん [2020/07/05(日) 11:23:41.69 ID:MQ9nuMmc.net]
OOのビジネス系ってどんな仕事?
そんないい加減なことやっていい仕事ある?
トラブってもうちうちでなーなーで済むようなBtoBの仕事?
自社内でしか使わないシステムとか?



921 名前:デフォルトの名無しさん [2020/07/05(日) 11:24:18.36 ID:9F15TCk0.net]
アメリカの大手一流が不満なら自分の業界の実例をあげたらいかがだろうか?

privateをテストケース書いて全件やってるとこなんておそらくないぞ。あるというならあげれば良いだけの話。

テストツールどうやって動いてるねん。コード自動で書き換えてコンパイルし直しか。話がおかしいのすぐわかるだろ。

922 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:24:52.69 ID:/MeFbFCW.net]
まず、このスレの連中は議論する前に論理学を学ぶことをお勧めするよ。
あと、詭弁について調べろ。

923 名前:デフォルトの名無しさん [2020/07/05(日) 11:25:24.17 ID:MQ9nuMmc.net]
>>888
アメリカの大手一流ってどこの会社なん?

924 名前:デフォルトの名無しさん [2020/07/05(日) 11:25:52.62 ID:9F15TCk0.net]
>>887
だからアメリカ製のパッケージとかコンサルとの間でよく揉めてるだろ。これは「バグ」じゃないとか。DBだってよくある話だわな。

君はどんな仕事なの?

925 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:26:35.07 ID:9F15TCk0.net]
>>890
君の会社はどこなん?

926 名前:デフォルトの名無しさん [2020/07/05(日) 11:27:26.12 ID:MQ9nuMmc.net]
>>891
アメリカ製のパッケージとかコンサルとの間でよく揉めてる仕事なん?
なにそれ? 何言うてんの? 何の仕事してるんよ

927 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:27:47.35 ID:kFjTOHVy.net]
>>885
それは網羅してないからダメという意見では?
そこに反論するならば「privateのテストを強制すべきではない」ではなく
「public経由でも網羅することは可能」ではないかね?(できるなら)

928 名前:デフォルトの名無しさん [2020/07/05(日) 11:27:51.75 ID:9F15TCk0.net]
>>882
>>848
デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?

929 名前:デフォルトの名無しさん [2020/07/05(日) 11:28:29.72 ID:MQ9nuMmc.net]
>>892
アメリカの大手一流でこうしてるから、こうするのが正解なんやー
言うてたからアメリカの超一流ってどこなんよ? と聞いたんやけど
なんで言えへんの

930 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:28:59.86 ID:YdQ981ul.net]
>>870
新しい理論や手法を提唱する人には良くあることだと思うけど、その理論はある前提、ある側面では正しいけど、常に無条件に適用することは正しくないと本人は分かっていて、敢えてそういうことはわざわざ詳しくは説明しない。自分の論が有用な物だと主張したいがため、嘘はつかない範囲で相手が勝手に誤解してすごいと思わせるような物言いをする。
で、その理論に感銘を受けた人の一部が、理論の表面的な効能だけをありがたく受け取って問題点や前提条件などは正しく理解しないまま、受け売りの知識を他所で披露する。
そこで議論になると、本質をちゃんと理解してないまま自説を擁護しようとするから、無理が生じたり話が噛み合わなかったりする。
という流れでイマココなのかなと思う。



931 名前:デフォルトの名無しさん [2020/07/05(日) 11:29:53.38 ID:MQ9nuMmc.net]
>>897
なるほどね、わかる気がする

932 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:29:56.16 ID:M+BkbwUs.net]
大手一流の名前を言うだけで逃げそう(笑)

933 名前:デフォルトの名無しさん [2020/07/05(日) 11:33:32.02 ID:MQ9nuMmc.net]
足ガクガクになってまうよー

934 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:36:47.20 ID:Ua1+WoRk.net]
まぁ、単体テストでprivateを直接呼び出すのは変な話だけどな。
デバッグならともかく、単体テストでリフレクションによるprivate強制実行とか反則でしょ。
デバッグで許される理由は、バグを見つける可能性があるから。
単体テストで駄目な理由は、テストの合否判定が不当に変わる恐れがあるから。

というのが自分の見解だが、皆さんはどう?
スレが加速してからの途中参加だから、自分の発言に自信ないけど。

935 名前:デフォルトの名無しさん [2020/07/05(日) 11:37:26.26 ID:9F15TCk0.net]
>>894
そもそもpublicを経由するのが網羅してないから、経由せずにprivate単位で
コード書き換えてテストやるべきという主張自体がOO的にはおかしいわけです。

見せたくないからprivateなわけで。

もちろんデベロッパー個人でコード入れて確認することはあるだろうけれども、
開発手順としてテストケース書いてログ残してというのは違う。

public経由で内部を網羅してるかしてないかは知ったことではない、というのが正解。
上の例で言えばfuncBやfuncSがnullをチェックしてようがしていまいが他のチームには
関係ないわけです。入り口でnullチェックしてれば。

個人的にはサイズがでかければprivateでも入れるけども、それをテストケース書いて
ログ残してと要求されたことはないし、普通はされんはず。少なくともアメリカでは。

936 名前:デフォルトの名無しさん [2020/07/05(日) 11:38:33.09 ID:MQ9nuMmc.net]
GoogleであってもMicrosoftやOracleもバグのないソフトは作れないし
銀の弾丸的な手法があるわけもなく、アメリカ、大手、一流という箔付けに頼ってるだけでしかない

937 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:41:45.16 ID:Xwol7cCi.net]
せっかく匿名で議論できるのに
「アメリカの大手一流」とか言い出しちゃうところが哀れやわ
>>805の下痢便コード出た時点でスレ終了やろ普通

938 名前:デフォルトの名無しさん [2020/07/05(日) 11:43:37.87 ID:9F15TCk0.net]
>>896
君の会社はどこなの?

アメリカ大手1流でブライベート単位でのテストケース書いたりした網羅的なテストは「していない」という証明は悪魔の証明だから無理だけど。全社で働いたわけじゃないし。

逆にアメリカ大手1流でやっているという証明は一件出すだけなのでGAFAのどこでも、マイクロソフトでもアドビでも簡単にできるのでぜひどうぞ。

ただ、なんかコピペで爆撃されたオートメーションツールでは、特にコンパイル必要な言語は、直接privateテスト出来ないよ。当たり前の話。

939 名前:デフォルトの名無しさん [2020/07/05(日) 11:45:23 ID:MQ9nuMmc.net]
>>905
アメリカの大手一流ってどこなんよ?

940 名前:デフォルトの名無しさん [2020/07/05(日) 11:45:48 ID:MQ9nuMmc.net]
その会社がやってるからすごいんでしょ、はよ教えてやー



941 名前:デフォルトの名無しさん [2020/07/05(日) 11:47:16 ID:MQ9nuMmc.net]
もう何でもええから言うて、そしたら僕がすごーいって言うから、もうそれでええやんか

942 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:49:23 ID:9F15TCk0.net]
また別IDが下痢便とか発狂し始めた。

お前はほんとにウンコとかそのレベルのことが好きだな。

943 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:51:02 ID:9F15TCk0.net]
>>907
やって「ない」という話だけど。
まず日本語学んでやー よろしくなー

944 名前:デフォルトの名無しさん [2020/07/05(日) 11:51:58 ID:MQ9nuMmc.net]
>>910
アメリカの大手一流ってどこなんよ?

945 名前:デフォルトの名無しさん [2020/07/05(日) 11:52:54.88 ID:MQ9nuMmc.net]
たぶんアップルは単体テストやってない、SSLでアホなバグだしてたから、あの会社適当だわ、しらんけど

946 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:53:26.19 ID:9F15TCk0.net]
>>911
君が自分の名刺でもあげたら考えとくわー

947 名前:デフォルトの名無しさん [2020/07/05(日) 11:55:12.71 ID:MQ9nuMmc.net]
>>913
アメリカの大手一流ではそれが普通なんやーおりゃーってイキっておられましたよね
だから聞いたのに、教えてくれないなんて酷いです、あんなにイキってたのに酷いです

948 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:55:58 ID:M+BkbwUs.net]
>>902
> そもそもpublicを経由するのが網羅してないから、経由せずにprivate単位で
> コード書き換えてテストやるべきという主張自体がOO的にはおかしいわけです。

誰がそんなこと言ってるの?

少なく遠も俺は
1. privateはpublic経由でテストすれば十分
2. もしpublic経由でテストできないほど複雑なら、そもそも設計がおかしい
3. 設計の問題を修正して、責務を分割すれば、自然にpublicになるはず
と言ってる。

テストするためにpublicにするのではなく
問題がある設計を直せばpublicになる。と言っている。

949 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:55:59 ID:9F15TCk0.net]
>>914
劣等感がひどいな君は。まずはカウンセラーに
かかりなさい。OOの話はそれからしようか。

950 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:58:34 ID:9F15TCk0.net]
>>915
いや だ か ら この人。

848デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?



951 名前:デフォルトの名無しさん [2020/07/05(日) 11:59:21 ID:MQ9nuMmc.net]
アップルのSSLのバグはこれね

Apple史上最悪のセキュリティバグか、iOSとOS XのSSL接続に危険すぎる脆弱性が発覚──原因はタイプミス?
https://appllio.com/20140223-4899-apple-ios-bug-ssl-goto-fail

952 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:06:18.88 ID:wqV8YbJ4.net]
IUsMolpfに文句言えばいいのに。

953 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:07:47.85 ID:kFjTOHVy.net]
>>902
ああつまり、重要度は関数仕様>ブラックボックステスト>ホワイトボックステストだから
テストのために仕様変更はすべきでないという主張か。
それはわからんでもない気はするけど、そういうウォーターフォールが絶対というわけでもないしな。

その是非はさておき、そこが論点なら例えばリフレクションのような形でテストできたり、あるいは
テスト仕様を書く本人が関数仕様も決定することができる条件なら全然問題ないわけだ。

954 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:07:48.24 ID:9F15TCk0.net]
>>918
正直iOSは全然知らんけどこれは酷いなw
Public Private以前にStaticだからなんにしても直接テストする部分だな。

955 名前:デフォルトの名無しさん [2020/07/05(日) 12:08:47.51 ID:MQ9nuMmc.net]
>>921
せやろw

956 名前:デフォルトの名無しさん [2020/07/05(日) 12:13:26.38 ID:9F15TCk0.net]
>>919
横から狂犬が噛み付いてくるんだよ。

>>920
ウォーターフォールは関係ないし、重要度をつけてるわけでもないけれども、
普通はprivateはソースコード変えてまでテストするものではないというだけの単純な話。

そもそも「テスト」と言ってもいろんな段階があるわけだし、「ユニットテスト」にしても
プロジェクトによって意味が違うわけで。

なんにしてもprivateを(例外はあるにせよ)全部公式な形でテストしろというのは
OOの手法のプロジェクトでは「普通は」やらんというだけなのになんでこんな揉めるのか。

957 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:16:58.82 ID:kFjTOHVy.net]
>なんにしてもprivateを(例外はあるにせよ)全部公式な形でテストしろというのは
>OOの手法のプロジェクトでは「普通は」やらんというだけなのになんでこんな揉めるのか。

全部やれなんて主張している人がいないから。

958 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:19:09.22 ID:9F15TCk0.net]
>>924
だからいるだろうが。本人なの?

848デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?

959 名前:デフォルトの名無しさん [2020/07/05(日) 12:20:23.64 ID:MQ9nuMmc.net]
>>805
こう書いた方が良いと思うの
https://paiza.io/projects/mPhqBnYZnQukkW6HY9LmOQ

960 名前:デフォルトの名無しさん [2020/07/05(日) 12:21:30.51 ID:MQ9nuMmc.net]
privateメソッドが正しいことは確認する、その上でpublicのメソッドが正しいかテストするって感じ



961 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:30:30.98 ID:kFjTOHVy.net]
>>925
これが「privateのテストを全部やれ」に読めてしまうのか。そこが原因だな。

962 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:32:35.17 ID:M+BkbwUs.net]
>>923
> ウォーターフォールは関係ないし、重要度をつけてるわけでもないけれども、
> 普通はprivateはソースコード変えてまでテストするものではないというだけの単純な話。

テスト中に設計の問題が発覚しても
ソースコード書き換えないの?

ソースコード変えてまでテストするものではないというけど
なんでソースコードを作成&自分が書いたそのコードをテストしてるときに
自分が作成してるソースコードを変えたらだめなの?

963 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:36:24.73 ID:M+BkbwUs.net]
普通の開発だったら

0. なにかの修正を行う必要が発生する
1. その修正のためにソースコードを修正する
2. 修正したコードが正しいかテストする
3. 1〜2を繰り返し修正したコードに問題がなければ開発完了
4. 統合テストとかより大きなテストを行う

でしょ?

public・privateメソッドをテストしたいっていうのは
この1〜2のフェーズで発生することなのに、
なんでテストがやりにくいなと思ったときに
ソースコードを修正したらだめなの?

964 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:38:58.81 ID:wqV8YbJ4.net]
>>926
スマホでも見やすくなったな。
あー、なるほど。

でも、サンプルみたら少し混乱してきた。
自分はクラスの単体テストをイメージしてたけど、まさか、Mainクラスの中に定義されたprivateメソッドの単体テスト(?)の話をしていたとか?
もう単体テストの意味が少し崩壊してきたが...

965 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:46:16.73 ID:BTTSshKd.net]
どういう流れなのか追うのもめんどいなw

966 名前:デフォルトの名無しさん [2020/07/05(日) 12:52:51.86 ID:9F15TCk0.net]
>>928
そもそも300くらいからそういう話だから。

privateはpublicからアクセスして全部網羅できるから問題ないなんて
誰も否定してないしそういうことならもともと荒れてない。

>>929
あのさ、例えばバグが発生したらコード書き換えるのは当たり前だよね?
そんな話では当然ないよね?

privateを直接テストするためには外部から呼べないのだから、呼ぶためには
クラス内に書くしかないわけだよ。で、ソースに書き込んでクラス内に書いて
テストしたあとまたそのコードを取り除いてとかするの?それをドキュメント化
する?

普通はコード書いてる最中にテストコードを入れて確認するのは公式なテストの
メソッドでは無いし、それをドキュメント化したりするのは求められないと
思うが。

>>926
ワロタw

けどそうじゃ無い。privateで直接アクセスした時のみnullがでるということ。
intじゃ無いのは例のためにわざとそうなっている。あとchinTestが呼ばれてないし、
OptionalにisEmpty無いのでは。

967 名前:デフォルトの名無しさん [2020/07/05(日) 12:54:31.17 ID:9F15TCk0.net]
nullがでる->ヌルポがでる

968 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:54:57.72 ID:M+BkbwUs.net]
>>933
> privateを直接テストするためには外部から呼べないのだから、呼ぶためには
> クラス内に書くしかないわけだよ。で、ソースに書き込んでクラス内に書いて
> テストしたあとまたそのコードを取り除いてとかするの?それをドキュメント化
> する?

誰がそんな事するって言ってんの?
お前が想像が間違ってる

969 名前:デフォルトの名無しさん [2020/07/05(日) 12:56:01.25 ID:MQ9nuMmc.net]
>>933
えっとごめんそのnullの問題は設計が下手なだけだと思ってて、設計を見直すべきかと
privateのテストをどうしますかの例として出したので問題ないっしょ
君はこのプログラムをどうやってテストするん?

970 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:56:34.25 ID:3WDjCjSx.net]
よくもまあ粉薬をオブラートで包むような話でこれだけのレスで盛り上がれるなー



971 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:57:28.17 ID:M+BkbwUs.net]
いやーびっくりだw

設計がおかしいから設計を修正するって話をしてるのに
設計を修正した後に修正前に戻すなんでやらないだろ!って言われちゃった(笑)

だーれも修正前に戻すなんて言ってないの
おかしい設計を修正して「開発完了」なの

972 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 12:57:46.31 ID:JiRnWiGC.net]
たぶん、スレタイがスレタイだから、手続き型でプログラムを書く人のイメージする単体テストとオブジェクト指向プログラマーのイメージする単体テストで齟齬が生じているのでは?

そりゃ、サンプルみたいに関数が定義されていたらprivateだろうと関数はテストするべきって発想になるのは不思議じゃないし、オブジェクト指向に基づき設計されたクラスを単体テストする話であれば、privateをテストって、どういう意味なんだろって不思議がるだろうよ。

そして、たぶん、サンプルコードに対して真っ先に突っ込むべき点はOOPでも何でもないコードという点だと思うのだが、そこはいいのかな?

973 名前:デフォルトの名無しさん [2020/07/05(日) 12:57:47.49 ID:MQ9nuMmc.net]
OptionalにisEmptyが無いというのは何言ってるのかわからない
本当になかったらコンパイルに失敗するよ

974 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:00:08.78 ID:M+BkbwUs.net]
>>939
一人privateがテストしづらいからpublicに変更してテストして
"元に戻す" 話をしてるやつがいるみたいだが(笑)

975 名前:デフォルトの名無しさん [2020/07/05(日) 13:00:23.50 ID:MQ9nuMmc.net]
>>939
僕はOOPのコードだと思ってるよクラスが定義されてるからね
君が思うOOPのコードはこれだっていうのを君に出していただきたいかな

976 名前:デフォルトの名無しさん [2020/07/05(日) 13:00:34.24 ID:9F15TCk0.net]
>>935
もうお前は良いからスレを読め。

>>936
いやそうじゃなくて、publicで呼ばれるprivateを直接テストするのかという
話なので、そのためにわざわざヌルポになるように書いてるわけで、staticなら
そのままメソッド呼べば良い話。


もうこの板嫌。。。

977 名前:デフォルトの名無しさん [2020/07/05(日) 13:03:47.50 ID:MQ9nuMmc.net]
>>943
ヌルポになるような設計はおかしいのがそれはコーディング力の稚拙さゆえ。
だから、いまはそのヌルポの問題は置いておこう。
さて、君はこのプログラムをどうテストするのか教えて欲しいっていうのが僕の要望だよ。

978 名前:デフォルトの名無しさん [2020/07/05(日) 13:06:51.97 ID:9F15TCk0.net]
>>944
いやだから そ う じ ゃ な く て

privateでだけヌルポが出るように書いてるの。privateとpublicのテストの話だから。
出さないだけならnullチェック入れれば良いだけの話だが、そういうことじゃ無くて
わざと出るようになってるの。

そのプログラムならstaticなのだからそのまま呼べば良いし、
chinTestも呼ばれてないけどpublicなのだからテストしたければそのまま
呼べば良い話。

979 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:10:29.02 ID:JiRnWiGC.net]
>>942
スマホだからインデントとか崩れは許してほしいが

class USBMemory : Storage{
private:
色々定義
public:
USBMemory(ポート設定)
void open(string file)
string read()
void write(テキスト)
void close()
}

文法適当だが勘弁して

組み込みおじさんにも分かりやすいように、
組み込みを例にするが、
OOPってこんな感じのコードでしょ。


で、ユーザーは

USBMemory usb;
usb.open(ファイル指定)
text = usb.read()
usb.close()

こんな風に内部実装を知らなくても呼べる。

980 名前:デフォルトの名無しさん [2020/07/05(日) 13:11:36.99 ID:MQ9nuMmc.net]
>>945
わざと出るように入れたのが現実の実装と乖離してるので、わざと入れる意味が無いので
気にする必要ないですよってこと

君はpublic経由でprivateをテストするんだって立場ですよね
君はどうテストを書きますかってことを教えて欲しいです
君の元のコードでもいいですよ、僕が変更したコードでも良いですよ
君はどうprivateをテストしますか?



981 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:12:18.35 ID:JiRnWiGC.net]
残念ながら、クラスを使えばOOPという認識は間違い。

982 名前:デフォルトの名無しさん [2020/07/05(日) 13:13:15.86 ID:MQ9nuMmc.net]
>>948
僕は君の認識が間違いだと思ってる、君の方が残念

983 名前:デフォルトの名無しさん [2020/07/05(日) 13:13:55.43 ID:MQ9nuMmc.net]
クラスの存在こそがOOPの本質

984 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:13:59.63 ID:JiRnWiGC.net]
え、そこに反論されるの?
何このスレ。

985 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:14:57.78 ID:JiRnWiGC.net]
JavaScriptとかpythonとか、元々、クラスはサポートしていないのに?
プロトタイプベースはオブジェクト指向じゃないとでも?

986 名前:デフォルトの名無しさん [2020/07/05(日) 13:17:49.53 ID:MQ9nuMmc.net]
>>951
えじゃねえよ、なめんなよ

987 名前:デフォルトの名無しさん [2020/07/05(日) 13:18:05.20 ID:9F15TCk0.net]
>>947
意味がないどころか、そこにしか意味がないんだよ。
それ「だけ」を見せるためのコードなんだから。staticとか
なら話の流れとなんにも関係がないのでそれこそ意味がない。

でもあえていうなら、そもそもまず連打が好きじゃ無い。自分ならループにするけど、
それだけでもない。

まず壊すようにテストすんの。null入れたり、変なオブジェクト入れたり。

で、privateをテストするんじゃなくて、要件通り動くかどうか。nullからint maxまで
回して、要件通りの結果が全てでくるか。変なオブジェクト入れたらどうか。
そういう感じ。

でも最初に書いたように、publicとprivateの話なんだから、そこで
エラーが出るか出ないかがないとこのスレ的にはなんの意味もない。

988 名前:デフォルトの名無しさん [2020/07/05(日) 13:18:37.20 ID:MQ9nuMmc.net]
>>952
JavaScriptにもPythonにもクラスあるよ
クラスがオブジェクト指向の本質だと気づいたから追加されたんじゃないでしょうかねー

989 名前:デフォルトの名無しさん [2020/07/05(日) 13:19:41.30 ID:9F15TCk0.net]
クラスの存在はOOPの大事な部分だけど、OOPの言語を使ってもほとんどOOPでは
無いというのはよくある話。巨大クラス一個とかだと頭を抱える。

990 名前:デフォルトの名無しさん [2020/07/05(日) 13:22:07.34 ID:MQ9nuMmc.net]
>>954
現実にありえない実装見せて、ほらね、と言われても僕は戸惑うばかり
そんな現実にありえないことを想定するからまずいんじゃないですかね
現実にそういうコード書いてるんじゃないかと僕はちょっと君のコーディング力を
疑わしく思ってきたのだけれども

public経由で、標準出力に出力するようなprivateコードを一生懸命テストしますか?
がんばり屋さんだなとは思うけど、効率悪くないですかね



991 名前:デフォルトの名無しさん [2020/07/05(日) 13:22:29.69 ID:MQ9nuMmc.net]
>>956
そんな極端な話ちゃうやろボケ

992 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:24:13.83 ID:JiRnWiGC.net]
そりゃ、クラスはオブジェクト指向を実現する上で便利だからね。大切な存在さ。でも、クラスなんて無くてもオブジェクト指向でコードは書けるし、逆に、クラスが合っても手続き型の記述をしたら、そりゃ、オブジェクト指向じゃねーわ。
つーか、クラスを使ったらオブジェクト指向ってマジで言ってる?
それってつまり、このスレで時々名前の出るstaticおじさんの書いたコードもオブジェクト指向だと言い張るつもり?

993 名前:デフォルトの名無しさん [2020/07/05(日) 13:25:43.22 ID:9F15TCk0.net]
>>957
えーー、違うそうじゃ無い。多分君よくわかってない。
例なわけで実際にありえないとかありえる訳が無い。そんな話じゃ無いし
根本的な部分がわかってない。

publicでは問題がなく、private単体だと問題がでるコードなわけで。この意味はわかる?

994 名前:デフォルトの名無しさん [2020/07/05(日) 13:29:16.63 ID:MQ9nuMmc.net]
>>959
staticおじさんの元の話知ってる? 僕はリアルタイムであれを読んでたからよく知ってるんだけれども
staticおじさんは必要なところではオブジェクト作るよ、でもASP.NETのForm Applicationのフレームワークには
もともとリッチなオブジェクトが用意されてるから実務ではそれを組み合わせるだけで事足りることが多いよ
だからstaticメインで組み上げてオーケーさって話だったよ

オブジェクト指向信者がアホな前提置いて話を発散させただけでstaticおじさんが言ってることはわりあいまともだった
こういう議論の場で神クラスを引き合いに出して批判するという極端なことやって意味があるのかなと僕は疑問ですね

995 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:30:55.04 ID:JiRnWiGC.net]
いや、そもそもstaticおじさんのコードはオブジェクト指向でも何でもねーよ!
話反らすな。

996 名前:デフォルトの名無しさん [2020/07/05(日) 13:32:41.77 ID:MQ9nuMmc.net]
>>962
staticおじさんの書いたコードもオブジェクト指向だと言い張るつもり?

と君が聞いたからstaticおじさんに対する僕の所見を述べたつもり
ASP.NETのオブジェクトを使ってるならオブジェクト指向でしょ
オブジェクト指向が為せる技だと思うよ

997 名前:デフォルトの名無しさん [2020/07/05(日) 13:33:02.71 ID:MQ9nuMmc.net]
オブジェクト指向便利だよね

998 名前:デフォルトの名無しさん [2020/07/05(日) 13:33:43.81 ID:9F15TCk0.net]
コードあげてくれるのは偉いと思うので気がひけるのだが、上のコードは
privateとpublicの違いを表すための部分がまるですっぽ抜けてるし、そもそも
staticだし結構それ自体staticおじさん感がある。すまんw

999 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:33:52 ID:JiRnWiGC.net]
>>963
ちげーよ。ASPがオブジェクト指向であって、staticおじさんのコードはオブジェクト指向でも何でもねーよ。

1000 名前:デフォルトの名無しさん [2020/07/05(日) 13:37:13 ID:MQ9nuMmc.net]
>>966
でもASP.NETのフレームワークがオブジェクト用意してなかったらstaticおじさんはコード書けなかったと思うし
staticおじさんのコードはオブジェクト指向を有効的に活用した非常に優れたコードだと思いますよ
必要もないのにオブジェクト作るのはアホですわ



1001 名前:デフォルトの名無しさん [2020/07/05(日) 13:38:05.15 ID:MQ9nuMmc.net]
staticおじさんは必要な場面ではオブジェクト作るっていってるからねー
僕はstaticおじさんに詳しいんだ

1002 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:38:11.20 ID:9F15TCk0.net]
神のGTO感があるw

1003 名前:デフォルトの名無しさん [2020/07/05(日) 13:40:17.58 ID:MQ9nuMmc.net]
物事の本質を見誤ると道を踏み外すよ
状態に依存してないのにインスタンスメソッドにしたりとか
staticメソッドを定義したらstaticおじさんと言ったりとか
そういうバカのできあがりですよ

1004 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:40:37.05 ID:JiRnWiGC.net]
>>967

> >>966
> でもASP.NETのフレームワークがオブジェクト用意してなかったらstaticおじさんはコード書けなかったと思うし

そうだね。

> staticおじさんのコードはオブジェクト指向を有効的に活用した非常に優れたコードだと思いますよ

お前がそう思うのなら、そう思えば。そはどうでもいい。

で?
クラスを定義すればオブジェクト指向だとまだ主張するの?

論点ずらすなや

1005 名前:デフォルトの名無しさん [2020/07/05(日) 13:42:50.97 ID:MQ9nuMmc.net]
>>971
何が気に入らなくて僕に絡んでるのかわからないですが
クラスがオブジェクト指向の本質であることには変わりないですよ
クラスとはデータと処理をセットにして持つことができるものです
クラスを定義することこそがオブジェクト指向の本質です

1006 名前:デフォルトの名無しさん mailto:< []
[ここ壊れてます]

1007 名前:>2020/07/05(日) 13:44:43.62 ID:MQ9nuMmc.net mailto: 責務ごとにオブジェクトをわけましょうなんていうのは
オブジェクト指向でプログラミングすることを前提にした設計論でしか無いです
クラスの存在こそがオブジェクト指向の本質です
[]
[ここ壊れてます]

1008 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:45:21.93 ID:JiRnWiGC.net]
>>972

>>926をオブジェクト指向と認識している時点でオメーは間違ってるんだよ。

1009 名前:デフォルトの名無しさん [2020/07/05(日) 13:47:18.05 ID:MQ9nuMmc.net]
>>974
いいえ、君のほうが間違いです
Mainという名前にしてるのはpaizaではMainじゃないと動かないからですよ
その辺わかって絡んでますか? あまり僕を怒らせないほうが良いです

1010 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:47:27.85 ID:JiRnWiGC.net]
>>972
何が気にいらないかって?
オブジェクト指向でも何でもねぇコードをオブジェクト指向と認識して今まで長ったらしい口論を続けてきたことだ。

クソみたいな時間だったな、オイ。



1011 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:52:06.41 ID:JiRnWiGC.net]
>>975
まぁ、いいさ。これ以上は不毛だ。スレも終わるし。
俺は俺の思う正しいオブジェクト指向で今後も楽をさせてもらうよ。
そっちも、そっちの思うオブジェクト指向とやらを使い続けるがいい。

成果が出た方が正義だ。

1012 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:55:35.80 ID:h7Qz+vpg.net]
オブジェクト指向だから髪型は自由なのさ

彡 ⌒ ミ
(´・ω・`) 不毛とかいうな!

1013 名前:デフォルトの名無しさん [2020/07/05(日) 13:56:22.57 ID:MQ9nuMmc.net]
ハゲに謝るべき

1014 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:56:24.62 ID:VS9zJ3bZ.net]
よし
話を一度整理しよう

privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね

1015 名前:デフォルトの名無しさん [2020/07/05(日) 14:06:22.83 ID:MQ9nuMmc.net]
ナイスな整理と言わざるを得ない
議論もリファクタリング可能であることを如実に示した

1016 名前:デフォルトの名無しさん [2020/07/05(日) 14:09:58.85 ID:MQ9nuMmc.net]
>>976
僕のコードはオブジェクト指向ですよ
そこんとこよろしくですよ

オブジェクトをどう分けるかって話はありますよ
しかし、それとは独立してオブジェクトは存在するので
オブジェクトを定義できるクラスの存在そのものがオブジェクト指向の本質なわけです
だからオブジェクト指向言語にはクラスが存在します

生物学の類、目のようなものです、どう分類するかは副次的な話であって
分類できることこそが最も重要な事柄です

1017 名前:デフォルトの名無しさん [2020/07/05(日) 14:18:27.81 ID:9F15TCk0.net]
正直あの短さでOOかどうかと(スタティックでインスタンス化もないコードだが)言うのは
不毛だけどID:JiRnWiGCの組み込みおじさんのがOO感はあるよ。

で、staticで出されてもprivateのテストがどうかと言う話には全く寄与しないわけだが、
じゃあ逆に、>>805のチンコテストのfuncSとfuncBはどうやってテストするの?

パブリック経由で全パターンと言うことならこれでこの話はおしまい。
パブリック経由でやりましょう。

違うと言うなら具体的にコードでおながいします。

smallestを9じゃなくて8にしろとかいう苦情は受け付けますw

1018 名前:デフォルトの名無しさん [2020/07/05(日) 14:23:34 ID:MQ9nuMmc.net]
>>983
僕ならテストしないですね、全部書き直します
メソッドを行数で分割するようなことしてるからそういう下痢便コードができあがるんじゃないかと思いますよ

1019 名前:デフォルトの名無しさん [2020/07/05(日) 14:24:31 ID:MQ9nuMmc.net]
クラスにしてもメソッドにしても責務でわけないと
行数が50行超えたから分割しなければみたいなアホなことやってるのはアホですわ

1020 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 14:25:15 ID:JiRnWiGC.net]
(組み込みおじさんじゃないんだけどな...組み込みもやるけど)



1021 名前:デフォルトの名無しさん [2020/07/05(日) 14:26:22 ID:MQ9nuMmc.net]
>>986
器用ですね、じゃあ僕との仲直りもすぐにできそうですね

1022 名前:デフォルトの名無しさん [2020/07/05(日) 14:28:26 ID:9F15TCk0.net]
>>984
書き直して決め打ちコピペにstaticなんだw
結局publicとprivateの違いはよくわかってないな。
まあ頑張れ。君とはこれまでだ。

>>986
組み込みおじさんって言ってたやんけ(言ってなかったか?)

1023 名前:デフォルトの名無しさん [2020/07/05(日) 14:30:37 ID:MQ9nuMmc.net]
>>988
staticにしたのは状態に依存してないからですね

1024 名前:デフォルトの名無しさん [2020/07/05(日) 14:31:51 ID:9F15TCk0.net]
下痢便君は10代後半から20代前半というところかなあ。

ウンコチンコのレベルと絡んでてもおじさんあんまり面白く無いんだよね。
自分でチンコテストのコードあげたけどw

でもコードあげたのは偉いと思うので頑張ってね。

1025 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 14:33:06 ID:JiRnWiGC.net]
あー、組み込みおじさんにも解るように だよ。
俺自身、組み込みもやるからややこしいが、ずっと前に登場した組み込みおじさんとは別人だよ。

まぁ、慌てて書いたから余計な発言だったか。
もう、この際OOPの利点さえ感じていればなんでもいいことにするよ。
スレも少ないし、ヒートダウンしたし。

1026 名前:デフォルトの名無しさん [2020/07/05(日) 14:33:34 ID:MQ9nuMmc.net]
>>990
僕まだ小学生でちゅ

1027 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 14:35:03.91 ID:9F15TCk0.net]
あー組み込みおじさん(固有名詞)が居たのね。一般名詞のつもりでした。
この板昨日からなので。

1028 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 14:35:40.42 ID:9F15TCk0.net]
>>992
偉いねえ。

1029 名前:デフォルトの名無しさん [2020/07/05(日) 14:37:40.20 ID:MQ9nuMmc.net]
参照透明なメソッドだとテストしやすいしバグの混入も減らせるのでおすすめ!
間違っても>>805こんな下痢便分割しちゃダメ

1030 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 14:38:27.28 ID:9F15TCk0.net]
しかし小学生の下痢便君とかと話ててもこっちは損するばかりだしなあ。
マジで。しかも下痢便君はましな方な可能性さえあるし。

予想以上だった、この板。マジやばい。ASP.NETのオブジェクトを使ってるなら
オブジェクト指向だし。



1031 名前:デフォルトの名無しさん [2020/07/05(日) 14:38:41.11 ID:MQ9nuMmc.net]
>>993
マジで!? ID:gS37C1rZ これ絶対君だと思ってた、言ってること薄っぺらいしアホだし

1032 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 14:42:18.59 ID:h7Qz+vpg.net]
不毛

彡 ⌒ ミ
(´・ω・`)

1033 名前:デフォルトの名無しさん [2020/07/05(日) 14:43:23.60 ID:9F15TCk0.net]
>>997
マジで某アメリカの誰でも知ってるとこの中の人だよ。
日本人あんまり居ないので、これ以上はやばいからどこだか
下痢便君に教えるわけが無いけど。

インデントとか言ってたの君だっけ?

そんなくだらない(しかも的外れな)揚げ足取りじゃなくて、
君のコード、根本的なとこに問題あるんだけど、わからない人に
わかれと言ってもわからないだろうからなあ。

ちゃんとOOをやったらわかるかも。頑張ってね。下痢便君w

1034 名前:デフォルトの名無しさん [2020/07/05(日) 14:43:28.02 ID:MQ9nuMmc.net]
>>998
ハゲて頑張っておられる方にお詫び申し上げます

1035 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 16日 14時間 55分 52秒

1036 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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