カプセル化(英語: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)
カプセル化の有害性、オブジェクト指向は愚かな考え
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
2020/06/18(木) 23:47:36.69ID:l/2SQUll2020/06/18(木) 23:48:12.14ID:l/2SQUll
大雑把にいうと、教科書の上では素晴らしく、最初は良くても、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。医学的にいえば「手術ができない存在」であるといえる。
2020/06/18(木) 23:48:21.02ID:l/2SQUll
オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。
2020/06/18(木) 23:49:03.96ID:l/2SQUll
実例
XNA(MonoGame)では標準で3Dモデルを手軽に扱えるModelクラスが用意されている。 1行で読み込み、1行で描画できる素晴らしいものだ。
ただしこのModelクラスを使うと頂点データは遮蔽されておりアクセスできない。 物理演算エンジンに食わせるのにどうしても頂点データが必要なのにだ。
世界中の誰もが同じ問題で悩んでいるようでstackoverflowに回避策が書いてあった。頂点データをGPUに送信した直後にGetData関数でそのまま返してもらうトリッキーなコードでめでたく回避できた。
しかし、時は流れこの方法では動かない環境が登場した。iOSやAndroidだ。こいつらが採用するOpenGL ESはGPUとの通信が一方通行だ。そこで事前に3Dモデルから頂点データを抜き出し別ファイルに保存しておくという一段とトリッキーな方法で回避する。みごと1モデルのファイルが2個になりました。
さらに時は流れた。あるとき謎の不具合が発生。連日連夜のデバッグ作業。原因は片方のファイルの更新を忘れていただけでした。
カプセル化は恐ろしいね!!
XNA(MonoGame)では標準で3Dモデルを手軽に扱えるModelクラスが用意されている。 1行で読み込み、1行で描画できる素晴らしいものだ。
ただしこのModelクラスを使うと頂点データは遮蔽されておりアクセスできない。 物理演算エンジンに食わせるのにどうしても頂点データが必要なのにだ。
世界中の誰もが同じ問題で悩んでいるようでstackoverflowに回避策が書いてあった。頂点データをGPUに送信した直後にGetData関数でそのまま返してもらうトリッキーなコードでめでたく回避できた。
しかし、時は流れこの方法では動かない環境が登場した。iOSやAndroidだ。こいつらが採用するOpenGL ESはGPUとの通信が一方通行だ。そこで事前に3Dモデルから頂点データを抜き出し別ファイルに保存しておくという一段とトリッキーな方法で回避する。みごと1モデルのファイルが2個になりました。
さらに時は流れた。あるとき謎の不具合が発生。連日連夜のデバッグ作業。原因は片方のファイルの更新を忘れていただけでした。
カプセル化は恐ろしいね!!
2020/06/18(木) 23:50:00.80ID:RTNtaITn
仕様変更
それは雲の上で決まったことなので底辺社畜のITドカタにはどうすることもできない。
意見を言おうにも雲の上にいる奴らの顔すら知らない。
それこそが階層化で起きることだ。
オブジェクト指向云々ではない。
それは雲の上で決まったことなので底辺社畜のITドカタにはどうすることもできない。
意見を言おうにも雲の上にいる奴らの顔すら知らない。
それこそが階層化で起きることだ。
オブジェクト指向云々ではない。
2020/06/18(木) 23:50:50.45ID:vbQxaIet
シンプルなほうが解読しやすいよね
散逸して現物しか残ってない場合とか特に
散逸して現物しか残ってない場合とか特に
2020/06/18(木) 23:51:52.81ID:aKnQJHa5
副作用の起きない処理はpublicでも問題ないだろうな
問題が起きるとすれば運用側の問題
問題が起きるとすれば運用側の問題
2020/06/18(木) 23:53:22.90ID:evvN6o0n
データベースに出し入れするだけの業務システムなんかは問題ない。
データベース上のデータなんてグローバル変数となんら変わらない。
クラスは構造体としてしか使わないから深い階層化も起きないし。
データベース上のデータなんてグローバル変数となんら変わらない。
クラスは構造体としてしか使わないから深い階層化も起きないし。
9デフォルトの名無しさん
2020/06/18(木) 23:54:18.03ID:evvN6o0n >>2
C++が流行りだしたころに、これ言ったら変な目で見られたわ。
設計能力と未来を見通す能力がある人限定なんだよ。
大人数だと低い方に合わされるから、大人数プロジェクトには不向き。優秀な少数精鋭プロジェクトなら良いんだけどね。
C++が流行りだしたころに、これ言ったら変な目で見られたわ。
設計能力と未来を見通す能力がある人限定なんだよ。
大人数だと低い方に合わされるから、大人数プロジェクトには不向き。優秀な少数精鋭プロジェクトなら良いんだけどね。
2020/06/18(木) 23:54:53.81ID:evvN6o0n
日本の場合はカプセル化されてようがいまいが基底クラスなんて弄ったら再テストしなきゃいけないから
同じ機能を持ったクラスを作るので意味が無い
同じ機能を持ったクラスを作るので意味が無い
2020/06/18(木) 23:55:28.61ID:/lqvqqb1
そもそもアランケイの考えたものと今のオブジェクト指向が違うっていうね
オブジェクトなんて名前を使ったせいでオブジェクトが重要だと勘違いしてるし全員
よって失敗
ただ発展には貢献したそれだけ
オブジェクトなんて名前を使ったせいでオブジェクトが重要だと勘違いしてるし全員
よって失敗
ただ発展には貢献したそれだけ
12デフォルトの名無しさん
2020/06/18(木) 23:56:10.69ID:TSP7N+np 昔作ったクラスを継承したり再利用したりなんて殆どない
データと関数数個だけで済むものを
無駄にクラス化して
ヘッダと実装にわけて無駄にコード追いにくくするのはあかん
データと関数数個だけで済むものを
無駄にクラス化して
ヘッダと実装にわけて無駄にコード追いにくくするのはあかん
2020/06/18(木) 23:57:06.18ID:MtNDH7Ee
2020/06/18(木) 23:58:55.32ID:YGaYv0dq
2020/06/18(木) 23:59:22.80ID:bx1rTxjv
内部に状態を持つな
2020/06/18(木) 23:59:49.19ID:q6R3f09j
オブジェクト指向で設計やるとしばしば手段が目的化してしまって不必要に複雑化する
2020/06/19(金) 00:00:25.84ID:/31ICsy6
privateの考え方自体は悪くないんだが、
privateの必要性を理解できる人間はそもそもprivateを必要としないんだよ
そしてprivateが必要な人間はprivateの本質を理解せずにおかしな使い方をしてしまう
こういうジレンマは何にでもある
privateの必要性を理解できる人間はそもそもprivateを必要としないんだよ
そしてprivateが必要な人間はprivateの本質を理解せずにおかしな使い方をしてしまう
こういうジレンマは何にでもある
2020/06/19(金) 00:01:18.25ID:+IhkHRGD
カプセル化は机上の空論ってのは頭いい人しかいないチームでしか通用しない
日本のIT土方みたいに想像を絶する馬鹿が無限に湧いてくる現場ではコードを守るために不可欠
日本のIT土方みたいに想像を絶する馬鹿が無限に湧いてくる現場ではコードを守るために不可欠
2020/06/19(金) 00:01:50.77ID:2JP1keJd
無駄に継承しまくるのが害悪なだけ
2020/06/19(金) 00:02:19.49ID:wxIbXk9M
あとになって公開できないなら隠蔽するなってことだろ
ずっと保守し続けて、公開してくれって言われたらすぐ設計変更して公開できるなら別にかまわん
でもずっと保守し続けるかどうかは予算や人事で決まるんだから、それらに関われないと責任持てんわな
ずっと保守し続けて、公開してくれって言われたらすぐ設計変更して公開できるなら別にかまわん
でもずっと保守し続けるかどうかは予算や人事で決まるんだから、それらに関われないと責任持てんわな
2020/06/19(金) 00:03:06.93ID:BXl5HLPF
想像を絶する馬鹿が想像を絶するカプセル化をしてしまうんだよなあ……
2020/06/19(金) 00:04:23.05ID:mHF7j7mX
特定の事例はオブジェクト指向とかクラスが悪いわけじゃなくて
その設計が失敗してるだけですね
その設計が失敗してるだけですね
2020/06/19(金) 00:05:13.42ID:bOeh/ohg
24デフォルトの名無しさん
2020/06/19(金) 00:06:06.77ID:wn9UnRAm OOPにすらついていけない本物のバカには無理ってだけ
まあOOPが無理ならどんなプログラミングも無理だけど
まあOOPが無理ならどんなプログラミングも無理だけど
2020/06/19(金) 00:06:46.04ID:OaIc6ajp
路線バス、タクシー、レンタカー、自家用車の4つを使ってオブジェクト指向を説明して欲しい。
難しすぎて全然頭に入らない。
難しすぎて全然頭に入らない。
2020/06/19(金) 00:07:21.87ID:c3NGwjmZ
時代はDDDって聞いたんだけど
2020/06/19(金) 00:07:51.60ID:cOWnS532
余計な例えは無意味
そもそも変数とか関数とか引数とか理解しとんのか
そもそも変数とか関数とか引数とか理解しとんのか
2020/06/19(金) 00:08:22.59ID:Vry7Dmyh
じなあガンダムで例えてくれ
2020/06/19(金) 00:08:50.90ID:ih59xFoN
オブジェクト思考は糞
関数の引数と戻り値だけ信用すれば良い
オブジェクトに状態持たせるフィールドなんて可読性落ちるだけなのに理解できない一周も二週も遅れてるやつが声高に叫んでるのは笑えるw
関数の引数と戻り値だけ信用すれば良い
オブジェクトに状態持たせるフィールドなんて可読性落ちるだけなのに理解できない一周も二週も遅れてるやつが声高に叫んでるのは笑えるw
2020/06/19(金) 00:09:59.54ID:DxHcuyZI
2020/06/19(金) 00:11:36.72ID:A+kahko2
>>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
>>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
2020/06/19(金) 00:12:19.87ID:Z/R3v37q
>>31
そんな仕様変更が入る方がおかしいんじゃないかな
そんな仕様変更が入る方がおかしいんじゃないかな
2020/06/19(金) 00:12:37.66ID:CAQAyB0l
>>32
そのくらいの仕様変更はザラにある
そのくらいの仕様変更はザラにある
2020/06/19(金) 00:12:54.82ID:Vvw9/CQL
おっそろしーなぁ
35デフォルトの名無しさん
2020/06/19(金) 00:13:25.36ID:+NZQ8ymG オブジェクト思考って何?
誰か説明して
誰か説明して
2020/06/19(金) 00:13:53.03ID:0YXkLCwz
カプセル化は新人や増援部隊に変な事させない為の仕組み
開発者全員が高度なプロフェッショナルならただの足枷でしかない
開発者全員が高度なプロフェッショナルならただの足枷でしかない
37デフォルトの名無しさん
2020/06/19(金) 00:14:23.01ID:sx6tbUfu オブジェクト原理主義者のコードを引き継ぐ事になった時の絶望感は異常
2020/06/19(金) 00:15:15.75ID:yjfNCK7+
iPhoneアプリ開発に必須のobjective-cやswiftもカプセル化はできない。
人工知能で大流行のpythonもカプセル化はできないようになってる。
これらはアクセス非推奨だがアクセス自体はできる
人工知能で大流行のpythonもカプセル化はできないようになってる。
これらはアクセス非推奨だがアクセス自体はできる
2020/06/19(金) 00:15:51.85ID:a/1dBbgF
「カプセル化は悪」「カプセル化はオブジェクト指向ではない」というのがやっと広まりだした。
2020/06/19(金) 00:16:10.62ID:GyiKM2YL
仕様変更の恐ろしさは異常
2020/06/19(金) 00:16:29.89ID:sB9nUpkw
未来予測できるが勝負所
2020/06/19(金) 00:17:11.14ID:Xum0r1kt
>>5
深い階層化って利点あるの?
深い階層化って利点あるの?
2020/06/19(金) 00:17:23.63ID:HW2oJRWs
怖いですねえ
2020/06/19(金) 00:20:35.02ID:f1TZFQAl
カプセル化は隠蔽体質ってことですね
2020/06/19(金) 00:30:03.04ID:EiviKE7C
>>4
そもそも設計が間違ってるのをオブジェクト指向のせいにしてるんじゃねーよハゲ
そもそも設計が間違ってるのをオブジェクト指向のせいにしてるんじゃねーよハゲ
2020/06/19(金) 00:49:19.41ID:8/oqYbS2
>>45
XNA作ったマイクロソフトの超エリートたちですら設計ミスをするくらいオブジェクト指向は難しい。
XNA作ったマイクロソフトの超エリートたちですら設計ミスをするくらいオブジェクト指向は難しい。
2020/06/19(金) 01:06:57.53ID:brGXdq3V
ECS
2020/06/19(金) 01:27:35.28ID:gQU/M+Sr
> オブジェクト指向の発案者であるアラン・ケイもコーディング規約
> (頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、
> アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。
つまり
1. privateという概念(アンダースコアという概念)自体はOK
2. ただしprivateでも外部からアクセスできるようにすること
という話
> (頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、
> アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。
つまり
1. privateという概念(アンダースコアという概念)自体はOK
2. ただしprivateでも外部からアクセスできるようにすること
という話
2020/06/19(金) 03:21:23.63ID:sPM5NjRd
経験的に言えば、ライブラリや部品的なクラスでは、カプセル化はかなり有効で、
安全になる。
ところがアプリ自体の中にクラスの場合、隠蔽しても余り意味が無い事が
分かって来た。
ファイルツリービューの中のデータを隠して、メインウィンドウのクラスからいじれないように
しても、アプリの場合にははっきり言って意味が無い。
安全になる。
ところがアプリ自体の中にクラスの場合、隠蔽しても余り意味が無い事が
分かって来た。
ファイルツリービューの中のデータを隠して、メインウィンドウのクラスからいじれないように
しても、アプリの場合にははっきり言って意味が無い。
2020/06/19(金) 04:46:03.37ID:8+I0eawj
>>49
そのアプリを複数人でいじってるんなら、ライブラリやらの恩恵と同じ効果があるんじゃね?
カプセル化の是非は、グローバル変数の弊害の話と本質は同じだよね
影響範囲を狭くした方がミスは防げるが、柔軟性は失われる
そのアプリを複数人でいじってるんなら、ライブラリやらの恩恵と同じ効果があるんじゃね?
カプセル化の是非は、グローバル変数の弊害の話と本質は同じだよね
影響範囲を狭くした方がミスは防げるが、柔軟性は失われる
2020/06/19(金) 06:36:33.75ID:wpvtDg0l
>>48
ちょっと違うな
ST80でもOWでもVWでも共通だが
privateはあくまでもプロトコルの一つという設計だから外部からアクセスできるように・・という考え方ではないよ
具体的な扱われ方としてはインスタンス専用のローカルメソッドのような使われ方をする
なおprivateプロトコルは全てではないが
他のオブジェクトからコールするとデバッガに落ちるように仕組んでたりする
(外部からは使わせないよってこと)
ちょっと違うな
ST80でもOWでもVWでも共通だが
privateはあくまでもプロトコルの一つという設計だから外部からアクセスできるように・・という考え方ではないよ
具体的な扱われ方としてはインスタンス専用のローカルメソッドのような使われ方をする
なおprivateプロトコルは全てではないが
他のオブジェクトからコールするとデバッガに落ちるように仕組んでたりする
(外部からは使わせないよってこと)
2020/06/19(金) 07:02:17.44ID:wpvtDg0l
>>49
データを誰が保持するのかって問題はMVCの当初から大問題にはなってたからね
単純にModelが必ず持つという形にすると指摘した問題が必ず発生するから
経緯的にPluggableMVCへと変遷しどこからでもupdateプロトコルを受け付けることができるようになった
データはMVCのどれも保持しなくなり、ひとまずの決着がついたが
この形式であっても誰がどのようにupdateをかけているのか逐一コーディングしなければならない問題が残ってた
そこで現在ではデータを保持するAspectAdaptor系は
いわゆるアクセサを書く必要もなくなり通知を受け取るだけで動作するようになっている
(updateのためにアクセサを呼ぶなどということはしない)
データを誰が保持するのかって問題はMVCの当初から大問題にはなってたからね
単純にModelが必ず持つという形にすると指摘した問題が必ず発生するから
経緯的にPluggableMVCへと変遷しどこからでもupdateプロトコルを受け付けることができるようになった
データはMVCのどれも保持しなくなり、ひとまずの決着がついたが
この形式であっても誰がどのようにupdateをかけているのか逐一コーディングしなければならない問題が残ってた
そこで現在ではデータを保持するAspectAdaptor系は
いわゆるアクセサを書く必要もなくなり通知を受け取るだけで動作するようになっている
(updateのためにアクセサを呼ぶなどということはしない)
2020/06/19(金) 07:18:54.82ID:gQU/M+Sr
2020/06/19(金) 07:22:21.49ID:XaRstyom
OOは業務システム向き
組み込みだと細分化し過ぎるんじゃね?
組み込みだと細分化し過ぎるんじゃね?
2020/06/19(金) 09:36:31.93ID:wpvtDg0l
>>53
目的が違うので
private配下のメソッドは外部から呼ばれることを意図しない(ことになっている)
のとbehaviorにさえアクセスを許さなかったりする
ただこれは言語仕様としてコントロールしているわけではないので
あくまでも慣例として扱われてる
適当なクラスを作ってprivateプロトコルに適当なメソッドを組めば好きに外部から呼び出すことは出来る
そうは言っても慣例破ってるコードはすぐ見つかってしまうのでまあよろしくないことになる
目的が違うので
private配下のメソッドは外部から呼ばれることを意図しない(ことになっている)
のとbehaviorにさえアクセスを許さなかったりする
ただこれは言語仕様としてコントロールしているわけではないので
あくまでも慣例として扱われてる
適当なクラスを作ってprivateプロトコルに適当なメソッドを組めば好きに外部から呼び出すことは出来る
そうは言っても慣例破ってるコードはすぐ見つかってしまうのでまあよろしくないことになる
2020/06/19(金) 11:11:36.05ID:t8sp3Lp3
>>11
アランケイのは、完璧なものから取り除いていくような感じだったな
アランケイのは、完璧なものから取り除いていくような感じだったな
2020/06/19(金) 11:46:38.71ID:gQU/M+Sr
>>55
private配下のメソッドは外部から呼ばれることを意図しない(ことになっている)
頭文字にアンダースコアを付けるなどの命名規則で縛る程度のも、外部から呼ばれることを意図しない(ことになっている)
private配下のメソッドは外部から呼ばれることを意図しない(ことになっている)
頭文字にアンダースコアを付けるなどの命名規則で縛る程度のも、外部から呼ばれることを意図しない(ことになっている)
2020/06/19(金) 11:54:17.24ID:I4TvFtlH
2020/06/19(金) 12:44:14.84ID:dtaC8DdL
隠蔽って言うからおかしくなる
privateは一貫性を守るために変更可能性のスコープをオブジェクト内部に限定するためのものであって、内部状態の秘匿が目的じゃない
というかオブジェクトの内部状態が外から分からないようなものはテスト出来ないでしょ
ダメだろそんなクラス
privateは一貫性を守るために変更可能性のスコープをオブジェクト内部に限定するためのものであって、内部状態の秘匿が目的じゃない
というかオブジェクトの内部状態が外から分からないようなものはテスト出来ないでしょ
ダメだろそんなクラス
2020/06/19(金) 16:09:36.39ID:sPM5NjRd
>>50
>そのアプリを複数人でいじってるんなら、ライブラリやらの恩恵と同じ効果があるんじゃね?
個々のクラスをじっくり丁寧に作って、データを変更する専用のメソッドをきっちり
作り上げれば安全性は確かに高まる。
これは、人数の多いプロジェクトなら可能だと思われる。
ただ、個人製作のアプリだと、そこまでクラスを作りこむのは時間が掛かりすぎてとても
効率が悪くなる。
結局、個人製作レベルだと、ファイルツリーニューの中のデータを変更する際にやってはいけないことなどの注意事項をどこかのテキストファイルなどに書いておいて
データはpublicにしておいて、それに気をつけながら、アプリの他のクラスからでも普通に書き込みアクセスするように
した方が開発時間は少なくて済むようだ。
>そのアプリを複数人でいじってるんなら、ライブラリやらの恩恵と同じ効果があるんじゃね?
個々のクラスをじっくり丁寧に作って、データを変更する専用のメソッドをきっちり
作り上げれば安全性は確かに高まる。
これは、人数の多いプロジェクトなら可能だと思われる。
ただ、個人製作のアプリだと、そこまでクラスを作りこむのは時間が掛かりすぎてとても
効率が悪くなる。
結局、個人製作レベルだと、ファイルツリーニューの中のデータを変更する際にやってはいけないことなどの注意事項をどこかのテキストファイルなどに書いておいて
データはpublicにしておいて、それに気をつけながら、アプリの他のクラスからでも普通に書き込みアクセスするように
した方が開発時間は少なくて済むようだ。
2020/06/19(金) 16:12:27.76ID:sPM5NjRd
>>59
その気持ちも分かる。
しかし、その一方で、例えば fopen()のようなライブラリ関数を使う際、
FILE構造体の中身までしっかり公開されてなくても、fopenの使い方が
しっかり説明されいればそれで十分であり、逆にFILE構造体の中を勝手に見て、
それを前提にプログラムしすぎることは、FILE構造体の中身が変更になった
場合に問題となる。
その気持ちも分かる。
しかし、その一方で、例えば fopen()のようなライブラリ関数を使う際、
FILE構造体の中身までしっかり公開されてなくても、fopenの使い方が
しっかり説明されいればそれで十分であり、逆にFILE構造体の中を勝手に見て、
それを前提にプログラムしすぎることは、FILE構造体の中身が変更になった
場合に問題となる。
2020/06/19(金) 17:22:18.89ID:gQU/M+Sr
>>60
> 結局、個人製作レベルだと、ファイルツリーニューの中のデータを変更する際にやってはいけないことなどの注意事項をどこかのテキストファイルなどに書いておいて
それをソースコードの中に書くんでしょ? privateって
> 結局、個人製作レベルだと、ファイルツリーニューの中のデータを変更する際にやってはいけないことなどの注意事項をどこかのテキストファイルなどに書いておいて
それをソースコードの中に書くんでしょ? privateって
2020/06/19(金) 17:31:41.22ID:I4TvFtlH
結論:privateにしたら、必ずgetterを用意しておきましょう。
64デフォルトの名無しさん
2020/06/19(金) 17:34:28.47ID:sPM5NjRd >>62
昔から言われていることなんだけど、ソースコード以外の場所にちゃんと
フローチャートなり、データの構造や関数の関係図、何らかの図など
プログラム中に書きにくい注意事項をどこかに予め書いておくと、
プログラムにとても役立つんだ。
昔から言われていることなんだけど、ソースコード以外の場所にちゃんと
フローチャートなり、データの構造や関数の関係図、何らかの図など
プログラム中に書きにくい注意事項をどこかに予め書いておくと、
プログラムにとても役立つんだ。
2020/06/19(金) 22:59:31.97ID:wpvtDg0l
>>60
そこは考え方次第だからねー
asyncでいいならファイルツリーはすべてNodeクラス配下で汎用的に扱う方が楽なので
俺ならそうする
コードも少なくて済むし扱いやすい
常にsyncって話になるとfsevent見て反映させる
カプセル化のメリットは全体像を知らなくても扱えるように理解して努力していれば
結果的にコストが下がることにあるけれど
オブジェクト扱ってるのに中身は関数で組んでいる人が混じると割と悲惨なことに(なった)
そこは考え方次第だからねー
asyncでいいならファイルツリーはすべてNodeクラス配下で汎用的に扱う方が楽なので
俺ならそうする
コードも少なくて済むし扱いやすい
常にsyncって話になるとfsevent見て反映させる
カプセル化のメリットは全体像を知らなくても扱えるように理解して努力していれば
結果的にコストが下がることにあるけれど
オブジェクト扱ってるのに中身は関数で組んでいる人が混じると割と悲惨なことに(なった)
2020/06/19(金) 23:03:14.16ID:wpvtDg0l
67デフォルトの名無しさん
2020/06/20(土) 18:55:53.44ID:EGdSCTAj こっちでも始まったのか
2020/06/20(土) 19:10:33.56ID:Zs4RBEp5
2020/06/20(土) 19:23:07.65ID:H+D2eLk6
>>68
デバイスを使う「ソフトウェアコード」のテストをするんだから、
デバイスのテストをしても意味がないぞ
「デバイス」のテストなのか、デバイスを使う「ソフトウェア」のテストなのか
どちらを対象としたテストなのかをはっきりさせよう
デバイスのテストはデバイスのテストで別にやる
両方を同時にテストしようとするな
デバイスを使う「ソフトウェアコード」のテストをするんだから、
デバイスのテストをしても意味がないぞ
「デバイス」のテストなのか、デバイスを使う「ソフトウェア」のテストなのか
どちらを対象としたテストなのかをはっきりさせよう
デバイスのテストはデバイスのテストで別にやる
両方を同時にテストしようとするな
2020/06/20(土) 19:47:22.29ID:Zs4RBEp5
71デフォルトの名無しさん
2020/06/21(日) 21:47:24.01ID:yZ1Fm+rk2020/06/21(日) 22:27:56.93ID:TM3DTGpo
>>68
>でもチェックしにくいとこってデバイス絡みや使ってるUIのライブラリの変な仕様のとこだろ
そういうところを切り出してモックなら動くことを示してソフト側は悪くないって
言い張るための技術だぞ。
>でもチェックしにくいとこってデバイス絡みや使ってるUIのライブラリの変な仕様のとこだろ
そういうところを切り出してモックなら動くことを示してソフト側は悪くないって
言い張るための技術だぞ。
2020/06/23(火) 01:08:56.89ID:hoXOIHD6
2020/06/23(火) 14:03:05.97ID:Amhn2FuL
頭が悪いやつが多い業界だし、カプセル化は有用だと思うがな
勝手に変更させない、有用に変更しても理解できないので変更しないほうがいいって
2重の意味で
勝手に変更させない、有用に変更しても理解できないので変更しないほうがいいって
2重の意味で
2020/06/23(火) 15:11:05.61ID:o6bKn79R
>>1
そのカリフォルニア大学ソースどこ?
むしろ、彼らの作成するソース(github)を見るとオブジェクト指向で、@private(JSDoc)を律儀に記述しているけど。
ん?JavaScript以外?C#やJava?
privateをサポートする言語でカプセル化しない馬鹿なんてこの世に存在するの?
そのカリフォルニア大学ソースどこ?
むしろ、彼らの作成するソース(github)を見るとオブジェクト指向で、@private(JSDoc)を律儀に記述しているけど。
ん?JavaScript以外?C#やJava?
privateをサポートする言語でカプセル化しない馬鹿なんてこの世に存在するの?
76デフォルトの名無しさん
2020/06/23(火) 23:33:42.34ID:JaUjApVc >>74
そういうクラスを作る側が頭が良くて
利用する側がどうせ頭が悪いという傲慢さが
オブジェクト指向が批判される原因だと思うわ。
大体 既に書かれたコードの記述で
新規プログラマーのコーディングを制限しようと
言う考えが傲慢以外の何物でもない。
お前らの言う頭の悪い奴は元のクラスのprivateを
publicに変えるかもしれないし
Personというクラスの隣に
Person2と言うクラスを複製してそっちの方をpublicに
変えて利用するかもしれない。
でもそれって止められるわけないだろ?
それを言語仕様で止めようとしてる事がどうかしてる
元のクラスが使いにくくて変えたいから変えたいんだよ。
それに5重6重にカプセル化されたオブジェクトなんて
邪魔でしかないんだよ。デバッグしにくいし
そういうクラスを作る側が頭が良くて
利用する側がどうせ頭が悪いという傲慢さが
オブジェクト指向が批判される原因だと思うわ。
大体 既に書かれたコードの記述で
新規プログラマーのコーディングを制限しようと
言う考えが傲慢以外の何物でもない。
お前らの言う頭の悪い奴は元のクラスのprivateを
publicに変えるかもしれないし
Personというクラスの隣に
Person2と言うクラスを複製してそっちの方をpublicに
変えて利用するかもしれない。
でもそれって止められるわけないだろ?
それを言語仕様で止めようとしてる事がどうかしてる
元のクラスが使いにくくて変えたいから変えたいんだよ。
それに5重6重にカプセル化されたオブジェクトなんて
邪魔でしかないんだよ。デバッグしにくいし
2020/06/23(火) 23:58:42.49ID:AMcrD26I
いや、止められるだろ。。そのままリリース出来る方がおかしいだろ
2020/06/24(水) 00:33:12.84ID:Vx2zY5TL
2020/06/24(水) 00:57:36.62ID:I5+T+Giv
2020/06/24(水) 01:13:12.47ID:ZBvJ9IFx
カプセル化の弊害とかいいつつ
カプセル化すら理解してなくて草生える
カプセル化すら理解してなくて草生える
2020/06/24(水) 01:57:06.31ID:W7e3ICMc
>>76を見てると、オブジェクト指向を批判しているのはバカが過剰に騒いでいるだけなんだなと良く分かるw
2020/06/24(水) 02:39:07.65ID:gVxDDgwX
今一番勢いのある言語であるPythonは完全なプライベートじゃ無いんだよな
2020/06/24(水) 03:02:02.88ID:irp07WaX
2020/06/24(水) 04:52:29.63ID:evfa9tXu
>>76
何がいいたいのか全くわからん。
例えばお前が言ってる頭の悪いやつが、
ローカル変数をグローバル変数に変えるかもしれんよな?
そういう場合、なんだっていうんだ?
ローカル変数が悪いって話をしてるのか?
それを止められないからローカル変数は邪魔といいたいのか?
何がいいたいのか全くわからん。
例えばお前が言ってる頭の悪いやつが、
ローカル変数をグローバル変数に変えるかもしれんよな?
そういう場合、なんだっていうんだ?
ローカル変数が悪いって話をしてるのか?
それを止められないからローカル変数は邪魔といいたいのか?
2020/06/24(水) 07:20:27.23ID:ib1NZqNH
>>84
まあ、しょうがねぇよなって話じゃん
まあ、しょうがねぇよなって話じゃん
2020/06/24(水) 07:21:13.77ID:ib1NZqNH
初めの書き手が悪いんじゃなくてあくまで変更したやつの責任
2020/06/24(水) 12:20:09.25ID:irp07WaX
>>76
というか、MFCみたいに修正が推奨されて無い場合は除いて、
自社開発のプログラムであれば、能力がある人にはあなたが修正するのを
上司が許可してくれると思うんだ。
もし、修正を許可してもらえないなら、実績が足りて無いか能力のアピールが足りてない。
というか、MFCみたいに修正が推奨されて無い場合は除いて、
自社開発のプログラムであれば、能力がある人にはあなたが修正するのを
上司が許可してくれると思うんだ。
もし、修正を許可してもらえないなら、実績が足りて無いか能力のアピールが足りてない。
2020/06/24(水) 12:31:25.83ID:bZ0w8eld
オブジェクト指向の肝は擬人化と依頼だからな
頼む相手の内部状態を勝手に変えないってのは
無茶重要でしょ
頼む相手の内部状態を勝手に変えないってのは
無茶重要でしょ
2020/06/24(水) 13:17:22.34ID:U8BVWvkL
2020/06/24(水) 13:54:42.95ID:bZ0w8eld
擬人化キャラ(クラス)の関係性で物語を生成する=オブジェクト指向
そんなかんじで習ってそのまま理解してたな ちなみに学校は恥ずかしくて
言えないような底辺学校
そんなかんじで習ってそのまま理解してたな ちなみに学校は恥ずかしくて
言えないような底辺学校
2020/06/24(水) 14:29:54.72ID:+bJy5A36
依頼はどことなく委譲って分かるけど擬人化はただのスケベじゃん
2020/06/24(水) 14:40:07.82ID:bZ0w8eld
>>91
頭わるくてまともな学校にいけない奴らに
教えるために先生が工夫してくれたんだろうね 依頼ってのも困ったら
依存心の高い奴らに教えるのにそういう言い回ししたんだろうね
いま思えばなかなか立派な先生だったな 口は臭かったが
頭わるくてまともな学校にいけない奴らに
教えるために先生が工夫してくれたんだろうね 依頼ってのも困ったら
依存心の高い奴らに教えるのにそういう言い回ししたんだろうね
いま思えばなかなか立派な先生だったな 口は臭かったが
2020/06/24(水) 15:16:35.37ID:W7e3ICMc
2020/06/24(水) 16:47:31.01ID:ZBvJ9IFx
>>91
本来人間相手にしかに使わない依頼や委譲って言葉を使ってる時点で擬人化してる
本来人間相手にしかに使わない依頼や委譲って言葉を使ってる時点で擬人化してる
2020/06/24(水) 16:51:31.16ID:ZBvJ9IFx
擬人化と依頼のメタファは一般的
オブジェクト指向に限らないけどOOを説明する際によく使われたから
Tell Don’t Ask
http://media.pragprog.com/articles/jan_03_enbug.pdf
https://martinfowler.com/bliki/TellDontAsk.html
オブジェクト指向に限らないけどOOを説明する際によく使われたから
Tell Don’t Ask
http://media.pragprog.com/articles/jan_03_enbug.pdf
https://martinfowler.com/bliki/TellDontAsk.html
2020/06/24(水) 19:00:14.27ID:z1f+Mb2g
>>76
> お前らの言う頭の悪い奴は元のクラスのprivateを
> publicに変えるかもしれないし
> Personというクラスの隣に
> Person2と言うクラスを複製してそっちの方をpublicに
> 変えて利用するかもしれない。
ねーよw
もう少し基礎知識学んでから出直してこい。
まず、ライブラリの中身を書き換えること自体、ありえない。
たぶん、見ず知らずの人達が書いたコードを共有する仕組みから知らないのだろう。
> お前らの言う頭の悪い奴は元のクラスのprivateを
> publicに変えるかもしれないし
> Personというクラスの隣に
> Person2と言うクラスを複製してそっちの方をpublicに
> 変えて利用するかもしれない。
ねーよw
もう少し基礎知識学んでから出直してこい。
まず、ライブラリの中身を書き換えること自体、ありえない。
たぶん、見ず知らずの人達が書いたコードを共有する仕組みから知らないのだろう。
2020/06/24(水) 19:25:00.99ID:vlqGopWc
98デフォルトの名無しさん
2020/06/24(水) 19:30:57.72ID:6CkV8gwI >>96
いや、周囲や協力会社(依頼元クライアント側プログラマ)
にこれやるやつゴロゴロいるんだって
ソースファイルでもテーブルでも何でも他人が書いたやつ
複製して仕様変更に対応するんだわ。
privateとかカプセル化なんて笑っちまうよマジで
でも意外と何とかなってる、複製したあとはレガシーコードは
全部捨てちまうんだわ
職場で新人研修で「抽象クラスって何のために作るんですか?」
って毎回のように訊かれるけど
「俺にも分からない。必要性を感じたことも、便利だと思った
事も無い。」って正直に答えてる。
オブジェクト指向の入門書に当然のようにabstract紹介
されてるけどそれの有用性を的確に説明している
教科書を見たことがない
interfaceのほうは重要性は分かるしちゃんと説明している
いや、周囲や協力会社(依頼元クライアント側プログラマ)
にこれやるやつゴロゴロいるんだって
ソースファイルでもテーブルでも何でも他人が書いたやつ
複製して仕様変更に対応するんだわ。
privateとかカプセル化なんて笑っちまうよマジで
でも意外と何とかなってる、複製したあとはレガシーコードは
全部捨てちまうんだわ
職場で新人研修で「抽象クラスって何のために作るんですか?」
って毎回のように訊かれるけど
「俺にも分からない。必要性を感じたことも、便利だと思った
事も無い。」って正直に答えてる。
オブジェクト指向の入門書に当然のようにabstract紹介
されてるけどそれの有用性を的確に説明している
教科書を見たことがない
interfaceのほうは重要性は分かるしちゃんと説明している
2020/06/24(水) 19:42:39.07ID:J59L1bOF
100デフォルトの名無しさん
2020/06/24(水) 19:53:36.46ID:GEcMOOIw >>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 (階層化の有害性)"と題された節が有り、
「階層化」という考え方が概念的および構造的にさまざまな利点を持っているが、
実装面では層単位で同じような最適化が繰り返し発生することによる無駄な処理により効率的な実装を阻害し、複雑化を招くことがあり、
また低層部分のみに存在するデータにアクセスできない場面が発生するなど、
インターネット・プロトコルの目指す「単純化」という原則に反することもあることが明記された。
これだろ
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 (階層化の有害性)"と題された節が有り、
「階層化」という考え方が概念的および構造的にさまざまな利点を持っているが、
実装面では層単位で同じような最適化が繰り返し発生することによる無駄な処理により効率的な実装を阻害し、複雑化を招くことがあり、
また低層部分のみに存在するデータにアクセスできない場面が発生するなど、
インターネット・プロトコルの目指す「単純化」という原則に反することもあることが明記された。
101デフォルトの名無しさん
2020/06/24(水) 20:04:30.89ID:GEcMOOIw102デフォルトの名無しさん
2020/06/24(水) 21:01:40.99ID:7L466iYI103デフォルトの名無しさん
2020/06/24(水) 22:26:02.81ID:z1f+Mb2g >>98
> 「俺にも分からない。必要性を感じたことも、便利だと思った事も無い。」って正直に答えてる。
正直なのはいいけど...なんで、privateの有効性がわからないのに、カプセル化を批判するのか。
無知の批判ほど、初心者が誤解を生む原因になるからやめてほしい。
例えばだよ。
何の言語をよく使うのか不明だが...標準ライブラリってあるじゃん?
その標準ライブラリのクラスに「呼び出したら破綻する(内部処理実装用の)メソッドや変数」が定義されていたら、どうする?
クラスを使う人に呼び出してほしくない機能はprivateにするべきでしょ。
実装する側の都合だけじゃなくて、クラスを使うユーザーのことも配慮して使うものだよ。
OOPアンチとOOP活用者の絶対的な違いは自作したクラスを使う人のことを深く考えているかどうか。そこだよ。
> 「俺にも分からない。必要性を感じたことも、便利だと思った事も無い。」って正直に答えてる。
正直なのはいいけど...なんで、privateの有効性がわからないのに、カプセル化を批判するのか。
無知の批判ほど、初心者が誤解を生む原因になるからやめてほしい。
例えばだよ。
何の言語をよく使うのか不明だが...標準ライブラリってあるじゃん?
その標準ライブラリのクラスに「呼び出したら破綻する(内部処理実装用の)メソッドや変数」が定義されていたら、どうする?
クラスを使う人に呼び出してほしくない機能はprivateにするべきでしょ。
実装する側の都合だけじゃなくて、クラスを使うユーザーのことも配慮して使うものだよ。
OOPアンチとOOP活用者の絶対的な違いは自作したクラスを使う人のことを深く考えているかどうか。そこだよ。
104デフォルトの名無しさん
2020/06/24(水) 22:30:44.22ID:MQA513Hf105デフォルトの名無しさん
2020/06/24(水) 22:31:32.44ID:evfa9tXu >>104
win32apiや.netframeworkを作る人には需要があるって認めたの?
win32apiや.netframeworkを作る人には需要があるって認めたの?
106デフォルトの名無しさん
2020/06/24(水) 22:32:45.63ID:z1f+Mb2g107デフォルトの名無しさん
2020/06/24(水) 22:34:51.23ID:MQA513Hf108デフォルトの名無しさん
2020/06/24(水) 22:42:26.10ID:MQA513Hf なんか今までノリでクラスで作ってきたのを止めると物凄くスキルアップするぜ
一度はオブジェクト指向をやってみるのもいいかもなってのは思う
クラス構造で便利なものとそうでないものは当然ながらこの世にはあって
そのほとんどが実はクラスにしないほうがうまくいくものばかりだ
大半の処理は
入力→処理→出力
の繰り返しであってこれのまとまりが
機能となる
ただ極稀にクラス構造で考えた方が便利な構造のものもある
役に立つのはその時だけだ
そしてそのケースは極めて稀である
一度はオブジェクト指向をやってみるのもいいかもなってのは思う
クラス構造で便利なものとそうでないものは当然ながらこの世にはあって
そのほとんどが実はクラスにしないほうがうまくいくものばかりだ
大半の処理は
入力→処理→出力
の繰り返しであってこれのまとまりが
機能となる
ただ極稀にクラス構造で考えた方が便利な構造のものもある
役に立つのはその時だけだ
そしてそのケースは極めて稀である
109デフォルトの名無しさん
2020/06/24(水) 22:43:14.13ID:z1f+Mb2g >>104
.netは勿論、Android、iOSネイティブ、バックエンド node.jsやPython、mbed(組み込み)、
まぁ、一部private機能をサポートしていない環境はあるけど、作る側・使う側の意識は常に持つよ。
.netを知っているってことは、Nugetのことは知っていると思うけど...
gradleとか、npmとか、github等と連携させて他人の作ったライブラリの自動追加及びアップデートの仕組みはいくらでもある。
てか、自分で作ったコードですら、作る側・使う側は意識するよ。
過去に作った自分のソースなんて、他人が作ったソースみたいなものだし。
内部実装を理解していないと使えないソースなんて使いこなせるほど俺の頭はよくないよ。
.netは勿論、Android、iOSネイティブ、バックエンド node.jsやPython、mbed(組み込み)、
まぁ、一部private機能をサポートしていない環境はあるけど、作る側・使う側の意識は常に持つよ。
.netを知っているってことは、Nugetのことは知っていると思うけど...
gradleとか、npmとか、github等と連携させて他人の作ったライブラリの自動追加及びアップデートの仕組みはいくらでもある。
てか、自分で作ったコードですら、作る側・使う側は意識するよ。
過去に作った自分のソースなんて、他人が作ったソースみたいなものだし。
内部実装を理解していないと使えないソースなんて使いこなせるほど俺の頭はよくないよ。
110デフォルトの名無しさん
2020/06/24(水) 22:44:48.06ID:evfa9tXu111デフォルトの名無しさん
2020/06/24(水) 22:47:38.19ID:evfa9tXu 最初からオブジェクト指向は大規模なものを
複数の人で作るためのもので
それをわかってないから、
「俺が一人で作るようなものならいらん」
なんて発言が出てしまうんだよな
複数の人で作るためのもので
それをわかってないから、
「俺が一人で作るようなものならいらん」
なんて発言が出てしまうんだよな
112デフォルトの名無しさん
2020/06/24(水) 22:52:50.78ID:7L466iYI >>109
内部実装を理解していないと使えないソースなんて使いこなせるほど俺の頭はよくないよ。
まあこれだよね
頭いいやつには必要ない技術かもね 凡人には必須だとおもうけどな
あと設計思想とかそんな面倒な話じゃなくてシンプルに補完ができるのが楽
内部実装を理解していないと使えないソースなんて使いこなせるほど俺の頭はよくないよ。
まあこれだよね
頭いいやつには必要ない技術かもね 凡人には必須だとおもうけどな
あと設計思想とかそんな面倒な話じゃなくてシンプルに補完ができるのが楽
113デフォルトの名無しさん
2020/06/24(水) 22:54:20.40ID:VGKuFIs7114デフォルトの名無しさん
2020/06/24(水) 22:55:53.79ID:evfa9tXu そもそもprivateっていうのはコミュニケーションの道具で
privateって書いていなければ、好き放題アクセスしてOKという意味に
捉えられるかもしれないわけだ。
コメントの高度版なのだからコメントなくてもできるのは当たり前
だがそうすると修正が難しくなる
俺が作るなら〜っていうのはコミュニケーションが
必要ないから言える話
privateって書いていなければ、好き放題アクセスしてOKという意味に
捉えられるかもしれないわけだ。
コメントの高度版なのだからコメントなくてもできるのは当たり前
だがそうすると修正が難しくなる
俺が作るなら〜っていうのはコミュニケーションが
必要ないから言える話
115デフォルトの名無しさん
2020/06/24(水) 22:58:49.48ID:z1f+Mb2g >>112
まぁ、そうだな。
ただ、面白いのが...
頭のいい人がOOPに漬かると、余裕ができた分、コンピューターの仕組みにとらわれずエンドユーザーの事を全力で配慮した品質の高い製品を作れるようになる。
まぁ、そうだな。
ただ、面白いのが...
頭のいい人がOOPに漬かると、余裕ができた分、コンピューターの仕組みにとらわれずエンドユーザーの事を全力で配慮した品質の高い製品を作れるようになる。
116デフォルトの名無しさん
2020/06/24(水) 22:59:48.33ID:z1f+Mb2g アンカまた間違えた...
117デフォルトの名無しさん
2020/06/24(水) 23:00:40.93ID:z1f+Mb2g 間違えてなかった。もうダメだ...
118デフォルトの名無しさん
2020/06/24(水) 23:26:13.24ID:MQA513Hf >>113
構造体でまるっと渡してやるよ
構造体でまるっと渡してやるよ
119デフォルトの名無しさん
2020/06/24(水) 23:27:50.80ID:MQA513Hf120デフォルトの名無しさん
2020/06/24(水) 23:31:43.79ID:MQA513Hf そもそもさ
クラスで状態を保持するソースってさ
実装全部見て
何やるとどう状態遷移が起こるのか把握しないと使えないじゃん
これが最高にダルイ
もう年取ったしこんなの付き合ってらんない面倒臭くて
クラスで状態を保持するソースってさ
実装全部見て
何やるとどう状態遷移が起こるのか把握しないと使えないじゃん
これが最高にダルイ
もう年取ったしこんなの付き合ってらんない面倒臭くて
121デフォルトの名無しさん
2020/06/24(水) 23:32:23.15ID:fkg3GZzF 単なるモジュール切り離しのための技術の一つだよ。
バカが騒ぎまくったせいでクソみたいなインターフェイスによる切り離しで
逆に見通しが悪くなることが多くなった。
細かい粒度で使うような技術じゃない。
バカが騒ぎまくったせいでクソみたいなインターフェイスによる切り離しで
逆に見通しが悪くなることが多くなった。
細かい粒度で使うような技術じゃない。
122デフォルトの名無しさん
2020/06/24(水) 23:41:46.40ID:MQA513Hf >>121
いや、単純に面倒臭いだけでメリット皆無じゃん
いや、単純に面倒臭いだけでメリット皆無じゃん
123デフォルトの名無しさん
2020/06/25(木) 00:13:01.48ID:JeYxH76v 内部に状態変数をもたれたらグローバル変数の比ではないほど厄介。
単体テストやデバッグが壮大なことになる。
単体テストやデバッグが壮大なことになる。
124デフォルトの名無しさん
2020/06/25(木) 00:16:04.75ID:JeYxH76v 「状態によって挙動が変わる」ものが何十個も何百個も集まったら誰も把握しきれない。誰も制御しきれない。
125デフォルトの名無しさん
2020/06/25(木) 01:13:10.51ID:h5MGZkZK126デフォルトの名無しさん
2020/06/25(木) 01:41:45.27ID:Q34w5rfS 内包してる初期化フラグ一つで
全く同じ入力に対して全く異なる出力が出てくるんだから
こいつは厄介だよ
勘がいいやつはこれだけでこの仕組みを使わない
全く同じ入力に対して全く異なる出力が出てくるんだから
こいつは厄介だよ
勘がいいやつはこれだけでこの仕組みを使わない
127デフォルトの名無しさん
2020/06/25(木) 03:09:24.52ID:9YSX2wtH >>124
だからオブジェクト指向で小さくするんだよね
だからオブジェクト指向で小さくするんだよね
128デフォルトの名無しさん
2020/06/25(木) 03:13:43.10ID:AD4h9H61 >>110 君頭悪いねってよく言われない?
129デフォルトの名無しさん
2020/06/25(木) 03:15:57.10ID:9YSX2wtH >>128
言われない。むしろお前のほうが言われてるだろ。
言われない。むしろお前のほうが言われてるだろ。
130デフォルトの名無しさん
2020/06/25(木) 04:09:57.03ID:3STWDldz お前ら頭悪いね
131デフォルトの名無しさん
2020/06/25(木) 05:35:58.45ID:AD4h9H61 レス番まで指摘されても自分のおかしい発言に気づけないとはいとあはれ
132デフォルトの名無しさん
2020/06/25(木) 05:40:21.51ID:hNcIaCHg いいぞ、もっとやれ
133デフォルトの名無しさん
2020/06/25(木) 07:10:48.49ID:MncJLzSh 内部を知る必要ない。インターフェースだけ守れ
134デフォルトの名無しさん
2020/06/25(木) 07:22:24.62ID:/bWSJldt 彡 ⌒ ミ
(´・ω・`) 頭がなんだって?
(´・ω・`) 頭がなんだって?
135デフォルトの名無しさん
2020/06/25(木) 07:30:13.69ID:p+gLKGcc >>122
めんどくさくて新しい(もう20年以上前からメジャーではあるが...)考え方についていけません、てだけだろw
お前が懸念している内部の状態遷移が見えないというのは、見えなくていいように作り、見えなくていい部分だけを隠すんだよ。
お前の大好きな従来の手続き型だって、下手に作れば手続きを呼び出す順序や渡すべきデータの構造や内容が訳分からない複雑なものになるだろう。
単に自分の知ってる手法では良い設計を知っていて問題点を避けられる、よく知らない手法は問題を回避する方法がわからなくて問題のある手法と思えてしまう、ただそれだけのこと。
めんどくさくて新しい(もう20年以上前からメジャーではあるが...)考え方についていけません、てだけだろw
お前が懸念している内部の状態遷移が見えないというのは、見えなくていいように作り、見えなくていい部分だけを隠すんだよ。
お前の大好きな従来の手続き型だって、下手に作れば手続きを呼び出す順序や渡すべきデータの構造や内容が訳分からない複雑なものになるだろう。
単に自分の知ってる手法では良い設計を知っていて問題点を避けられる、よく知らない手法は問題を回避する方法がわからなくて問題のある手法と思えてしまう、ただそれだけのこと。
136デフォルトの名無しさん
2020/06/25(木) 07:32:40.30ID:U43KJZDw クラスの状態はクラスが知ってれば良い
という思想なんじゃねえの?
オブジェクト指向は?
という思想なんじゃねえの?
オブジェクト指向は?
137デフォルトの名無しさん
2020/06/25(木) 07:35:44.39ID:Q34w5rfS >>136
テストするんですが〜
テストするんですが〜
138デフォルトの名無しさん
2020/06/25(木) 07:53:57.86ID:Q34w5rfS >>135
違うだろ
内部の状態が見えないのにテストなんかできないだろ
そのクラス使ってある限りそいつの状態次第で色んな動作しちまうんだから
はっきり言ってクラスは欠陥製品
特に内部に状態を保持するような使い方は害悪
違うだろ
内部の状態が見えないのにテストなんかできないだろ
そのクラス使ってある限りそいつの状態次第で色んな動作しちまうんだから
はっきり言ってクラスは欠陥製品
特に内部に状態を保持するような使い方は害悪
139デフォルトの名無しさん
2020/06/25(木) 08:19:04.16ID:p+gLKGcc >>138
お前はオブジェクトの状態として、外部に影響を与える外部仕様の状態と、外部に影響を与えない内部仕様としての状態を混同してないか?
文字列のオブジェクトが文字列"abcd"を持つとして、それは外部に影響を与えるものだから、privateのメンバとして保持されていようがテストケースとしてそれを与えて状態を設定してテストすればいい。
一方、その文字列がどういう実装で保持されているか、ヒープなのか固定配列なのか、参照カウンタやさらに複雑な仕組みを使っているのかといった内部仕様的な状態は、このクラスを他と組み合わせてテストする段階ではテストする必要がない。こういう部分は、先にクラス単体のテストで保証しておけば良い。
そういう切り分けができない作りになっているなら、それは設計が悪い。
お前はオブジェクトの状態として、外部に影響を与える外部仕様の状態と、外部に影響を与えない内部仕様としての状態を混同してないか?
文字列のオブジェクトが文字列"abcd"を持つとして、それは外部に影響を与えるものだから、privateのメンバとして保持されていようがテストケースとしてそれを与えて状態を設定してテストすればいい。
一方、その文字列がどういう実装で保持されているか、ヒープなのか固定配列なのか、参照カウンタやさらに複雑な仕組みを使っているのかといった内部仕様的な状態は、このクラスを他と組み合わせてテストする段階ではテストする必要がない。こういう部分は、先にクラス単体のテストで保証しておけば良い。
そういう切り分けができない作りになっているなら、それは設計が悪い。
140デフォルトの名無しさん
2020/06/25(木) 08:42:04.56ID:Q34w5rfS141デフォルトの名無しさん
2020/06/25(木) 08:57:56.71ID:rghIsJSV >>122
めんどくさいのはその通り。
テスト駆動開発の本とか読んでどういうオブジェクトを引数にすると
テストしやすいかが理解できてくるとありがたさがわかってくる。
オブジェクト設計とか言い出す馬鹿は無視しろ。
めんどくさいのはその通り。
テスト駆動開発の本とか読んでどういうオブジェクトを引数にすると
テストしやすいかが理解できてくるとありがたさがわかってくる。
オブジェクト設計とか言い出す馬鹿は無視しろ。
142デフォルトの名無しさん
2020/06/25(木) 08:58:07.22ID:XTsRyKlX >>120
> そもそもさ
> クラスで状態を保持するソースってさ
> 実装全部見て
> 何やるとどう状態遷移が起こるのか把握しないと使えないじゃん
> これが最高にダルイ
> もう年取ったしこんなの付き合ってらんない面倒臭くて
だ、か、ら、
それを解決するためのオブジェクト指向だ つってんだろ!
クラスをオブジェクト指向も意識せずに、ただただ構造体みたいに実装して使うから、そうなるんだよ。
> そもそもさ
> クラスで状態を保持するソースってさ
> 実装全部見て
> 何やるとどう状態遷移が起こるのか把握しないと使えないじゃん
> これが最高にダルイ
> もう年取ったしこんなの付き合ってらんない面倒臭くて
だ、か、ら、
それを解決するためのオブジェクト指向だ つってんだろ!
クラスをオブジェクト指向も意識せずに、ただただ構造体みたいに実装して使うから、そうなるんだよ。
143デフォルトの名無しさん
2020/06/25(木) 09:10:36.57ID:p+gLKGcc >>140
どのクラスを指して言ってるのか知らないが、それはそのクラスの仕様自体の複雑さかお前の理解不足が原因で正しい挙動が分かってないとか未定義動作をさせているとかでないの?
状態を保持するのが問題なのではなく、知っておくべき状態、情報を知らずに上手くいかないのをオブジェクト指向のせいにしているだけのように見えるぞ。
どのクラスを指して言ってるのか知らないが、それはそのクラスの仕様自体の複雑さかお前の理解不足が原因で正しい挙動が分かってないとか未定義動作をさせているとかでないの?
状態を保持するのが問題なのではなく、知っておくべき状態、情報を知らずに上手くいかないのをオブジェクト指向のせいにしているだけのように見えるぞ。
144デフォルトの名無しさん
2020/06/25(木) 09:17:11.38ID:rghIsJSV 状態をできるかぎり持たない方がいいってのはその通り。
ただ通信ソケットみたいなもの実装しようとすればどうしても状態を持つわな。
コネクション張るオーバーヘッドが小さくない時点で、性能出そうと思えば状態をもつしかないので。
ただ通信ソケットみたいなもの実装しようとすればどうしても状態を持つわな。
コネクション張るオーバーヘッドが小さくない時点で、性能出そうと思えば状態をもつしかないので。
145デフォルトの名無しさん
2020/06/25(木) 09:21:43.95ID:H2Spozu7 オブジェクト指向って設計手法であると同時に
責任の切り分け手法でもあるんだよね 別の共同体(無償で手伝う気なしって意味で)
と作業する場合は必須でしょ
責任の切り分け手法でもあるんだよね 別の共同体(無償で手伝う気なしって意味で)
と作業する場合は必須でしょ
146デフォルトの名無しさん
2020/06/25(木) 10:04:43.33ID:Q34w5rfS147デフォルトの名無しさん
2020/06/25(木) 10:09:16.30ID:XTsRyKlX148デフォルトの名無しさん
2020/06/25(木) 10:09:53.75ID:Q34w5rfS >>145
いやー、クラス内で状態を保持するクラスが大量に呼ばれてて
本来はそれらの全ケースを網羅する必要があるが作業者の裁量で省略されてる状態じゃないっすか?
切り分けじゃないッスよね?
クラスAとクラスBがそれぞれチェックされててもそれらが合わさったことでバグが発生してる可能性もあるンスから
テストはちゃんとやるのであれば状態全網羅でしょう
ぶっちゃけ無理っすわ
状態を保持をやった時点で地獄行き
覚えた?確定事項よ
いやー、クラス内で状態を保持するクラスが大量に呼ばれてて
本来はそれらの全ケースを網羅する必要があるが作業者の裁量で省略されてる状態じゃないっすか?
切り分けじゃないッスよね?
クラスAとクラスBがそれぞれチェックされててもそれらが合わさったことでバグが発生してる可能性もあるンスから
テストはちゃんとやるのであれば状態全網羅でしょう
ぶっちゃけ無理っすわ
状態を保持をやった時点で地獄行き
覚えた?確定事項よ
149デフォルトの名無しさん
2020/06/25(木) 10:11:45.88ID:Q34w5rfS >>147
グローバル変数さえなければ入力に対してぜってー決まった出力しか出ないのに何が問題出るの?
頭おかしいんじゃない?
○○構造のとき作りにくいってのはあると思うけど
わかりやすさでこれ以上はないよ
グローバル変数さえなければ入力に対してぜってー決まった出力しか出ないのに何が問題出るの?
頭おかしいんじゃない?
○○構造のとき作りにくいってのはあると思うけど
わかりやすさでこれ以上はないよ
150デフォルトの名無しさん
2020/06/25(木) 10:18:17.66ID:H2Spozu7 >>148
クラスAとクラスBがそれぞれチェックされててもそれらが合わさったことでバグが発生してる
可能性もあるンスから
こうなったときにAもBも直す必要がないでしょってこと どちらかを直すかは共同体
同士のパワーバランスで決まるんだけどねw そこはまあ大人になるしかない
クラスAとクラスBがそれぞれチェックされててもそれらが合わさったことでバグが発生してる
可能性もあるンスから
こうなったときにAもBも直す必要がないでしょってこと どちらかを直すかは共同体
同士のパワーバランスで決まるんだけどねw そこはまあ大人になるしかない
151デフォルトの名無しさん
2020/06/25(木) 10:20:16.04ID:XTsRyKlX >>148
> >>145
> いやー、クラス内で状態を保持するクラスが大量に呼ばれてて
> 本来はそれらの全ケースを網羅する必要があるが作業者の裁量で省略されてる状態じゃないっすか?
何いってるんだ、こいつ。
クラスの基本的な仕組みから理解していないのか。
状態はインスタンスの数だけ持つことになるけど、呼ばれるロジックは一つだよ?
一つのロジックだけをテストすればいいのに、君はstatic化することで、わざわざ一つの状態につき一つのロジックを用意しようとしている。
つまり、君は一つのインスタンスにつき、一つのロジックを記述することで膨大な数のテストをしなければいけない状況を自分で作っている訳だ。
お前のやり方の方が無理ですわ。
> >>145
> いやー、クラス内で状態を保持するクラスが大量に呼ばれてて
> 本来はそれらの全ケースを網羅する必要があるが作業者の裁量で省略されてる状態じゃないっすか?
何いってるんだ、こいつ。
クラスの基本的な仕組みから理解していないのか。
状態はインスタンスの数だけ持つことになるけど、呼ばれるロジックは一つだよ?
一つのロジックだけをテストすればいいのに、君はstatic化することで、わざわざ一つの状態につき一つのロジックを用意しようとしている。
つまり、君は一つのインスタンスにつき、一つのロジックを記述することで膨大な数のテストをしなければいけない状況を自分で作っている訳だ。
お前のやり方の方が無理ですわ。
152デフォルトの名無しさん
2020/06/25(木) 10:27:24.45ID:Q34w5rfS153デフォルトの名無しさん
2020/06/25(木) 10:28:11.21ID:Q34w5rfS >>151
バカの相手はできんわ
バカの相手はできんわ
154デフォルトの名無しさん
2020/06/25(木) 10:29:59.55ID:XTsRyKlX しかも、1つの状態につき、一つのロジックを書くってことは...似たようなクラスが10個必要になったら、そのクラスのロジックを10回、コピペするわけだ。
で、その後、ロジックを修正することになった場合...10回、コードを書き直すの?
そっちの方が無理ですわ。
いっそのこと、staticにしないで、10個の状態が1個のロジックを参照するようにしておけば、ロジックの修正は一回で済む。
そっちの方が断然、楽だね。
で、その後、ロジックを修正することになった場合...10回、コードを書き直すの?
そっちの方が無理ですわ。
いっそのこと、staticにしないで、10個の状態が1個のロジックを参照するようにしておけば、ロジックの修正は一回で済む。
そっちの方が断然、楽だね。
155デフォルトの名無しさん
2020/06/25(木) 10:31:50.71ID:XTsRyKlX156デフォルトの名無しさん
2020/06/25(木) 10:38:02.77ID:H2Spozu7 >>152
もしかしてインスタンスの意義がわかってないのか?
他でも使ってるなら安全牌はクラスC用のクラスAクラスBの複製だけどw
まさしくこの状態を作りたいからクラスAクラスBのインスタンスをつかうんだけどな
もしかしてインスタンスの意義がわかってないのか?
他でも使ってるなら安全牌はクラスC用のクラスAクラスBの複製だけどw
まさしくこの状態を作りたいからクラスAクラスBのインスタンスをつかうんだけどな
157デフォルトの名無しさん
2020/06/25(木) 10:41:15.81ID:Q34w5rfS >>156
え?何言ってるの?
え?何言ってるの?
158デフォルトの名無しさん
2020/06/25(木) 11:34:09.20ID:emOdy//g クラス使わない人ってどうするんだろ
構造体?
全部インタプリタみたいな感じ?
構造体?
全部インタプリタみたいな感じ?
159デフォルトの名無しさん
2020/06/25(木) 11:40:28.84ID:h5MGZkZK スレ主の愚痴はオブジェクト指向かどうかと関係ない
単に設計やテストのやり方を知らないだけ
単に設計やテストのやり方を知らないだけ
160デフォルトの名無しさん
2020/06/25(木) 12:22:45.24ID:9YSX2wtH >>138
> 内部の状態が見えないのにテストなんかできないだろ
ん?全部publicにしておけばテストできるって話じゃないの?
もしくはprivateであっても、privateを読み書きできる機能があればテストできるでしょ?
> 内部の状態が見えないのにテストなんかできないだろ
ん?全部publicにしておけばテストできるって話じゃないの?
もしくはprivateであっても、privateを読み書きできる機能があればテストできるでしょ?
161デフォルトの名無しさん
2020/06/25(木) 12:25:19.77ID:XTsRyKlX クラス使っても、staticにするとか訳のわからない事を言い出すし、根本的にオブジェクト指向を理解していない人達が愚痴っているだけだよな。
むしろ、何でもstaticにするのはC言語やC++言語から入った初心者なら誰もがやる失敗。
そんな初心者の失敗をいい歳したおっさんが、オブジェクト指向を批判しながらstaticを勧めるから駄目なんだよ。
我々からすれば、俺らの黒歴史時代の経験を何で上から目線で偉そうに語っているんだ?って感じだね。
流石に、上から目線で語る程、俺の黒歴史は酷くなかったぞ。
むしろ、何でもstaticにするのはC言語やC++言語から入った初心者なら誰もがやる失敗。
そんな初心者の失敗をいい歳したおっさんが、オブジェクト指向を批判しながらstaticを勧めるから駄目なんだよ。
我々からすれば、俺らの黒歴史時代の経験を何で上から目線で偉そうに語っているんだ?って感じだね。
流石に、上から目線で語る程、俺の黒歴史は酷くなかったぞ。
162デフォルトの名無しさん
2020/06/25(木) 12:43:43.74ID:KZb+gCmD カプセル化が要らない、と言うのなら、
誰もがデータを読み書きできる状態でどうやってアトミック処理を保証するのか
を教えて欲しいな。
もしかしたら大発明かも。
誰もがデータを読み書きできる状態でどうやってアトミック処理を保証するのか
を教えて欲しいな。
もしかしたら大発明かも。
163デフォルトの名無しさん
2020/06/25(木) 12:49:36.79ID:Q34w5rfS >>160
内包されるよりいくらかCool
ただ、そこまでpublicにできるならstaticにしてほしい
実行時にstatesがnoneでないと正しく動かないんですよこのメソッドって
言われても知らねーよそんなのって感じ
じゃあstatesはどうやってnoneにするんだべって
俺に調べさせるのやめてもらっていい?
もっと言えばstaticにすればそんなことないじゃん?
内包されるよりいくらかCool
ただ、そこまでpublicにできるならstaticにしてほしい
実行時にstatesがnoneでないと正しく動かないんですよこのメソッドって
言われても知らねーよそんなのって感じ
じゃあstatesはどうやってnoneにするんだべって
俺に調べさせるのやめてもらっていい?
もっと言えばstaticにすればそんなことないじゃん?
164デフォルトの名無しさん
2020/06/25(木) 13:01:46.41ID:9YSX2wtH >>163
内包したらテストできないだろ?
内包したらテストできないだろ?
165デフォルトの名無しさん
2020/06/25(木) 13:06:39.24ID:XTsRyKlX そもそも、クラスって正常に動く前提で使うものであって、なんで、クラスを使う側がクラス内部動作をテストしないといけないのかわからん。
クラスのテストは、クラスを実装する側の責任だろうに。
...というツッコミをそろそろしてもいいかな?
クラスのテストは、クラスを実装する側の責任だろうに。
...というツッコミをそろそろしてもいいかな?
166デフォルトの名無しさん
2020/06/25(木) 13:17:56.03ID:p+gLKGcc167デフォルトの名無しさん
2020/06/25(木) 13:23:03.90ID:p+gLKGcc >>163
そのstatesがnoneでなければならないという仕様は、そのクラスの使い方として外部に明示すべき仕様だろう。そそういう情報が示されていないならドキュメントの不備だし、そういう仕様が公開されていても外部からstatesの値を参照または設定できないのなら設計の不備だろう。
延々と繰り返し指摘しているように、それはオブジェクト指向そのものの問題でなく正しく設計、運用がされていない問題だろう。
そのstatesがnoneでなければならないという仕様は、そのクラスの使い方として外部に明示すべき仕様だろう。そそういう情報が示されていないならドキュメントの不備だし、そういう仕様が公開されていても外部からstatesの値を参照または設定できないのなら設計の不備だろう。
延々と繰り返し指摘しているように、それはオブジェクト指向そのものの問題でなく正しく設計、運用がされていない問題だろう。
168デフォルトの名無しさん
2020/06/25(木) 13:29:58.05ID:XTsRyKlX >>166
あっ、ほんとだ。
あっ、ほんとだ。
169デフォルトの名無しさん
2020/06/25(木) 15:28:55.17ID:xmAi/11M カプセル化の最大のメリットは中で何をしているかどうなっているかは気にせずに
外からは引数を与えると仕様通りの値が戻ってくるというところだよね?
外からは引数を与えると仕様通りの値が戻ってくるというところだよね?
170デフォルトの名無しさん
2020/06/25(木) 16:47:53.33ID:CiEXbKUP グローバル変数に格納されている値で関数の挙動が変わるより悲惨だぞ。
グローバル変数が見えないんだから。
グローバル変数が見えないんだから。
171デフォルトの名無しさん
2020/06/25(木) 16:52:12.11ID:BM3o+zlw ん?
172デフォルトの名無しさん
2020/06/25(木) 17:00:47.93ID:XTsRyKlX ID変えて振り出しに戻るって奴?
173デフォルトの名無しさん
2020/06/25(木) 17:03:53.35ID:p+gLKGcc ここまで話の通じない奴だと思うと相手するのがバカらしくなってくるね。まさに徒労という言葉がふさわしい。
174デフォルトの名無しさん
2020/06/25(木) 19:27:44.23ID:RQlIhWFK175デフォルトの名無しさん
2020/06/25(木) 19:35:56.42ID:oGWS7APt 全部staticってどうするんだろう
メソッドの引数すごいことになってそう
メソッドの引数すごいことになってそう
176デフォルトの名無しさん
2020/06/25(木) 20:15:30.81ID:LQ8CyLE7 オブジェクト指向のあらゆる用語が
ノムリッシュみたいになってると思う
JavaScriptが発展して、クラス名と同じ名前の
ファイル名にしなくていい事が分かったわけじゃん
それどころかクラスすら必要なしでオブジェクトが作れる事が
分かったわけじゃん
クラス名と同じ名前のコンストラクタなん定義しなくても
オブジェクトが作れる事が分かったじゃん
オブジェクトとは詰まるところ連想配列と大して違いが
ないキーと値で構成された入れ物でしかない事がわかった。
この「連想配列と違いがない」というシンプルな真実が
どれだけありがたいことか
クラスを始めとする様々なルールは
ソフトウェア設計上の重要な概念かと思ってたら
単なるJavaの変な言語仕様でしかなかったわけだ。
変数を「フィールド」
関数を「メソッド」
関数を「コンストラクタ」
こう言い換える必要がどこにある?
こんなノムリッシュなバズワードに
今までどれだけ煙にまかれて
シンプルな真実が見えなくなってたことか
ノムリッシュみたいになってると思う
JavaScriptが発展して、クラス名と同じ名前の
ファイル名にしなくていい事が分かったわけじゃん
それどころかクラスすら必要なしでオブジェクトが作れる事が
分かったわけじゃん
クラス名と同じ名前のコンストラクタなん定義しなくても
オブジェクトが作れる事が分かったじゃん
オブジェクトとは詰まるところ連想配列と大して違いが
ないキーと値で構成された入れ物でしかない事がわかった。
この「連想配列と違いがない」というシンプルな真実が
どれだけありがたいことか
クラスを始めとする様々なルールは
ソフトウェア設計上の重要な概念かと思ってたら
単なるJavaの変な言語仕様でしかなかったわけだ。
変数を「フィールド」
関数を「メソッド」
関数を「コンストラクタ」
こう言い換える必要がどこにある?
こんなノムリッシュなバズワードに
今までどれだけ煙にまかれて
シンプルな真実が見えなくなってたことか
177デフォルトの名無しさん
2020/06/25(木) 20:22:00.90ID:9YSX2wtH >>176
3行でまとめて
3行でまとめて
178デフォルトの名無しさん
2020/06/25(木) 20:24:37.53ID:LQ8CyLE7 それに加えて
「継承」「抽象クラス」「オーバーライド」
「カプセル化」「ポリモーフィズム」
こんな用語は必ずしもやるのが正しいものではないし
やればやるほどシステムを必要以上に複雑にして
邪魔にしかならないものばかり
それなのに
「オブジェクト指向の本質は継承とカプセル化とポリモーフィズムだ。」
なんて馬鹿げた事を言い始めるノムリッシュな奴が出始めて
JavaScriptならオブジェクトの内部に
別のオブジェクトを入れるという一瞬の操作で
終わるものを「委譲」など余計な用語を定義して
わざわざ定義しなくてもいいようなくだらない
小難しそうな用語だらけになって
「お前はooの概念を正しく理解してない」
という偉そうな批判がどれだけ飛び交うことか
「継承」「抽象クラス」「オーバーライド」
「カプセル化」「ポリモーフィズム」
こんな用語は必ずしもやるのが正しいものではないし
やればやるほどシステムを必要以上に複雑にして
邪魔にしかならないものばかり
それなのに
「オブジェクト指向の本質は継承とカプセル化とポリモーフィズムだ。」
なんて馬鹿げた事を言い始めるノムリッシュな奴が出始めて
JavaScriptならオブジェクトの内部に
別のオブジェクトを入れるという一瞬の操作で
終わるものを「委譲」など余計な用語を定義して
わざわざ定義しなくてもいいようなくだらない
小難しそうな用語だらけになって
「お前はooの概念を正しく理解してない」
という偉そうな批判がどれだけ飛び交うことか
179デフォルトの名無しさん
2020/06/25(木) 20:31:34.09ID:LQ8CyLE7 webフレームワークの
MVCの「モデル」ってそんなに重要ものなのか?
「モデル」なんてものがSQLやDBMSを隠蔽して
何がありがたいと言うのか
むしろ隠蔽されて困ることの方が多いんじゃないか?
何故一度テーブル作成時にて定義した
大量の列定義を
またモデル層のフィールド定義で2度もやり直さないといけないのか
要らないだろ。「モデル」なんて
最近は従来軽視されてきたクライアントサイドJavaScriptの
方がよっぽど重要なことが分かってきて
ReactやVueのようなクライアントサイドフレームワークが
重要視されてるわけじゃん
「オブジェクト指向」って結局何がありがたいのよ?
MVCの「モデル」ってそんなに重要ものなのか?
「モデル」なんてものがSQLやDBMSを隠蔽して
何がありがたいと言うのか
むしろ隠蔽されて困ることの方が多いんじゃないか?
何故一度テーブル作成時にて定義した
大量の列定義を
またモデル層のフィールド定義で2度もやり直さないといけないのか
要らないだろ。「モデル」なんて
最近は従来軽視されてきたクライアントサイドJavaScriptの
方がよっぽど重要なことが分かってきて
ReactやVueのようなクライアントサイドフレームワークが
重要視されてるわけじゃん
「オブジェクト指向」って結局何がありがたいのよ?
180デフォルトの名無しさん
2020/06/25(木) 21:03:02.32ID:9YSX2wtH 1行でまとめて
181デフォルトの名無しさん
2020/06/25(木) 21:03:32.44ID:9YSX2wtH > 「オブジェクト指向」って結局何がありがたいのよ?
多くの人で作業分担し、協力してプログラムを作れる所
多くの人で作業分担し、協力してプログラムを作れる所
182デフォルトの名無しさん
2020/06/25(木) 21:03:50.52ID:9YSX2wtH ReactやVueはオブジェクト指向
183デフォルトの名無しさん
2020/06/25(木) 21:03:50.90ID:lu0UaGfG184デフォルトの名無しさん
2020/06/25(木) 21:04:45.08ID:9YSX2wtH185デフォルトの名無しさん
2020/06/25(木) 21:05:53.76ID:lu0UaGfG >>180
抽象化を理解できないかわいそうな子
抽象化を理解できないかわいそうな子
186デフォルトの名無しさん
2020/06/25(木) 21:09:21.00ID:9YSX2wtH187デフォルトの名無しさん
2020/06/25(木) 21:17:15.89ID:lu0UaGfG188デフォルトの名無しさん
2020/06/25(木) 21:43:56.18ID:9YSX2wtH だから読んでないと言ってるw
189デフォルトの名無しさん
2020/06/26(金) 02:54:16.76ID:uM2i3sYA 関数化したりクラス化したらプログラムが高速化したんだけどGCが発生するタイミングが細かくなったってことでええんか?
190デフォルトの名無しさん
2020/06/26(金) 07:35:03.68ID:eLfJJdHb オブジェクト指向は整理術
棚なんて要らん棚があるから余計な物も管理する羽目になると床置する人が現実に居るのと同じ
棚なんて要らん棚があるから余計な物も管理する羽目になると床置する人が現実に居るのと同じ
191デフォルトの名無しさん
2020/06/26(金) 08:53:43.63ID:crXMwmqp まああまりに糞な抽象化だともう全部publicでレコードとして扱えやとは思うな。
抽象化を万能なものと思い込みすぎな馬鹿が多すぎるからオブジェクト指向に対する誤解が生まれる。
抽象化を万能なものと思い込みすぎな馬鹿が多すぎるからオブジェクト指向に対する誤解が生まれる。
192デフォルトの名無しさん
2020/06/26(金) 09:44:19.22ID:8zz5Zpvs っていうか抽象化ってどんな仕様のどの部分を一括に扱ってるのか?
ドキュメントがないと最悪
ここの仕様は特殊だからこれとは別にしないとなって話ができない
ドキュメント書かないなら抽象化するな
害悪でしかない
ドキュメントがないと最悪
ここの仕様は特殊だからこれとは別にしないとなって話ができない
ドキュメント書かないなら抽象化するな
害悪でしかない
193デフォルトの名無しさん
2020/06/26(金) 09:50:43.03ID:Op8/e6Io >>190
直置きはダメだが
ほとんどの場合「棚をしまう為の棚」
「それをしまう為の棚、それをしまうための棚…」
ってなってる
で、「ハサミ使いたいんだけどどこにあったっけ?」
って探すのに非常に苦労する。
見つけやすくするための棚だったはずなのに。
それどころか
棚「ハサミは内部で使うから自分で使わなくていいです。
『切る 』という目的だけに集中して、そう命令してください」
と、棚に言われる。
しかし切られた結果を見ると自分が欲しかった結果と微妙に
違うことがよくある。
だから「もう俺が直接切るから、いいからハサミをよこせ」
っていう話になる。
あと抽象化については
「これは抽象的な棚なので中には何も入っていません。
私を参考にした具体的な棚が何処かにあると思うのでそれを
探してください。」となる。
じゃあ「具体的な棚って一体どれだ?なんか長い名前の棚が
やたら沢山あるけどどの棚から探せばいいんだ??」
となる
直置きはダメだが
ほとんどの場合「棚をしまう為の棚」
「それをしまう為の棚、それをしまうための棚…」
ってなってる
で、「ハサミ使いたいんだけどどこにあったっけ?」
って探すのに非常に苦労する。
見つけやすくするための棚だったはずなのに。
それどころか
棚「ハサミは内部で使うから自分で使わなくていいです。
『切る 』という目的だけに集中して、そう命令してください」
と、棚に言われる。
しかし切られた結果を見ると自分が欲しかった結果と微妙に
違うことがよくある。
だから「もう俺が直接切るから、いいからハサミをよこせ」
っていう話になる。
あと抽象化については
「これは抽象的な棚なので中には何も入っていません。
私を参考にした具体的な棚が何処かにあると思うのでそれを
探してください。」となる。
じゃあ「具体的な棚って一体どれだ?なんか長い名前の棚が
やたら沢山あるけどどの棚から探せばいいんだ??」
となる
194デフォルトの名無しさん
2020/06/26(金) 09:55:00.00ID:50iMo9Ym195デフォルトの名無しさん
2020/06/26(金) 09:55:48.09ID:50iMo9Ym 具体的に何のことを言ってるのか
考えなきゃならんようなたとえ話に価値はねーからな
説明が下手すぎる
考えなきゃならんようなたとえ話に価値はねーからな
説明が下手すぎる
196デフォルトの名無しさん
2020/06/26(金) 10:13:27.50ID:wYfFflLL >>193
整理が下手なやつの例をあげて、だから整理はすべきでないと言ったって意味がないだろう。
整理が下手なやつの例をあげて、だから整理はすべきでないと言ったって意味がないだろう。
197デフォルトの名無しさん
2020/06/26(金) 10:36:41.37ID:klgKDCEw このスレにstaticおじさん、絶対沸いてるだろ。
198デフォルトの名無しさん
2020/06/26(金) 10:41:42.69ID:s43csjES199デフォルトの名無しさん
2020/06/26(金) 10:42:57.59ID:8zz5Zpvs200デフォルトの名無しさん
2020/06/26(金) 10:54:38.35ID:crXMwmqp >>198
アルゴリズムレイヤーでアクセスを無駄に禁止するようなクラスは有害でしかない。
適切なpublic具合というものがある。
例えばc++のstd::vectorなんかはかなりオープンアクセスなクラスだがあれが適切なんだよ。
でもって馬鹿に適切なアクセス制御なんて無理ってこと。
変に細かくするな。
馬鹿はクラスレベルで制御なんかしないでいいからモジュールレベルでアクセスするapiだけ公開してろってこった。
アルゴリズムレイヤーでアクセスを無駄に禁止するようなクラスは有害でしかない。
適切なpublic具合というものがある。
例えばc++のstd::vectorなんかはかなりオープンアクセスなクラスだがあれが適切なんだよ。
でもって馬鹿に適切なアクセス制御なんて無理ってこと。
変に細かくするな。
馬鹿はクラスレベルで制御なんかしないでいいからモジュールレベルでアクセスするapiだけ公開してろってこった。
201デフォルトの名無しさん
2020/06/26(金) 10:58:13.55ID:uqHA56uo 適切なpublic具合
202デフォルトの名無しさん
2020/06/26(金) 11:23:09.67ID:TcIyIoqu203デフォルトの名無しさん
2020/06/26(金) 11:38:31.41ID:TyDtokvS 適切なpublic具合=ジャイアンルール
204デフォルトの名無しさん
2020/06/26(金) 11:48:31.80ID:klgKDCEw >>200
たぶん、162はクラスユーザーが呼び出した処理を実行している最中に内部処理を呼び出したら破綻するけど、いいのか?って言いたいのだと思う。
適切なアクセス修飾子をつけろは同意だが、彼に言うことではないと思う。
たぶん、162はクラスユーザーが呼び出した処理を実行している最中に内部処理を呼び出したら破綻するけど、いいのか?って言いたいのだと思う。
適切なアクセス修飾子をつけろは同意だが、彼に言うことではないと思う。
205デフォルトの名無しさん
2020/06/26(金) 11:51:10.08ID:klgKDCEw まぁ、スレッドがどうこうは...private関係あるのかな?って感じですが。
206デフォルトの名無しさん
2020/06/26(金) 12:36:59.06ID:s43csjES207デフォルトの名無しさん
2020/06/26(金) 13:04:36.71ID:8zz5Zpvs208デフォルトの名無しさん
2020/06/26(金) 13:19:36.46ID:SlEx0yXd 大昔、Javaやりだしてイキりだしたやつらが、オブジェクト指向もできない
老害とか騒いでいた歴史がある。そんな老害から見ると、gcに難しい事をまかせて、
馬鹿を吊り上げる仕組みなんだよなあ〜と皆言っていたのを思い出した。
今はPythonね。もっさ〜として、ダサすぎ。でも「俺AIの最前線だぜ」とか勘違い。
歴史は繰り返すのだ。
老害とか騒いでいた歴史がある。そんな老害から見ると、gcに難しい事をまかせて、
馬鹿を吊り上げる仕組みなんだよなあ〜と皆言っていたのを思い出した。
今はPythonね。もっさ〜として、ダサすぎ。でも「俺AIの最前線だぜ」とか勘違い。
歴史は繰り返すのだ。
209デフォルトの名無しさん
2020/06/26(金) 13:22:51.90ID:TcIyIoqu atomicityを保証するのを
呼び出し側の責任とするのか呼び出された側の責任とするのかは
pros/cons考えて使い分ければいい話でカプセル化必須とかにはならないよ
使う前にopenして終わったらcloseしてください的なAPIと
open/close含めて全部やってくれるAPIの違いと同じこと
呼び出し側の責任とするのか呼び出された側の責任とするのかは
pros/cons考えて使い分ければいい話でカプセル化必須とかにはならないよ
使う前にopenして終わったらcloseしてください的なAPIと
open/close含めて全部やってくれるAPIの違いと同じこと
210デフォルトの名無しさん
2020/06/26(金) 14:22:11.40ID:d6LVEoDZ211デフォルトの名無しさん
2020/06/26(金) 14:30:22.45ID:uqHA56uo すげえ、スレタイも日本語になってなくて、さらにまともな議論にすらなってないのに盛り上がってるw
オブジェクト指向じゃないやつのオブジェクト指向型言語のコード見れると思ってきたが、カオスだなw
オブジェクト指向じゃないやつのオブジェクト指向型言語のコード見れると思ってきたが、カオスだなw
212デフォルトの名無しさん
2020/06/26(金) 17:24:31.99ID:MKv++1da staticおじさんの詭弁ばかりで議論にすらならないから、もう、staticおじさん隔離スレ作った方がいいかもね。
【隔離】オブジェクト指向アンチスレ
みたいな感じで。
【隔離】オブジェクト指向アンチスレ
みたいな感じで。
213デフォルトの名無しさん
2020/06/26(金) 17:45:37.11ID:pGd8NqU0214デフォルトの名無しさん
2020/06/26(金) 18:11:48.36ID:QQ2hFNnS カプセル化はオブジェクト指向に限らずあるんだが
privateにして外からアクセス不能にすることをカプセル化だと思ってる奴は完全に勉強不足
privateにして外からアクセス不能にすることをカプセル化だと思ってる奴は完全に勉強不足
215デフォルトの名無しさん
2020/06/26(金) 18:24:19.05ID:xc/k+9g/ privateとprotectedの使い分けってみんなどうしてる?
俺は昔はpublic以外はよほど理由がない限り全てprivateにしてたんだけど、最近はよほど理由がない限り全てprotectedにするようになったわ。
俺は昔はpublic以外はよほど理由がない限り全てprivateにしてたんだけど、最近はよほど理由がない限り全てprotectedにするようになったわ。
216デフォルトの名無しさん
2020/06/26(金) 18:33:11.88ID:50iMo9Ym protectedはよくわからんので基本private
必要になったらprotected
必要ないならprivateでいい
変更してはいけないというルールはないんだから
必要になったらprotected
必要ないならprivateでいい
変更してはいけないというルールはないんだから
217デフォルトの名無しさん
2020/06/26(金) 18:33:48.93ID:eLfJJdHb オブジェクト指向は素晴らしいだろ
金正恩という概念から好きなだけ金正恩を生み出せるんだぞ
staticじゃ1匹しか生み出せない
その1匹が糖尿で死んだら北朝鮮は成り立たない
金正恩という概念から好きなだけ金正恩を生み出せるんだぞ
staticじゃ1匹しか生み出せない
その1匹が糖尿で死んだら北朝鮮は成り立たない
218デフォルトの名無しさん
2020/06/26(金) 18:36:58.13ID:eLfJJdHb 金与生は金正恩を継承したクラス
もしくは金日成の多態
もしくは金日成の多態
219デフォルトの名無しさん
2020/06/26(金) 18:37:59.75ID:eLfJJdHb 将軍様クラスのプロパティに性別があったとは思わなかったけど
220デフォルトの名無しさん
2020/06/26(金) 18:38:24.42ID:50iMo9Ym つまらんよ
221デフォルトの名無しさん
2020/06/26(金) 18:39:33.79ID:eLfJJdHb 北朝鮮人ならえげつない死刑
222デフォルトの名無しさん
2020/06/26(金) 18:42:48.62ID:QQ2hFNnS 金正恩というデータから好きなだけ金正恩産み出すのはオブジェクト思考に限らずできるんだが
オブジェクト指向と全く関係ない
勉強不足
オブジェクト指向と全く関係ない
勉強不足
223デフォルトの名無しさん
2020/06/26(金) 18:59:47.63ID:MKv++1da >>214
> privateにして外からアクセス不能にすることをカプセル化だと思ってる奴は完全に勉強不足
それな。
カプセル化はクラス使用者にとって必要な機能やデータを公開し、その他内部実装を秘匿することで標準ライブラリの如く使いやすいクラスを作りましょうという実にシンプルなものなのにね。
>>215
基本的にはprivate。自分が定義したメンバ変数やメソッドを継承先がどのように使うのか想像ができないのなら、privateにした方がいいと思っている。
継承先で意図しないメソッドの呼び出しや、変数の使い方をされたら困るからね。
当然、継承先での用途を考えた上でprotectedを使う場合もあるけどね。
> privateにして外からアクセス不能にすることをカプセル化だと思ってる奴は完全に勉強不足
それな。
カプセル化はクラス使用者にとって必要な機能やデータを公開し、その他内部実装を秘匿することで標準ライブラリの如く使いやすいクラスを作りましょうという実にシンプルなものなのにね。
>>215
基本的にはprivate。自分が定義したメンバ変数やメソッドを継承先がどのように使うのか想像ができないのなら、privateにした方がいいと思っている。
継承先で意図しないメソッドの呼び出しや、変数の使い方をされたら困るからね。
当然、継承先での用途を考えた上でprotectedを使う場合もあるけどね。
224デフォルトの名無しさん
2020/06/26(金) 19:08:51.52ID:QQ2hFNnS いやもうお前らprivateとかprotectedとかいう言葉を使ってカプセル化を語るのやめたほうがいいよ
privateという機能がなくてもカプセル化は実現できるから
百歩譲ってデータ隠蔽だけをカプセル化と呼ぶにしても、privateのように外からのアクセスを不能にする機能がなくてもカプセル化は実現できるし
privateという機能がなくてもカプセル化は実現できるから
百歩譲ってデータ隠蔽だけをカプセル化と呼ぶにしても、privateのように外からのアクセスを不能にする機能がなくてもカプセル化は実現できるし
225デフォルトの名無しさん
2020/06/26(金) 19:12:26.17ID:fnCF+h71 >>224
そんな方法あるんだ、どうやってやるの?
そんな方法あるんだ、どうやってやるの?
226デフォルトの名無しさん
2020/06/26(金) 19:34:06.00ID:eLfJJdHb >>222
オブジェクト指向でしか出来ないことがあるとでもw
オブジェクト指向でしか出来ないことがあるとでもw
227デフォルトの名無しさん
2020/06/26(金) 19:47:03.28ID:crXMwmqp pimpleパターンくらいは知っとけよ。。
てかカプセル化について馬鹿みたいにこだわる奴でまともなインターフェイス設計できる奴見たことねーわ。
リファクタリングもしないで一発で正解にたどり着けるとでも考えてるんだろうな。
てかカプセル化について馬鹿みたいにこだわる奴でまともなインターフェイス設計できる奴見たことねーわ。
リファクタリングもしないで一発で正解にたどり着けるとでも考えてるんだろうな。
228デフォルトの名無しさん
2020/06/26(金) 19:48:24.03ID:SG/+b/+N pimple 覚えた pimple ニキビ 覚えたpimple pimple
229デフォルトの名無しさん
2020/06/26(金) 20:33:23.82ID:QQ2hFNnS オブジェクト思考言語アレルギーの老害は論外として
特定のオブジェクト指向言語を習得している人は無数にいても、
オブジェクト指向そのものを理解してる人は殆どいなそう
特定のオブジェクト指向言語を習得している人は無数にいても、
オブジェクト指向そのものを理解してる人は殆どいなそう
230デフォルトの名無しさん
2020/06/26(金) 20:37:52.02ID:Op8/e6Io231デフォルトの名無しさん
2020/06/26(金) 20:43:25.43ID:ODDHilOW > オブジェクト指向そのものを理解
どういうこと?
アランケイがどう考えたとか
OOPがどういう成り立ちだとかそういういこと?
どういうこと?
アランケイがどう考えたとか
OOPがどういう成り立ちだとかそういういこと?
232デフォルトの名無しさん
2020/06/26(金) 20:54:59.05ID:0CWC8I0Q アランケイが考えたオブジェクト指向は洗練され完成されたオブジェクト指向なのです。
初号機が最強であるのはどこの世界でも同じことです。
初期版が完成です。改良などありえません。
初号機が最強であるのはどこの世界でも同じことです。
初期版が完成です。改良などありえません。
233デフォルトの名無しさん
2020/06/26(金) 21:47:56.68ID:ks+n8Bmz 第一、privateサポートしてない言語なんて普通にあるしな。Javascriptなんてそうだし。
234223
2020/06/26(金) 21:51:49.87ID:ks+n8Bmz あ、ID変わっちゃった。223です。
235デフォルトの名無しさん
2020/06/26(金) 22:03:26.05ID:TcIyIoqu >>223
>カプセル化はクラス使用者にとって必要な機能やデータを公開し、その他内部実装を秘匿することで標準ライブラリの如く使いやすいクラスを作りましょうという実にシンプルなものなのにね。
カプセル化といった時に一般的な定義は2種類あってそれはそのうちの1つで情報隠蔽(Infomation Hiding)とほぼ同じ意味
もう一つはデータとそれを操作する関数/メソッドを一つの単位に束ねることを言う(隠蔽されてるかどうかは気にしない)
人によっては2つを合成した定義でカプセル化という言葉と使ってるので
まともな議論をしたければどういう定義でカプセル化と言ってるのか確認する必要がある
>カプセル化はクラス使用者にとって必要な機能やデータを公開し、その他内部実装を秘匿することで標準ライブラリの如く使いやすいクラスを作りましょうという実にシンプルなものなのにね。
カプセル化といった時に一般的な定義は2種類あってそれはそのうちの1つで情報隠蔽(Infomation Hiding)とほぼ同じ意味
もう一つはデータとそれを操作する関数/メソッドを一つの単位に束ねることを言う(隠蔽されてるかどうかは気にしない)
人によっては2つを合成した定義でカプセル化という言葉と使ってるので
まともな議論をしたければどういう定義でカプセル化と言ってるのか確認する必要がある
236223
2020/06/26(金) 22:20:46.34ID:ks+n8Bmz 自分が議論したいというよりは...
このスレ主と>>138みたいな謎方向の議論をする人の思うカプセル化について、そりゃ違うだろって言いたいだけ。
215への回答は聞かれたから答えただけで深い意味はない。
このスレ主と>>138みたいな謎方向の議論をする人の思うカプセル化について、そりゃ違うだろって言いたいだけ。
215への回答は聞かれたから答えただけで深い意味はない。
237デフォルトの名無しさん
2020/06/26(金) 22:21:20.66ID:0CWC8I0Q >>235
違う違う。情報隠蔽のことをカプセル化と間違っていってる人がいるだけ
カプセル化の定義は必要なものだけをインターフェースとして提供する
必要ないものは隠蔽するってことなんだが
全部必要だから公開しているのに、カプセル化されてない!って言うやつがいるだけ
違う違う。情報隠蔽のことをカプセル化と間違っていってる人がいるだけ
カプセル化の定義は必要なものだけをインターフェースとして提供する
必要ないものは隠蔽するってことなんだが
全部必要だから公開しているのに、カプセル化されてない!って言うやつがいるだけ
238デフォルトの名無しさん
2020/06/26(金) 22:33:13.54ID:Pmgb6tek >>237
それが正しいという一次ソースあるん?
それが正しいという一次ソースあるん?
239デフォルトの名無しさん
2020/06/26(金) 22:33:39.59ID:Pmgb6tek ないんだったらそれあなたの感想ですよね
240デフォルトの名無しさん
2020/06/26(金) 22:34:17.18ID:TcIyIoqu241デフォルトの名無しさん
2020/06/26(金) 22:35:17.42ID:0CWC8I0Q242223
2020/06/26(金) 22:40:01.42ID:ks+n8Bmz 俺は...カプセル化の本質さえ抑えておけば、言葉としての違いは気にしないけどな。
privateにすること=カプセル化だと勘違いしていても、そいつがカプセル化の有り難みを理解できているのなら、深入りしないだけだよ。
言葉の定義にどこまで拘るかは議論の相手次第。
だが、staticおじさん、貴方は駄目だ。
俺のような細かいことを気にしないレベルの人間ですら駄目だわ。
昔からオブジェクト指向を批判し続けて初心者に誤解を与える老害だから見つけ次第、徹底的に叩く。
privateにすること=カプセル化だと勘違いしていても、そいつがカプセル化の有り難みを理解できているのなら、深入りしないだけだよ。
言葉の定義にどこまで拘るかは議論の相手次第。
だが、staticおじさん、貴方は駄目だ。
俺のような細かいことを気にしないレベルの人間ですら駄目だわ。
昔からオブジェクト指向を批判し続けて初心者に誤解を与える老害だから見つけ次第、徹底的に叩く。
243デフォルトの名無しさん
2020/06/26(金) 22:42:23.17ID:Pmgb6tek オブジェクト指向を勉強してる意識高い系のアホが
引数も戻り値も使わず、全部インスタンス変数使ってる例を見て
僕はstaticおじさんになっちゃいそう
引数も戻り値も使わず、全部インスタンス変数使ってる例を見て
僕はstaticおじさんになっちゃいそう
244デフォルトの名無しさん
2020/06/26(金) 22:49:00.20ID:TcIyIoqu245デフォルトの名無しさん
2020/06/26(金) 22:50:30.87ID:Pmgb6tek 構造化プログラミングをできるようになって
データと関数をオブジェクトとしてまとめるともっと良いかもと
オブジェクト指向を身につけるならいんだけど
オブジェクト指向では名詞を抜き出すんだ
そうやってオブジェクトを分ければ良いプログラムができあがるんだと
オブジェクト指向に幻想抱いてるアホが作ったプログラムは手に負えん
データと関数をオブジェクトとしてまとめるともっと良いかもと
オブジェクト指向を身につけるならいんだけど
オブジェクト指向では名詞を抜き出すんだ
そうやってオブジェクトを分ければ良いプログラムができあがるんだと
オブジェクト指向に幻想抱いてるアホが作ったプログラムは手に負えん
246デフォルトの名無しさん
2020/06/26(金) 22:50:54.79ID:0CWC8I0Q247デフォルトの名無しさん
2020/06/26(金) 22:51:29.48ID:0CWC8I0Q >>245
オブジェクト指向に幻想抱いてる天才が作ったプログラムなら手に負えるだろ?
オブジェクト指向に幻想抱いてる天才が作ったプログラムなら手に負えるだろ?
248デフォルトの名無しさん
2020/06/26(金) 22:52:06.30ID:Pmgb6tek >>247
天才は幻想を抱かない
天才は幻想を抱かない
249デフォルトの名無しさん
2020/06/26(金) 22:52:57.33ID:Pmgb6tek 僕は天才だからわかる
僕のどこが天才なのかは説明できないけどわかって
僕のどこが天才なのかは説明できないけどわかって
250デフォルトの名無しさん
2020/06/26(金) 22:53:19.24ID:0CWC8I0Q251デフォルトの名無しさん
2020/06/26(金) 22:54:34.05ID:Pmgb6tek252デフォルトの名無しさん
2020/06/26(金) 23:08:18.29ID:0CWC8I0Q >>251
だからオブジェクト指向自体には問題がないって言ってるんでしょ?
だからオブジェクト指向自体には問題がないって言ってるんでしょ?
253デフォルトの名無しさん
2020/06/26(金) 23:08:49.57ID:0CWC8I0Q 人の話と技術の話の区別ぐらいつけよう。
人をいくらアホだ馬鹿だと叩いても
技術を否定したことにはならない
人をいくらアホだ馬鹿だと叩いても
技術を否定したことにはならない
254デフォルトの名無しさん
2020/06/26(金) 23:09:53.77ID:Pmgb6tek ListやStack、HTTP Clientといったものはオブジェクト指向と見事に調和するんだけど
それは変えられることがないから、これはこういう機能のものだってのが決まっていて
システムの仕様が変わっても変更されることがない
いっぽうでビジネスドメインにオブジェクト指向を適用しようとすると
仕様がころころ変わるから最初の設計ではうまくいかなくなることが多い
仕様が変わったらオブジェクトの設計もやり直せるならいんだけど
一度システムが動き出したら数万〜数億の人が影響受けるから
なかなか変えられないのが実際のところ
カプセル化されると困るというのはそういう状況の話じゃないかと僕は思いました
ドメインの安定性によってオブジェクト指向の適否は左右されると天才の僕は提言します
それは変えられることがないから、これはこういう機能のものだってのが決まっていて
システムの仕様が変わっても変更されることがない
いっぽうでビジネスドメインにオブジェクト指向を適用しようとすると
仕様がころころ変わるから最初の設計ではうまくいかなくなることが多い
仕様が変わったらオブジェクトの設計もやり直せるならいんだけど
一度システムが動き出したら数万〜数億の人が影響受けるから
なかなか変えられないのが実際のところ
カプセル化されると困るというのはそういう状況の話じゃないかと僕は思いました
ドメインの安定性によってオブジェクト指向の適否は左右されると天才の僕は提言します
255デフォルトの名無しさん
2020/06/26(金) 23:12:02.84ID:Pmgb6tek256デフォルトの名無しさん
2020/06/26(金) 23:18:57.04ID:0CWC8I0Q >>255
お前がそうであってほしいと願ってるのはなぜ?w
お前がそうであってほしいと願ってるのはなぜ?w
257デフォルトの名無しさん
2020/06/26(金) 23:20:58.30ID:Pmgb6tek >>256
何いってんだお前
何いってんだお前
258デフォルトの名無しさん
2020/06/26(金) 23:21:20.47ID:Pmgb6tek 僕が願ってるのは世界平和だけ
259デフォルトの名無しさん
2020/06/26(金) 23:35:54.37ID:n1YsnRgt カプセル化するなら
一切ソースコードレビューしなくていいんだな
変数やメソッドの命名もインデントも全部
適当にやるからな
文句つけるならテストの結果だけで文句を言って
くれよ、ソースコードには文句言うなよな。
例外をキャッチする必要もないな。
俺が利用するクラスで発生した問題はそのクラス内部の
責任だ。内部事情は意識しなくてもいいんだからな。
おっとロギングも内部事情だからやる必要ないな。
そんな事情は利用側は知りたくもないし結果だけが
欲しいんだもんな。
逆にこれらを押し付けるなら全部publicで問題ないよな。
クラスの内部を知りたいってことだからな。
「↑こいつはカプセル化が何なのかを理解してない。」
カプセル化おじさんがどうせこう言うだろうから先に
言っておいたわ。
一切ソースコードレビューしなくていいんだな
変数やメソッドの命名もインデントも全部
適当にやるからな
文句つけるならテストの結果だけで文句を言って
くれよ、ソースコードには文句言うなよな。
例外をキャッチする必要もないな。
俺が利用するクラスで発生した問題はそのクラス内部の
責任だ。内部事情は意識しなくてもいいんだからな。
おっとロギングも内部事情だからやる必要ないな。
そんな事情は利用側は知りたくもないし結果だけが
欲しいんだもんな。
逆にこれらを押し付けるなら全部publicで問題ないよな。
クラスの内部を知りたいってことだからな。
「↑こいつはカプセル化が何なのかを理解してない。」
カプセル化おじさんがどうせこう言うだろうから先に
言っておいたわ。
260デフォルトの名無しさん
2020/06/26(金) 23:45:57.60ID:0CWC8I0Q261デフォルトの名無しさん
2020/06/26(金) 23:50:21.75ID:ks+n8Bmz 珍しくこの手のスレでは比較的、リアルな批判がでたかも。
汎用性の無いビジネスドメインをオブジェクト指向を意識しながらクラス化したところで、メリット薄いよね?って話はまぁ、理解できる。
でも、ビジネスドメインを構成するクラスを汎用性の高いクラスだけで構成させることができれば、大分スッキリする。
いや、ほんと、そこがオブジェクト指向信者の腕の見せ所なんだがな。
たぶん、ビジネスドメインの責務分割の仕方を誤って神クラスを作ってしまうパターンにはまってるのかも。
汎用性の無いビジネスドメインをオブジェクト指向を意識しながらクラス化したところで、メリット薄いよね?って話はまぁ、理解できる。
でも、ビジネスドメインを構成するクラスを汎用性の高いクラスだけで構成させることができれば、大分スッキリする。
いや、ほんと、そこがオブジェクト指向信者の腕の見せ所なんだがな。
たぶん、ビジネスドメインの責務分割の仕方を誤って神クラスを作ってしまうパターンにはまってるのかも。
262デフォルトの名無しさん
2020/06/26(金) 23:56:26.67ID:ks+n8Bmz でも、まぁ...開発者の立場次第にもよるのかも。
俺みたいに自社開発しているエンジニアだったら、利益を上げるレベルの品質を根拠にいくらでも納期を伸ばしてもらえるので、ド丁寧なオブジェクト指向プログラムを書く余裕があるけど、受託開発になると納期がギリギリに設定されがちだし(偏見?)、そんな最中、丁寧なコードなんて記述できるかって言われると...まぁ、どうなんだろうね。
俺みたいに自社開発しているエンジニアだったら、利益を上げるレベルの品質を根拠にいくらでも納期を伸ばしてもらえるので、ド丁寧なオブジェクト指向プログラムを書く余裕があるけど、受託開発になると納期がギリギリに設定されがちだし(偏見?)、そんな最中、丁寧なコードなんて記述できるかって言われると...まぁ、どうなんだろうね。
263デフォルトの名無しさん
2020/06/26(金) 23:58:23.12ID:34AfLaws 「状態によって挙動が変わる」ものが何十個も何百個も集まったら凡人には把握しきれない。
ましてや内部の状態が読み取りすらできないとなれば絶望的なことになるのバカでもわかる。
ウェブシステムや業務システムみたいにデータベースという巨大グローバル変数群を構造体にコピーしては書き戻すというのを繰り返すだけだと深い階層化が発生しないから問題は起きないんだろうね。
ましてや内部の状態が読み取りすらできないとなれば絶望的なことになるのバカでもわかる。
ウェブシステムや業務システムみたいにデータベースという巨大グローバル変数群を構造体にコピーしては書き戻すというのを繰り返すだけだと深い階層化が発生しないから問題は起きないんだろうね。
264デフォルトの名無しさん
2020/06/26(金) 23:59:12.73ID:5Zl1C0wL265デフォルトの名無しさん
2020/06/26(金) 23:59:54.02ID:TcIyIoqu266デフォルトの名無しさん
2020/06/27(土) 00:00:02.19ID:ihk0yOtr 問題が起きやすいのはハードウェアに近い低層と、ライブラリ層と、ビジネスロジック層なんかに分業している分野だろうね。
267デフォルトの名無しさん
2020/06/27(土) 00:05:48.57ID:n2G2JMaM268デフォルトの名無しさん
2020/06/27(土) 00:09:26.27ID:ihk0yOtr データベースを使っているようなシステムはまず深い階層化は起きない。
RDBと階層化は相性が悪いからね。
それなのに深い階層化を使っている気分になっている人が多い。
ハードウェア制御絡みの本当に深い階層化を経験している人とは住んでいる世界が違う。
だから話が噛み合わない。
RDBと階層化は相性が悪いからね。
それなのに深い階層化を使っている気分になっている人が多い。
ハードウェア制御絡みの本当に深い階層化を経験している人とは住んでいる世界が違う。
だから話が噛み合わない。
269デフォルトの名無しさん
2020/06/27(土) 00:31:59.28ID:npRplKHX みんな難しく考えすぎw
オブジェクト指向はインテリセンスが効くんで便利
それで納得しろよ これがないとダルいだろ
オブジェクト指向はインテリセンスが効くんで便利
それで納得しろよ これがないとダルいだろ
270デフォルトの名無しさん
2020/06/27(土) 00:33:18.96ID:0UrSdNRf >>267
> お前の主張の最大のメリットであるスッキリがお前の主観でしかない
事実を主観でしかないと批判されましても困るね。
実際、汎用性の高いクラス...それこそ、listやstack、http cliant並みに汎用性の高いクラスだけでプログラムが書かれてたらスッキリするだろ。
代替案があるなら、どうぞ。
> そもそも設計書とソースの構造を一致させるための設計技術ではないのかな?
何の話?
> お前の主張の最大のメリットであるスッキリがお前の主観でしかない
事実を主観でしかないと批判されましても困るね。
実際、汎用性の高いクラス...それこそ、listやstack、http cliant並みに汎用性の高いクラスだけでプログラムが書かれてたらスッキリするだろ。
代替案があるなら、どうぞ。
> そもそも設計書とソースの構造を一致させるための設計技術ではないのかな?
何の話?
271デフォルトの名無しさん
2020/06/27(土) 00:47:38.59ID:eG65KKvD スッキリって何?コードが短くなるの?
頭悪いから50行以上は読めないんだけど
頭悪いから50行以上は読めないんだけど
272デフォルトの名無しさん
2020/06/27(土) 00:51:39.98ID:n2G2JMaM273デフォルトの名無しさん
2020/06/27(土) 00:53:32.69ID:kHv6hhb8274デフォルトの名無しさん
2020/06/27(土) 01:02:58.36ID:kHv6hhb8275デフォルトの名無しさん
2020/06/27(土) 01:03:48.38ID:0UrSdNRf いや、普通にOOPのコードだけど...。
逆に、list,stack並みに...で、なぜ伝わらない。
当たり前すぎて伝わらなかったのか、初めて聞いた単語だから伝わらなかったのか。
このスレの連中だと高低差激しすぎてコミュニケーションが難しいな。
逆に、list,stack並みに...で、なぜ伝わらない。
当たり前すぎて伝わらなかったのか、初めて聞いた単語だから伝わらなかったのか。
このスレの連中だと高低差激しすぎてコミュニケーションが難しいな。
276デフォルトの名無しさん
2020/06/27(土) 01:04:44.30ID:0UrSdNRf >>274
あっ、はい。そうです。
あっ、はい。そうです。
277デフォルトの名無しさん
2020/06/27(土) 01:08:16.33ID:0UrSdNRf >>274
強いて言うのなら、ドメインが安定しているところに見える範囲がオブジェクト指向信者とオブジェクト指向使いとstaticおじさんで、どれくらい違うのかなって感じですが。
強いて言うのなら、ドメインが安定しているところに見える範囲がオブジェクト指向信者とオブジェクト指向使いとstaticおじさんで、どれくらい違うのかなって感じですが。
278デフォルトの名無しさん
2020/06/27(土) 01:11:06.46ID:kHv6hhb8 こうなるんだったらもっとこういうオブジェクトにすれば
良かったと思うことがザラにある
今最高にきれいでも未来の仕様変更でど汚くなることもある
いま汚くても未来の仕様変更がきれいにできることもある
その見極め方が僕には未だにわからない
良かったと思うことがザラにある
今最高にきれいでも未来の仕様変更でど汚くなることもある
いま汚くても未来の仕様変更がきれいにできることもある
その見極め方が僕には未だにわからない
279デフォルトの名無しさん
2020/06/27(土) 01:11:51.83ID:F7GoDPAy >>269
いや動的になる分、効きづらくなるだろばか。
それでもモジュール切り離しの視点で良いこともあるってのがオブジェクト指向の旨みなわけだが。
依存逆転のモジュール構造が作りやすいってだけの話なのにバカが変な哲学持ち出すから
カスみたいな輩がお前はわかってない、俺が真の意味を理解してるとか言い出すわけだよ。
いや動的になる分、効きづらくなるだろばか。
それでもモジュール切り離しの視点で良いこともあるってのがオブジェクト指向の旨みなわけだが。
依存逆転のモジュール構造が作りやすいってだけの話なのにバカが変な哲学持ち出すから
カスみたいな輩がお前はわかってない、俺が真の意味を理解してるとか言い出すわけだよ。
280デフォルトの名無しさん
2020/06/27(土) 01:20:22.14ID:kHv6hhb8 依存性を逆転させて良いことがあるっていうんですか!?
281デフォルトの名無しさん
2020/06/27(土) 01:27:34.87ID:BNc+T5Ob 1万行超えてもスクロールして作業するのか?
282デフォルトの名無しさん
2020/06/27(土) 01:28:03.05ID:kHv6hhb8 業務で扱うようなある程度複雑な仕様をどう設計して実装するか
みんなでプログラミングして比較してみたいねー
みんなでプログラミングして比較してみたいねー
283デフォルトの名無しさん
2020/06/27(土) 01:31:55.47ID:kHv6hhb8284デフォルトの名無しさん
2020/06/27(土) 02:14:37.03ID:n/FbqQvh >>282
業務というのはIBM(International Business Machines )より
パンチングカードの集計から始まっているので
主にアンケート調査結果や在庫管理プログラム
の設計ということになるだろう
業務というのはIBM(International Business Machines )より
パンチングカードの集計から始まっているので
主にアンケート調査結果や在庫管理プログラム
の設計ということになるだろう
285デフォルトの名無しさん
2020/06/27(土) 06:21:43.43ID:pgI/H4Wp >>282
業務に限らず、OOPに限らず
そもそもはそれが問題なんよ
複雑さそのものが
ある程度以上複雑なモンは人類にはムリなんよ
それが人類とプログラミングの関係なんよ
サンプルプログラムや学校の課題書いたり
趣味で小さいの書いてる連中と
ある程度以上複雑なモンを書いてる連中とはまずそこからして
想定してるもんが違いすぎる
業務に限らず、OOPに限らず
そもそもはそれが問題なんよ
複雑さそのものが
ある程度以上複雑なモンは人類にはムリなんよ
それが人類とプログラミングの関係なんよ
サンプルプログラムや学校の課題書いたり
趣味で小さいの書いてる連中と
ある程度以上複雑なモンを書いてる連中とはまずそこからして
想定してるもんが違いすぎる
286デフォルトの名無しさん
2020/06/27(土) 07:01:10.93ID:U90iCGW6287デフォルトの名無しさん
2020/06/27(土) 07:42:28.66ID:e0+LQFD/ 「オブジェクト指向は高度で複雑な事をやる技術者
だけが恩恵を受けられるもので簡単なシステム
書いてるような凡人プログラマは恩恵を
感じにくい。」
だったら入門書でそんなもの教えるな
初心者プログラマにソケット通信や
システムコールやカーネルみたいな話を
いきなり教えるんか?
だけが恩恵を受けられるもので簡単なシステム
書いてるような凡人プログラマは恩恵を
感じにくい。」
だったら入門書でそんなもの教えるな
初心者プログラマにソケット通信や
システムコールやカーネルみたいな話を
いきなり教えるんか?
288デフォルトの名無しさん
2020/06/27(土) 07:44:28.06ID:e0+LQFD/ 凡人にとってオブジェクト指向は
邪魔でしかないんだよ。
高度な技術者の勝手な利便性を
凡人に押し付けるな。
凡人の方が大多数なんだよ。
邪魔でしかないんだよ。
高度な技術者の勝手な利便性を
凡人に押し付けるな。
凡人の方が大多数なんだよ。
289デフォルトの名無しさん
2020/06/27(土) 07:54:23.66ID:BNc+T5Ob 何でプログラムやってるんだ?
もっと簡単なことがあるだろ
もっと簡単なことがあるだろ
290デフォルトの名無しさん
2020/06/27(土) 08:29:03.79ID:0UrSdNRf >>286
どうだろ。
staticおじさん(「オブジェクト指向ってしっくりこないんです」の記事を書いて炎上、詭弁を重ねて意固地にstaticを薦めた有名な老害)じゃないのなら、まだ、大丈夫なんじゃね?
どうだろ。
staticおじさん(「オブジェクト指向ってしっくりこないんです」の記事を書いて炎上、詭弁を重ねて意固地にstaticを薦めた有名な老害)じゃないのなら、まだ、大丈夫なんじゃね?
291デフォルトの名無しさん
2020/06/27(土) 08:38:52.96ID:0UrSdNRf それ以前に、カプセル化は絶対駄目の結論に持っていこうとしているのか?
日が変わるとID変わるから、誰が誰だかよくわからなくなってきた...。
日が変わるとID変わるから、誰が誰だかよくわからなくなってきた...。
292デフォルトの名無しさん
2020/06/27(土) 09:43:50.27ID:8YCrt6Qf 何事も程度次第
ただ丁度良い程度を知るのは少数の天性のセンス持ちだけで
凡人には理解できなかったり極端に走ったりする
俺は凡人とセンス持ちの間、というか凡人の域を超えられないのかなあ
プログラム書くたびにどの程度で済ませるか、いつも迷ってる
ただ丁度良い程度を知るのは少数の天性のセンス持ちだけで
凡人には理解できなかったり極端に走ったりする
俺は凡人とセンス持ちの間、というか凡人の域を超えられないのかなあ
プログラム書くたびにどの程度で済ませるか、いつも迷ってる
293デフォルトの名無しさん
2020/06/27(土) 10:00:13.69ID:pgI/H4Wp OOP批判の大半はクラス設計の難しさによる
OOPによってもたらされたクラスライブラリが
十分に使いやすいのに対して
自分でクラスやインタフェースを作ろうとしたとき
納得の行かない結果になる
問題の切り分けが出来ず
再利用性のある単位ぴったりにフォーカスできず
一緒にあるべきものを別にしたり
別にあるべきものを一緒にしたり
縦に割る物を横に割ろうとしたり
いろんな判断をあやまった結果
最後に、クラス設計が悪いのではなくてOOPそのものが悪いと断ずる
OOPによってもたらされたクラスライブラリが
十分に使いやすいのに対して
自分でクラスやインタフェースを作ろうとしたとき
納得の行かない結果になる
問題の切り分けが出来ず
再利用性のある単位ぴったりにフォーカスできず
一緒にあるべきものを別にしたり
別にあるべきものを一緒にしたり
縦に割る物を横に割ろうとしたり
いろんな判断をあやまった結果
最後に、クラス設計が悪いのではなくてOOPそのものが悪いと断ずる
294デフォルトの名無しさん
2020/06/27(土) 10:09:46.57ID:twDHZDh4 >>287
別に初心者だってオブジェクト指向の恩恵は受けられるだろう。良くあるコンテナや文字列とかの基本的なものだってオブジェクト指向的なものだし。
それに初心者の内からオブジェクト指向について知っておく、慣れておくことは重要だろう。
世の中の便利なライブラリやフレームワーク等の多くはオブジェクト指向で作られているからそれを使えるようになるために必要。
自分で設計するのも初めは難しいが、理屈や理論を学びながら実例に触れ、試行錯誤しながら徐々に慣れていく。
何より、初心者だからとオブジェクト指向をまったく触れずに手続き型のみで経験を積んで、ある程度自分なりのノウハウや経験論を身に付けてから別のパラダイムを取り入れようとすると、中にはアレルギー反応を起こして適応できなくなってしまう人もごく稀にいるから。
別に初心者だってオブジェクト指向の恩恵は受けられるだろう。良くあるコンテナや文字列とかの基本的なものだってオブジェクト指向的なものだし。
それに初心者の内からオブジェクト指向について知っておく、慣れておくことは重要だろう。
世の中の便利なライブラリやフレームワーク等の多くはオブジェクト指向で作られているからそれを使えるようになるために必要。
自分で設計するのも初めは難しいが、理屈や理論を学びながら実例に触れ、試行錯誤しながら徐々に慣れていく。
何より、初心者だからとオブジェクト指向をまったく触れずに手続き型のみで経験を積んで、ある程度自分なりのノウハウや経験論を身に付けてから別のパラダイムを取り入れようとすると、中にはアレルギー反応を起こして適応できなくなってしまう人もごく稀にいるから。
295デフォルトの名無しさん
2020/06/27(土) 10:47:57.21ID:n2G2JMaM 長い上に全く中身がないな
スッキリ以上のオブジェクト指向のメリットは出てないからね
これで技術者やってるつもりなんだから早く死ねよ
スッキリ以上のオブジェクト指向のメリットは出てないからね
これで技術者やってるつもりなんだから早く死ねよ
296デフォルトの名無しさん
2020/06/27(土) 11:57:57.12ID:0UrSdNRf >>295
お前の無駄口程、無駄な発言は無いけどな。
お前の無駄口程、無駄な発言は無いけどな。
297デフォルトの名無しさん
2020/06/27(土) 12:40:58.84ID:ut+wnsgT カプセル化って別に外部からのアクセスを不能にすることじゃないよ
外部から『直接的』にアクセスさせることを避けて、そのかわり外部向けにわかりやすい何かを提供すること
現実のカプセルのように、扱いにくいものを隠して扱いやすく提供すること
別にカプセル化してもリフレクションやその他諸々で遠回りなアクセスが可能なこともある
カプセル化ってのはかなり意味の広い言葉で、「臭いものに蓋」みたいなこと全般をカプセル化と呼ぶ
極端な例だと、関数にわかりやすい名前をつけることで関数内部を見なくて済むようにすることもカプセル化と呼ぶ
外部から『直接的』にアクセスさせることを避けて、そのかわり外部向けにわかりやすい何かを提供すること
現実のカプセルのように、扱いにくいものを隠して扱いやすく提供すること
別にカプセル化してもリフレクションやその他諸々で遠回りなアクセスが可能なこともある
カプセル化ってのはかなり意味の広い言葉で、「臭いものに蓋」みたいなこと全般をカプセル化と呼ぶ
極端な例だと、関数にわかりやすい名前をつけることで関数内部を見なくて済むようにすることもカプセル化と呼ぶ
298デフォルトの名無しさん
2020/06/27(土) 12:43:14.13ID:npRplKHX >>288
いやいや兵隊がよくわからないのに使えるするのが
オブジェクト指向の利点の一つだろ つかそれができないなら
オブジェクト指向にする意義がない まあ兵隊がよくわからないのに
使えるぐらいのオブジェクト指向ができるなら、設計した本人たちは
そもそもオブジェクト指向にしなくても出来ちゃうって逆説はあるわな
いやいや兵隊がよくわからないのに使えるするのが
オブジェクト指向の利点の一つだろ つかそれができないなら
オブジェクト指向にする意義がない まあ兵隊がよくわからないのに
使えるぐらいのオブジェクト指向ができるなら、設計した本人たちは
そもそもオブジェクト指向にしなくても出来ちゃうって逆説はあるわな
299デフォルトの名無しさん
2020/06/27(土) 13:14:49.52ID:e0+LQFD/ >>293
その通りだと思う
オブジェクト指向で作られたOSSの、ライブラリは
とても便利だし、役に立つと思う。
なら初心者や凡人へはクラスをインポートして使い方
のみを教えるべきで、クラスの作り方なんて
教えない方が親切だと思う
正直、自分でクラスなんて作りたくないし
組織内のメンバーが作成したローカル内の
クラスなんて利用や継承したくないし
自分が作ったクラスを誰かに利用して
欲しくない、使い捨てで十分。
再利用性は以前自分が書いたコードを複製
して微修正すればいいよ、
自分が書いたコードだから修正箇所は
把握してる。
JavaScriptやpyみたいな言語はオブジェクト指向
導入してるけどクラスの作成は必須じゃない
だけどJavaみたいな静的言語はクラスの作成が
必須になってる。ここがおかしいと思う。
クラス作ること強制してる言語仕様やフレームワークは
おかしいと思う。
その通りだと思う
オブジェクト指向で作られたOSSの、ライブラリは
とても便利だし、役に立つと思う。
なら初心者や凡人へはクラスをインポートして使い方
のみを教えるべきで、クラスの作り方なんて
教えない方が親切だと思う
正直、自分でクラスなんて作りたくないし
組織内のメンバーが作成したローカル内の
クラスなんて利用や継承したくないし
自分が作ったクラスを誰かに利用して
欲しくない、使い捨てで十分。
再利用性は以前自分が書いたコードを複製
して微修正すればいいよ、
自分が書いたコードだから修正箇所は
把握してる。
JavaScriptやpyみたいな言語はオブジェクト指向
導入してるけどクラスの作成は必須じゃない
だけどJavaみたいな静的言語はクラスの作成が
必須になってる。ここがおかしいと思う。
クラス作ること強制してる言語仕様やフレームワークは
おかしいと思う。
300デフォルトの名無しさん
2020/06/27(土) 13:26:54.01ID:eG65KKvD 再利用しない前提ならそりゃ無用の長物だわな
301デフォルトの名無しさん
2020/06/27(土) 13:45:44.90ID:ssxfEnBq そして再利用しようとすると微妙に仕様が変わって結局中身を改造しないといけなくなる罠。
汎用的なパーツ以外はクラス化すると余計手間かかるな。
汎用的なパーツ以外はクラス化すると余計手間かかるな。
302デフォルトの名無しさん
2020/06/27(土) 13:51:13.06ID:eG65KKvD なんというかprivate云々とかそういう次元の話じゃないよねこれ
なんか脱力した
なんか脱力した
303デフォルトの名無しさん
2020/06/27(土) 13:56:46.31ID:kHv6hhb8 再利用しなくてもテストしやすくなったりするからオブジェクトは素敵な概念だと思うよ
304デフォルトの名無しさん
2020/06/27(土) 13:58:08.98ID:kHv6hhb8 修正が必要になったとき、それを使う側に影響を与えないっていう性質があっていっぱいちゅき
305デフォルトの名無しさん
2020/06/27(土) 13:58:50.41ID:kHv6hhb8 まあ修正の程度にもよるんですけどね!(げきおこ
306デフォルトの名無しさん
2020/06/27(土) 14:06:34.44ID:UiFDXh57 JavaをdisるJava全否定のスレッドなのね
307デフォルトの名無しさん
2020/06/27(土) 14:13:22.91ID:UrcM2fcl このスレタイの主張、可能なら複数の言語で、
オブジェクト指向で書かれたそれなりの量のコードを、
それより機能的で保守性があって行数も少なくて万人が読みやすいようにリファクタリングするとかして証明して欲しいなあ
それがプログラマの矜持ってもんだと思う
コードで語れってね
オブジェクト指向で書かれたそれなりの量のコードを、
それより機能的で保守性があって行数も少なくて万人が読みやすいようにリファクタリングするとかして証明して欲しいなあ
それがプログラマの矜持ってもんだと思う
コードで語れってね
308デフォルトの名無しさん
2020/06/27(土) 14:22:56.55ID:Z/pHF8i9 >>273
カプセル化はC言語でもできる。
カプセル化はC言語でもできる。
309デフォルトの名無しさん
2020/06/27(土) 14:23:12.65ID:1p1mL4Jd バカなやつほど長文で演説した挙げ句オブジェクト指向のメリットをスッキリ以上のモノを挙げられない
レスしにくるなよ惨めだから
レスしにくるなよ惨めだから
310デフォルトの名無しさん
2020/06/27(土) 14:26:38.74ID:Z/pHF8i9 >>282
一般的な業務システムはデータベースに出し入れするだけだから深い階層構造にはならない。
データベースに出し入れする際の受け皿となる構造体が1層あるくらいだろ。
そもそもRDBは階層構造そのままぶち込めないし。
一般的な業務システムはデータベースに出し入れするだけだから深い階層構造にはならない。
データベースに出し入れする際の受け皿となる構造体が1層あるくらいだろ。
そもそもRDBは階層構造そのままぶち込めないし。
311デフォルトの名無しさん
2020/06/27(土) 14:34:40.99ID:Z/pHF8i9312デフォルトの名無しさん
2020/06/27(土) 14:37:58.51ID:Z/pHF8i9313デフォルトの名無しさん
2020/06/27(土) 14:50:29.02ID:1p1mL4Jd 初めに赤字が出たら続きはねーよw
314デフォルトの名無しさん
2020/06/27(土) 15:01:24.90ID:Z/pHF8i9 これオブジェクト指向の善し悪しじゃないよね。
改修発生時に雲の上で決まった無茶な追加仕様にどれだけ耐えられる構造にできるかという話だ。
ただオブジェクト指向は昔ながらの教科書どおりにやると耐えられない構造になりがち。
もちろんオブジェクト指向でなくても発生する。
C言語でも発生する。
そうならないようコーディングの約束事を決めよう。
そうなってないかコードレビューはしっかりやろう。
改修発生時に雲の上で決まった無茶な追加仕様にどれだけ耐えられる構造にできるかという話だ。
ただオブジェクト指向は昔ながらの教科書どおりにやると耐えられない構造になりがち。
もちろんオブジェクト指向でなくても発生する。
C言語でも発生する。
そうならないようコーディングの約束事を決めよう。
そうなってないかコードレビューはしっかりやろう。
315デフォルトの名無しさん
2020/06/27(土) 15:03:08.36ID:kHv6hhb8316デフォルトの名無しさん
2020/06/27(土) 15:04:29.05ID:qJyof1ZF317デフォルトの名無しさん
2020/06/27(土) 15:09:38.92ID:kHv6hhb8 Pythonにアクセス修飾子がないことはググればわかるじゃん
318デフォルトの名無しさん
2020/06/27(土) 15:09:51.10ID:kHv6hhb8 ソースは僕だ!
319デフォルトの名無しさん
2020/06/27(土) 15:10:07.03ID:Z/pHF8i9320デフォルトの名無しさん
2020/06/27(土) 15:10:51.38ID:kHv6hhb8 マヨネーズの君とソースの僕
321デフォルトの名無しさん
2020/06/27(土) 15:12:52.88ID:qJyof1ZF322デフォルトの名無しさん
2020/06/27(土) 15:13:38.77ID:kHv6hhb8 そう言えば日本の業務形態には貧血ドメインの方がよく適合するなんて話があったなあ
貧血って言うと悪い印象があるからシンドメインとかスリムドメインに言い換えて
スリムドメインの方が優れてるんだって風潮がそろそろ出てきても良いと思う
貧血って言うと悪い印象があるからシンドメインとかスリムドメインに言い換えて
スリムドメインの方が優れてるんだって風潮がそろそろ出てきても良いと思う
323デフォルトの名無しさん
2020/06/27(土) 15:14:18.21ID:qJyof1ZF324デフォルトの名無しさん
2020/06/27(土) 15:15:51.79ID:Z/pHF8i9 >>321
それただのポインタだろ
それただのポインタだろ
325デフォルトの名無しさん
2020/06/27(土) 15:18:13.32ID:e0+LQFD/ そもそも、一昔前ならソフトウェアは
製品化して値段を付けて売るって考えがあったから
保守や仕様変更の影響範囲について関心が高かった。
だからオブジェクト指向は必要だったかもしれない
だが現在ではソフトウェアは基本無料が当たり前だし
プロジェクト依頼元の依頼を受けてオーダーメイドで
システムを作るから依頼元だけが金を払ってくれるの
であって
あとはスマホアプリを無料配布して
そのアプリで課金してもらって金を稼ぐみたいな
稼ぎ方だから、ソフトウェア自体に売却する価値はない。
売却する資産価値がないからオブジェクト指向で
保守する価値がない、使い捨てにすればいい。
実際、スマホアプリとかのほとんどが軽微なバグ
とか沢山潜んだままリリースされていて、ずっと
放置されてたりするじゃん。
製品化して値段を付けて売るって考えがあったから
保守や仕様変更の影響範囲について関心が高かった。
だからオブジェクト指向は必要だったかもしれない
だが現在ではソフトウェアは基本無料が当たり前だし
プロジェクト依頼元の依頼を受けてオーダーメイドで
システムを作るから依頼元だけが金を払ってくれるの
であって
あとはスマホアプリを無料配布して
そのアプリで課金してもらって金を稼ぐみたいな
稼ぎ方だから、ソフトウェア自体に売却する価値はない。
売却する資産価値がないからオブジェクト指向で
保守する価値がない、使い捨てにすればいい。
実際、スマホアプリとかのほとんどが軽微なバグ
とか沢山潜んだままリリースされていて、ずっと
放置されてたりするじゃん。
326デフォルトの名無しさん
2020/06/27(土) 15:19:44.46ID:Z/pHF8i9 >>321
ポインタは横の繋がり
上下関係ではない
深い階層化というのは、雲の上で決まった仕様に底辺開発者は意見できないということ。
深い階層化というのは、底辺開発者が受けてるパワハラなど雲の上は知らないということ。
ポインタは横の繋がり
上下関係ではない
深い階層化というのは、雲の上で決まった仕様に底辺開発者は意見できないということ。
深い階層化というのは、底辺開発者が受けてるパワハラなど雲の上は知らないということ。
327デフォルトの名無しさん
2020/06/27(土) 15:20:21.12ID:kHv6hhb8 >>323
では君と僕のカプセル化の定義が異なるだけじゃん
君のカプセル化の定義で僕が言ってることを解釈するからFalseになる
僕が言ってることは僕の定義で解釈したらTrueになる
アクセス修飾子が存在することをカプセル化可能と定義します
よろしくおねがいします
では君と僕のカプセル化の定義が異なるだけじゃん
君のカプセル化の定義で僕が言ってることを解釈するからFalseになる
僕が言ってることは僕の定義で解釈したらTrueになる
アクセス修飾子が存在することをカプセル化可能と定義します
よろしくおねがいします
328デフォルトの名無しさん
2020/06/27(土) 15:23:36.87ID:qJyof1ZF329デフォルトの名無しさん
2020/06/27(土) 15:25:23.02ID:kHv6hhb8330デフォルトの名無しさん
2020/06/27(土) 15:26:25.05ID:kHv6hhb8 カプセル化とはアクセス修飾子でprivateにできることを言います
331デフォルトの名無しさん
2020/06/27(土) 15:28:46.34ID:UrcM2fcl 本当に?
332デフォルトの名無しさん
2020/06/27(土) 15:31:32.87ID:qJyof1ZF333デフォルトの名無しさん
2020/06/27(土) 15:32:44.69ID:qJyof1ZF334デフォルトの名無しさん
2020/06/27(土) 15:40:51.44ID:Z/pHF8i9 >>332
データベースで深い階層化が起こるとすれば、
・データベースの出し入れはストアドプロシージャ経由のみ
・誰かが作ったストアドプロシージャを叩くライブラリ
・末端開発者が見えるのはライブラリのみ
という状況
データベースで深い階層化が起こるとすれば、
・データベースの出し入れはストアドプロシージャ経由のみ
・誰かが作ったストアドプロシージャを叩くライブラリ
・末端開発者が見えるのはライブラリのみ
という状況
335デフォルトの名無しさん
2020/06/27(土) 15:45:38.60ID:kHv6hhb8 >>331
ホントっす
ホントっす
336デフォルトの名無しさん
2020/06/27(土) 15:46:26.65ID:ut+wnsgT ちがうよ
337デフォルトの名無しさん
2020/06/27(土) 15:46:32.04ID:kHv6hhb8338デフォルトの名無しさん
2020/06/27(土) 15:47:10.15ID:kHv6hhb8 >>336
何が違うんですか!?なんでですか?説明してください!
何が違うんですか!?なんでですか?説明してください!
339デフォルトの名無しさん
2020/06/27(土) 15:47:49.36ID:UrcM2fcl 内包してない?
340デフォルトの名無しさん
2020/06/27(土) 15:48:03.17ID:ut+wnsgT >>338
定義が違うから説明しろと言われても困る
定義が違うから説明しろと言われても困る
341デフォルトの名無しさん
2020/06/27(土) 15:48:32.24ID:kHv6hhb8 >>340
説明くらいできるだろハゲ、横着すんな
説明くらいできるだろハゲ、横着すんな
342デフォルトの名無しさん
2020/06/27(土) 15:48:33.70ID:PPBVSkWl ぬるぽ
343デフォルトの名無しさん
2020/06/27(土) 15:52:34.57ID:ut+wnsgT344デフォルトの名無しさん
2020/06/27(土) 15:53:17.57ID:ut+wnsgT345デフォルトの名無しさん
2020/06/27(土) 15:53:25.63ID:kHv6hhb8 >>343
なるほどね、アレルギーが、そういうことね
なるほどね、アレルギーが、そういうことね
346デフォルトの名無しさん
2020/06/27(土) 15:53:46.87ID:kHv6hhb8 恥かいた
347デフォルトの名無しさん
2020/06/27(土) 15:54:37.70ID:kHv6hhb8 安価ミスってんじゃないよ!!
納得した僕が馬鹿みたいでしょうが!!
納得した僕が馬鹿みたいでしょうが!!
348デフォルトの名無しさん
2020/06/27(土) 15:55:00.35ID:ut+wnsgT 馬鹿なんじゃないの?
349デフォルトの名無しさん
2020/06/27(土) 15:56:18.48ID:e0+LQFD/ ああもうめちゃくちゃだよ!
350デフォルトの名無しさん
2020/06/27(土) 16:01:21.18ID:7UzCd1n0 何やってんだおめーら。
そのへんでやめとき。
そのへんでやめとき。
351デフォルトの名無しさん
2020/06/27(土) 16:02:43.02ID:kHv6hhb8 カプセル化には強度があります。
C言語のヘッダやJavaのprivateといった言語機能として
カプセル化できることを強カプセル化と言います
JavaScriptやPythonのように命名規則によって使用者に
知らせるカプセル化のことを弱カプセル化と言うのです。
>>348 僕のこと見直してくれてもいいです
C言語のヘッダやJavaのprivateといった言語機能として
カプセル化できることを強カプセル化と言います
JavaScriptやPythonのように命名規則によって使用者に
知らせるカプセル化のことを弱カプセル化と言うのです。
>>348 僕のこと見直してくれてもいいです
352デフォルトの名無しさん
2020/06/27(土) 17:08:00.05ID:WDOSBdwF カプセル化こそ
すでに時代遅れだったんじゃねーの?
すでに時代遅れだったんじゃねーの?
353デフォルトの名無しさん
2020/06/27(土) 17:38:28.03ID:ut+wnsgT >>351
頭悪そう
頭悪そう
354デフォルトの名無しさん
2020/06/27(土) 17:59:51.27ID:kHv6hhb8 >>353
嘘つき!
嘘つき!
355デフォルトの名無しさん
2020/06/27(土) 18:27:35.27ID:e0+LQFD/ >>351
これまでの話を統合した結論として、
いまはgitなどバージョン管理差分確認ツールや
エディタやIDEの機能が充実してるから
言語機能でカプセル化して
「内部を意識しない」ように隠蔽したり制限するのではなく
開発ツールを駆使して内部を意識はするけど
ソースの仕様変更切り替えに対応しやすくなっている
やり方が主流
開発ツール進化によりカプセル化はその役割を終えた。
継承や抽象クラスやオーバーライドも非推奨
これをやると同じ名前のメソッドが沢山あって
IDEによるプロジェクト内キーワード全文検索を
阻害するから
これまでの話を統合した結論として、
いまはgitなどバージョン管理差分確認ツールや
エディタやIDEの機能が充実してるから
言語機能でカプセル化して
「内部を意識しない」ように隠蔽したり制限するのではなく
開発ツールを駆使して内部を意識はするけど
ソースの仕様変更切り替えに対応しやすくなっている
やり方が主流
開発ツール進化によりカプセル化はその役割を終えた。
継承や抽象クラスやオーバーライドも非推奨
これをやると同じ名前のメソッドが沢山あって
IDEによるプロジェクト内キーワード全文検索を
阻害するから
356デフォルトの名無しさん
2020/06/27(土) 18:38:03.92ID:kHv6hhb8 >>355
カプセル化しなかったら仕様変更がしやすいのか、なるほど
カプセル化しなかったら仕様変更がしやすいのか、なるほど
357デフォルトの名無しさん
2020/06/27(土) 18:45:55.84ID:e0+LQFD/ >>356
読解を間違えています
カプセル化をしないことで仕様変更しやすくなるのではなく
カプセル化を「しなくても」代わりに
開発ツールが充実してるから
ブランチ切り替えや差分確認でスマートな
仕様変更と仕様切り替えが可能です。
だからカプセル化はもう不要になりました。
読解を間違えています
カプセル化をしないことで仕様変更しやすくなるのではなく
カプセル化を「しなくても」代わりに
開発ツールが充実してるから
ブランチ切り替えや差分確認でスマートな
仕様変更と仕様切り替えが可能です。
だからカプセル化はもう不要になりました。
358デフォルトの名無しさん
2020/06/27(土) 18:50:33.85ID:UrcM2fcl それはカプセル化の使用有無に関係ないのでは
359デフォルトの名無しさん
2020/06/27(土) 18:52:34.90ID:kHv6hhb8360デフォルトの名無しさん
2020/06/27(土) 18:54:31.03ID:twDHZDh4361デフォルトの名無しさん
2020/06/27(土) 19:01:29.07ID:7UzCd1n0 IDEの助けがあるとは言え、grepした時の重複は勘弁して欲しい。
どれやねんっていつも思う。
本当にOOPってメンテしやすいんだろうか?
どれやねんっていつも思う。
本当にOOPってメンテしやすいんだろうか?
362デフォルトの名無しさん
2020/06/27(土) 19:03:28.66ID:kHv6hhb8 わかりました、grepを禁止します!
363デフォルトの名無しさん
2020/06/27(土) 19:07:51.73ID:kHv6hhb8 世界的超人気言語はC言語、Java、Pythonと変遷していってるわけだけれども
たしかにカプセル化の機能は時代とともに弱まってるように見える
たしかにカプセル化の機能は時代とともに弱まってるように見える
364デフォルトの名無しさん
2020/06/27(土) 19:10:52.99ID:e0+LQFD/ >>359
そのオブジェクト破壊って一体何を意味してる?
多少オブジェクトが破壊されたところで
アプリは動くし すぐバグになる訳じゃないだろう。
多少経験あるプログラマなら知らないオブジェクトへの
破壊的代入は軽率にはやらないだろうし、
オブジェクトのバックアップ変数作ったり少し考えれば
それくらいやるだろう。
やる時はどうしてもやる時はそうせざるを得ないからやる訳で
破壊するのにもそれなりの理由があるんだよ。
それをprivateとかprotectedするなんて余計なお節介
もいいところ
そして、そういう操作の是非は
gitでコードレビューできるだろ。
そのオブジェクト破壊って一体何を意味してる?
多少オブジェクトが破壊されたところで
アプリは動くし すぐバグになる訳じゃないだろう。
多少経験あるプログラマなら知らないオブジェクトへの
破壊的代入は軽率にはやらないだろうし、
オブジェクトのバックアップ変数作ったり少し考えれば
それくらいやるだろう。
やる時はどうしてもやる時はそうせざるを得ないからやる訳で
破壊するのにもそれなりの理由があるんだよ。
それをprivateとかprotectedするなんて余計なお節介
もいいところ
そして、そういう操作の是非は
gitでコードレビューできるだろ。
365デフォルトの名無しさん
2020/06/27(土) 19:13:53.12ID:npRplKHX カプセル化って一種の安全装置なわけだし、作業性とはトレードオフに
なるわな どちらかを選択するなら当然安全装置を選択するが
なるわな どちらかを選択するなら当然安全装置を選択するが
366デフォルトの名無しさん
2020/06/27(土) 19:26:08.84ID:D2Sdnpa5 使い捨てだの再利用しないだの
素晴らしい含蓄をみずほレベルの巨大案件に適用してれば歴史が変わっていたかも知れない
素晴らしい含蓄をみずほレベルの巨大案件に適用してれば歴史が変わっていたかも知れない
367デフォルトの名無しさん
2020/06/27(土) 19:29:44.84ID:kHv6hhb8 >>364
Javaでいうところのprivateやprotectedの値を書き換えたり参照したりといったことを
オブジェクトの破壊と言ってます
コードレビューできるっていうのはそれをやらないと洗い出せないってことでしょ
カプセル化の機能を使っていれば実装時に気付けることをレビューまで先延ばしにすることによって
得られることがそんなに多いのですかね
Javaでいうところのprivateやprotectedの値を書き換えたり参照したりといったことを
オブジェクトの破壊と言ってます
コードレビューできるっていうのはそれをやらないと洗い出せないってことでしょ
カプセル化の機能を使っていれば実装時に気付けることをレビューまで先延ばしにすることによって
得られることがそんなに多いのですかね
368デフォルトの名無しさん
2020/06/27(土) 19:37:50.49ID:kHv6hhb8 たとえばこの先Pythonが、名前が_から始まるメンバに外からアクセスすると
構文エラーになるようになった場合、動作するプログラムにカプセル化を破壊するような
操作がないことは明白になるのでとても便利だと思います
構文エラーになるようになった場合、動作するプログラムにカプセル化を破壊するような
操作がないことは明白になるのでとても便利だと思います
369デフォルトの名無しさん
2020/06/27(土) 19:42:29.28ID:npRplKHX Pythonぐらいの緩さが一番バランスいい気がする
人気があるのも納得
人気があるのも納得
370デフォルトの名無しさん
2020/06/27(土) 19:44:24.05ID:7UzCd1n0 >>368
dart的な感じ?
dart的な感じ?
371デフォルトの名無しさん
2020/06/27(土) 19:50:55.69ID:kHv6hhb8372デフォルトの名無しさん
2020/06/27(土) 19:53:28.59ID:kHv6hhb8 アクセス修飾子でアクセス制限をかけてしまうと
テストすることさえできなくなります
これがカプセル化の圧倒的な弱点です
テストすることさえできなくなります
これがカプセル化の圧倒的な弱点です
373デフォルトの名無しさん
2020/06/27(土) 19:55:33.60ID:kHv6hhb8 privateではありつつもテスト時などにアクセス可能なバックドアが必要で、それが現代のプログラミング言語には欠けていると思います
374デフォルトの名無しさん
2020/06/27(土) 20:15:27.61ID:7UzCd1n0375デフォルトの名無しさん
2020/06/27(土) 20:17:13.10ID:mehAi5n4 グローバル変数使用禁止の
public staticが唯一無二の解決策だというのにわからん奴がいるな
public staticが唯一無二の解決策だというのにわからん奴がいるな
376デフォルトの名無しさん
2020/06/27(土) 20:34:22.57ID:gS37C1rZ377デフォルトの名無しさん
2020/06/27(土) 20:35:14.22ID:gS37C1rZ >>372
テストするならpublicにすればいいだけ
テストするならpublicにすればいいだけ
378デフォルトの名無しさん
2020/06/27(土) 20:39:11.40ID:e0+LQFD/ まず重要な前提として
システムの仕様変更というのは
appのソースコードの変更だけではない。
データベースの変更や接続してる外部サーバや
ストレージに関連する仕様変更とかもある。
そして、カプセル化を初めとするオブジェクト指向の
設計技法はメモリ内の瞬間的なごく狭い範囲の
事しか考えてない。
外部環境の仕様が変わったり、フェイルオーバーなどの
不具合が起きてシステム全体のデバッグしたり
不具合調査するときに、app層がカプセル化されていたり
オブジェクト指向の技法が使われているほど
それらが邪魔になってやりにくくなるのは
想像に難くないと思う。
仮想化やクラウド化が進んでる最近では
こういう外部環境の隠蔽は逆に困るんだよ。
システムの仕様変更というのは
appのソースコードの変更だけではない。
データベースの変更や接続してる外部サーバや
ストレージに関連する仕様変更とかもある。
そして、カプセル化を初めとするオブジェクト指向の
設計技法はメモリ内の瞬間的なごく狭い範囲の
事しか考えてない。
外部環境の仕様が変わったり、フェイルオーバーなどの
不具合が起きてシステム全体のデバッグしたり
不具合調査するときに、app層がカプセル化されていたり
オブジェクト指向の技法が使われているほど
それらが邪魔になってやりにくくなるのは
想像に難くないと思う。
仮想化やクラウド化が進んでる最近では
こういう外部環境の隠蔽は逆に困るんだよ。
379デフォルトの名無しさん
2020/06/27(土) 20:46:30.95ID:npRplKHX >>378
オブジェクト指向の技法が使われているほど
それらが邪魔になってやりにくくなるのは
逆説的だがこれが利点の一つなんだ 手続き型だと
直したつもりになることが多々あり 新たなバクを生む
時間が多少かかっても形式的に処理するべき
オブジェクト指向の技法が使われているほど
それらが邪魔になってやりにくくなるのは
逆説的だがこれが利点の一つなんだ 手続き型だと
直したつもりになることが多々あり 新たなバクを生む
時間が多少かかっても形式的に処理するべき
380デフォルトの名無しさん
2020/06/27(土) 20:59:08.97ID:kHv6hhb8381デフォルトの名無しさん
2020/06/27(土) 21:00:30.56ID:kHv6hhb8 >>377
publicにしたら別のオブジェクトからアクセスされちゃうじゃん
そのメソッドは内部の状態と深い関わりがあって勝手に呼ばれると困っちゃうの
みたいなことあるじゃんテストのときだけpublicにするのはヤリマンだし
publicにしたら別のオブジェクトからアクセスされちゃうじゃん
そのメソッドは内部の状態と深い関わりがあって勝手に呼ばれると困っちゃうの
みたいなことあるじゃんテストのときだけpublicにするのはヤリマンだし
382デフォルトの名無しさん
2020/06/27(土) 21:03:21.73ID:kHv6hhb8 テストを別オブジェクトにするのが間違ってるのかもわからんね
データと関数をセットにしたものをオブジェクトと呼ぶように
データと関数とテストをセットにした自己メンテナンス完結型のものをアクターと呼ぶことにしようよ!
データと関数をセットにしたものをオブジェクトと呼ぶように
データと関数とテストをセットにした自己メンテナンス完結型のものをアクターと呼ぶことにしようよ!
383デフォルトの名無しさん
2020/06/27(土) 21:13:44.71ID:gS37C1rZ >>380
> テストは全メソッドやるでしょ
全メソッドやるかどうかはその人次第
テストするならpublicにする
それだけの話
テストするということは、そのインターフェースは
外部から使用しても良いということを意味する
テストされてるんだから仕様が変わったりしない
> テストは全メソッドやるでしょ
全メソッドやるかどうかはその人次第
テストするならpublicにする
それだけの話
テストするということは、そのインターフェースは
外部から使用しても良いということを意味する
テストされてるんだから仕様が変わったりしない
384デフォルトの名無しさん
2020/06/27(土) 21:14:19.20ID:gS37C1rZ385デフォルトの名無しさん
2020/06/27(土) 21:32:11.55ID:kHv6hhb8 >>384
いやいや、公開する必要のないメソッドを公開する意味がない
呼ばれちゃいけないタイミングはある、テストしてるかどうかとは関係ない
テストしてないコードはバグってるよ
人の問題で片付けてはいけない
いやいや、公開する必要のないメソッドを公開する意味がない
呼ばれちゃいけないタイミングはある、テストしてるかどうかとは関係ない
テストしてないコードはバグってるよ
人の問題で片付けてはいけない
386デフォルトの名無しさん
2020/06/27(土) 21:33:25.71ID:kHv6hhb8 テストやるときって前提となる状態を作ってからやるじゃん
公開して自由にアクセスできたら前提が成り立たない状態でアクセスされちゃうじゃん
テストエアプかい?
公開して自由にアクセスできたら前提が成り立たない状態でアクセスされちゃうじゃん
テストエアプかい?
387デフォルトの名無しさん
2020/06/27(土) 21:34:14.35ID:kHv6hhb8 ちなみにだけど僕は自動化テストは書いたことがない
書いたことないけど僕はテストにすごく詳しいんだ、わからないことがあったら聞いて
書いたことないけど僕はテストにすごく詳しいんだ、わからないことがあったら聞いて
388デフォルトの名無しさん
2020/06/27(土) 21:36:38.34ID:kHv6hhb8 privateなメソッドにテストが必要ないと思ってる人がいるのが僕は不思議
むしろprivateなメソッドこそテストするべきでpublicなメソッドはただのインターフェース
むしろprivateなメソッドこそテストするべきでpublicなメソッドはただのインターフェース
389デフォルトの名無しさん
2020/06/27(土) 21:38:48.09ID:kHv6hhb8 privateなメソッドにロジックが書かれていてそのテストを内包してるオブジェクトのことをアクターと呼ぶことにしようか
390デフォルトの名無しさん
2020/06/27(土) 21:45:24.83ID:OC6QjUii publicにしたからと言って緩和するだけで結局状態の保持をされて意味不明な動作をするところは変わらんで
staticおじさんの言うことを聞きなさい
staticおじさんの言うことを聞きなさい
391デフォルトの名無しさん
2020/06/27(土) 22:12:18.34ID:gS37C1rZ392デフォルトの名無しさん
2020/06/27(土) 22:15:42.36ID:kHv6hhb8393デフォルトの名無しさん
2020/06/27(土) 22:16:57.07ID:kHv6hhb8 テストエアプか?
テストのためだけにpublicにするなんてありえない
テストのためだけにpublicにするなんてありえない
394デフォルトの名無しさん
2020/06/27(土) 22:18:03.01ID:pxtmQ7+k395デフォルトの名無しさん
2020/06/27(土) 22:19:08.38ID:UrcM2fcl 外部からアクセスするテストをしなくて済むのがprivateだと思います^^
396デフォルトの名無しさん
2020/06/27(土) 22:19:09.22ID:kHv6hhb8397デフォルトの名無しさん
2020/06/27(土) 22:20:26.71ID:gS37C1rZ >>388
テストをするということは、それはインターフェースとして仕様がきっちりしていて
長い期間にわたって変更しない(されにくい)ということなんだよ
インターフェースが適当だったり変わりやすいものは
変わるたびにテストも変えなくてはいけなくなる
つまりテストのメンテナンスのコストが増えてしまう
インターフェースが適当だったり変わりやすいものを作るなという話じゃない
そういうのは作ってもいいがprivateにして、他のpublicメソッドを通して間接的にテストする
privateはテストしなくていいとかテストできないとかじゃなくて
インターフェースが(まだ)明確に決きめずに後回しにできるというメリットが有る
一方テスト可能な段階になったなら、それはインターフェースの仕様が明確に定義されているということ
(明確に定義されてないものをテストなんかできない)
明確に定義されたのならpublicにしていいわけ
テストをするということは、それはインターフェースとして仕様がきっちりしていて
長い期間にわたって変更しない(されにくい)ということなんだよ
インターフェースが適当だったり変わりやすいものは
変わるたびにテストも変えなくてはいけなくなる
つまりテストのメンテナンスのコストが増えてしまう
インターフェースが適当だったり変わりやすいものを作るなという話じゃない
そういうのは作ってもいいがprivateにして、他のpublicメソッドを通して間接的にテストする
privateはテストしなくていいとかテストできないとかじゃなくて
インターフェースが(まだ)明確に決きめずに後回しにできるというメリットが有る
一方テスト可能な段階になったなら、それはインターフェースの仕様が明確に定義されているということ
(明確に定義されてないものをテストなんかできない)
明確に定義されたのならpublicにしていいわけ
398デフォルトの名無しさん
2020/06/27(土) 22:20:30.54ID:nVWlQ22s ジャップにオブジェクト指向は100年早いみたいだな
脳死で全てにpublic staticって書いとけ
脳死で全てにpublic staticって書いとけ
399デフォルトの名無しさん
2020/06/27(土) 22:20:37.43ID:kHv6hhb8400デフォルトの名無しさん
2020/06/27(土) 22:22:06.34ID:gS37C1rZ401デフォルトの名無しさん
2020/06/27(土) 22:22:39.57ID:kHv6hhb8402デフォルトの名無しさん
2020/06/27(土) 22:23:50.09ID:gS37C1rZ403デフォルトの名無しさん
2020/06/27(土) 22:23:52.28ID:gUUFl8tS >>400
じゃあ、全部テストするときは全部publicだね
じゃあ、全部テストするときは全部publicだね
404デフォルトの名無しさん
2020/06/27(土) 22:24:28.59ID:kHv6hhb8 >>400
テストするときは前提の状態を用意してからやるもので
テストは実装が正しいか確認するためにやる
publicにして他のオブジェクトから自由に呼び出して良いですというものとはわけが違う
テストで呼んだから別のところでも呼んでいんだなんて道理は存在しない
テストエアプか?
テストするときは前提の状態を用意してからやるもので
テストは実装が正しいか確認するためにやる
publicにして他のオブジェクトから自由に呼び出して良いですというものとはわけが違う
テストで呼んだから別のところでも呼んでいんだなんて道理は存在しない
テストエアプか?
405デフォルトの名無しさん
2020/06/27(土) 22:25:10.97ID:kHv6hhb8406デフォルトの名無しさん
2020/06/27(土) 22:25:22.83ID:gS37C1rZ >>403
仕様が明確に決まってないようなものは
privateにしてテストをサボることができる
サボると言ってもpublicメソッド経由でテストするわけだが
あくまでメソッド単体でのテストをサボるだけ
仕様が明確に決まってないようなものは
privateにしてテストをサボることができる
サボると言ってもpublicメソッド経由でテストするわけだが
あくまでメソッド単体でのテストをサボるだけ
407デフォルトの名無しさん
2020/06/27(土) 22:25:38.25ID:zbAPoACG >>404
だからどうすんだよ
だからどうすんだよ
408デフォルトの名無しさん
2020/06/27(土) 22:26:14.09ID:gS37C1rZ409デフォルトの名無しさん
2020/06/27(土) 22:27:02.78ID:kHv6hhb8 >>407
そこで、僕に名案があります
テストを同じオブジェクトの中に用意するんです
そうしてデータ、メソッド、テスト、この3つを備えたオブジェクトをアクターと呼ぶことにしましょう
プログラミングパラダイムはアクターが主流の時代に突入します
そこで、僕に名案があります
テストを同じオブジェクトの中に用意するんです
そうしてデータ、メソッド、テスト、この3つを備えたオブジェクトをアクターと呼ぶことにしましょう
プログラミングパラダイムはアクターが主流の時代に突入します
410デフォルトの名無しさん
2020/06/27(土) 22:28:17.85ID:kHv6hhb8411デフォルトの名無しさん
2020/06/27(土) 22:28:55.27ID:gS37C1rZ412デフォルトの名無しさん
2020/06/27(土) 22:30:05.59ID:kHv6hhb8 テストという概念がオブジェクト指向の中にないからこのようなジレンマに陥るのです
そこで、オブジェクトの中にテストを入れてしまおうというのが僕が提唱する新時代の
プログラミングパラダイム、アクター指向です
そこで、オブジェクトの中にテストを入れてしまおうというのが僕が提唱する新時代の
プログラミングパラダイム、アクター指向です
413デフォルトの名無しさん
2020/06/27(土) 22:30:26.61ID:kHv6hhb8 >>411
壊れるに決まってるだろ、いい加減なこと言うなハゲ
壊れるに決まってるだろ、いい加減なこと言うなハゲ
414デフォルトの名無しさん
2020/06/27(土) 22:30:40.41ID:kHv6hhb8 privateなめんなよ
415デフォルトの名無しさん
2020/06/27(土) 22:30:57.83ID:gS37C1rZ >>413
なんだよw根拠言えないのかよw
なんだよw根拠言えないのかよw
416デフォルトの名無しさん
2020/06/27(土) 22:31:24.07ID:kHv6hhb8 >>415
お前が根拠言えよ
お前が根拠言えよ
417デフォルトの名無しさん
2020/06/27(土) 22:31:41.00ID:kHv6hhb8 壊れないことを証明してみせろ
418デフォルトの名無しさん
2020/06/27(土) 22:32:50.72ID:gS37C1rZ 壊れる要因がないので壊れない
419デフォルトの名無しさん
2020/06/27(土) 22:33:18.25ID:kHv6hhb8 早くしろよおら、全部publicにしてプログラム書いてみろよ、ぶち、壊してやるから
420デフォルトの名無しさん
2020/06/27(土) 22:36:21.73ID:kHv6hhb8 アクセス修飾子はテストのために変えるものじゃない
そこに現行のオブジェクト指向の限界がある
そこでオブジェクト内にテストまで用意しましょうというのが新時代のアクター指向
そこに現行のオブジェクト指向の限界がある
そこでオブジェクト内にテストまで用意しましょうというのが新時代のアクター指向
421デフォルトの名無しさん
2020/06/27(土) 22:37:15.69ID:paNjyoZf 現状のオブジェクト指向言語がウンコってことでいいよね
422デフォルトの名無しさん
2020/06/27(土) 22:38:06.59ID:gS37C1rZ > アクセス修飾子はテストのために変えるものじゃない
当たり前だろうw
テストというのは外部からインターフェースの仕様が明確に決まってるからこそできること
外部からのインターフェースの仕様が明確に決まったなら
それはpublicにしてよい
当たり前だろうw
テストというのは外部からインターフェースの仕様が明確に決まってるからこそできること
外部からのインターフェースの仕様が明確に決まったなら
それはpublicにしてよい
423デフォルトの名無しさん
2020/06/27(土) 22:38:47.14ID:kHv6hhb8 >>422
そんなの当たり前だろ
そんなの当たり前だろ
424デフォルトの名無しさん
2020/06/27(土) 22:39:05.28ID:gS37C1rZ だから当たり前の話をしてる
425デフォルトの名無しさん
2020/06/27(土) 22:40:35.80ID:kHv6hhb8 >>421
はい、そう言わざる得ないのが現状です
言語が悪いんじゃないプログラミングパラダイムにまだ進化の余地があると
前向きに捉えるのが良いと僕は思います
アクター指向言語がこれから出てくることを祈ります
はい、そう言わざる得ないのが現状です
言語が悪いんじゃないプログラミングパラダイムにまだ進化の余地があると
前向きに捉えるのが良いと僕は思います
アクター指向言語がこれから出てくることを祈ります
426デフォルトの名無しさん
2020/06/27(土) 22:40:49.92ID:kHv6hhb8 >>424
だから当たり前だろ
だから当たり前だろ
427デフォルトの名無しさん
2020/06/27(土) 22:41:07.23ID:kHv6hhb8 あ・た・り・ま・え
428デフォルトの名無しさん
2020/06/27(土) 22:41:23.91ID:5gWgsM/a え?privateなメソッドをテストしないって正気?
単に現状のオブジェクト指向言語と開発環境がテストのサポートできてないだけだろ
単に現状のオブジェクト指向言語と開発環境がテストのサポートできてないだけだろ
429デフォルトの名無しさん
2020/06/27(土) 22:42:31.56ID:kHv6hhb8 >>428
ねー意味分かんないよねー、ドン引きだよねー
ねー意味分かんないよねー、ドン引きだよねー
430デフォルトの名無しさん
2020/06/27(土) 22:43:30.93ID:UrcM2fcl >>399
リフレクション使ってでもやれって言うときはやりますけど?
そこら辺はルール作ってるはずで設計以前で明言されるべき
private要素に外部からアクセスしまくるようなことを許す設計やルールはどうかと思いますけどね
というか他の読み手が安心感を得るためでもある気がしますね
全部publicなプロダクトがあったとしてそれに新しいクラスやらを追加しろって言われたら神経質にならなければいけないw
逆にアクセス修飾子なしの言語はルールだけでやってるよね、あれ怖いわ
まあだいたいが単純なプロジェクトしかなさそうな言語だけど。。
リフレクション使ってでもやれって言うときはやりますけど?
そこら辺はルール作ってるはずで設計以前で明言されるべき
private要素に外部からアクセスしまくるようなことを許す設計やルールはどうかと思いますけどね
というか他の読み手が安心感を得るためでもある気がしますね
全部publicなプロダクトがあったとしてそれに新しいクラスやらを追加しろって言われたら神経質にならなければいけないw
逆にアクセス修飾子なしの言語はルールだけでやってるよね、あれ怖いわ
まあだいたいが単純なプロジェクトしかなさそうな言語だけど。。
431デフォルトの名無しさん
2020/06/27(土) 22:43:37.12ID:gS37C1rZ privateなメソッドをテストしないんじゃなくて
仕様が明確に固まってないからテストしてもメンテナンスのコストが増えるだけ
そういうのはprivateにしてpublicメソッド経由でテストする
それがやりにくいーっていうなら、そのprivateなメソッドの
仕様を明確に決めればpublicにすることができる
ようするに今やるか後回しにするかの問題でしか無い
仕様が明確に固まってないからテストしてもメンテナンスのコストが増えるだけ
そういうのはprivateにしてpublicメソッド経由でテストする
それがやりにくいーっていうなら、そのprivateなメソッドの
仕様を明確に決めればpublicにすることができる
ようするに今やるか後回しにするかの問題でしか無い
432デフォルトの名無しさん
2020/06/27(土) 22:44:43.36ID:kHv6hhb8433デフォルトの名無しさん
2020/06/27(土) 22:45:21.19ID:qZEydISP >>431
いやいやテストプロジェクトではprivateにアクセスできるってだけでいいでしょ
いやいやテストプロジェクトではprivateにアクセスできるってだけでいいでしょ
434デフォルトの名無しさん
2020/06/27(土) 22:45:36.87ID:kHv6hhb8 >>430
じゃあprivateでもテストすればいんじゃないでしょうか
じゃあprivateでもテストすればいんじゃないでしょうか
435デフォルトの名無しさん
2020/06/27(土) 22:52:10.82ID:kHv6hhb8 テストオブジェクトから呼び出すためだけに
オブジェクト内部の処理をpublicにするのはありえない
publicメソッド経由で呼び出すのは粒度が大きすぎて話にならない
リフレクション使えばテストできるんだからそういう機能を持ったテストライブラリを使うべき
オブジェクト内部の処理をpublicにするのはありえない
publicメソッド経由で呼び出すのは粒度が大きすぎて話にならない
リフレクション使えばテストできるんだからそういう機能を持ったテストライブラリを使うべき
436デフォルトの名無しさん
2020/06/27(土) 22:53:18.84ID:e0+LQFD/ インターフェース仕様にまだ決まってないだとか
確定なんて明確な区切りなんてものは
現実にはない。
まだ確定してなくても仮のものを仮定して
実装はできる。
確定した後にインターフェースを変えたくなったり
ある日根底から覆ったりする。
privateで制限した内容は顧客要求より強い効力を持つの?
だったら凄く有効だよな
でもそうじゃないだろ
確定なんて明確な区切りなんてものは
現実にはない。
まだ確定してなくても仮のものを仮定して
実装はできる。
確定した後にインターフェースを変えたくなったり
ある日根底から覆ったりする。
privateで制限した内容は顧客要求より強い効力を持つの?
だったら凄く有効だよな
でもそうじゃないだろ
437デフォルトの名無しさん
2020/06/27(土) 22:55:59.77ID:kHv6hhb8 リフレクションはオブジェクト指向にとっては黒魔術でしかないので正当なやり方ではない
この問題の本質はオブジェクト指向にテストの概念がないことにある
オブジェクト指向は規模の大きなシステムの品質を担保するために作られたわけだが
現代ではそれにテストも入れるべきなんだよ
データ、メソッド、テストこの3つを内包するオブジェクトを作ることこそが真のオブジェクト指向
この問題の本質はオブジェクト指向にテストの概念がないことにある
オブジェクト指向は規模の大きなシステムの品質を担保するために作られたわけだが
現代ではそれにテストも入れるべきなんだよ
データ、メソッド、テストこの3つを内包するオブジェクトを作ることこそが真のオブジェクト指向
438デフォルトの名無しさん
2020/06/27(土) 22:56:59.64ID:gS37C1rZ439デフォルトの名無しさん
2020/06/27(土) 22:57:06.02ID:UrcM2fcl >>434
メソッドレベルのテストをリフレクション使ってまでやれって言われたことないですけどねw
inoutがテストしなければならないほど複雑になる1つのメソッドを書くことがおかしいし、
粒度が大きすぎてって、それはinoutを整理しきれてない設計がおかしいのでは?
何でも値が入ってきます、全部1つのメソッドで作ってテストしてください、なんて無茶ぶりだとおもいますねw
メソッドレベルのテストをリフレクション使ってまでやれって言われたことないですけどねw
inoutがテストしなければならないほど複雑になる1つのメソッドを書くことがおかしいし、
粒度が大きすぎてって、それはinoutを整理しきれてない設計がおかしいのでは?
何でも値が入ってきます、全部1つのメソッドで作ってテストしてください、なんて無茶ぶりだとおもいますねw
440デフォルトの名無しさん
2020/06/27(土) 22:57:18.00ID:gS37C1rZ >>436
設計したこと無いの?
設計したこと無いの?
441デフォルトの名無しさん
2020/06/27(土) 22:57:58.35ID:kHv6hhb8442デフォルトの名無しさん
2020/06/27(土) 22:58:22.25ID:e0+LQFD/443デフォルトの名無しさん
2020/06/27(土) 23:00:01.68ID:kHv6hhb8444デフォルトの名無しさん
2020/06/27(土) 23:00:03.74ID:8YCrt6Qf privateをテストするしないっていう想定自体が理解できない
privateメソッドなら当然それを呼び出しているpublicなメソッドがあるはずで
そのpublicメソッドのテストに当然privateなメソッドのテストも含まれるはず
よっぽどprivateメソッドで複雑なことしていない限りそのテストで十分だろうし
それでテストしきれないほど複雑なら別のモジュールに定義し直した方がいいだろう
privateメソッドなら当然それを呼び出しているpublicなメソッドがあるはずで
そのpublicメソッドのテストに当然privateなメソッドのテストも含まれるはず
よっぽどprivateメソッドで複雑なことしていない限りそのテストで十分だろうし
それでテストしきれないほど複雑なら別のモジュールに定義し直した方がいいだろう
445デフォルトの名無しさん
2020/06/27(土) 23:02:02.14ID:kHv6hhb8 >>444
それなりに複雑でメソッドを一つずつテストしたいけど
テストのためにオブジェクト分けるなんてイカれてると思うの
だってオブジェクトがテストのためにあるわけじゃないから
テストがオブジェクトのためにあるべきで、そこでですよ
オブジェクト内にテストを内包するのが正しいオブジェクト指向と結論するわけです
それなりに複雑でメソッドを一つずつテストしたいけど
テストのためにオブジェクト分けるなんてイカれてると思うの
だってオブジェクトがテストのためにあるわけじゃないから
テストがオブジェクトのためにあるべきで、そこでですよ
オブジェクト内にテストを内包するのが正しいオブジェクト指向と結論するわけです
446デフォルトの名無しさん
2020/06/27(土) 23:02:14.45ID:gS37C1rZ >>442
顧客によって覆ることが何の関係があるの?
顧客によって覆ることが何の関係があるの?
447デフォルトの名無しさん
2020/06/27(土) 23:02:29.65ID:kHv6hhb8 仕様が覆るのはあたりまえじゃん
それとアクセス修飾子の話は違うわ
それとアクセス修飾子の話は違うわ
448デフォルトの名無しさん
2020/06/27(土) 23:02:36.66ID:gS37C1rZ449デフォルトの名無しさん
2020/06/27(土) 23:03:54.57ID:gS37C1rZ >>445
> それなりに複雑でメソッドを一つずつテストしたいけど
> テストのためにオブジェクト分けるなんてイカれてると思うの
複雑なメソッドは小さくしてください
設計がそもそも間違っています
テストのために小さく分けるのではなく
そもそも複雑なのが問題なのです。
問題を解決すればテスト可能になります。
> それなりに複雑でメソッドを一つずつテストしたいけど
> テストのためにオブジェクト分けるなんてイカれてると思うの
複雑なメソッドは小さくしてください
設計がそもそも間違っています
テストのために小さく分けるのではなく
そもそも複雑なのが問題なのです。
問題を解決すればテスト可能になります。
450デフォルトの名無しさん
2020/06/27(土) 23:03:58.42ID:kHv6hhb8 >>448
だから、そこにジレンマがあるよねって話を最初からしてるつもりっす
だから、そこにジレンマがあるよねって話を最初からしてるつもりっす
451デフォルトの名無しさん
2020/06/27(土) 23:04:46.01ID:/AdLJL3G いや、この問題は言語と開発環境の問題だろ
概念は関係ないよ
visualstudioができちゃえば
できますよ
で終わりな話
概念は関係ないよ
visualstudioができちゃえば
できますよ
で終わりな話
452デフォルトの名無しさん
2020/06/27(土) 23:05:10.21ID:kHv6hhb8453デフォルトの名無しさん
2020/06/27(土) 23:05:23.02ID:UrcM2fcl 逆に聞きたいけどpythonとかアクセス修飾子ない言語で、大規模プロジェクトがあったら、
ルール以外でアクセスはどう統制とってるの?
そういう言語の経験はWebくらいしか知らないから、全体何百万行(ステップ数でも人月でもいい)くらいのコードでこうしてた(る)ってのあったら教えて欲しい
ルール以外でアクセスはどう統制とってるの?
そういう言語の経験はWebくらいしか知らないから、全体何百万行(ステップ数でも人月でもいい)くらいのコードでこうしてた(る)ってのあったら教えて欲しい
454デフォルトの名無しさん
2020/06/27(土) 23:06:53.54ID:gS37C1rZ >>452
なぜできないんですか?
なぜできないんですか?
455デフォルトの名無しさん
2020/06/27(土) 23:07:46.64ID:XQLOkAsO >>454
あいつらサボってるからだろ
あいつらサボってるからだろ
456デフォルトの名無しさん
2020/06/27(土) 23:07:46.82ID:gS37C1rZ 誰でもできることができないなんて、能力がないなぁ
457デフォルトの名無しさん
2020/06/27(土) 23:10:28.90ID:npRplKHX お前らほんとプログラムのことしか知らないのな
品質を改善するときには品質を測るな これがテストの鉄則
タグチメソッドの入門でもよめ
品質を改善するときには品質を測るな これがテストの鉄則
タグチメソッドの入門でもよめ
458デフォルトの名無しさん
2020/06/27(土) 23:12:05.09ID:gS37C1rZ 1.モノを作る前に品質を創れ
2.品質工学は統計ではない
3.科学的思考ではモノは出来ない
4.市場品質はすべて設計できまる
5.完全な設計は試験や検査は不要
6.品質評価はn=1でよい
7.品質を改善するときには品質を測るな
8.評価はあるべき姿を定義して、安定性はSN比で行う
9.直交表で設計の再現性をチェックする(パラメータ設計)
10. システムは複雑でなければ、改善はできない
2.品質工学は統計ではない
3.科学的思考ではモノは出来ない
4.市場品質はすべて設計できまる
5.完全な設計は試験や検査は不要
6.品質評価はn=1でよい
7.品質を改善するときには品質を測るな
8.評価はあるべき姿を定義して、安定性はSN比で行う
9.直交表で設計の再現性をチェックする(パラメータ設計)
10. システムは複雑でなければ、改善はできない
459デフォルトの名無しさん
2020/06/27(土) 23:12:06.00ID:kHv6hhb8 >>457
ありがとー!タグっちゃん!
ありがとー!タグっちゃん!
460デフォルトの名無しさん
2020/06/27(土) 23:13:46.29ID:gS37C1rZ どこから品質の話が出てきたのか知らんが、
品質とテストの話は
> 5.完全な設計は試験や検査は不要
これですかね?
品質とテストの話は
> 5.完全な設計は試験や検査は不要
これですかね?
461デフォルトの名無しさん
2020/06/27(土) 23:19:08.91ID:gS37C1rZ >>458はいくつか日本語の文章に問題があるな
1.モノを作る前に品質を創れ
2.品質工学は統計ではない ×「品質工学は○○である」と言おう
3.科学的思考ではモノは出来ない ×「○○的思考でモノは出来る」と言おう
4.市場品質はすべて設計できまる
5.完全な設計は試験や検査は不要 ×「不完全な設計は試験や検査が必要」と言おう
6.品質評価はn=1でよい
7.品質を改善するときには品質を測るな ×「品質を改善するときには○○をしろ」と言おう
8.評価はあるべき姿を定義して、安定性はSN比で行う
9.直交表で設計の再現性をチェックする(パラメータ設計)
10. システムは複雑でなければ、改善はできない ×「システムは複雑なら、改善ができる」と言おう
こう偉そうなことを言ってるのに、じゃあどうすればいいかを
相手に考えさせるのって、どうなんでしょうかね(苦笑)
1.モノを作る前に品質を創れ
2.品質工学は統計ではない ×「品質工学は○○である」と言おう
3.科学的思考ではモノは出来ない ×「○○的思考でモノは出来る」と言おう
4.市場品質はすべて設計できまる
5.完全な設計は試験や検査は不要 ×「不完全な設計は試験や検査が必要」と言おう
6.品質評価はn=1でよい
7.品質を改善するときには品質を測るな ×「品質を改善するときには○○をしろ」と言おう
8.評価はあるべき姿を定義して、安定性はSN比で行う
9.直交表で設計の再現性をチェックする(パラメータ設計)
10. システムは複雑でなければ、改善はできない ×「システムは複雑なら、改善ができる」と言おう
こう偉そうなことを言ってるのに、じゃあどうすればいいかを
相手に考えさせるのって、どうなんでしょうかね(苦笑)
462デフォルトの名無しさん
2020/06/27(土) 23:24:56.40ID:gS37C1rZ 「品質が欲しければ、品質を測るな!」は
「品質が欲しければ、機能を測って改善しろ!」という意味みたいですな
つまりオブジェクトの品質を上げたければ
テストできるように機能を改善しろということですな
privateメソッドであれば、インターフェースを明確にして
機能に昇格させればpublicになるわけです。
「品質が欲しければ、機能を測って改善しろ!」という意味みたいですな
つまりオブジェクトの品質を上げたければ
テストできるように機能を改善しろということですな
privateメソッドであれば、インターフェースを明確にして
機能に昇格させればpublicになるわけです。
463デフォルトの名無しさん
2020/06/27(土) 23:31:52.99ID:npRplKHX >>462
ホントにタグチメソッド知らなかったのか?
その割には理解が早いな
ようするにバクをなくしたいのだろ?
それならバクがでるかどうかのテストをすることが自体がずれてるんだ
そんなことは最終段階でやることじゃないんだ どうせモグラたたきになる
最初の設計段階で徹底的にいじめ抜け
どれだけ変更に強いかをテストするんだ
品質が欲しければ,機能を測れ これにつきる
ホントにタグチメソッド知らなかったのか?
その割には理解が早いな
ようするにバクをなくしたいのだろ?
それならバクがでるかどうかのテストをすることが自体がずれてるんだ
そんなことは最終段階でやることじゃないんだ どうせモグラたたきになる
最初の設計段階で徹底的にいじめ抜け
どれだけ変更に強いかをテストするんだ
品質が欲しければ,機能を測れ これにつきる
464デフォルトの名無しさん
2020/06/27(土) 23:40:30.32ID:gS37C1rZ465デフォルトの名無しさん
2020/06/27(土) 23:41:10.95ID:ZFnYFbMi 単体テストとどう違うの?
466デフォルトの名無しさん
2020/06/27(土) 23:41:18.54ID:gS37C1rZ467デフォルトの名無しさん
2020/06/27(土) 23:42:26.37ID:gS37C1rZ468デフォルトの名無しさん
2020/06/27(土) 23:43:10.60ID:ZFnYFbMi 単体テストって結合してからテストするの?
469デフォルトの名無しさん
2020/06/27(土) 23:46:52.77ID:ZFnYFbMi 王家秘伝のレシピ教えてやるよ。
#define private public
皆には内緒だぞ。
#define private public
皆には内緒だぞ。
470デフォルトの名無しさん
2020/06/28(日) 01:34:12.55ID:wUTwjqhp >>469
#define ディレクティブを使用して、通常 C および C++ で行うように定数値を宣言することはできません。
C# の定数は、クラスまたは構造体の静的メンバーとして定義することができます。
そのような定数がいくつかある場合は、それを保持するための "Constants" クラスを個別に作成することを検討してください。
#define ディレクティブを使用して、通常 C および C++ で行うように定数値を宣言することはできません。
C# の定数は、クラスまたは構造体の静的メンバーとして定義することができます。
そのような定数がいくつかある場合は、それを保持するための "Constants" クラスを個別に作成することを検討してください。
471デフォルトの名無しさん
2020/06/28(日) 02:01:57.56ID:pODeKu4C privateメソッドの直接テストしたいけど可視性を変えたくない場合は
リフレクションを簡単に使えるようにしてるテストフレームワークだったりライブラリ使えばいい
ちなみにGoやRustはprivateもテストできる仕組み持ってる
リフレクションを簡単に使えるようにしてるテストフレームワークだったりライブラリ使えばいい
ちなみにGoやRustはprivateもテストできる仕組み持ってる
472デフォルトの名無しさん
2020/06/28(日) 05:51:03.49ID:qNzQpEfW >>469
あざーす!国王あざーす!
あざーす!国王あざーす!
473デフォルトの名無しさん
2020/06/28(日) 05:51:56.56ID:qNzQpEfW >>471
ええなー
ええなー
474デフォルトの名無しさん
2020/06/28(日) 09:51:30.71ID:lfkBrldT >>463
ソフトウェアの作り方も知らずにタグチメソッド真に受けたら、
糞みたいな品質のものしかできんぞw
単体テストってのは設計の一部なんだよ。品質テストとは全く異なる。
抽象論でタグチメソッドを適用しようとしてる輩が一番ヤバい。
ソフトウェアの作り方も知らずにタグチメソッド真に受けたら、
糞みたいな品質のものしかできんぞw
単体テストってのは設計の一部なんだよ。品質テストとは全く異なる。
抽象論でタグチメソッドを適用しようとしてる輩が一番ヤバい。
475デフォルトの名無しさん
2020/06/28(日) 10:22:04.23ID:4vfVPlvE なんだミニ四駆のモータに学ぶことでもあんのか?って思ったら
品質100%の更に上の話じゃねーか
現場の単体テストもロクにやらないクソが問題になってるITでそんなもんいらん
品質100%の更に上の話じゃねーか
現場の単体テストもロクにやらないクソが問題になってるITでそんなもんいらん
476デフォルトの名無しさん
2020/06/28(日) 12:40:59.37ID:L5Cpw8A4 中の磁石が強いほどトルクが上がって回転数が下がる
磁力が弱いほどトルクが下がって回転数が上がる
磁力が弱いほどトルクが下がって回転数が上がる
477デフォルトの名無しさん
2020/06/28(日) 13:22:34.10ID:S7usk0qp >>326
わかりやすい
わかりやすい
478デフォルトの名無しさん
2020/06/28(日) 18:21:30.86ID:3Si3AZJb privateのテストってリファクタリングの妨げじゃないのか
479デフォルトの名無しさん
2020/06/28(日) 18:55:54.96ID:nHckGJvd 開発体制が複数の会社でピラミッド状の階層化されてたら指揮系統的に相当厳しいだろうね。
480デフォルトの名無しさん
2020/06/28(日) 19:33:26.78ID:JoVMtTbA Javaの修飾子宣言鬱陶しくてほんと嫌い
481デフォルトの名無しさん
2020/06/29(月) 14:12:08.40ID:EmVrB3rr 明示的な状態管理は、(不可能ではないにせよ)管理すべき状態の量が増えてくると非常に困難になってくるところ、関数型言語の考え方を取り込むことによってその負担を軽減できるのではないかーーという意見もあるようだけど、
このスレの人(カプセル化肯定派・否定派いずれも)としてはどう?
このスレの人(カプセル化肯定派・否定派いずれも)としてはどう?
482デフォルトの名無しさん
2020/06/29(月) 19:41:29.30ID:bVpw4tuk カプセル化の可否はともかく
階層化の有害性についてはこう思います。
例えばディレクトリを階層化のすると
親ディレクトリと子ディレクトリに同じデータを重複格納
する人が出たりしてデータの二重管理が発生
しやすくなると思います。
そのうちどれが正なのか分からなくなります。
あと単純に子供に格納するほどデータのアクセスパスが
長くなってどこにあるのか探し出すのが大変になると
思います。
これはオブジェクトの階層構造でも
JSONなどの構造についても言えることだと思います。
階層化の有害性についてはこう思います。
例えばディレクトリを階層化のすると
親ディレクトリと子ディレクトリに同じデータを重複格納
する人が出たりしてデータの二重管理が発生
しやすくなると思います。
そのうちどれが正なのか分からなくなります。
あと単純に子供に格納するほどデータのアクセスパスが
長くなってどこにあるのか探し出すのが大変になると
思います。
これはオブジェクトの階層構造でも
JSONなどの構造についても言えることだと思います。
483デフォルトの名無しさん
2020/06/29(月) 20:06:40.16ID:cYsf6eW3 プログラムで階層化なんて意識したことないけど問題起こったことない
分野が違うのかな
分野が違うのかな
484デフォルトの名無しさん
2020/06/29(月) 20:18:08.97ID:6d9dL1u1 そう、問題が起こるのはいつも人間関係です
485デフォルトの名無しさん
2020/06/29(月) 20:19:42.34ID:tYVp58Ca つまり、人間関係の問題を持ってきても、技術を否定したことにはならないのです。
486デフォルトの名無しさん
2020/06/29(月) 21:42:10.57ID:P3P3vIj6487デフォルトの名無しさん
2020/06/29(月) 23:35:22.76ID:L39gVdue >>482
そこで挙げている階層化の問題だが、階層化せずフラットに格納すれば解決するのか?
階層化しないということは同じレベルに大量の物が同格に並ぶわけだが、そうなると目的の物を探すのが困難になりすでにあるデータと同じものを重複して格納する危険性があるだろう。
またアクセスパスが長くなるというが、フラットな構造で多数の物を適切に命名しようとすれば階層的な名前付けが役立つはずだが、それすら長くなると忌避するなら場当たり的に短い名前を着けていっていずれ収集が着かなくなるだけでないの?
お前さんが挙げた階層化の問題は階層化の仕方が悪い(下手な)だけで、階層化をしなければ解決するというものではなかろう。
そこで挙げている階層化の問題だが、階層化せずフラットに格納すれば解決するのか?
階層化しないということは同じレベルに大量の物が同格に並ぶわけだが、そうなると目的の物を探すのが困難になりすでにあるデータと同じものを重複して格納する危険性があるだろう。
またアクセスパスが長くなるというが、フラットな構造で多数の物を適切に命名しようとすれば階層的な名前付けが役立つはずだが、それすら長くなると忌避するなら場当たり的に短い名前を着けていっていずれ収集が着かなくなるだけでないの?
お前さんが挙げた階層化の問題は階層化の仕方が悪い(下手な)だけで、階層化をしなければ解決するというものではなかろう。
488デフォルトの名無しさん
2020/06/30(火) 05:33:42.93ID:v2qXZCJh 結局、分類だったり抽象化のやり方がクソってだけの話だろ。
フラットにしようが階層にしようが、クソな分け方したらどうにもならんてだけの話だ。
フラットにしようが階層にしようが、クソな分け方したらどうにもならんてだけの話だ。
489デフォルトの名無しさん
2020/06/30(火) 08:05:51.26ID:GiU27GCt490デフォルトの名無しさん
2020/06/30(火) 08:11:00.58ID:PIU/381m >>486
ぴえ?
ぴえ?
491デフォルトの名無しさん
2020/06/30(火) 10:40:18.75ID:J3IrN4Ey492途中から見た。
2020/06/30(火) 19:35:05.23ID:g7PLkMcM なんか、privateメソッドのテストでもめているけど、なんで。
そもそも、privateメソッドを外部から呼び出してテストしないといけない場面が想像できないのだが。
クラスライブラリのコードを紛失したとか笑えないケースを想定しているの?
そもそも、privateメソッドを外部から呼び出してテストしないといけない場面が想像できないのだが。
クラスライブラリのコードを紛失したとか笑えないケースを想定しているの?
493デフォルトの名無しさん
2020/06/30(火) 19:48:43.49ID:MKfuvp+I gitや自動ビルドツールの存在がなかった時代の
オブジェクト指向技術は淘汰されてもいいんじゃない?
昔はこれらがなかったからカプセル化で神経質に
防御してたけど
今は無理にパッケージを固めてやり取りすることが
なくなって
gitでソースを差分転送して再ビルドする方式に
切り替わった
旧仕様はブランチを切り分けといて復旧が簡単に
なって、仕様変更に対してそこまでビビらなくて良くなった。
それと自作のアプリのオブジェクトで
webからインストールしたライブラリや
フレームワークが自動生成して提供するもの以外で
それほど長時間状態を保持するような巨大なオブジェクト
構造を自作設計して作成することがあるか?
あるとすれば
webのセッションや
オープンワールドやFPSみたいなゲームくらいか
オブジェクト指向技術は淘汰されてもいいんじゃない?
昔はこれらがなかったからカプセル化で神経質に
防御してたけど
今は無理にパッケージを固めてやり取りすることが
なくなって
gitでソースを差分転送して再ビルドする方式に
切り替わった
旧仕様はブランチを切り分けといて復旧が簡単に
なって、仕様変更に対してそこまでビビらなくて良くなった。
それと自作のアプリのオブジェクトで
webからインストールしたライブラリや
フレームワークが自動生成して提供するもの以外で
それほど長時間状態を保持するような巨大なオブジェクト
構造を自作設計して作成することがあるか?
あるとすれば
webのセッションや
オープンワールドやFPSみたいなゲームくらいか
494デフォルトの名無しさん
2020/06/30(火) 20:19:26.97ID:v2qXZCJh 今でもSIerなんかはコード書き換えないことに固執してるから可視範囲に対して神経質なんだよ。
495デフォルトの名無しさん
2020/06/30(火) 20:27:32.13ID:+5DxT57L >>492
それは「テストの時にだけpublicに変えればいいじゃん」か「privateはpublicに内在してるから直接テストする必要ないじゃん」のどっちの意味ですか?
それは「テストの時にだけpublicに変えればいいじゃん」か「privateはpublicに内在してるから直接テストする必要ないじゃん」のどっちの意味ですか?
496デフォルトの名無しさん
2020/06/30(火) 20:58:39.82ID:Ya6sc1A9 >>492
コード紛失してなくても他社開発のをガッチャンコだと手が出せないでしょ。
コード紛失してなくても他社開発のをガッチャンコだと手が出せないでしょ。
497デフォルトの名無しさん
2020/06/30(火) 20:58:42.09ID:ww2Xd+MO × テストの時にだけpublicに変えればいいじゃん
○ テストがやりにくいというのは設計がまずいということ
自然な形でpublicになるような設計を改善すべきだ
○ テストがやりにくいというのは設計がまずいということ
自然な形でpublicになるような設計を改善すべきだ
498デフォルトの名無しさん
2020/06/30(火) 20:59:02.71ID:Ya6sc1A9 小規模なら問題ない
499デフォルトの名無しさん
2020/06/30(火) 21:38:14.42ID:BIUXizBX 他社のコードをテストすんの?
500デフォルトの名無しさん
2020/06/30(火) 22:07:21.34ID:GiU27GCt >>497
はぁ?バカはレスすんなよ
はぁ?バカはレスすんなよ
501デフォルトの名無しさん
2020/06/30(火) 22:42:13.84ID:zKRJDZmr >>499
そりゃ結合試験はするだろ
そりゃ結合試験はするだろ
502デフォルトの名無しさん
2020/06/30(火) 23:23:26.17ID:BIUXizBX >>501
結合試験時に他社コードのprivateメソッドを態々呼出してテストすんの?
結合試験時に他社コードのprivateメソッドを態々呼出してテストすんの?
503途中から見た。
2020/07/01(水) 00:09:32.11ID:vgPSMoJs >>495
よくわからないが...強いて言うなら後者?
第一、クラスって実装者が責任を持ってテストするものだろう。
なんで、privateで定義されたものをpublicにして呼び出そうとするのかも、正直、わからない。
ブラックボックステストでもしたいの?
まぁ、ブラックボックステストってprivateメソッドを呼び出せば成立するかというと、違うと思うけど。
正直、何がしたいのかわからなさすぎて困惑している。
よくわからないが...強いて言うなら後者?
第一、クラスって実装者が責任を持ってテストするものだろう。
なんで、privateで定義されたものをpublicにして呼び出そうとするのかも、正直、わからない。
ブラックボックステストでもしたいの?
まぁ、ブラックボックステストってprivateメソッドを呼び出せば成立するかというと、違うと思うけど。
正直、何がしたいのかわからなさすぎて困惑している。
504デフォルトの名無しさん
2020/07/01(水) 00:11:23.37ID:Dh09feZF >第一、クラスって実装者が責任を持ってテストするものだろう。
これが守られてりゃこのスレみたいな議論は起こらんわ。
これが守られてりゃこのスレみたいな議論は起こらんわ。
505デフォルトの名無しさん
2020/07/01(水) 00:22:36.05ID:dTufBNXb 守るも何もクラスに不具合があれば実装者の責任だろ
って言うのが通用しないのか?
って言うのが通用しないのか?
506デフォルトの名無しさん
2020/07/01(水) 00:26:31.70ID:Dh09feZF 責任といってももういない奴に責任は取れんわな。
507デフォルトの名無しさん
2020/07/01(水) 00:33:27.93ID:XAYXSYxH 客先に納めたプログラムを客先が勝手に変更したら責任は外れる契約になってると思う
これは弊社の納めたプログラムではありませんってなるから
社内で引き継いだなら文句を言うのは自由だが任された者がなんとかしろの精神だろ
これは弊社の納めたプログラムではありませんってなるから
社内で引き継いだなら文句を言うのは自由だが任された者がなんとかしろの精神だろ
508デフォルトの名無しさん
2020/07/01(水) 00:43:31.96ID:Dh09feZF クラスごとにしっかりテストがあって
引き継ぎがしっかりされる職場ばかりなら何の問題もないだろうね。
とても幸せな世界でいいですね。
引き継ぎがしっかりされる職場ばかりなら何の問題もないだろうね。
とても幸せな世界でいいですね。
509デフォルトの名無しさん
2020/07/01(水) 01:04:03.02ID:Ke5amsYp まだ続いてたか
結局問題は出来の悪いモジュールをどうするかって話だろ
結局問題は出来の悪いモジュールをどうするかって話だろ
510デフォルトの名無しさん
2020/07/01(水) 01:36:00.07ID:bx11ZQ99 違うよ
visualstudioがテストプロジェクトでprivateをpublicみたいに呼べるようにするだけ
visualstudioがテストプロジェクトでprivateをpublicみたいに呼べるようにするだけ
511デフォルトの名無しさん
2020/07/01(水) 06:19:16.09ID:y/Wgtnem >>503
privateを呼び出す必要があるってのはUnit Testの時で、実装者とテスターが同一人物かどうかは関係ないよ。
オブジェクト指向に限らずテスト理論の話になっちゃうんだけど、プロジェクトや規格で指定されるUnit Testの種類によってはpublic経由でprivate呼び出してたら組合せ爆発してテストドライバやスタブの開発やレビューだけで多大な工数が必要になってやってられなくなる。
なので十分に単純化されたprivateを含めて関数毎にテストする必要が出てくるのよ。
privateを呼び出す必要があるってのはUnit Testの時で、実装者とテスターが同一人物かどうかは関係ないよ。
オブジェクト指向に限らずテスト理論の話になっちゃうんだけど、プロジェクトや規格で指定されるUnit Testの種類によってはpublic経由でprivate呼び出してたら組合せ爆発してテストドライバやスタブの開発やレビューだけで多大な工数が必要になってやってられなくなる。
なので十分に単純化されたprivateを含めて関数毎にテストする必要が出てくるのよ。
512デフォルトの名無しさん
2020/07/01(水) 06:46:59.11ID:5jdJ/dE3513デフォルトの名無しさん
2020/07/01(水) 06:53:14.54ID:lozEWamw >>511
> public経由でprivate呼び出してたら組合せ爆発してテストドライバやスタブの開発やレビューだけで多大な工数が必要になってやってられなくなる。
そういうことだよね。だからそれはpublicメソッドが行ってる機能が多すぎるわけで
複数のpublicメソッドに分解するわけ。これが設計。
適切な関数の行数って思ったより短いものだから。
俺の場合、一部のcaseテーブルのようなものを除いてロジックと呼べるようなものがあるコードは
長いもので1関数30行〜40行程度半分以上は10行程度だよ
> public経由でprivate呼び出してたら組合せ爆発してテストドライバやスタブの開発やレビューだけで多大な工数が必要になってやってられなくなる。
そういうことだよね。だからそれはpublicメソッドが行ってる機能が多すぎるわけで
複数のpublicメソッドに分解するわけ。これが設計。
適切な関数の行数って思ったより短いものだから。
俺の場合、一部のcaseテーブルのようなものを除いてロジックと呼べるようなものがあるコードは
長いもので1関数30行〜40行程度半分以上は10行程度だよ
514デフォルトの名無しさん
2020/07/01(水) 08:23:11.98ID:y4QPMVjI >>512
何時何分何秒地球が何周回ったときに言いましたかーみたいな煽りだな
何時何分何秒地球が何周回ったときに言いましたかーみたいな煽りだな
515デフォルトの名無しさん
2020/07/01(水) 08:27:13.77ID:3Re1TFuk516途中から見た。
2020/07/01(水) 11:10:06.09ID:LiVkSFt2 結合テストと総合テストって同じ意味なのか?
517デフォルトの名無しさん
2020/07/01(水) 12:14:34.41ID:hgyYQ8XK 総合テストって検収テストと同じじゃね?
518デフォルトの名無しさん
2020/07/01(水) 12:24:10.62ID:wljUBRxY テストの呼び方はプロジェクトによって違うからなんとも言えんなぁ
519途中から見た。
2020/07/01(水) 12:36:28.97ID:LiVkSFt2 なんというか...コミュニケーションがまともにとれていないのでは?
恐らく、他人の作ったライブラリに対して単体テストをお前はやるのか?という意図で聞いた質問に、結合試験はするだろと回答したり、
結合試験と総合試験という字面で見ると似ているけど全然違う話を混在させたり、
似ているようで関係のない話を持ち出して混沌としているな。
語りたい事の本質が行方不明になっているように見える。
恐らく、他人の作ったライブラリに対して単体テストをお前はやるのか?という意図で聞いた質問に、結合試験はするだろと回答したり、
結合試験と総合試験という字面で見ると似ているけど全然違う話を混在させたり、
似ているようで関係のない話を持ち出して混沌としているな。
語りたい事の本質が行方不明になっているように見える。
520デフォルトの名無しさん
2020/07/01(水) 14:20:36.35ID:JqIYLyXt >>512は総合じゃなく統合って書いてるぞ
結合テストのことを統合テストと呼ぶところもある
結合の度合いによって結合、統合、総合とそれぞれ分けてるところもある
単なる読み間違いなのか結合 = 統合の意味で使ってるのかは知らんけど
結合テストのことを統合テストと呼ぶところもある
結合の度合いによって結合、統合、総合とそれぞれ分けてるところもある
単なる読み間違いなのか結合 = 統合の意味で使ってるのかは知らんけど
521途中から見た。
2020/07/01(水) 14:54:20.92ID:LiVkSFt2 うわっ!恥ずかしいミスをしてたのは自分だったか。あとで、読み直す...。
522デフォルトの名無しさん
2020/07/01(水) 17:50:33.35ID:1PwA88RR visualstudioのテストプロジェクトが不甲斐ないってだけやし
523デフォルトの名無しさん
2020/07/02(木) 19:42:17.69ID:84e/i8uV privateメソッドテストするとか正気?
テストしなくてよくするためのprivateだろ
テストしなくてよくするためのprivateだろ
524デフォルトの名無しさん
2020/07/02(木) 19:49:51.80ID:iX514c6x テストする必要があるというのは
全部書き直した方がましということだが
全部書き直した方がましということだが
525デフォルトの名無しさん
2020/07/02(木) 20:08:44.37ID:/yt09sjO526デフォルトの名無しさん
2020/07/02(木) 20:10:40.42ID:/yt09sjO マイクロソフトに頼らんで独自にテストプロジェクト作ってるような会社はできてんで
visualstudioの都合でテストやりたくないって言ってるだけだろクズども
visualstudioの都合でテストやりたくないって言ってるだけだろクズども
527デフォルトの名無しさん
2020/07/02(木) 20:46:21.86ID:Vurtjy2V 関数どころか変数に至るまで一つ一つ丁寧に検査してましたわ。
528デフォルトの名無しさん
2020/07/02(木) 21:29:57.44ID:lIo9GiA1 >>525
どんだけ巨大なクラスでも全部privateだと外から一切呼び出せないデッドコードになるのでテストする意味さえないだろ。
どんだけ巨大なクラスでも全部privateだと外から一切呼び出せないデッドコードになるのでテストする意味さえないだろ。
529デフォルトの名無しさん
2020/07/02(木) 21:35:43.34ID:UKbwg08G >>528
せやかてpublic通してたら結合テストじゃんw
せやかてpublic通してたら結合テストじゃんw
530デフォルトの名無しさん
2020/07/02(木) 21:36:02.64ID:UKbwg08G unit testの意味わかっとんのけ?
531デフォルトの名無しさん
2020/07/02(木) 21:37:29.20ID:7zBU/W9S プロジェクトによって違ってたなあ
532デフォルトの名無しさん
2020/07/02(木) 21:40:09.15ID:UKbwg08G533デフォルトの名無しさん
2020/07/02(木) 22:14:17.02ID:/yt09sjO >>528
Form1とかそんな感じじゃん
Form1とかそんな感じじゃん
534デフォルトの名無しさん
2020/07/03(金) 07:01:01.95ID:Ul5hp/bW >>525
誰も使わんからテスト不要だね
誰も使わんからテスト不要だね
535デフォルトの名無しさん
2020/07/03(金) 08:34:55.79ID:zR3byV+3 >>532
それは珍しいな
それは珍しいな
536デフォルトの名無しさん
2020/07/03(金) 08:56:10.03ID:N+TCe3uh これは酷い。RFC 3439はネットワークの仕様の話であってオブジェクト志向なんか
一切関係ないし、プログラミングの話でもない。
偏差値が低い学校でだけ教えてた事実なんてないしアメリカの大規模システムは
全部OOでカプセル化が基本。
的外れすぎて開いた口が塞がらない。これ書いた人間が全く一切わかってないのはよくわかった。
一切関係ないし、プログラミングの話でもない。
偏差値が低い学校でだけ教えてた事実なんてないしアメリカの大規模システムは
全部OOでカプセル化が基本。
的外れすぎて開いた口が塞がらない。これ書いた人間が全く一切わかってないのはよくわかった。
537デフォルトの名無しさん
2020/07/03(金) 09:22:53.27ID:r9jTvXIP >>536
わざとバカなことを言って他の人が本気で反論や議論してくるのを笑ってる可能性もゼロではないが、まあ単に本物のバカという可能性のが高いと思う
わざとバカなことを言って他の人が本気で反論や議論してくるのを笑ってる可能性もゼロではないが、まあ単に本物のバカという可能性のが高いと思う
538デフォルトの名無しさん
2020/07/03(金) 10:20:55.42ID:N+TCe3uh >>537
本気感が凄いね。反論とかしようがない1から10まで間違ってるレベルだし。
本気感が凄いね。反論とかしようがない1から10まで間違ってるレベルだし。
539デフォルトの名無しさん
2020/07/03(金) 10:22:52.04ID:N+TCe3uh こんなんでもRFC確認する人なんてほとんどいないだろうし、クラウドがあるじゃないですか!
のレベルの日本ではショーンK的に通用しそうというか、結構このスレでも通用してるのがおっかない。
のレベルの日本ではショーンK的に通用しそうというか、結構このスレでも通用してるのがおっかない。
540デフォルトの名無しさん
2020/07/03(金) 10:25:42.60ID:lDWf2b6S Javaで外クラスから内クラスのprivateメンバが見れるのはなぜですか?
超論理的思考によるとどう考えても理論に欠陥があり矛盾してる。
みなさんはこのJavaにおけるクラス体系をおかしいと思いながら割りきって使ってるのですよね?
超論理的思考によるとどう考えても理論に欠陥があり矛盾してる。
みなさんはこのJavaにおけるクラス体系をおかしいと思いながら割りきって使ってるのですよね?
541デフォルトの名無しさん
2020/07/03(金) 10:27:37.08ID:N+TCe3uh 単に道具だから自分で考えて必要なら使えば良い訳で。
カプセル化ってのはつまり部署ごとにお前のところはお前で責任を持て、
お前が変えたからって他の部署に仕事をさせるな、ということだから、
それができてればなんでも良い。
カプセル化ってのはつまり部署ごとにお前のところはお前で責任を持て、
お前が変えたからって他の部署に仕事をさせるな、ということだから、
それができてればなんでも良い。
542デフォルトの名無しさん
2020/07/03(金) 11:40:51.40ID:x82j4VqA 複数の開発会社が絡む大規模案件と
一社開発や個人開発の小規模案件を
ゴッチャゴチャにして同列で語り合うから、話が噛み合わないし、話が終わらないんよ。
一社開発や個人開発の小規模案件を
ゴッチャゴチャにして同列で語り合うから、話が噛み合わないし、話が終わらないんよ。
543デフォルトの名無しさん
2020/07/03(金) 11:47:43.16ID:Gy+Up1+B544デフォルトの名無しさん
2020/07/03(金) 11:51:37.50ID:uIgOlo/V545デフォルトの名無しさん
2020/07/03(金) 11:53:31.15ID:N+TCe3uh そもそもOOとかは大規模開発するために出てきた手法だから個人で小さいもの
作ってるなら関数でもスパゲッティでも本人わかってりゃいいわけだし、昔は
関数でも部署ごとで話し合ってちゃんとやってたけど、どうしても直接アクセスして
変更の際ぶっ壊れるようなものを作るやつが出るから、じゃあもう見せなきゃそういう
事態は起こらないということで実際それはうまくいってる。
個人のソフトとかは好きにすれば良いし、好きにできるようになってるんだから
それぞれ道具を自分の必要に応じて使って勝手にやれば良い。
作ってるなら関数でもスパゲッティでも本人わかってりゃいいわけだし、昔は
関数でも部署ごとで話し合ってちゃんとやってたけど、どうしても直接アクセスして
変更の際ぶっ壊れるようなものを作るやつが出るから、じゃあもう見せなきゃそういう
事態は起こらないということで実際それはうまくいってる。
個人のソフトとかは好きにすれば良いし、好きにできるようになってるんだから
それぞれ道具を自分の必要に応じて使って勝手にやれば良い。
546デフォルトの名無しさん
2020/07/03(金) 11:59:07.38ID:Gy+Up1+B >>544
「privateはxunit testingしなくていい」と言われる理由はそこだ
他のクラスとの関わりとして必要な仕様は非privateメンバのみに着目すればいい
publicメンバの振る舞いが変わらずすべてのテストをパスできるならprivateがどう変更されようが他のクラスからは関係ないからな
「privateはxunit testingしなくていい」と言われる理由はそこだ
他のクラスとの関わりとして必要な仕様は非privateメンバのみに着目すればいい
publicメンバの振る舞いが変わらずすべてのテストをパスできるならprivateがどう変更されようが他のクラスからは関係ないからな
547デフォルトの名無しさん
2020/07/03(金) 12:07:31.88ID:uIgOlo/V つまりprivateをテストするってことは仕様が明確になってるわけで
publicにしても問題ないってことだよね
publicにしても問題ないってことだよね
548デフォルトの名無しさん
2020/07/03(金) 12:07:34.57ID:Gy+Up1+B 勢いで書いたから非privateとpublicがごっちゃになってるけどこの手の話題でpublicと書いてあったら全部非privateと読み替えて下さい
549デフォルトの名無しさん
2020/07/03(金) 12:10:41.37ID:BB9T+E2r >>540
超論理的思考によるとって、論理を超えた思考なんかされたって会話にならないから、論理的思考をした上で疑問があれば相談してくれ。
超論理的思考によるとって、論理を超えた思考なんかされたって会話にならないから、論理的思考をした上で疑問があれば相談してくれ。
550デフォルトの名無しさん
2020/07/03(金) 12:16:49.80ID:N+TCe3uh Privateをテストするかどうかはプロジェクトごとのテストのやり方次第だし、
なんのテストかにもよるわけで。
デベロッパーテストなら当然するだろうし、リグレッションテストで普通は
プライベートメソッドをテストしないだろう。
その辺はカプセル化とかOOとかはあまり関係の無い話。
なんのテストかにもよるわけで。
デベロッパーテストなら当然するだろうし、リグレッションテストで普通は
プライベートメソッドをテストしないだろう。
その辺はカプセル化とかOOとかはあまり関係の無い話。
551デフォルトの名無しさん
2020/07/03(金) 12:22:55.88ID:hDsckVNf privateもテストしろよハゲ
552デフォルトの名無しさん
2020/07/03(金) 12:26:06.83ID:sqXfkC+n privateをpublicにしてもいいよねって言ってるやつは、改修で命名とかしたことないんかな
553デフォルトの名無しさん
2020/07/03(金) 12:26:36.41ID:hDsckVNf どこの現場でも通じないトンデモ理論を前面に出して話してんじゃねーぞガイジ
554デフォルトの名無しさん
2020/07/03(金) 12:29:48.69ID:Gy+Up1+B >>551
クラスの仕様変更でpublicになったときに追加すればいい
極端な話、複数のpublicメンバの中でprivateAとprivateBが使われてて各privateの挙動は実装者の想定と実は違ったとしてもすべてのpublicメンバの挙動が仕様通りなら(クラス仕様変更して変なバグを引く羽目になるまで)なんの問題もない
その時対処する事案
クラスの仕様変更でpublicになったときに追加すればいい
極端な話、複数のpublicメンバの中でprivateAとprivateBが使われてて各privateの挙動は実装者の想定と実は違ったとしてもすべてのpublicメンバの挙動が仕様通りなら(クラス仕様変更して変なバグを引く羽目になるまで)なんの問題もない
その時対処する事案
555デフォルトの名無しさん
2020/07/03(金) 12:55:27.30ID:MMMvRh6C privateな状態を確認するテストのがテスト数が減る。
二つのpublicなメソッドの関連をテストする場合、
n*m になるが
状態が k 個の場合、 (n + m)*k になるわけだよ。
無理にpublicだけのテストを書くことがどれだけアホか。
二つのpublicなメソッドの関連をテストする場合、
n*m になるが
状態が k 個の場合、 (n + m)*k になるわけだよ。
無理にpublicだけのテストを書くことがどれだけアホか。
556デフォルトの名無しさん
2020/07/03(金) 13:00:40.80ID:lDWf2b6S Javaで外クラスから内クラスのprivateメンバが見れるのはなぜですか?
論理的思考によるとどう考えても理論に欠陥があり矛盾してる。
みなさんはこのJavaにおけるクラス体系をおかしいと思いながら割りきって使ってるのですよね?
論理的思考によるとどう考えても理論に欠陥があり矛盾してる。
みなさんはこのJavaにおけるクラス体系をおかしいと思いながら割りきって使ってるのですよね?
557デフォルトの名無しさん
2020/07/03(金) 13:19:27.55ID:Gy+Up1+B >>555
privateテストでテスト数減るならその方がいいのは自分も同意
誤 privateはテストしなければならない
誤 privateはテストしてはならない
正 必要なテストだけ簡単になるように書けば良い
privateテストでテスト数減るならその方がいいのは自分も同意
誤 privateはテストしなければならない
誤 privateはテストしてはならない
正 必要なテストだけ簡単になるように書けば良い
558デフォルトの名無しさん
2020/07/03(金) 13:48:21.04ID:BB9T+E2r559デフォルトの名無しさん
2020/07/03(金) 14:48:27.68ID:lDWf2b6S560デフォルトの名無しさん
2020/07/03(金) 15:31:34.78ID:/F47has6 >>525
もしかして 神オブジェクト?
もしかして 神オブジェクト?
561デフォルトの名無しさん
2020/07/03(金) 15:33:00.38ID:/F47has6 よく見たら全部privateか。
...いや、そんなの誰が呼ぶんだ。
...いや、そんなの誰が呼ぶんだ。
562デフォルトの名無しさん
2020/07/03(金) 15:36:50.41ID:FAOrvW1R しらんがな、言ったやつがコードサンプルでも出さなきゃ説明力足りてないから分からんだろ
外部クラスがどうのとか言ってるやつもな。Javaの外部内部の関係も理解が曖昧なんだろ
外部クラスがどうのとか言ってるやつもな。Javaの外部内部の関係も理解が曖昧なんだろ
563デフォルトの名無しさん
2020/07/03(金) 16:46:44.22ID:q5wbDGG6 Javaって修飾子付けないとpackage privateがデフォルトだからその事言ってんじゃね?
package privateとは言い換えればpakage内publicと同じだから
package privateとは言い換えればpakage内publicと同じだから
564デフォルトの名無しさん
2020/07/03(金) 16:51:38.12ID:36TwtcUk じゃあpimplで。
565デフォルトの名無しさん
2020/07/03(金) 16:55:37.72ID:hDsckVNf566デフォルトの名無しさん
2020/07/03(金) 16:58:29.95ID:36TwtcUk 弊社はC2カバレッジ100%に満たないものは出荷できませんけどね。
567デフォルトの名無しさん
2020/07/03(金) 17:19:33.24ID:Gy+Up1+B c2の100%は分野次第だがwebや基幹程度なら無駄と欺瞞で逆に信用できない
568デフォルトの名無しさん
2020/07/03(金) 17:47:09.01ID:DQKehNsV それな
569デフォルトの名無しさん
2020/07/03(金) 19:19:16.44ID:TUVANe+h >>566
普通そうだよね
普通そうだよね
570デフォルトの名無しさん
2020/07/03(金) 19:53:44.94ID:FArQoHTp 特に組み込みはC2カバレッジが常識なんだけど、ISO26262では関数カバレッジでOKという不思議。
571デフォルトの名無しさん
2020/07/03(金) 20:32:31.27ID:Gy+Up1+B572デフォルトの名無しさん
2020/07/03(金) 21:06:04.59ID:DQKehNsV あー、ここ組み込みとかのやつらが多いのか!納得だわ
573デフォルトの名無しさん
2020/07/04(土) 03:14:27.24ID:1AXxY7r6 >>559
そりゃインナークラスは親クラスのメンバーなんだから
親クラスから見えるのは当たり前。
巨大クラスを作ってその中にインナークラスが大量にあるような
コードならそれはカプセル化できてない。Java使ったから自動的に
カプセル化できるものでも適切なOOの設計になるわけでもない。
それらがやりやすいような言語なだけ。
適切に使えば、インナークラスを使わなかった場合パブリックで
メンバーにアクセスさせなければいけないのに対して、インナークラスの
メンバーはアウタークラス以外には見えないわけだから、よりカプセル化は
進んでいる。
そりゃインナークラスは親クラスのメンバーなんだから
親クラスから見えるのは当たり前。
巨大クラスを作ってその中にインナークラスが大量にあるような
コードならそれはカプセル化できてない。Java使ったから自動的に
カプセル化できるものでも適切なOOの設計になるわけでもない。
それらがやりやすいような言語なだけ。
適切に使えば、インナークラスを使わなかった場合パブリックで
メンバーにアクセスさせなければいけないのに対して、インナークラスの
メンバーはアウタークラス以外には見えないわけだから、よりカプセル化は
進んでいる。
574デフォルトの名無しさん
2020/07/04(土) 03:31:41.97ID:1AXxY7r6 親クラスは不適切だった。インナークラスはアウタークラスのメンバーなんだから
メンバーを見られるのは当たり前。
メンバーを見られるのは当たり前。
575デフォルトの名無しさん
2020/07/04(土) 08:51:34.07ID:+L2cGNSv >>572
組み込み開発やってるけど、ちゃんと最先端の勉強をしている人はオブジェクト指向理解しているよ(別にOOP自体は普及しきったノウハウだが)。
言語はC/C++言語ほぼ一択だけど。(他はRustくらいだが、まだ普及しない)
まぁ、WEBやアプリ開発等、我々から見て抽象レイヤーで使われるノウハウを軽視するおじさん上司も多いし、組み込みに残念なプログラマーが多いことは否定しないけど。
組み込み開発やってるけど、ちゃんと最先端の勉強をしている人はオブジェクト指向理解しているよ(別にOOP自体は普及しきったノウハウだが)。
言語はC/C++言語ほぼ一択だけど。(他はRustくらいだが、まだ普及しない)
まぁ、WEBやアプリ開発等、我々から見て抽象レイヤーで使われるノウハウを軽視するおじさん上司も多いし、組み込みに残念なプログラマーが多いことは否定しないけど。
576デフォルトの名無しさん
2020/07/04(土) 09:02:21.50ID:+L2cGNSv577デフォルトの名無しさん
2020/07/04(土) 10:13:15.22ID:6t8LAACC578デフォルトの名無しさん
2020/07/04(土) 10:19:47.88ID:+L2cGNSv 話の流れからして、テストのためにpublicにしろに読み取れたけど、ミスリード?
まぁ、そんな馬鹿な話、あるわけねーか。
まぁ、そんな馬鹿な話、あるわけねーか。
579デフォルトの名無しさん
2020/07/04(土) 10:30:23.87ID:xLCX+W2/580デフォルトの名無しさん
2020/07/04(土) 10:45:14.19ID:MjvraXl0 草、どんな立場だよw
581デフォルトの名無しさん
2020/07/04(土) 11:02:29.17ID:pmIasW6W publicにしなくてもリフレクション使ったりすればええんやで
privateだからテストしないなんてプログラマとしてありえない
privateだからテストしないなんてプログラマとしてありえない
582デフォルトの名無しさん
2020/07/04(土) 11:03:03.13ID:pmIasW6W C2 100%は新人でも最低ライン
583デフォルトの名無しさん
2020/07/04(土) 11:06:53.34ID:pmIasW6W テストの仕方を知らない教えない会社があるんだなー
584デフォルトの名無しさん
2020/07/04(土) 11:08:56.73ID:M3d71N9d >>576
> カバレッジテストとアクセス修飾子って関係あるの?
当然関係ないよ。(ここらへんで関係があるとか言ってるのはアホからだ無視していい。)
privateになってようが、それはpublic経由でテストするのだから
カバレッジは変わらない
テストのしやすさが変わるだけ。もしprivateのままだとテストしづらいなら
そのprivateの仕様を明確にしてpublicにして問題ないような設計に変えるだけのこと
> カバレッジテストとアクセス修飾子って関係あるの?
当然関係ないよ。(ここらへんで関係があるとか言ってるのはアホからだ無視していい。)
privateになってようが、それはpublic経由でテストするのだから
カバレッジは変わらない
テストのしやすさが変わるだけ。もしprivateのままだとテストしづらいなら
そのprivateの仕様を明確にしてpublicにして問題ないような設計に変えるだけのこと
585デフォルトの名無しさん
2020/07/04(土) 11:13:54.87ID:pmIasW6W >>584
publicにしないとテストできないってどんな言語?
privateのままテストしたらええやんけ
unit testは最小単位でテストすることでテストのコストを
最小化するものだからpublic経由でprivateなメソッド呼び出してたら
unit testの意味をわかってないアホの極みだしテストのためだけにpublicにするよう
設計に手をいれるのは本末転倒
publicにしないとテストできないってどんな言語?
privateのままテストしたらええやんけ
unit testは最小単位でテストすることでテストのコストを
最小化するものだからpublic経由でprivateなメソッド呼び出してたら
unit testの意味をわかってないアホの極みだしテストのためだけにpublicにするよう
設計に手をいれるのは本末転倒
586デフォルトの名無しさん
2020/07/04(土) 11:14:51.95ID:9ghyGMpS とある大手家電メーカー勤めだが、以前までC2カバレッジ必須でやってたんだけど、色々な計測の結果じつはユニットテストでカバレッジに時間かけるよりシステムテストに時間かけたほうが品質が上がるという結果が出てからはユニットテスト必須じゃなくなったわ。
587デフォルトの名無しさん
2020/07/04(土) 11:14:53.14ID:pmIasW6W テストの仕方って教えないものなんだなー
588デフォルトの名無しさん
2020/07/04(土) 11:16:50.57ID:M3d71N9d 外部から使うかどうかという(間違った)考え方で
privateにするかpublicにするかを決めてると
例えば、全文検索エンジンなんか最低限
文書の登録メソッドregisterと検索メソッドsearchだけでいいってことになってしまう
しかし全文検索エンジンとかいうのは内部で
高速なデータ検索を行うためにいろんなアルゴリズムやデータ構造を
使っているわけで、それらを(実際に使用例ができるかどうかは別として)
汎用的に使えるようにライブラリとして分離すればいいわけ
privateにするかpublicにするかっていうのは、そのシステムで外部から使うか?ではなくて
オブジェクトとして外部から使うかなわけで、privateでテストしづらいようなものは
別オブジェクトに分離とするとか設計をみなすべきってことなんだよ
privateにするかpublicにするかを決めてると
例えば、全文検索エンジンなんか最低限
文書の登録メソッドregisterと検索メソッドsearchだけでいいってことになってしまう
しかし全文検索エンジンとかいうのは内部で
高速なデータ検索を行うためにいろんなアルゴリズムやデータ構造を
使っているわけで、それらを(実際に使用例ができるかどうかは別として)
汎用的に使えるようにライブラリとして分離すればいいわけ
privateにするかpublicにするかっていうのは、そのシステムで外部から使うか?ではなくて
オブジェクトとして外部から使うかなわけで、privateでテストしづらいようなものは
別オブジェクトに分離とするとか設計をみなすべきってことなんだよ
589デフォルトの名無しさん
2020/07/04(土) 11:18:52.84ID:pmIasW6W590デフォルトの名無しさん
2020/07/04(土) 11:18:58.30ID:M3d71N9d >>585
> publicにしないとテストできないってどんな言語?
そんな話はしてない
可能不可能な話はしていない
やりやすいかどうかの話をしている
コストを考えなきゃいかんよ?
できるけど大変っていうのは、問題を何も解決してない
ちゃんと設計をせずに関数のインターフェースを定義せずに
無理やりprivateのテストをしても、private=外部から使わない=変更しても問題ないわけで
それに対してテストをしていると、変更しても問題ないはずのprivateメソッドを変更したら
テストが失敗するってことになるのでよくない
> publicにしないとテストできないってどんな言語?
そんな話はしてない
可能不可能な話はしていない
やりやすいかどうかの話をしている
コストを考えなきゃいかんよ?
できるけど大変っていうのは、問題を何も解決してない
ちゃんと設計をせずに関数のインターフェースを定義せずに
無理やりprivateのテストをしても、private=外部から使わない=変更しても問題ないわけで
それに対してテストをしていると、変更しても問題ないはずのprivateメソッドを変更したら
テストが失敗するってことになるのでよくない
591デフォルトの名無しさん
2020/07/04(土) 11:20:06.42ID:M3d71N9d592デフォルトの名無しさん
2020/07/04(土) 11:23:05.84ID:pmIasW6W >>590
privateでテストできないならpublicに設計し直すんやって言ってたじゃん
privateのままでテストするのに何も大変なことなんてない
テストのためだけに設計し直すのは頭おかしい
テストされてないメソッドが存在する方が問題だよ
外部から使わないから問題ないよねって感覚で勝手に修正されるわけないだろw
メソッド書き換えたらテストも修正するのは当たり前
privateでテストできないならpublicに設計し直すんやって言ってたじゃん
privateのままでテストするのに何も大変なことなんてない
テストのためだけに設計し直すのは頭おかしい
テストされてないメソッドが存在する方が問題だよ
外部から使わないから問題ないよねって感覚で勝手に修正されるわけないだろw
メソッド書き換えたらテストも修正するのは当たり前
593デフォルトの名無しさん
2020/07/04(土) 11:24:25.01ID:pmIasW6W594デフォルトの名無しさん
2020/07/04(土) 11:26:55.62ID:pmIasW6W privateなメソッドであっても事前条件も事後条件もある
unit testでカバーしてれば壊れてないことを確認できるからリファクタリングが可能になる
unit testでカバーしてれば壊れてないことを確認できるからリファクタリングが可能になる
595デフォルトの名無しさん
2020/07/04(土) 11:27:43.00ID:1AXxY7r6 大規模システムでずっと来てるけどカバレッジって初めて聞いた。調べたら
アメリカだと航空宇宙とか自動車とかでやるみたいね。
ERPで分岐ごとにやってたら多分完成まで数世紀かかるよw
privateとかpublicとかは単に現場次第だよね。正式なQAメソッドではそこまで
言わないし、どうでもいいというか、臨機応変にやるとこ。
アメリカだと航空宇宙とか自動車とかでやるみたいね。
ERPで分岐ごとにやってたら多分完成まで数世紀かかるよw
privateとかpublicとかは単に現場次第だよね。正式なQAメソッドではそこまで
言わないし、どうでもいいというか、臨機応変にやるとこ。
596デフォルトの名無しさん
2020/07/04(土) 11:30:38.80ID:pmIasW6W >>595
臨機応変にやるのは会社を首にならないためですよねw
それは社会をどうやって生き抜いていくかサラリーマンとしての心得じゃないですか
プログラマとして品質の高いプログラムを作るためにC2 100%は最低条件ですよ
臨機応変にやるのは会社を首にならないためですよねw
それは社会をどうやって生き抜いていくかサラリーマンとしての心得じゃないですか
プログラマとして品質の高いプログラムを作るためにC2 100%は最低条件ですよ
597デフォルトの名無しさん
2020/07/04(土) 11:33:41.81ID:1AXxY7r6598デフォルトの名無しさん
2020/07/04(土) 11:36:02.68ID:1AXxY7r6 ちなみに臨機応変にやるとこなのは会社首とかはどうでもよくて、
ユニットテストはなに、リグレッションは、アクセプタンスはってのは
QAのメソッドとして確立してるけど、JavaのPrivateがどうするかみたいなのは
完全に現場次第だから。
世界標準はないでしょ。
ユニットテストはなに、リグレッションは、アクセプタンスはってのは
QAのメソッドとして確立してるけど、JavaのPrivateがどうするかみたいなのは
完全に現場次第だから。
世界標準はないでしょ。
599デフォルトの名無しさん
2020/07/04(土) 11:39:33.69ID:pmIasW6W >>597
大規模システムってみずほとか?
テストは組み合わせを考えると膨大になるのだけれども
最小単位のunit testだとそうでもなくてだからこそunit testは大事なんよ
Salesforceは知ってる?クラウド型のサービスでアプリ作ったりできるんだけど
カバレッジが75%以下だとデプロイできなくなってる
大規模だからビジネスシステムだからテストしなくていいはちょっと今の時代ありえない
大規模システムってみずほとか?
テストは組み合わせを考えると膨大になるのだけれども
最小単位のunit testだとそうでもなくてだからこそunit testは大事なんよ
Salesforceは知ってる?クラウド型のサービスでアプリ作ったりできるんだけど
カバレッジが75%以下だとデプロイできなくなってる
大規模だからビジネスシステムだからテストしなくていいはちょっと今の時代ありえない
600デフォルトの名無しさん
2020/07/04(土) 11:39:35.50ID:MJUVFEDB 昔の組み込みの少ない経験だけでイキってるんやろ
601デフォルトの名無しさん
2020/07/04(土) 11:40:52.54ID:M3d71N9d >>592
> privateでテストできないならpublicに設計し直すんやって言ってたじゃん
> privateのままでテストするのに何も大変なことなんてない
自分で答え言ってるじゃんw
privateでテストできないならpublicに設計し直すんだから
privateのテストは大変じゃなくて必要ないってこと
> privateでテストできないならpublicに設計し直すんやって言ってたじゃん
> privateのままでテストするのに何も大変なことなんてない
自分で答え言ってるじゃんw
privateでテストできないならpublicに設計し直すんだから
privateのテストは大変じゃなくて必要ないってこと
602デフォルトの名無しさん
2020/07/04(土) 11:41:39.32ID:M3d71N9d >>593
> わかってないのはそっちの方、unit testでカバーしてなかったら
> 仕様通り動いてるのを確認できない
ユニットテストでカバーしないなんて一言も言ってないんだが?
何に反論してるんだよ
> わかってないのはそっちの方、unit testでカバーしてなかったら
> 仕様通り動いてるのを確認できない
ユニットテストでカバーしないなんて一言も言ってないんだが?
何に反論してるんだよ
603デフォルトの名無しさん
2020/07/04(土) 11:41:45.39ID:pmIasW6W >>598
現場次第だから現場に従うんだっていうのはそれはサラリーマンとして生き残るために
そうせざるを得ないだけだよね、品質の高いプログラムを作るなら常にテストはしないといけない
世界標準がないからいんだっていうのじゃないよ
現場次第だから現場に従うんだっていうのはそれはサラリーマンとして生き残るために
そうせざるを得ないだけだよね、品質の高いプログラムを作るなら常にテストはしないといけない
世界標準がないからいんだっていうのじゃないよ
604デフォルトの名無しさん
2020/07/04(土) 11:42:23.92ID:M3d71N9d >>594
> privateなメソッドであっても事前条件も事後条件もある
> unit testでカバーしてれば壊れてないことを確認できるからリファクタリングが可能になる
最初からpublic経由でテストするって言ってるよね?
> privateなメソッドであっても事前条件も事後条件もある
> unit testでカバーしてれば壊れてないことを確認できるからリファクタリングが可能になる
最初からpublic経由でテストするって言ってるよね?
605デフォルトの名無しさん
2020/07/04(土) 11:43:01.27ID:czCytfqY あたい知ってるよ
カバレッジテストを合格するために、privateをpublicにしてメソッドを呼び出せばいいんだよね。
あたい知ってるよ
カバレッジテストを合格するために、メソッドの中に記載されている条件文全て消せばいいんだよね。
あたい知ってるよ
カバレッジテストを合格するために、メソッドの中に記載されているコードを全部消せばいいんだよね。
カバレッジテストを合格するために、privateをpublicにしてメソッドを呼び出せばいいんだよね。
あたい知ってるよ
カバレッジテストを合格するために、メソッドの中に記載されている条件文全て消せばいいんだよね。
あたい知ってるよ
カバレッジテストを合格するために、メソッドの中に記載されているコードを全部消せばいいんだよね。
606デフォルトの名無しさん
2020/07/04(土) 11:43:01.49ID:pmIasW6W607デフォルトの名無しさん
2020/07/04(土) 11:43:56.50ID:pmIasW6W608デフォルトの名無しさん
2020/07/04(土) 11:44:22.90ID:M3d71N9d >>606
> privateのテストは必要だよ
だから何度も言ってるがprivateでテストしたいと思ったら
publicに変更するんだから、privateのテストはしなくてすむと言ってる
お前短絡思考なんだよ。
privateはprivateのままテストしなくちゃいけないんだって思ってるだろ
> privateのテストは必要だよ
だから何度も言ってるがprivateでテストしたいと思ったら
publicに変更するんだから、privateのテストはしなくてすむと言ってる
お前短絡思考なんだよ。
privateはprivateのままテストしなくちゃいけないんだって思ってるだろ
609デフォルトの名無しさん
2020/07/04(土) 11:44:50.09ID:pmIasW6W610デフォルトの名無しさん
2020/07/04(土) 11:45:01.10ID:M3d71N9d >>607
> 君はprivateのテストは書かないってことだから
> privateのメソッドはunit testでカバーされてないよねってこと
なんですぐ上でprivateはpublic経由でテストするって言ってるのに
理解できてないの?
> 君はprivateのテストは書かないってことだから
> privateのメソッドはunit testでカバーされてないよねってこと
なんですぐ上でprivateはpublic経由でテストするって言ってるのに
理解できてないの?
611デフォルトの名無しさん
2020/07/04(土) 11:45:43.09ID:pmIasW6W612デフォルトの名無しさん
2020/07/04(土) 11:46:08.10ID:M3d71N9d >>609
> それはunit testにならないよってこと
> privateのメソッドをテストできてないよってこと
publicメソッド経由でテストしますがなにか?
publicメソッド経由でテストするのが大変なものは
設計を変更すべきなんだよ
> それはunit testにならないよってこと
> privateのメソッドをテストできてないよってこと
publicメソッド経由でテストしますがなにか?
publicメソッド経由でテストするのが大変なものは
設計を変更すべきなんだよ
613デフォルトの名無しさん
2020/07/04(土) 11:46:12.42ID:pmIasW6W >>610
public経由でのテストはunit testではないよってこと
public経由でのテストはunit testではないよってこと
614デフォルトの名無しさん
2020/07/04(土) 11:47:15.08ID:M3d71N9d >>611
> テストしたいからpublicにするのが間違ってて
> privateのままテストするのがオブジェクト指向として正当なやり方
だからprivateのままpublicメソッド経由でテストすりゃいいじゃん(笑)
何度も言ってる。
それが難しいなら、それはコードがすでに複雑である証拠なので
複雑なものを直さないでテストすると破綻する
> テストしたいからpublicにするのが間違ってて
> privateのままテストするのがオブジェクト指向として正当なやり方
だからprivateのままpublicメソッド経由でテストすりゃいいじゃん(笑)
何度も言ってる。
それが難しいなら、それはコードがすでに複雑である証拠なので
複雑なものを直さないでテストすると破綻する
615デフォルトの名無しさん
2020/07/04(土) 11:47:24.81ID:pmIasW6W616デフォルトの名無しさん
2020/07/04(土) 11:47:48.99ID:M3d71N9d617デフォルトの名無しさん
2020/07/04(土) 11:48:47.27ID:M3d71N9d >>615
> だからテストのためにオブジェクト変えてるのはprivateのテストを知らないだけだから
複雑だからオブジェクトを変えてるんだよ
アホなのか?
privateのテストはpublicメソッド経由でやる
それが難しいなら、コードが複雑だから設計を治す
> だからテストのためにオブジェクト変えてるのはprivateのテストを知らないだけだから
複雑だからオブジェクトを変えてるんだよ
アホなのか?
privateのテストはpublicメソッド経由でやる
それが難しいなら、コードが複雑だから設計を治す
618デフォルトの名無しさん
2020/07/04(土) 11:48:55.01ID:1AXxY7r6 >>599
アメリカの某有名パッケージだね。
その界隈では知ってる限りunit testでカバレージを求められることは無いし
GAFAあたりでも分岐ごとにやらないはず。エッジケースをどうするかとかは
聞かれるけど。
だいたいデベロッパーテストで全分岐をカバーしたところであまり意味はないし。
どのみちQAに回すわけで他人がやんなきゃ意味ない。
カバレージという概念を求められるのが少なくともアメリカでは航空宇宙や
自動車のようだし、良い悪いは別として、これが求められるようなところは
OOとかカプセル化とかが大事なプロジェクトとはちょっと違うよね。
千人のデベロッパーに五百人のテスターで組み込みとかやらないでしょ。
いや知らんのでイメージだけど。
アメリカの某有名パッケージだね。
その界隈では知ってる限りunit testでカバレージを求められることは無いし
GAFAあたりでも分岐ごとにやらないはず。エッジケースをどうするかとかは
聞かれるけど。
だいたいデベロッパーテストで全分岐をカバーしたところであまり意味はないし。
どのみちQAに回すわけで他人がやんなきゃ意味ない。
カバレージという概念を求められるのが少なくともアメリカでは航空宇宙や
自動車のようだし、良い悪いは別として、これが求められるようなところは
OOとかカプセル化とかが大事なプロジェクトとはちょっと違うよね。
千人のデベロッパーに五百人のテスターで組み込みとかやらないでしょ。
いや知らんのでイメージだけど。
619デフォルトの名無しさん
2020/07/04(土) 11:49:13.09ID:pmIasW6W620デフォルトの名無しさん
2020/07/04(土) 11:49:55.50ID:M3d71N9d621デフォルトの名無しさん
2020/07/04(土) 11:50:29.94ID:MJUVFEDB 誰のためにユニットテストするの?w
語ってるべき論は誰かを想定しちゃってない?w
語ってるべき論は誰かを想定しちゃってない?w
622デフォルトの名無しさん
2020/07/04(土) 11:50:46.08ID:pmIasW6W >>616
unit testは最小単位だから、世界共通の定義
publicを経由してたら内部でどんなにprivateなメソッドを呼び出しまくってても
unit testになるなんて、定義はどこにもないのでpublic経由はunit testに当てはまらない
unit testは最小単位だから、世界共通の定義
publicを経由してたら内部でどんなにprivateなメソッドを呼び出しまくってても
unit testになるなんて、定義はどこにもないのでpublic経由はunit testに当てはまらない
623デフォルトの名無しさん
2020/07/04(土) 11:51:29.32ID:MG3qPS+J 名前をつけるとpublicだろうがprivateだろうがテストしなきゃいけない
→つまり無名にしてその場で使い捨てればテストしなくてOK!
→つまり無名にしてその場で使い捨てればテストしなくてOK!
624デフォルトの名無しさん
2020/07/04(土) 11:51:49.54ID:M3d71N9d もう答えがすでに出てる話をまだづつても無意味なんだけどな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つの考え方があります。
パブリックメソッド経由でテストする
別クラスのパブリックメソッドとする
テスト対象の可視性を(やや)上げる
プライベートのまま、リフレクションでアクセスしてテストを書く
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。
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つの考え方があります。
パブリックメソッド経由でテストする
別クラスのパブリックメソッドとする
テスト対象の可視性を(やや)上げる
プライベートのまま、リフレクションでアクセスしてテストを書く
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。
625デフォルトの名無しさん
2020/07/04(土) 11:52:44.14ID:pmIasW6W >>617
privateのテストはprivateを直接テストしないとunit testにならないよ
privateのテストはprivateを直接テストしないとunit testにならないよ
626デフォルトの名無しさん
2020/07/04(土) 11:52:52.72ID:M3d71N9d >>622
> unit testは最小単位だから、世界共通の定義
> publicを経由してたら内部でどんなにprivateなメソッドを呼び出しまくってても
> unit testになるなんて、定義はどこにもないのでpublic経由はunit testに当てはまらない
それはお前の定義であって、なんの根拠もないことはわかってる
> unit testは最小単位だから、世界共通の定義
> publicを経由してたら内部でどんなにprivateなメソッドを呼び出しまくってても
> unit testになるなんて、定義はどこにもないのでpublic経由はunit testに当てはまらない
それはお前の定義であって、なんの根拠もないことはわかってる
627デフォルトの名無しさん
2020/07/04(土) 11:53:29.28ID:M3d71N9d628デフォルトの名無しさん
2020/07/04(土) 11:53:30.11ID:czCytfqY629デフォルトの名無しさん
2020/07/04(土) 11:53:42.19ID:pmIasW6W630デフォルトの名無しさん
2020/07/04(土) 11:54:47.69ID:pmIasW6W >>627
根拠は示したけどね、理解する気がないだけなんじゃない?
根拠は示したけどね、理解する気がないだけなんじゃない?
631デフォルトの名無しさん
2020/07/04(土) 11:54:52.11ID:M3d71N9d >>628
> テストのために、コード書き換えてどうするんだよってね。
お前の目的は、テストがしづらい複雑なコードを変えないことなの?(笑)
それともちゃんとテストが出来るコードを開発することなの?
どっちなのさ
目的を理解してるか?
> テストのために、コード書き換えてどうするんだよってね。
お前の目的は、テストがしづらい複雑なコードを変えないことなの?(笑)
それともちゃんとテストが出来るコードを開発することなの?
どっちなのさ
目的を理解してるか?
632デフォルトの名無しさん
2020/07/04(土) 11:55:05.15ID:MJUVFEDB 「メソッド単位のunit テストを強制されてるのです」ww
633デフォルトの名無しさん
2020/07/04(土) 11:55:51.40ID:M3d71N9d >>628
> 誰だよそれ、YouTuberか?
え? t-wadaさんを知らないってそれまずくね?w
https://twitter.com/t_wada
プログラマ。TDD 実践者。power-assert-js 作者。
『テスト駆動開発』『プログラマが知るべき97のこと』『SQLアンチパターン』を翻訳/監訳しました。
https://twitter.com/5chan_nel (5ch newer account)
> 誰だよそれ、YouTuberか?
え? t-wadaさんを知らないってそれまずくね?w
https://twitter.com/t_wada
プログラマ。TDD 実践者。power-assert-js 作者。
『テスト駆動開発』『プログラマが知るべき97のこと』『SQLアンチパターン』を翻訳/監訳しました。
https://twitter.com/5chan_nel (5ch newer account)
634デフォルトの名無しさん
2020/07/04(土) 11:56:33.70ID:M3d71N9d635デフォルトの名無しさん
2020/07/04(土) 11:56:48.02ID:pmIasW6W >>632
TDDとか知らないの?
TDDとか知らないの?
636デフォルトの名無しさん
2020/07/04(土) 11:57:31.94ID:czCytfqY >>631
おめーこそ、テストの目的を理解してんのか、カス。
privateが記述されているってことは、外部から呼び出したら駄目なメソッドだ。
それを外部から呼び出して単体テスト合格とかふざけんな。
テストなめてんだろ。
おめーこそ、テストの目的を理解してんのか、カス。
privateが記述されているってことは、外部から呼び出したら駄目なメソッドだ。
それを外部から呼び出して単体テスト合格とかふざけんな。
テストなめてんだろ。
637デフォルトの名無しさん
2020/07/04(土) 11:58:00.26ID:M3d71N9d >>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アンチパターン』を翻訳/監訳しました。
> 私の回答
> 短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
>
> パブリックメソッド経由でテストする
https://twitter.com/5chan_nel (5ch newer account)
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アンチパターン』を翻訳/監訳しました。
> 私の回答
> 短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
>
> パブリックメソッド経由でテストする
https://twitter.com/5chan_nel (5ch newer account)
638デフォルトの名無しさん
2020/07/04(土) 11:58:12.80ID:pmIasW6W639デフォルトの名無しさん
2020/07/04(土) 11:58:45.56ID:M3d71N9d >>636
> おめーこそ、テストの目的を理解してんのか、カス。
> privateが記述されているってことは、外部から呼び出したら駄目なメソッドだ。
↑それ(外部から呼び出したらだめだ!)はテストの目的じゃないよw
> おめーこそ、テストの目的を理解してんのか、カス。
> privateが記述されているってことは、外部から呼び出したら駄目なメソッドだ。
↑それ(外部から呼び出したらだめだ!)はテストの目的じゃないよw
640デフォルトの名無しさん
2020/07/04(土) 11:59:28.07ID:czCytfqY で、でたー!!!
有名人の権威に頼る詭弁!
流石、詭弁のプロッ!
有名人の権威に頼る詭弁!
流石、詭弁のプロッ!
641デフォルトの名無しさん
2020/07/04(土) 11:59:33.33ID:pmIasW6W642デフォルトの名無しさん
2020/07/04(土) 11:59:35.76ID:M3d71N9d643デフォルトの名無しさん
2020/07/04(土) 12:00:04.79ID:M3d71N9d >>641
つまりそういうこと。お前は「テスト技術」に興味がない
つまりそういうこと。お前は「テスト技術」に興味がない
644デフォルトの名無しさん
2020/07/04(土) 12:01:48.43ID:M3d71N9d なぜ日本でTDDの専門家といって一番目に出てくるような人を知らないで
テストの話について語っているのか?
勉強したら必ず何度も目にする名前だろうに
テストの話について語っているのか?
勉強したら必ず何度も目にする名前だろうに
645デフォルトの名無しさん
2020/07/04(土) 12:05:38.40ID:pmIasW6W >>643
僕は@t_wadaさんを知らないだけですよ
有名な人の名前を知ってるから自分はテスト技術に興味があって正しい知識を持ってるんだって思ってる?
論理を無視した権威による詭弁としか思えないし、それってただのマウンティングにしかならないんじゃないですか?
俺はt_wadaさんのこと知ってんだぞ!!おめーどーなっても知らねえからな!みたいな中卒ヤンキーのマインドを
お持ちなのはわかったけど、議論の向き先としてそっちで良いのって僕は思いましたよ
僕は@t_wadaさんを知らないだけですよ
有名な人の名前を知ってるから自分はテスト技術に興味があって正しい知識を持ってるんだって思ってる?
論理を無視した権威による詭弁としか思えないし、それってただのマウンティングにしかならないんじゃないですか?
俺はt_wadaさんのこと知ってんだぞ!!おめーどーなっても知らねえからな!みたいな中卒ヤンキーのマインドを
お持ちなのはわかったけど、議論の向き先としてそっちで良いのって僕は思いましたよ
646デフォルトの名無しさん
2020/07/04(土) 12:06:25.67ID:M3d71N9d > 僕は@t_wadaさんを知らないだけですよ
その意味がわかってないんだろ?
お前は勉強した必ず目にする名前を知らないって言ってるんだよ
つまり勉強したことがないってこと
その意味がわかってないんだろ?
お前は勉強した必ず目にする名前を知らないって言ってるんだよ
つまり勉強したことがないってこと
647デフォルトの名無しさん
2020/07/04(土) 12:07:22.80ID:XvIYAIJA いいんじゃね、全てのメソッドをテストしたけりゃすればw
ただそれを強制されてることが一般的だと思って奴がいるのは滑稽だなw
ただそれを強制されてることが一般的だと思って奴がいるのは滑稽だなw
648デフォルトの名無しさん
2020/07/04(土) 12:08:56.81ID:pmIasW6W >>646
人の名前覚えて悦に入る人の心境がわからないんだよなー
僕はプログラムのことにしか興味がないから
誰がそれを書いたのかよりも書いてある内容の方に興味がある
執筆者の名前を覚えて勉強した気になってるだけじゃないの?
人の名前覚えて悦に入る人の心境がわからないんだよなー
僕はプログラムのことにしか興味がないから
誰がそれを書いたのかよりも書いてある内容の方に興味がある
執筆者の名前を覚えて勉強した気になってるだけじゃないの?
649デフォルトの名無しさん
2020/07/04(土) 12:09:30.14ID:M3d71N9d パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。
別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
テスト対象の可視性を(やや)上げる
例えば Java では、同一のパッケージからのみアクセスできる可視性があり(正式名称ではありませんが
「パッケージプライベート」と呼ばれます)、テストを同一パッケージに配置することでテストから
アクセスできるような設計を行うことがあります。(ただし、この質問の場合は JavaScript なので、この手段はとれません)
プライベートのまま、リフレクションでアクセスしてテストを書く
リフレクションは最後の手段であり、強力な手段でもあります。プロダクトコードに手を入れることが
できない状況や、レガシーコード(テストコードの無いコード)に対する「仕様化テスト(Characterization Test)」を
書いているような状況では、リフレクションは唯一の、かつ強力な手段になります。プライベートメソッドに
テストを書くことのデメリットを理解しつつ、黒魔術の強力さを堪能しましょう。
(ただし、この質問の場合は JavaScript なので、この手段はとれません。JavaScript は比較的緩い言語ですが、クロージャの情報隠蔽は非常に強固です)
まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。
別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
テスト対象の可視性を(やや)上げる
例えば Java では、同一のパッケージからのみアクセスできる可視性があり(正式名称ではありませんが
「パッケージプライベート」と呼ばれます)、テストを同一パッケージに配置することでテストから
アクセスできるような設計を行うことがあります。(ただし、この質問の場合は JavaScript なので、この手段はとれません)
プライベートのまま、リフレクションでアクセスしてテストを書く
リフレクションは最後の手段であり、強力な手段でもあります。プロダクトコードに手を入れることが
できない状況や、レガシーコード(テストコードの無いコード)に対する「仕様化テスト(Characterization Test)」を
書いているような状況では、リフレクションは唯一の、かつ強力な手段になります。プライベートメソッドに
テストを書くことのデメリットを理解しつつ、黒魔術の強力さを堪能しましょう。
(ただし、この質問の場合は JavaScript なので、この手段はとれません。JavaScript は比較的緩い言語ですが、クロージャの情報隠蔽は非常に強固です)
まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
650デフォルトの名無しさん
2020/07/04(土) 12:10:37.41ID:M3d71N9d651デフォルトの名無しさん
2020/07/04(土) 12:14:01.28ID:pmIasW6W >>650
著作権法に違反してない? 大丈夫?
僕はt_wadaさんを知らないし、信奉する立場でもないので
t_wadaさんがそう言ってるからそうなんだと思うことはないよ
内容に興味があるっていうのは、書いてあることをそっくりそのまま
自分の考えにするということではなくて自分の経験や知識に照らし合わせて
自分の考えを持つってことだよ
僕はその文章を読んでprivateメソッドをテストするべきだと思った
著作権法に違反してない? 大丈夫?
僕はt_wadaさんを知らないし、信奉する立場でもないので
t_wadaさんがそう言ってるからそうなんだと思うことはないよ
内容に興味があるっていうのは、書いてあることをそっくりそのまま
自分の考えにするということではなくて自分の経験や知識に照らし合わせて
自分の考えを持つってことだよ
僕はその文章を読んでprivateメソッドをテストするべきだと思った
652デフォルトの名無しさん
2020/07/04(土) 12:15:48.22ID:M3d71N9d > 著作権法に違反してない? 大丈夫?
もはや技術の話に反論できなくなったか
引用の範囲で著作権は関係ないな(爆笑)
> 僕はt_wadaさんを知らないし、信奉する立場でもないので
あのさぁ、お前。「t_wadaを知らない」という人の話じゃなくて
その人が言った内容についての話をしろよ
もはや技術の話に反論できなくなったか
引用の範囲で著作権は関係ないな(爆笑)
> 僕はt_wadaさんを知らないし、信奉する立場でもないので
あのさぁ、お前。「t_wadaを知らない」という人の話じゃなくて
その人が言った内容についての話をしろよ
653デフォルトの名無しさん
2020/07/04(土) 12:16:19.37ID:M3d71N9d > 僕はその文章を読んでprivateメソッドをテストするべきだと思った
それはあなたの感想です。考えは何も述べていません。
それはあなたの感想です。考えは何も述べていません。
654デフォルトの名無しさん
2020/07/04(土) 12:18:15.28ID:czCytfqY >>639
> ↑それ(外部から呼び出したらだめだ!)はテストの目的じゃないよw
別に、デバッグ目的で一時的にprivateメソッドを呼びたいのなら、勝手に呼んでどうぞ。
だが、テスト工程...特に単体テストでprivateをpublicにするのはアウト。
本来、呼ばれないはずのprivateだったメソッドが呼ばれてしまえば、本来、不合格だったはずのカバレッジテストに合格してしまう可能性が出てくるし、privateメソッドを呼んだことで、本来ありえないクラス内部状態を作ってしまったら、単体テストの結果も変わってしまう。
テストは本番と同じ状態を保たないと駄目だよ。
プログラマーの開発工程におけるデバッグ及び動作確認とテストを混同させていないか?
> ↑それ(外部から呼び出したらだめだ!)はテストの目的じゃないよw
別に、デバッグ目的で一時的にprivateメソッドを呼びたいのなら、勝手に呼んでどうぞ。
だが、テスト工程...特に単体テストでprivateをpublicにするのはアウト。
本来、呼ばれないはずのprivateだったメソッドが呼ばれてしまえば、本来、不合格だったはずのカバレッジテストに合格してしまう可能性が出てくるし、privateメソッドを呼んだことで、本来ありえないクラス内部状態を作ってしまったら、単体テストの結果も変わってしまう。
テストは本番と同じ状態を保たないと駄目だよ。
プログラマーの開発工程におけるデバッグ及び動作確認とテストを混同させていないか?
655デフォルトの名無しさん
2020/07/04(土) 12:19:20.76ID:XvIYAIJA 最後の行ありそうw
656デフォルトの名無しさん
2020/07/04(土) 12:19:46.76ID:M3d71N9d >>654
> だが、テスト工程...特に単体テストでprivateをpublicにするのはアウト。
ウォーターフォール開発?
テストで問題が出ても問題を上流に戻したらだめって
バグが出ても直したらいかんのかよw
> だが、テスト工程...特に単体テストでprivateをpublicにするのはアウト。
ウォーターフォール開発?
テストで問題が出ても問題を上流に戻したらだめって
バグが出ても直したらいかんのかよw
657デフォルトの名無しさん
2020/07/04(土) 12:20:53.65ID:M3d71N9d >>654
> プログラマーの開発工程におけるデバッグ及び動作確認とテストを混同させていないか?
今はプログラマーの開発工程におけるデバッグの話ですよ?
動作確認でprivateメソッドを呼んでテストなんてしませんから
> プログラマーの開発工程におけるデバッグ及び動作確認とテストを混同させていないか?
今はプログラマーの開発工程におけるデバッグの話ですよ?
動作確認でprivateメソッドを呼んでテストなんてしませんから
658デフォルトの名無しさん
2020/07/04(土) 12:21:57.39ID:pmIasW6W >>652
大丈夫かなって正直に思っただけ、君が引用だと思っててもt_wadaさんが勝手に転載してんじゃねえ
ぶっ殺すぞと思ってたらやばいじゃん、t_wadaさんって人を僕は知らないから
君がすごくぶっ殺されたりとかしないかなって思っただけ
t_wadaさんの話を振ったのは君ですよ
t_wadaさんを知らないのかー遅れてるーうひょーって有頂天になって書き込んでたのは君ですよ
僕は内容の話をしましたよ
大丈夫かなって正直に思っただけ、君が引用だと思っててもt_wadaさんが勝手に転載してんじゃねえ
ぶっ殺すぞと思ってたらやばいじゃん、t_wadaさんって人を僕は知らないから
君がすごくぶっ殺されたりとかしないかなって思っただけ
t_wadaさんの話を振ったのは君ですよ
t_wadaさんを知らないのかー遅れてるーうひょーって有頂天になって書き込んでたのは君ですよ
僕は内容の話をしましたよ
659デフォルトの名無しさん
2020/07/04(土) 12:22:14.55ID:czCytfqY > テストは本番と同じ状態を保たないと駄目だよ。
これを曲解されても困るから補足説明するけど、単体テストって、クラス単体のテストのことな?
クラスを動かすための環境は自由に変えてもいいけど、クラスそのものを弄りかえるなって意味だからな?
これを曲解されても困るから補足説明するけど、単体テストって、クラス単体のテストのことな?
クラスを動かすための環境は自由に変えてもいいけど、クラスそのものを弄りかえるなって意味だからな?
660デフォルトの名無しさん
2020/07/04(土) 12:24:12.62ID:xAj06qrt テストがでかけるアサートと本番動作は普通は異なるがな。
なんでも統一させようとして無理が出るから public, privateの議論はくだらんなと思うわけだ。
なんでも統一させようとして無理が出るから public, privateの議論はくだらんなと思うわけだ。
661デフォルトの名無しさん
2020/07/04(土) 12:28:01.42ID:czCytfqY662デフォルトの名無しさん
2020/07/04(土) 12:33:59.87ID:M3d71N9d663デフォルトの名無しさん
2020/07/04(土) 12:34:18.71ID:M3d71N9d >>661
知らんがなw
知らんがなw
664デフォルトの名無しさん
2020/07/04(土) 12:35:58.47ID:M3d71N9d >>660
クラスを動かすための環境というのはクラスの外界ってことはわかってるか?
クラスの外界は変えていいから、テストコードから呼び出すし
クラスの中で呼んでいる外界をモックやスタブで置き換えていいんだよ
クラスを動かすための環境というのはクラスの外界ってことはわかってるか?
クラスの外界は変えていいから、テストコードから呼び出すし
クラスの中で呼んでいる外界をモックやスタブで置き換えていいんだよ
665デフォルトの名無しさん
2020/07/04(土) 12:37:35.05ID:exw+beGf テストの前提として、テストされるコードをいじってはいけない
テストのためにコードをいじってテストが終わったらコードを戻すんだと
本来のコードが仕様通り動くことが保証できない
いじるのなら納品物が変わってくる
テストのためにコードをいじってテストが終わったらコードを戻すんだと
本来のコードが仕様通り動くことが保証できない
いじるのなら納品物が変わってくる
666デフォルトの名無しさん
2020/07/04(土) 12:38:43.12ID:pmIasW6W >>662
t_wadaさんを知らないのかーって言ったのは君で
これがt_wadaさんの神々しい高貴な文章なんだーと引用したのは君じゃん
僕はそれを読みました。読んだ感想を今から言います。よく聞いてください。
privateメソッドをテストするべきだと思いました。
t_wadaさんを知らないのかーって言ったのは君で
これがt_wadaさんの神々しい高貴な文章なんだーと引用したのは君じゃん
僕はそれを読みました。読んだ感想を今から言います。よく聞いてください。
privateメソッドをテストするべきだと思いました。
667デフォルトの名無しさん
2020/07/04(土) 12:43:46.70ID:M3d71N9d668デフォルトの名無しさん
2020/07/04(土) 12:44:39.72ID:M3d71N9d669デフォルトの名無しさん
2020/07/04(土) 12:47:54.13ID:9ghyGMpS670デフォルトの名無しさん
2020/07/04(土) 12:48:05.39ID:M3d71N9d671デフォルトの名無しさん
2020/07/04(土) 12:58:30.51ID:wkevF9GB privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね
早く死んでね
672デフォルトの名無しさん
2020/07/04(土) 13:01:25.78ID:M3d71N9d 専門家の意見としては
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。
別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。
別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
673デフォルトの名無しさん
2020/07/04(土) 13:02:51.44ID:pmIasW6W >>670
君が先にその人を出して
僕が誰それなんでそんなの書いたのって聞いただけだよ
そしたら君がt_wadaを知らないのかーって有頂天になったんじゃん
君はt_wadaさんに憧れてるんでしょ?
だからt_wadaさんが書いた文章を引用したんでしょ
憧れとは理解とは最も遠い感情だってプリキュアが言ってました
僕が誰に憧れてるかはわかりますね?
君が先にその人を出して
僕が誰それなんでそんなの書いたのって聞いただけだよ
そしたら君がt_wadaを知らないのかーって有頂天になったんじゃん
君はt_wadaさんに憧れてるんでしょ?
だからt_wadaさんが書いた文章を引用したんでしょ
憧れとは理解とは最も遠い感情だってプリキュアが言ってました
僕が誰に憧れてるかはわかりますね?
674デフォルトの名無しさん
2020/07/04(土) 13:06:20.56ID:M3d71N9d >>673
> 僕が誰それなんでそんなの書いたのって聞いただけだよ
だから人に興味があるってことだよね?
無名の人なら、そんな無名なんか知るかー
有名な人なら、権威にすがるなー
っていうんでしたっけ?w
どちらにしろ意見に興味がなく
最初から「人」に文句をつけようと思って、誰か聞いたんでしょ?
> 僕が誰それなんでそんなの書いたのって聞いただけだよ
だから人に興味があるってことだよね?
無名の人なら、そんな無名なんか知るかー
有名な人なら、権威にすがるなー
っていうんでしたっけ?w
どちらにしろ意見に興味がなく
最初から「人」に文句をつけようと思って、誰か聞いたんでしょ?
675デフォルトの名無しさん
2020/07/04(土) 13:10:46.18ID:pmIasW6W >>674
t_wadaのブログってリンク提示されてもなにそれとしか思わないから
君がt_wada本人でこれが僕の考えだって示したならなるほどそういうことか
privateメソッドはテストするべきだって思うけど
議論の最中にt_wadaのブログを出されても何いってんだこいつとしか思わない
よくよく話を聞いてみると君はt_wadaさんのことが大変気に入っていて
憧れていてt_wadaさんの言うことは絶対だと思っている
君はt_wadaさんの権威にすがってるだけのつまらない人間なのじゃないかと僕は疑っています
t_wadaのブログってリンク提示されてもなにそれとしか思わないから
君がt_wada本人でこれが僕の考えだって示したならなるほどそういうことか
privateメソッドはテストするべきだって思うけど
議論の最中にt_wadaのブログを出されても何いってんだこいつとしか思わない
よくよく話を聞いてみると君はt_wadaさんのことが大変気に入っていて
憧れていてt_wadaさんの言うことは絶対だと思っている
君はt_wadaさんの権威にすがってるだけのつまらない人間なのじゃないかと僕は疑っています
676デフォルトの名無しさん
2020/07/04(土) 13:12:22.76ID:pmIasW6W 外人が書いた本を翻訳しただけで専門家でもなんでもないんじゃない?
677デフォルトの名無しさん
2020/07/04(土) 13:12:24.10ID:M3d71N9d > t_wadaのブログってリンク提示されてもなにそれとしか思わないから
はい、内容を呼んでないと自白しましたw
なんのために内容の一部まで引用したと思ってるんでしょうかね
読まずに誰それと「人」に文句をつけるための
質問しかしませんでした。
はい、内容を呼んでないと自白しましたw
なんのために内容の一部まで引用したと思ってるんでしょうかね
読まずに誰それと「人」に文句をつけるための
質問しかしませんでした。
678デフォルトの名無しさん
2020/07/04(土) 13:12:47.77ID:M3d71N9d >>676
お前の希望を言われたもなぁw
お前の希望を言われたもなぁw
679575
2020/07/04(土) 13:13:09.28ID:sra5+07B なんで今朝の575からこんなに進んでるの...
680デフォルトの名無しさん
2020/07/04(土) 13:13:57.68ID:MJUVFEDB 子供の喧嘩ですw
681デフォルトの名無しさん
2020/07/04(土) 13:13:59.57ID:pmIasW6W >>677
どうしてその内容を引用したの?
君はそれが正しいと思ったの? その根拠は提示できる?
できないでしょ、君はt_wadaを専門家だと思ってて
専門家の言うことは正しいのだ、だから内容が正しいのだと思い込んでいる
だからその内容を引用して何かを示した気になってるだけ
どうしてその内容を引用したの?
君はそれが正しいと思ったの? その根拠は提示できる?
できないでしょ、君はt_wadaを専門家だと思ってて
専門家の言うことは正しいのだ、だから内容が正しいのだと思い込んでいる
だからその内容を引用して何かを示した気になってるだけ
682デフォルトの名無しさん
2020/07/04(土) 13:14:24.44ID:M3d71N9d >>679
根拠ない主張を繰り返すだけのやつが登場するとそうなるよw
根拠ない主張を繰り返すだけのやつが登場するとそうなるよw
683デフォルトの名無しさん
2020/07/04(土) 13:14:41.46ID:pmIasW6W >>678
外人が書いた本を翻訳したら専門家なのか? そっちの方が希望じゃん
外人が書いた本を翻訳したら専門家なのか? そっちの方が希望じゃん
684デフォルトの名無しさん
2020/07/04(土) 13:15:16.84ID:pmIasW6W >>682
専門家という肩書の権威にすがりつく君のことかな?
専門家という肩書の権威にすがりつく君のことかな?
685デフォルトの名無しさん
2020/07/04(土) 13:15:33.49ID:M3d71N9d686デフォルトの名無しさん
2020/07/04(土) 13:15:46.59ID:xAj06qrt687デフォルトの名無しさん
2020/07/04(土) 13:16:11.64ID:M3d71N9d688デフォルトの名無しさん
2020/07/04(土) 13:17:04.15ID:pmIasW6W >>668
t_wadaさんの文章はt_wadaさんの感想でしかないよ
t_wadaさんの文章はt_wadaさんの感想でしかないよ
689デフォルトの名無しさん
2020/07/04(土) 13:17:18.71ID:M3d71N9d どうやら翻訳は副業らしいなw
690デフォルトの名無しさん
2020/07/04(土) 13:18:06.68ID:M3d71N9d691575
2020/07/04(土) 13:18:30.04ID:sra5+07B とりあえず、落ち着け。
議題がよくわからんが、落ち着け...落ち着くのだ。
議題がよくわからんが、落ち着け...落ち着くのだ。
692デフォルトの名無しさん
2020/07/04(土) 13:19:53.55ID:pmIasW6W >>687
いやいや翻訳だけが全実績じゃん
t_wadaさんがprivateメソッドをテストせずにとても
すばらしいシステムを構築していま全世界で使われてますってことないじゃん
翻訳したからまるで本物の執筆者のように思われてあたかも専門家のように思い込まれてるだけで
専門家でもなんでもなくただの翻訳者だよ
いやいや翻訳だけが全実績じゃん
t_wadaさんがprivateメソッドをテストせずにとても
すばらしいシステムを構築していま全世界で使われてますってことないじゃん
翻訳したからまるで本物の執筆者のように思われてあたかも専門家のように思い込まれてるだけで
専門家でもなんでもなくただの翻訳者だよ
693デフォルトの名無しさん
2020/07/04(土) 13:20:32.65ID:MJUVFEDB いいんだよ、元から不毛なネタのスレだw
694デフォルトの名無しさん
2020/07/04(土) 13:21:46.90ID:pmIasW6W >>690
君が説得力を感じたら意見になり、
説得力を感じなかったら感想になるってだけじゃんそれ
なにそのガバガバな日本語運用
わかりましたでは今から僕が君を説得してみせます、よく聞いてください
privateメソッドはテストするべきです
君が説得力を感じたら意見になり、
説得力を感じなかったら感想になるってだけじゃんそれ
なにそのガバガバな日本語運用
わかりましたでは今から僕が君を説得してみせます、よく聞いてください
privateメソッドはテストするべきです
696デフォルトの名無しさん
2020/07/04(土) 13:22:11.62ID:M3d71N9d >>692
なんでググらないでウソ書くの?
そうやって他の人を騙そうとしてるでしょ
https://t-wada.hatenablog.jp/entry/clean-code-that-works
職業はコンサルタントであり、プログラマです。最近では技術顧問としてもいくつかの会社を支援しています。
また、自分の自由になる時間には、オープンソースソフトウェアの開発を行っています。
本業はプログラマでありコンサルタントですが、副業としては技術書の出版、具体的には監訳や翻訳に関わっています。
JavaScript でテストを書く際のハードルを大幅に下げるために開発した power-assert は、
Mocha や Jest と組み合わせて使え、 AVA には既に内蔵されており、ありがたいことに世界中で使われるプロダクトまで育ちました。
ひとつ例を挙げるなら、アリババグループで採用頂き、アリペイやアリババクラウドのテストに使われているという話です。
んで、こういう人に比べて、お前はなにかすごいことしたの?
なんでググらないでウソ書くの?
そうやって他の人を騙そうとしてるでしょ
https://t-wada.hatenablog.jp/entry/clean-code-that-works
職業はコンサルタントであり、プログラマです。最近では技術顧問としてもいくつかの会社を支援しています。
また、自分の自由になる時間には、オープンソースソフトウェアの開発を行っています。
本業はプログラマでありコンサルタントですが、副業としては技術書の出版、具体的には監訳や翻訳に関わっています。
JavaScript でテストを書く際のハードルを大幅に下げるために開発した power-assert は、
Mocha や Jest と組み合わせて使え、 AVA には既に内蔵されており、ありがたいことに世界中で使われるプロダクトまで育ちました。
ひとつ例を挙げるなら、アリババグループで採用頂き、アリペイやアリババクラウドのテストに使われているという話です。
んで、こういう人に比べて、お前はなにかすごいことしたの?
697デフォルトの名無しさん
2020/07/04(土) 13:25:12.35ID:pmIasW6W698デフォルトの名無しさん
2020/07/04(土) 13:25:49.67ID:pmIasW6W ほんまt_wadaさん好きやな
699デフォルトの名無しさん
2020/07/04(土) 13:26:38.88ID:M3d71N9d >>698
t_wadaさん以外にすごい人がいたら教えて下さいw
t_wadaさん以外にすごい人がいたら教えて下さいw
700デフォルトの名無しさん
2020/07/04(土) 13:31:25.64ID:pmIasW6W701デフォルトの名無しさん
2020/07/04(土) 13:31:55.08ID:pmIasW6W 振ってしまってなんかごめんなさい
702デフォルトの名無しさん
2020/07/04(土) 13:33:19.09ID:pmIasW6W 他人を必要以上に持ち上げるのって自分に自信がない人がやりがちなので
アドバイスするとしたら色々経験したがいんじゃないかということですね
アドバイスするとしたら色々経験したがいんじゃないかということですね
703デフォルトの名無しさん
2020/07/04(土) 13:34:54.50ID:KKcCItOc 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
学術の巨大掲示板群 - アルファ・ラボ 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
704デフォルトの名無しさん
2020/07/04(土) 13:48:28.05ID:iuca8iKQ 根拠が聞けるかなと思ったターンで
他人の引用を持ってきて権威に頼っただけである場合
議論は終了である
続ける価値がないから
他人の引用を持ってきて権威に頼っただけである場合
議論は終了である
続ける価値がないから
705デフォルトの名無しさん
2020/07/04(土) 13:50:52.32ID:M3d71N9d いえ、自分と同じ意見を言ってる人を持ってきただけなので
話は続いてますよ?
でもなぜか、話の続きをやめてしまっているのです。
なぜでしょうね(笑)
話は続いてますよ?
でもなぜか、話の続きをやめてしまっているのです。
なぜでしょうね(笑)
706デフォルトの名無しさん
2020/07/04(土) 14:09:00.83ID:xhESn47n プログラム板でコード使って語りもしない時点で両者どちらも無能
プログラマならコードで主張
プログラマならコードで主張
707デフォルトの名無しさん
2020/07/04(土) 14:17:35.76ID:pmIasW6W >>706
有能さんあざーす!コードどこ?
有能さんあざーす!コードどこ?
708デフォルトの名無しさん
2020/07/04(土) 14:19:05.65ID:JeoapmHS privateメソッドとしてどの程度複雑なことをやらせるか、privateメソッドをどの程度使うかについて、感覚の違う2つのスタイルがあるんじゃないか?
一方の極は、privateメソッドには極めて単純なことしかさせず、少しでも複雑な内容なら(他のヘルパークラス等の)publicメソッドに切り出すスタイル。
「privateはpublic経由でのみテストする(直接はテストしない)」という方針を採る場合には、privateメソッドの内容は非常にシンプルな内容に限らざるを得ないし、逆にそうしないと>>555指摘の組み合わせ爆発の問題を回避できない。
>>624と>>649で紹介されている議論や、>>588はこの立場なんだろう。
このスタイルでは、下記のスタイルでは1つのprivateメソッドで処理できる内容を、複数のクラスに属するメソッドの協調関係で処理することになる。
これを適切な機能分化がされていると肯定的に捉えるか、必ずしも汎用性があるわけではない小さなヘルパークラスが増えることになり、見通しが悪くなると否定的に捉えるかは考え方によるだろう。
もう一方の極は、privateメソッドだからといって、内容をシンプルに限らなければいけない必然性はないというスタイル。>>589は、こちらの立場なんだろう。
このスタイルでは、public経由でprivateのテストをするというのは現実的ではないから、privateメソッドでも直接テストの対象とすることが必要になる。言語機能の関係でprivateを直接テストすることが難しい場合には、テストのやり方に工夫が必要になる。
メリット・デメリットは前記のスタイルの反対。
こんなふうに整理できるんじゃないかと思うが、どうだろう。
一方の極は、privateメソッドには極めて単純なことしかさせず、少しでも複雑な内容なら(他のヘルパークラス等の)publicメソッドに切り出すスタイル。
「privateはpublic経由でのみテストする(直接はテストしない)」という方針を採る場合には、privateメソッドの内容は非常にシンプルな内容に限らざるを得ないし、逆にそうしないと>>555指摘の組み合わせ爆発の問題を回避できない。
>>624と>>649で紹介されている議論や、>>588はこの立場なんだろう。
このスタイルでは、下記のスタイルでは1つのprivateメソッドで処理できる内容を、複数のクラスに属するメソッドの協調関係で処理することになる。
これを適切な機能分化がされていると肯定的に捉えるか、必ずしも汎用性があるわけではない小さなヘルパークラスが増えることになり、見通しが悪くなると否定的に捉えるかは考え方によるだろう。
もう一方の極は、privateメソッドだからといって、内容をシンプルに限らなければいけない必然性はないというスタイル。>>589は、こちらの立場なんだろう。
このスタイルでは、public経由でprivateのテストをするというのは現実的ではないから、privateメソッドでも直接テストの対象とすることが必要になる。言語機能の関係でprivateを直接テストすることが難しい場合には、テストのやり方に工夫が必要になる。
メリット・デメリットは前記のスタイルの反対。
こんなふうに整理できるんじゃないかと思うが、どうだろう。
709デフォルトの名無しさん
2020/07/04(土) 14:19:16.92ID:xhESn47n710デフォルトの名無しさん
2020/07/04(土) 14:20:14.26ID:pmIasW6W711デフォルトの名無しさん
2020/07/04(土) 14:22:23.00ID:xhESn47n712デフォルトの名無しさん
2020/07/04(土) 14:23:09.56ID:kiJuYkd6 privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね
早く死んでね
713デフォルトの名無しさん
2020/07/04(土) 14:23:22.38ID:pmIasW6W >>711
関係ないよ、早くコード出すよ
関係ないよ、早くコード出すよ
714デフォルトの名無しさん
2020/07/04(土) 14:23:44.26ID:pmIasW6W 早くコードだすよ!
715デフォルトの名無しさん
2020/07/04(土) 14:27:56.17ID:xhESn47n716デフォルトの名無しさん
2020/07/04(土) 14:28:29.45ID:pmIasW6W www
717デフォルトの名無しさん
2020/07/04(土) 14:33:12.47ID:xhESn47n このように、コードを使わず偏った主張するやつはだいたい頭がおかしい
この板ではこうやって簡単にこういう奴をあぶり出しできるんよな
この板ではこうやって簡単にこういう奴をあぶり出しできるんよな
718デフォルトの名無しさん
2020/07/04(土) 14:34:10.41ID:pmIasW6W719デフォルトの名無しさん
2020/07/04(土) 14:34:57.85ID:pmIasW6W 早 く コ ー ド 出 す よ !
720デフォルトの名無しさん
2020/07/04(土) 14:51:30.64ID:xhESn47n >>719
^^
^^
721デフォルトの名無しさん
2020/07/04(土) 14:56:58.97ID:M3d71N9d >>708
> privateメソッドとしてどの程度複雑なことをやらせるか、privateメソッドをどの程度使うかについて、感覚の違う2つのスタイルがあるんじゃないか?
privateとかpublicとか関係なく、複雑なことをやらせるなよ
関数はせいぜい一画面程度(50行)ぐらい、大半は20行以下にするもんだ
> privateメソッドとしてどの程度複雑なことをやらせるか、privateメソッドをどの程度使うかについて、感覚の違う2つのスタイルがあるんじゃないか?
privateとかpublicとか関係なく、複雑なことをやらせるなよ
関数はせいぜい一画面程度(50行)ぐらい、大半は20行以下にするもんだ
722デフォルトの名無しさん
2020/07/04(土) 15:00:38.98ID:pmIasW6W はいはいどうせt_wadaがそう言ってたんだろ
723デフォルトの名無しさん
2020/07/04(土) 15:01:31.64ID:M3d71N9d >>722
また「人」の話かよw
また「人」の話かよw
724デフォルトの名無しさん
2020/07/04(土) 15:02:35.63ID:M3d71N9d 権威ある専門家が言ってることだから間違ってます
俺は認めませーんって。どういう気持で言ってるんだろうねw
俺は認めませーんって。どういう気持で言ってるんだろうねw
725デフォルトの名無しさん
2020/07/04(土) 15:04:45.61ID:M3d71N9d 俺は「そいつは権威ある専門家だ!」って指摘しただけで
勝ったつもりにはなれないなぁ(笑)
勝ったつもりにはなれないなぁ(笑)
726デフォルトの名無しさん
2020/07/04(土) 15:05:05.57ID:pmIasW6W t_wadaはなんて言ってるんだよ!
727デフォルトの名無しさん
2020/07/04(土) 15:05:39.57ID:pmIasW6W t_wada原理主義
728デフォルトの名無しさん
2020/07/04(土) 15:06:52.47ID:iuca8iKQ 必死だなw
729デフォルトの名無しさん
2020/07/04(土) 15:07:21.60ID:gUMCer1d 今までたくさんのキチガイPGを見たが
privateメソッドだからテストしないとか言ってるやつだけは許さない
テメーの金玉はここで潰す
privateメソッドだからテストしないとか言ってるやつだけは許さない
テメーの金玉はここで潰す
730デフォルトの名無しさん
2020/07/04(土) 15:10:41.07ID:pmIasW6W ごりごりーごりごりー
そうだ!すりつぶした粉で大根餅作ろうよ!
そうだ!すりつぶした粉で大根餅作ろうよ!
731575
2020/07/04(土) 15:11:12.87ID:sra5+07B >>729
問題なのは、そのprivateの挙動をどうやって確認するのかって話なのかな?
単体テスト?総合テスト?それとも実装中しながらのデバッグ作業の話?
正直、未だにどこで揉めているのかわかりません。
誰か議題教えて。
問題なのは、そのprivateの挙動をどうやって確認するのかって話なのかな?
単体テスト?総合テスト?それとも実装中しながらのデバッグ作業の話?
正直、未だにどこで揉めているのかわかりません。
誰か議題教えて。
732デフォルトの名無しさん
2020/07/04(土) 15:13:12.65ID:iuca8iKQ733デフォルトの名無しさん
2020/07/04(土) 15:14:01.93ID:M3d71N9d >>731
1. public、privateに限らずコードはシンプルにするべき
2. シンプルであるなら、privateはpublicメソッド経由でテストできる
3. publicメソッド経由でやったらprivateがろくにテストできないというなら設計が間違ってる
4. 設計上の問題はバグと言ってもいい。バグなんだから直せ
ここまではあってる
1. public、privateに限らずコードはシンプルにするべき
2. シンプルであるなら、privateはpublicメソッド経由でテストできる
3. publicメソッド経由でやったらprivateがろくにテストできないというなら設計が間違ってる
4. 設計上の問題はバグと言ってもいい。バグなんだから直せ
ここまではあってる
734デフォルトの名無しさん
2020/07/04(土) 15:17:09.02ID:gUMCer1d735575
2020/07/04(土) 15:21:35.25ID:sra5+07B736デフォルトの名無しさん
2020/07/04(土) 15:24:14.77ID:M3d71N9d 動けばOKって考えてる人がどれだけ多いかだな
テストを自動化するという考えがない
シンプルな設計をするという発想がない
動けば設計に問題はないと考えている
テストを自動化するという考えがない
シンプルな設計をするという発想がない
動けば設計に問題はないと考えている
737デフォルトの名無しさん
2020/07/04(土) 15:29:27.53ID:pmIasW6W >>735
Welcome to Underground
Welcome to Underground
738デフォルトの名無しさん
2020/07/04(土) 15:32:02.34ID:NXT3QGLz >>733
あってるの1だけじゃないかw
あってるの1だけじゃないかw
739デフォルトの名無しさん
2020/07/04(土) 15:34:57.08ID:iuca8iKQ 叩き台つくった(´・ω・`)
https://ideone.com/1XhPwl
https://ideone.com/1XhPwl
740デフォルトの名無しさん
2020/07/04(土) 15:39:15.86ID:e19OrKR5 なんかやべえ流れになってるな
とりあえずつっこんどくと
1. unitテストの定義に世界共通の定義など存在しない
2. unitテストという単語はプロジェクト用語であり、プログラム用語ではない
3. マーティンはunitテストという単語と自動テストの単語わけたらいいんじゃない?と提案してる。xunit
4. publicとprivateはクラス設計のため、もっと言えばクラス間の責任範囲のために存在している
5. xunitテストのためだけにprivateをpublicにするのは誤り。本当にやりたければリフレクションでもすればいい
6. c2カバレッジ100%するかどうかは分野次第
7. 我々は十分なシステムを作るのが目的である。完璧なプログラムを作ることが目的ではない。そして十分な利益を獲得することが目的でもある
とりあえずつっこんどくと
1. unitテストの定義に世界共通の定義など存在しない
2. unitテストという単語はプロジェクト用語であり、プログラム用語ではない
3. マーティンはunitテストという単語と自動テストの単語わけたらいいんじゃない?と提案してる。xunit
4. publicとprivateはクラス設計のため、もっと言えばクラス間の責任範囲のために存在している
5. xunitテストのためだけにprivateをpublicにするのは誤り。本当にやりたければリフレクションでもすればいい
6. c2カバレッジ100%するかどうかは分野次第
7. 我々は十分なシステムを作るのが目的である。完璧なプログラムを作ることが目的ではない。そして十分な利益を獲得することが目的でもある
741575
2020/07/04(土) 15:57:07.88ID:sra5+07B ちなみに、的はずれって100%君のことね。まぁ、そんなの今更どうでもいいか。
実際、クラスをどんな風にテストするのか興味あるね。
実際、クラスをどんな風にテストするのか興味あるね。
742デフォルトの名無しさん
2020/07/04(土) 16:03:21.65ID:e19OrKR5 やだよ組み込みが普通だと思ってる人との会話なんかしたくない
743575
2020/07/04(土) 16:32:24.22ID:sra5+07B そんなー。
744デフォルトの名無しさん
2020/07/04(土) 16:32:41.68ID:IaMjsjOG >>735
なんだ早く死ねよ
なんだ早く死ねよ
745575
2020/07/04(土) 16:36:24.03ID:sra5+07B まぁ、Android開発(アセンブラレベルからJavaアプリレベル)をやってるから、たぶん、大丈夫なはず。
組み込み=staticおじさんのレッテルが貼られがちだけど、
私はstaticおじさんじゃないんだけどなー...。
まぁ、アセンブラレベルの階層になると、オブジェクト指向要素なんて微塵もないけど。
組み込み=staticおじさんのレッテルが貼られがちだけど、
私はstaticおじさんじゃないんだけどなー...。
まぁ、アセンブラレベルの階層になると、オブジェクト指向要素なんて微塵もないけど。
747575
2020/07/04(土) 16:46:14.68ID:sra5+07B もういいや。アホくさ。こんなスレ覗いたのが間違いだったな。
人生を無駄にした気分だ。
このスレを覗く時間を使って別して作業してた方が有意義だったよ。
>>744
君はID変えながら死ね死ね連呼しているみたいだけど、気を付けた方がいいよ。あばよ、中身がない死ぬべき技術者さん。
人生を無駄にした気分だ。
このスレを覗く時間を使って別して作業してた方が有意義だったよ。
>>744
君はID変えながら死ね死ね連呼しているみたいだけど、気を付けた方がいいよ。あばよ、中身がない死ぬべき技術者さん。
748デフォルトの名無しさん
2020/07/04(土) 16:53:03.01ID:4XE5L1k5 プ板、と言うか専門板なんてそれぞれの話題を餌にマウント取り合ったり罵り合ったりする所だから。
相手にしたら負け。
相手にしたら負け。
749デフォルトの名無しさん
2020/07/04(土) 17:09:48.00ID:O/jhkl6h750デフォルトの名無しさん
2020/07/04(土) 18:16:38.54ID:sCZUG34Z privateメソッドのテストしないとか言ってるカスとまともに会話するメリットないだろ
751デフォルトの名無しさん
2020/07/04(土) 18:35:31.64ID:gmurOIZf まあテストやるって言ってもこれくらい意見が違って揉め事になるってのは
結構普通だったりするからそういう勉強にはなってるんでないの。
結構普通だったりするからそういう勉強にはなってるんでないの。
752デフォルトの名無しさん
2020/07/04(土) 20:02:50.07ID:M3d71N9d このスレの結論
短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。
別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
テスト対象の可視性を(やや)上げる
例えば Java では、同一のパッケージからのみアクセスできる可視性があり(正式名称ではありませんが
「パッケージプライベート」と呼ばれます)、テストを同一パッケージに配置することでテストから
アクセスできるような設計を行うことがあります。(ただし、この質問の場合は JavaScript なので、この手段はとれません)
プライベートのまま、リフレクションでアクセスしてテストを書く
リフレクションは最後の手段であり、強力な手段でもあります。プロダクトコードに手を入れることが
できない状況や、レガシーコード(テストコードの無いコード)に対する「仕様化テスト(Characterization Test)」を
書いているような状況では、リフレクションは唯一の、かつ強力な手段になります。プライベートメソッドに
テストを書くことのデメリットを理解しつつ、黒魔術の強力さを堪能しましょう。
(ただし、この質問の場合は JavaScript なので、この手段はとれません。JavaScript は比較的緩い言語ですが、クロージャの情報隠蔽は非常に強固です)
まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。
短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。
別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
テスト対象の可視性を(やや)上げる
例えば Java では、同一のパッケージからのみアクセスできる可視性があり(正式名称ではありませんが
「パッケージプライベート」と呼ばれます)、テストを同一パッケージに配置することでテストから
アクセスできるような設計を行うことがあります。(ただし、この質問の場合は JavaScript なので、この手段はとれません)
プライベートのまま、リフレクションでアクセスしてテストを書く
リフレクションは最後の手段であり、強力な手段でもあります。プロダクトコードに手を入れることが
できない状況や、レガシーコード(テストコードの無いコード)に対する「仕様化テスト(Characterization Test)」を
書いているような状況では、リフレクションは唯一の、かつ強力な手段になります。プライベートメソッドに
テストを書くことのデメリットを理解しつつ、黒魔術の強力さを堪能しましょう。
(ただし、この質問の場合は JavaScript なので、この手段はとれません。JavaScript は比較的緩い言語ですが、クロージャの情報隠蔽は非常に強固です)
まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。
753デフォルトの名無しさん
2020/07/04(土) 21:00:07.43ID:42LT/T3f >>752
三行以上は読んでもらえないから工夫が必要。
三行以上は読んでもらえないから工夫が必要。
754デフォルトの名無しさん
2020/07/04(土) 21:07:29.85ID:n1PM9L+Z ガワだけのクラスが出来上がるな
#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開発と名付けよう
相手側に技術が流出することがない
#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開発と名付けよう
相手側に技術が流出することがない
755デフォルトの名無しさん
2020/07/04(土) 21:08:27.02ID:NXT3QGLz756デフォルトの名無しさん
2020/07/04(土) 21:10:05.29ID:NXT3QGLz757デフォルトの名無しさん
2020/07/04(土) 21:41:09.24ID:pmIasW6W 本人の経験が感じられなくて薄っぺらいんだよなあ
758デフォルトの名無しさん
2020/07/04(土) 21:43:15.97ID:pmIasW6W 僕の高い知性と豊富な経験に基づく主張を聞いて欲しい
privateメソッドはテストした方がいい
privateメソッドはテストした方がいい
759デフォルトの名無しさん
2020/07/04(土) 21:56:15.32ID:gmurOIZf >別クラスのパブリックメソッドとする
>プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
>示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
>プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
>プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
>コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
これだけは意味ある意見ではあるな。他はカスみたいな理由だが。
>プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
>示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
>プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
>プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
>コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
これだけは意味ある意見ではあるな。他はカスみたいな理由だが。
760デフォルトの名無しさん
2020/07/04(土) 22:11:41.53ID:42LT/T3f カバレッジ測定ツール高いし持ってないので、private直接テストしたい。
761デフォルトの名無しさん
2020/07/04(土) 22:19:33.61ID:O/jhkl6h >>759
>>プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
>>示唆している場合があります
わかる
>>コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
これは選択肢の一つであって常にそうすべきなわけではないんだよね
クラスの分割基準とテストを書く書かないの基準は別だから
>>プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
>>示唆している場合があります
わかる
>>コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
これは選択肢の一つであって常にそうすべきなわけではないんだよね
クラスの分割基準とテストを書く書かないの基準は別だから
762デフォルトの名無しさん
2020/07/04(土) 22:19:58.28ID:O/jhkl6h プライベートだとテストしにくいので、パブリックメソッドとして抽出し、普通にテストしましょう
これが本音
これが本音
763デフォルトの名無しさん
2020/07/04(土) 22:47:43.56ID:1l6Tw/KB764デフォルトの名無しさん
2020/07/05(日) 00:43:13.75ID:9F15TCk0 プライベートがテストできるということはホワイトボックスなわけでユニットテスト段階でしょ。
そもそもプライベートをテストするにはソース自体書き換えないと呼べないじゃん。
ソース自体書き換えてテストするようなことはビジネスの世界ではあんまり無いしテストと
なったらブラックボックスが普通。
てかもはやテストの話でカプセル化やOO関係ないな。
そもそもプライベートをテストするにはソース自体書き換えないと呼べないじゃん。
ソース自体書き換えてテストするようなことはビジネスの世界ではあんまり無いしテストと
なったらブラックボックスが普通。
てかもはやテストの話でカプセル化やOO関係ないな。
765デフォルトの名無しさん
2020/07/05(日) 01:18:10.47ID:LRfXHt7v ホワイトやブラックについて語るのは時期が悪いというか、国家を危険にさらす可能性さえあるからね。
もう少し社会情勢に気を配ろうよ。
もう少し社会情勢に気を配ろうよ。
766デフォルトの名無しさん
2020/07/05(日) 01:32:28.51ID:LRfXHt7v 昔のホームページにはサイタマップというものがあった。
767デフォルトの名無しさん
2020/07/05(日) 02:04:25.24ID:9F15TCk0 埼玉県民にはそこらへんの草でも食わせておけ
768デフォルトの名無しさん
2020/07/05(日) 02:11:14.07ID:58eR5uXa >>764
> ソース自体書き換えてテストするようなことはビジネスの世界ではあんまり無いしテストと
まさかpublic・privateメソッドのテストをテスト工程でやる、
public・privateメソッドを書いた人と別の人がやるって思ってないか?
public・privateメソッドを実装中に、その作ったもののが正しく動くかどうか
public・privateメソッドのソースを書いた人が、書いてる段階でテストするんだから
当然ソースを書いて(書き換えて)テストするに決まってるじゃん
お前は、その後の(統合)テスト工程でソースコードを変えてテストとか言ってるだろw
> ソース自体書き換えてテストするようなことはビジネスの世界ではあんまり無いしテストと
まさかpublic・privateメソッドのテストをテスト工程でやる、
public・privateメソッドを書いた人と別の人がやるって思ってないか?
public・privateメソッドを実装中に、その作ったもののが正しく動くかどうか
public・privateメソッドのソースを書いた人が、書いてる段階でテストするんだから
当然ソースを書いて(書き換えて)テストするに決まってるじゃん
お前は、その後の(統合)テスト工程でソースコードを変えてテストとか言ってるだろw
769デフォルトの名無しさん
2020/07/05(日) 02:46:27.47ID:9F15TCk0 >>768
なんなのその口調気持ち悪い。
大規模開発だとテスト工程を別の人間が何度もやるのは当たり前だよ。
デベロッパ個人のテストはコーディングの範疇なのでもちろん個人ではやるが
それほど大事ではない。
組み込みで車のブレーキ制御とかは全く別の話だろうがOOとかカプセル化とは
基本かけ離れた分野。
なんなのその口調気持ち悪い。
大規模開発だとテスト工程を別の人間が何度もやるのは当たり前だよ。
デベロッパ個人のテストはコーディングの範疇なのでもちろん個人ではやるが
それほど大事ではない。
組み込みで車のブレーキ制御とかは全く別の話だろうがOOとかカプセル化とは
基本かけ離れた分野。
770デフォルトの名無しさん
2020/07/05(日) 02:48:43.07ID:LRfXHt7v テストしない理由を考えるのは。
771デフォルトの名無しさん
2020/07/05(日) 02:50:28.66ID:58eR5uXa >>769
> 大規模開発だとテスト工程を別の人間が何度もやるのは当たり前だよ。
大規模開発だとpublicやprivateメソッドのテストを別の人がやるって?
テストコード専用に書く人でもいるのかよw
それはどこの話だ?事例の一つぐらい持ってきてから言え
> 大規模開発だとテスト工程を別の人間が何度もやるのは当たり前だよ。
大規模開発だとpublicやprivateメソッドのテストを別の人がやるって?
テストコード専用に書く人でもいるのかよw
それはどこの話だ?事例の一つぐらい持ってきてから言え
772デフォルトの名無しさん
2020/07/05(日) 02:51:54.42ID:9F15TCk0773デフォルトの名無しさん
2020/07/05(日) 02:53:01.58ID:58eR5uXa > 某アメリカ製のパッケージとかだな。
だから事例は?
だから事例は?
774デフォルトの名無しさん
2020/07/05(日) 02:54:30.54ID:58eR5uXa ユニットテストのコードを他の人が書いて、どうやってTDDをやるのか不思議なんだがw
先にテストコード書く人がテストコードだけ書いて、
これに通るように実装しろ!
これがTDD(テスト駆動開発)だ!
とか言ってる所とかでもあるんか?
事例を持ってきてくれ
先にテストコード書く人がテストコードだけ書いて、
これに通るように実装しろ!
これがTDD(テスト駆動開発)だ!
とか言ってる所とかでもあるんか?
事例を持ってきてくれ
775デフォルトの名無しさん
2020/07/05(日) 02:56:40.99ID:9F15TCk0 だからユニットテスト自体が少なくともビジネス分野では大事じゃないと
上にも書いてあるが。
事例なんか出せるわけないだろ。中の人なんだから。
上にも書いてあるが。
事例なんか出せるわけないだろ。中の人なんだから。
776デフォルトの名無しさん
2020/07/05(日) 02:58:40.47ID:LRfXHt7v 製品についてネットに書き込むときは、法務と企画のハンコ必要なので。
777デフォルトの名無しさん
2020/07/05(日) 02:59:12.87ID:LRfXHt7v ちなみに法務俺、規格俺だけど。
778デフォルトの名無しさん
2020/07/05(日) 03:03:18.34ID:9F15TCk0 今関わってる製品とかソース10万ファイルくらいあってそれぞれのファイルに
分岐なんか少なくとも数十から数百はあると思うが、その数百万から数千万、下手したら
億の分岐を全部全パターンテストするの?
テストなんてそのあとファンクショナルやってリグレッションやってアクセプタンスやって
ってあるのに、ユニットテスト「だけ」でそれでしょ?
サグラダ・ファミリアかな?
分岐なんか少なくとも数十から数百はあると思うが、その数百万から数千万、下手したら
億の分岐を全部全パターンテストするの?
テストなんてそのあとファンクショナルやってリグレッションやってアクセプタンスやって
ってあるのに、ユニットテスト「だけ」でそれでしょ?
サグラダ・ファミリアかな?
779デフォルトの名無しさん
2020/07/05(日) 03:03:49.83ID:58eR5uXa780デフォルトの名無しさん
2020/07/05(日) 03:04:01.72ID:LRfXHt7v 正しいとか正しくないとかどうでも良いので、privateのテストをさせてほしいものですね。
781デフォルトの名無しさん
2020/07/05(日) 03:05:23.08ID:58eR5uXa >>778
> 今関わってる製品とかソース10万ファイルくらいあってそれぞれのファイルに
> 分岐なんか少なくとも数十から数百はあると思うが、その数百万から数千万、下手したら
> 億の分岐を全部全パターンテストするの?
それユニットテスト関係ないよね?
手動で全パターンをテストするの?
答えはお前自身が言えるはずだよね?
> 今関わってる製品とかソース10万ファイルくらいあってそれぞれのファイルに
> 分岐なんか少なくとも数十から数百はあると思うが、その数百万から数千万、下手したら
> 億の分岐を全部全パターンテストするの?
それユニットテスト関係ないよね?
手動で全パターンをテストするの?
答えはお前自身が言えるはずだよね?
782デフォルトの名無しさん
2020/07/05(日) 03:06:25.42ID:58eR5uXa ユニットテストなんかしてねーよ
ソース修正するたびに、
億の分岐全パターン手動テストしてるんだよ!
って言ってほしいな?
まだかな?
ソース修正するたびに、
億の分岐全パターン手動テストしてるんだよ!
って言ってほしいな?
まだかな?
783デフォルトの名無しさん
2020/07/05(日) 03:13:56.54ID:LRfXHt7v けんか腰は知能が高いと言われるム板に似合わないんだよな。
ユーモアを交えて会話するべきだと思います。
ユーモアを交えて会話するべきだと思います。
784デフォルトの名無しさん
2020/07/05(日) 04:06:24.23ID:9F15TCk0 >>779
知ってる限りGAFAでもERP各社あたりでもやってないけどね。
試しに(ドイツだが)SAPあたりにカバレージどれだけですかって聞いてみれば?
何それ美味しいの?だよ。
まあこういう人は何言っても無駄だし下手に事実いうと発狂するからもう相手は
おしまい。
知ってる限りGAFAでもERP各社あたりでもやってないけどね。
試しに(ドイツだが)SAPあたりにカバレージどれだけですかって聞いてみれば?
何それ美味しいの?だよ。
まあこういう人は何言っても無駄だし下手に事実いうと発狂するからもう相手は
おしまい。
785デフォルトの名無しさん
2020/07/05(日) 04:11:13.84ID:58eR5uXa では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万テストケースを実行しているわけではなく、
全テストケースを実行するのは一定の間隔で、普段は修正に対して依存があるテストだけを実行しているそうです。
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万テストケースを実行しているわけではなく、
全テストケースを実行するのは一定の間隔で、普段は修正に対して依存があるテストだけを実行しているそうです。
786デフォルトの名無しさん
2020/07/05(日) 04:13:30.65ID:58eR5uXa Googleの考え方
https://www.publickey1.jp/blog/11/post_144.html
テスターはデベロッパーがテストできるようにするのが仕事
このようにEngineering Productivityのメンバーのレポートラインと
所属を分けることのメリットを、Whittaker氏は次のように書いています。
ここにグーグルの品質管理の大事なポイントがあるようです。
一般にテストは製品開発の最後の段階で行われることが多く、製品チーム/開発チームの
中にテストチームを抱えても、テストフェーズ以外は手持ちぶさたになってしまうため、
多くの開発組織ではテストチームは製品チーム/開発チームとは別に存在し、
必要なときに登場してテストを行う、というケースがほとんどです。
====以下重要====
ところがグーグルではEngineering Productivityに属する、テストのノウハウを持ち支援を
行うエンジニアたちは、前述のように各製品チームに所属しています。
そう、グーグルではテストチームではなく、製品チームが自身で品質管理を負っている。
各デベロッパは自身でテストすることを期待されている。テスターの仕事は、自動テストの
インフラを確立することと、それによってデベロッパ自身がそれをプロセスの中で実行できるようにすること。
テスターはデベロッパーがテストできるようにするのだ。
各製品チームは、Engineering Productivityのメンバーの支援を受けつつ、自分たちの責任で
テストを行わなければならない、ということがグーグルのテストを行う際のポリシーのようです。
https://www.publickey1.jp/blog/11/post_144.html
テスターはデベロッパーがテストできるようにするのが仕事
このようにEngineering Productivityのメンバーのレポートラインと
所属を分けることのメリットを、Whittaker氏は次のように書いています。
ここにグーグルの品質管理の大事なポイントがあるようです。
一般にテストは製品開発の最後の段階で行われることが多く、製品チーム/開発チームの
中にテストチームを抱えても、テストフェーズ以外は手持ちぶさたになってしまうため、
多くの開発組織ではテストチームは製品チーム/開発チームとは別に存在し、
必要なときに登場してテストを行う、というケースがほとんどです。
====以下重要====
ところがグーグルではEngineering Productivityに属する、テストのノウハウを持ち支援を
行うエンジニアたちは、前述のように各製品チームに所属しています。
そう、グーグルではテストチームではなく、製品チームが自身で品質管理を負っている。
各デベロッパは自身でテストすることを期待されている。テスターの仕事は、自動テストの
インフラを確立することと、それによってデベロッパ自身がそれをプロセスの中で実行できるようにすること。
テスターはデベロッパーがテストできるようにするのだ。
各製品チームは、Engineering Productivityのメンバーの支援を受けつつ、自分たちの責任で
テストを行わなければならない、ということがグーグルのテストを行う際のポリシーのようです。
787デフォルトの名無しさん
2020/07/05(日) 04:14:26.63ID:58eR5uXa https://www.publickey1.jp/blog/11/post_144.html
Whittaker氏はさらに次の記事「How Google Tests Software - Part Two」で、
エンジニアに与えられる3つの役割についても触れています。
Softweare Engineer in Test(SET)
テストのしやすさ(Testability)にフォーカスした役割。デザインレビューをし、
品質やリスクをチェック。コードをテストしやすいようにリファクタリングする。
ユニットテストや、テストフレームワーク、自動テストも書く。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Whittaker氏はさらに次の記事「How Google Tests Software - Part Two」で、
エンジニアに与えられる3つの役割についても触れています。
Softweare Engineer in Test(SET)
テストのしやすさ(Testability)にフォーカスした役割。デザインレビューをし、
品質やリスクをチェック。コードをテストしやすいようにリファクタリングする。
ユニットテストや、テストフレームワーク、自動テストも書く。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
788デフォルトの名無しさん
2020/07/05(日) 04:16:28.52ID:58eR5uXa 「コードをテストしやすいようにリファクタリングする。」
っていうのがまさにprivateでテストしたいのに
public経由でテストできない
ならばテストしやすいようにリファクタリングしましょうって話になってる
っていうのがまさにprivateでテストしたいのに
public経由でテストできない
ならばテストしやすいようにリファクタリングしましょうって話になってる
789デフォルトの名無しさん
2020/07/05(日) 04:18:26.54ID:58eR5uXa 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++をある程度知ってることが前提です。
C/C++かつxUnit系ツールは、数分調べるだけでも数種類見つかります。
今回はその中の1つ「Google C++ Testing Framework(以下、GoogleTest)」の
使い方を紹介します。
Google Testとは、IT業界の巨人、グーグル(Google)製の
単体テストフレームワーク(C/C++用)です。MinUnitと比べて高機能で、
さまざまな使い道があります。ただし、MinUnit同様、テストコードを記述するため、
C/C++をある程度知ってることが前提です。
790デフォルトの名無しさん
2020/07/05(日) 04:19:35.40ID:9F15TCk0 >>785
テスト件数が問題なのではない。オートメーションすればファンクショナルレベル
でのテストはいくらでも流せる。
新しいファンクション・メソッドを書くたびに、あるいは変更をするたびに
全ての条件を網羅して、それをテストケースにして、コード自体をモディファイして
テストした後、結果をドキュメント化してまたコードを元に戻すということはやらないという話。
プライベートのファンクション・メソッド単位でC2100%テストしていくというのは
そういうこと。
テスト件数が問題なのではない。オートメーションすればファンクショナルレベル
でのテストはいくらでも流せる。
新しいファンクション・メソッドを書くたびに、あるいは変更をするたびに
全ての条件を網羅して、それをテストケースにして、コード自体をモディファイして
テストした後、結果をドキュメント化してまたコードを元に戻すということはやらないという話。
プライベートのファンクション・メソッド単位でC2100%テストしていくというのは
そういうこと。
791デフォルトの名無しさん
2020/07/05(日) 04:22:02.73ID:58eR5uXa 米Google、JavaScriptユニットテストフレームワーク「JS Test」をオープンソースで公開
https://mag.osdn.jp/11/10/03/1012250
米Googleは9月29日、JavaScriptユニットテストフレームワーク「Google JS Test」を発表した。
元々はGoogle社内のプロジェクトで利用されていたもので、ライセンスはApache License 2.0。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
https://mag.osdn.jp/11/10/03/1012250
米Googleは9月29日、JavaScriptユニットテストフレームワーク「Google JS Test」を発表した。
元々はGoogle社内のプロジェクトで利用されていたもので、ライセンスはApache License 2.0。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
792デフォルトの名無しさん
2020/07/05(日) 04:27:51.71ID:9F15TCk0 いや、だからそういうツールがあるのなんて常識だが、privateはテストしない。
上にも書いてるがprivateはソース自体弄らないとテスト自体できないわけで、
そういうツールが自動でソースを弄ってコンパイルし直してprivateのメンバーを
全パターンするわけでは、当たり前だけど、無い。
クラス単位でパブリックのメソッドに対してテストコードもセットで書くということは
当然ある。
上にも書いてるがprivateはソース自体弄らないとテスト自体できないわけで、
そういうツールが自動でソースを弄ってコンパイルし直してprivateのメンバーを
全パターンするわけでは、当たり前だけど、無い。
クラス単位でパブリックのメソッドに対してテストコードもセットで書くということは
当然ある。
793デフォルトの名無しさん
2020/07/05(日) 04:29:16.12ID:58eR5uXa facebook / jest
https://github.com/facebook/jest
https://jestjs.io/ja/
Jest はシンプルさを重視した、快適な JavaScript テスティングフレームワークです。
https://github.com/facebook/jest
https://jestjs.io/ja/
Jest はシンプルさを重視した、快適な JavaScript テスティングフレームワークです。
794デフォルトの名無しさん
2020/07/05(日) 04:31:02.86ID:9F15TCk0 全くわかってないなこりゃ。
795デフォルトの名無しさん
2020/07/05(日) 04:33:27.78ID:58eR5uXa 反論すりゃいいのにw
796デフォルトの名無しさん
2020/07/05(日) 04:34:11.33ID:58eR5uXa 憶測に基づいた発言はいらないよ?
俺はGoogleやFacebookとユニットテストに関連する事例を上げただけ
俺はGoogleやFacebookとユニットテストに関連する事例を上げただけ
797デフォルトの名無しさん
2020/07/05(日) 04:34:11.73ID:LRfXHt7v テストの専門家だからそう思うのでは。
798デフォルトの名無しさん
2020/07/05(日) 04:49:06.73ID:LRfXHt7v 完ぺきにテストしたからといって製品の完全性を保証することはできません。
したがってテストしないほうが良いのです。
したがってテストしないほうが良いのです。
799デフォルトの名無しさん
2020/07/05(日) 04:52:22.10ID:58eR5uXa ほらなw
完璧にテストした所で落ちない飛行機はありません
したがってテストしないほうがいいのです
と言い始めた
事例と自分の考えの矛盾を正せず、頭が狂い始めた証拠。
ここから荒らしと変貌する前触れだな
完璧にテストした所で落ちない飛行機はありません
したがってテストしないほうがいいのです
と言い始めた
事例と自分の考えの矛盾を正せず、頭が狂い始めた証拠。
ここから荒らしと変貌する前触れだな
800デフォルトの名無しさん
2020/07/05(日) 04:53:23.27ID:LRfXHt7v 食いついてきた。
嘘みたい。
嘘みたい。
801デフォルトの名無しさん
2020/07/05(日) 04:58:23.98ID:LRfXHt7v privateもテストさせていただけるとありがたいけど、禁止するのが正しいことになってるからな。
802デフォルトの名無しさん
2020/07/05(日) 04:59:58.66ID:LRfXHt7v Visualstudioのテストエクスプローラを使うと考えが変わるのでは。
道具の問題かもしれない。
道具の問題かもしれない。
803デフォルトの名無しさん
2020/07/05(日) 05:53:15.48ID:9F15TCk0 ユニットテストというのはプロジェクトによってかなり幅があるわけで、
当たり前の話だがテストオートメーションのプログラムが勝手にコード
弄ってコンパイルしなおしてPrivateをテストするわけが無いのだよ。
当たり前の話だがテストオートメーションのプログラムが勝手にコード
弄ってコンパイルしなおしてPrivateをテストするわけが無いのだよ。
804デフォルトの名無しさん
2020/07/05(日) 06:05:37.56ID:58eR5uXa ↑みたいなことを言ってるやつがGAFAは〜と
なんのソースもなしに言ってるわけだよ
こんなやつの話を聞くやつがいると思うかね?
なんのソースもなしに言ってるわけだよ
こんなやつの話を聞くやつがいると思うかね?
805デフォルトの名無しさん
2020/07/05(日) 06:06:03.12ID:9F15TCk0 ずれるかもしれないが下のような場合、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;}
}
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;}
}
806デフォルトの名無しさん
2020/07/05(日) 06:21:04.56ID:9F15TCk0 あと日本のNTTデータから降りてくるような大企業案件とかもやったことが無いので知らん。
アメリカのビジネス系一般の話。
アメリカのビジネス系一般の話。
807デフォルトの名無しさん
2020/07/05(日) 06:25:10.48ID:M+BkbwUs >>805
そのコードを見ただけで素人ってわかるよw
そのコードを見ただけで素人ってわかるよw
808デフォルトの名無しさん
2020/07/05(日) 06:27:32.73ID:9F15TCk0 はいはいそうですね。
809デフォルトの名無しさん
2020/07/05(日) 06:33:43.45ID:M+BkbwUs 1. 関数名が意味不明
2. インデントがめちゃくちゃ
3. スペースを入れる所が統一されていない
4. lenが配列なのはなんでだ?
5. nullを情報として扱うな
6. 戻り値なしなのに関数の最後でreturnを書くな
7. 数値(長さ?)判定と文字出力を同じ関数に同居させるな
8. テストするなら、長さを入力し文字列を返す関数を作れ
なんでたったこれだけの関数で
こんなにレビューの指摘項目が存在するんだかw
2. インデントがめちゃくちゃ
3. スペースを入れる所が統一されていない
4. lenが配列なのはなんでだ?
5. nullを情報として扱うな
6. 戻り値なしなのに関数の最後でreturnを書くな
7. 数値(長さ?)判定と文字出力を同じ関数に同居させるな
8. テストするなら、長さを入力し文字列を返す関数を作れ
なんでたったこれだけの関数で
こんなにレビューの指摘項目が存在するんだかw
810デフォルトの名無しさん
2020/07/05(日) 06:38:43.59ID:9F15TCk0 口調が気持ち悪い人は相手しても仕方ないからほっとくとして、上の例だと(に限らず)
funcSとfuncBをテストするためにはコード弄らなきゃいけないし、そもそもtestChin()で
リクワイアメントとエッジケースは全てテストするんだから、無駄にテストが倍以上に
なるしそれも手動になる。
普通のケースだとtestChinに対するテストコード書いて、変更があればそれを流す形になる。
上にさんざコピペが貼られたテストツールはそういうのを自動で流すツール。
テストケース流したいからfuncSとfuncBをパブリックにするというのはカプセル化
できてないし、ましてコード弄ってまでテストするのを手順化するというのは普通はやらない。
書いてる最中にコードちょろっと入れて確認するようなことはあって、それもユニット
テストといえばユニットテストだが、手法としてプロジェクト単位で公式にやるような
ものでは普通は無い。
車のブレーキ制御とかならそこまでやって欲しいが、OOとかカプセル化とはちょっと
違う話。
funcSとfuncBをテストするためにはコード弄らなきゃいけないし、そもそもtestChin()で
リクワイアメントとエッジケースは全てテストするんだから、無駄にテストが倍以上に
なるしそれも手動になる。
普通のケースだとtestChinに対するテストコード書いて、変更があればそれを流す形になる。
上にさんざコピペが貼られたテストツールはそういうのを自動で流すツール。
テストケース流したいからfuncSとfuncBをパブリックにするというのはカプセル化
できてないし、ましてコード弄ってまでテストするのを手順化するというのは普通はやらない。
書いてる最中にコードちょろっと入れて確認するようなことはあって、それもユニット
テストといえばユニットテストだが、手法としてプロジェクト単位で公式にやるような
ものでは普通は無い。
車のブレーキ制御とかならそこまでやって欲しいが、OOとかカプセル化とはちょっと
違う話。
811デフォルトの名無しさん
2020/07/05(日) 06:42:42.57ID:M+BkbwUs > funcSとfuncBをテストするためにはコード弄らなきゃいけないし、そもそもtestChin()で
public経由でテストできるだろw
public経由でテストできるだろw
812デフォルトの名無しさん
2020/07/05(日) 06:45:32.12ID:9F15TCk0 >public経由でテストできるだろw
と、いうわけでPublicをテストすれば十分だしPrivateは(普通は)やらないという事を
やっとご理解いただけたようですな。
>>768ではこんな事言ってましたが。
>当然ソースを書いて(書き換えて)テストするに決まってるじゃん
と、いうわけでPublicをテストすれば十分だしPrivateは(普通は)やらないという事を
やっとご理解いただけたようですな。
>>768ではこんな事言ってましたが。
>当然ソースを書いて(書き換えて)テストするに決まってるじゃん
813デフォルトの名無しさん
2020/07/05(日) 06:47:04.12ID:M+BkbwUs >>810
他の言語を勉強したほうがいいぞ
どうもお前は、絶対に来るはずがない値が引数に渡された時、
そのテストしろって言ってるようだからな
「絶対にありえない値」なんだから仕様なんて作らない
他の型がない言語だったら、引数に渡されるオブジェクトなんか
それこそ無限に値なんてありえるだから
privateでも、ソースコードを修正して引数渡せるなら
そのテストをかけって言ってるようなもん
他の言語を勉強したほうがいいぞ
どうもお前は、絶対に来るはずがない値が引数に渡された時、
そのテストしろって言ってるようだからな
「絶対にありえない値」なんだから仕様なんて作らない
他の型がない言語だったら、引数に渡されるオブジェクトなんか
それこそ無限に値なんてありえるだから
privateでも、ソースコードを修正して引数渡せるなら
そのテストをかけって言ってるようなもん
814デフォルトの名無しさん
2020/07/05(日) 06:47:52.42ID:M+BkbwUs >>812
> と、いうわけでPublicをテストすれば十分だしPrivateは(普通は)やらないという事を
頭悪そうだなw
この場合publicメソッドを呼んだらprivateメソッドを呼び出すんだから
privateメソッドのテストになってるだろ
> と、いうわけでPublicをテストすれば十分だしPrivateは(普通は)やらないという事を
頭悪そうだなw
この場合publicメソッドを呼んだらprivateメソッドを呼び出すんだから
privateメソッドのテストになってるだろ
815デフォルトの名無しさん
2020/07/05(日) 06:47:57.37ID:9F15TCk0 少なくともグーグルの面接で絶対こないからテストしないとか言ったら
速攻落ちるよ。むしろ絶対こないのをやるものだからね。
速攻落ちるよ。むしろ絶対こないのをやるものだからね。
816デフォルトの名無しさん
2020/07/05(日) 06:49:10.31ID:M+BkbwUs >>768で
> まさかpublic・privateメソッドのテストをテスト工程でやる、
> public・privateメソッドを書いた人と別の人がやるって思ってないか?
>
> public・privateメソッドを実装中に、その作ったもののが正しく動くかどうか
> public・privateメソッドのソースを書いた人が、書いてる段階でテストするんだから
> 当然ソースを書いて(書き換えて)テストするに決まってるじゃん
と言ってますが、今の話と何の関係があるんですか?
「誰がテストするか」の話なんですが?
> まさかpublic・privateメソッドのテストをテスト工程でやる、
> public・privateメソッドを書いた人と別の人がやるって思ってないか?
>
> public・privateメソッドを実装中に、その作ったもののが正しく動くかどうか
> public・privateメソッドのソースを書いた人が、書いてる段階でテストするんだから
> 当然ソースを書いて(書き換えて)テストするに決まってるじゃん
と言ってますが、今の話と何の関係があるんですか?
「誰がテストするか」の話なんですが?
817デフォルトの名無しさん
2020/07/05(日) 06:50:26.40ID:M+BkbwUs >>815
だからpublicメソッド経由でテストしてるじゃんw
お前は、内部でprivateメソッドを呼び出しているから
publicメソッドのテストには、privateメソッドがそんな値を返そうが
そのテストは書かないのか?
だからpublicメソッド経由でテストしてるじゃんw
お前は、内部でprivateメソッドを呼び出しているから
publicメソッドのテストには、privateメソッドがそんな値を返そうが
そのテストは書かないのか?
818デフォルトの名無しさん
2020/07/05(日) 06:53:15.16ID:M+BkbwUs 例えば>>805 の話だと
testChinがpublicメソッド、そのメソッドのテストとして
引数に1(なんで配列か知らんが)となるものを渡したら
Smallestが返ってくることというテストを書く
それは実際には内部でprivateメソッドを呼び出しているのだからfuncSのテストになってる
カバレッジを計測したら、privateメソッドであるfuncSの該当行は実行した(テストした)と計測される。
testChinがpublicメソッド、そのメソッドのテストとして
引数に1(なんで配列か知らんが)となるものを渡したら
Smallestが返ってくることというテストを書く
それは実際には内部でprivateメソッドを呼び出しているのだからfuncSのテストになってる
カバレッジを計測したら、privateメソッドであるfuncSの該当行は実行した(テストした)と計測される。
819デフォルトの名無しさん
2020/07/05(日) 06:54:07.51ID:9F15TCk0 え、コーディング中にちょろっとコード書いて動作確認とかを「テスト」って
呼んでたの?そりゃ噛み合わないわ。
開発手法の話をしてる時に「テストする」というからにはテストケースを書いて、
手動にしてもコードにしても実行したログくらいは残すものだが。
君はメソッド作る時エッジケースやらネガティブテストやら考慮に入れつつケースを
書いて実行したログも残してるの?変更のたびにやるの?やらんだろ。
呼んでたの?そりゃ噛み合わないわ。
開発手法の話をしてる時に「テストする」というからにはテストケースを書いて、
手動にしてもコードにしても実行したログくらいは残すものだが。
君はメソッド作る時エッジケースやらネガティブテストやら考慮に入れつつケースを
書いて実行したログも残してるの?変更のたびにやるの?やらんだろ。
820デフォルトの名無しさん
2020/07/05(日) 06:56:15.75ID:M+BkbwUs821デフォルトの名無しさん
2020/07/05(日) 06:56:44.73ID:9F15TCk0 publicをテストしたらprivateも呼ばれてるからprivate単位でテストしてる!って
ブレブレやなw
publicから呼ばれないprivateなんて一体誰がなんのために書くんだよw
ブレブレやなw
publicから呼ばれないprivateなんて一体誰がなんのために書くんだよw
822デフォルトの名無しさん
2020/07/05(日) 06:57:27.80ID:M+BkbwUs >>819
> 君はメソッド作る時エッジケースやらネガティブテストやら考慮に入れつつケースを
> 書いて実行したログも残してるの?変更のたびにやるの?やらんだろ。
変更のたびって、お前変更のたびにメソッドの仕様が変わるのか?
いきあたりばったりで開発してるんだな
> 君はメソッド作る時エッジケースやらネガティブテストやら考慮に入れつつケースを
> 書いて実行したログも残してるの?変更のたびにやるの?やらんだろ。
変更のたびって、お前変更のたびにメソッドの仕様が変わるのか?
いきあたりばったりで開発してるんだな
823デフォルトの名無しさん
2020/07/05(日) 06:58:49.78ID:M+BkbwUs >>821
最初からそう言ってるだろ?
ブレるも何も、最初からそう言ってる
↓
> 私の回答
> 短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
>
> ほとんどのプライベートメソッドはパブリックメソッド経由でテストできるからです。プライベートメソッドは実装の詳細であり、自動テストのターゲットとなる「外部から見た振る舞い」ではありません。
最初からそう言ってるだろ?
ブレるも何も、最初からそう言ってる
↓
> 私の回答
> 短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
>
> ほとんどのプライベートメソッドはパブリックメソッド経由でテストできるからです。プライベートメソッドは実装の詳細であり、自動テストのターゲットとなる「外部から見た振る舞い」ではありません。
824デフォルトの名無しさん
2020/07/05(日) 07:00:51.32ID:M+BkbwUs あ?まさかprivate関数の処理のテストをすればいいのに
private関数単独ででテストしなきゃだめだって思ってるのかw
あはは、関数単位でテストするのがユニットテストだって思ってるようだな
こりゃ、お・わ・ら・い・だw
private関数単独ででテストしなきゃだめだって思ってるのかw
あはは、関数単位でテストするのがユニットテストだって思ってるようだな
こりゃ、お・わ・ら・い・だw
825デフォルトの名無しさん
2020/07/05(日) 07:02:37.00ID:BTTSshKd メソッド単位でテストしろって言うのが組み込みおじさんだから話にならんよ
826デフォルトの名無しさん
2020/07/05(日) 07:03:05.56ID:9F15TCk0 なんだこいつ気持ち悪い。
827デフォルトの名無しさん
2020/07/05(日) 07:07:17.25ID:9F15TCk0 日本語もjavaも通じないからどうにもならない。
突然噛み付いてくる気持ちの悪いのは100%の確率でおかしいな。
突然噛み付いてくる気持ちの悪いのは100%の確率でおかしいな。
828デフォルトの名無しさん
2020/07/05(日) 07:08:18.45ID:M+BkbwUs というふうに「技術」の話にレスができなくなったら
「人」(=俺)の話にすり替えるのが常套手段な
「人」(=俺)の話にすり替えるのが常套手段な
829デフォルトの名無しさん
2020/07/05(日) 07:13:21.25ID:9F15TCk0 というかお前は誰だよ。Private単位でコード書き換えてもやるって言ってる
人間がいたからPrivate単位では通常のビジネス系ではやらないという流れなのに
突然「お前は素人だあ!」とか噛み付いてきても知らんがな。
タブもスペースもトランケートされる2ちゃんでインデントがとかくだらない
ことでマウント取りにくる暇があったらまず日本語を学べ。
以上。
人間がいたからPrivate単位では通常のビジネス系ではやらないという流れなのに
突然「お前は素人だあ!」とか噛み付いてきても知らんがな。
タブもスペースもトランケートされる2ちゃんでインデントがとかくだらない
ことでマウント取りにくる暇があったらまず日本語を学べ。
以上。
830デフォルトの名無しさん
2020/07/05(日) 07:21:09.73ID:BTTSshKd 「privateメソッド」を直接テストしろって言う人はどうするのがいいって言うの?
a 全てprivateメソッドに対しても外部にリフレクション等を使用したテストを書くべき
b privateメソッドにアクセスできるクラスなどにpublicなテストコードを書くべき
c もっと言い方法がある、こうだ!
a 全てprivateメソッドに対しても外部にリフレクション等を使用したテストを書くべき
b privateメソッドにアクセスできるクラスなどにpublicなテストコードを書くべき
c もっと言い方法がある、こうだ!
831デフォルトの名無しさん
2020/07/05(日) 07:22:11.60ID:LRfXHt7v >>830
王家秘伝の技がある。
王家秘伝の技がある。
832デフォルトの名無しさん
2020/07/05(日) 07:24:08.15ID:M+BkbwUs833デフォルトの名無しさん
2020/07/05(日) 07:24:58.59ID:9F15TCk0 しかしよくチンコのサイズテストwにマジで噛みつけるもんだ。
834デフォルトの名無しさん
2020/07/05(日) 07:29:06.68ID:M+BkbwUs835デフォルトの名無しさん
2020/07/05(日) 07:30:17.21ID:M+BkbwUs Chinってちんこのことだったんだな
funcSとかfuncBとかfoo、barみたいに意味がない単語じゃん
コードがクソすぎて意味が伝わらないいい例だな
funcSとかfuncBとかfoo、barみたいに意味がない単語じゃん
コードがクソすぎて意味が伝わらないいい例だな
836デフォルトの名無しさん
2020/07/05(日) 07:34:08.81ID:9F15TCk0 無い場合You are a womanで9以下なら小さい、16越えりゃWow!で名前が
チンテスターなんだからわかってる人間は多いだろうな。
チンテスターなんだからわかってる人間は多いだろうな。
837デフォルトの名無しさん
2020/07/05(日) 07:36:44.58ID:M+BkbwUs838デフォルトの名無しさん
2020/07/05(日) 07:36:59.87ID:9F15TCk0 ちなみにfuncなんとかというのは君の好きなグーグルあたりでも例ではよく使うわな。
BとSもbigとsmallだろうと英語得意なら当たりがつくけどね。なぜABじゃなくてBS
なのか。そもそもoutに出てんだし。
BとSもbigとsmallだろうと英語得意なら当たりがつくけどね。なぜABじゃなくてBS
なのか。そもそもoutに出てんだし。
839デフォルトの名無しさん
2020/07/05(日) 07:38:39.33ID:9F15TCk0840デフォルトの名無しさん
2020/07/05(日) 07:44:01.87ID:M+BkbwUs > intじゃなくてヌルポが出るものがarrayだから
・・・
Java知らんのか?整数かつオブジェクトでも使えばいいじゃないか
具体的には教えてやらんよ。自分で勉強しな
・・・
Java知らんのか?整数かつオブジェクトでも使えばいいじゃないか
具体的には教えてやらんよ。自分で勉強しな
841デフォルトの名無しさん
2020/07/05(日) 07:46:53.71ID:wXNAUX4A privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね
早く死んでね
842デフォルトの名無しさん
2020/07/05(日) 07:49:38.56ID:y7MN16M9843デフォルトの名無しさん
2020/07/05(日) 07:53:17.11ID:M+BkbwUs こういう事やって、NULLチェックが4倍に増えたー、テストも増えたーって
言ってるやつがいるなんて驚き。馬鹿かと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
}
言ってるやつがいるなんて驚き。馬鹿かと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
}
844デフォルトの名無しさん
2020/07/05(日) 07:56:16.74ID:LRfXHt7v プロは俺だけだったか。
845デフォルトの名無しさん
2020/07/05(日) 08:03:19.96ID:FjEgCO9/ そもそもprivateメソッドだからテストしないとか言ってるキチガイにまともな返答なんかいらない
そんなのどこの職場でも認められるわけないから
publicメソッド通したprivateメソッドに自分が想定したケースの値が全部入る保証なんかない
ある特定のケースのみそのメソッドの処理が欲しいときにしか呼んでないことあるだろ
つまりメソッド自体のテストはできてないしその方法でコードカバレッジ100%は無理だし
そもそもpublicから呼び出したprivateのコードカバレッジを100%にするなんて
作業が狂気過ぎてまともな脳みそ持ってるやつならやる前に無駄って理解できる
バカは早く死んでね
そんなのどこの職場でも認められるわけないから
publicメソッド通したprivateメソッドに自分が想定したケースの値が全部入る保証なんかない
ある特定のケースのみそのメソッドの処理が欲しいときにしか呼んでないことあるだろ
つまりメソッド自体のテストはできてないしその方法でコードカバレッジ100%は無理だし
そもそもpublicから呼び出したprivateのコードカバレッジを100%にするなんて
作業が狂気過ぎてまともな脳みそ持ってるやつならやる前に無駄って理解できる
バカは早く死んでね
846デフォルトの名無しさん
2020/07/05(日) 08:06:02.24ID:M+BkbwUs そもそも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つの考え方があります。
パブリックメソッド経由でテストする
別クラスのパブリックメソッドとする
テスト対象の可視性を(やや)上げる
プライベートのまま、リフレクションでアクセスしてテストを書く
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。
この言葉を授けよう
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つの考え方があります。
パブリックメソッド経由でテストする
別クラスのパブリックメソッドとする
テスト対象の可視性を(やや)上げる
プライベートのまま、リフレクションでアクセスしてテストを書く
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。
847デフォルトの名無しさん
2020/07/05(日) 08:10:31.93ID:FjEgCO9/ >>846
そいつプロジェクトで仕事したことあるのか怪しい部類じゃね?
そいつプロジェクトで仕事したことあるのか怪しい部類じゃね?
848デフォルトの名無しさん
2020/07/05(日) 08:16:36.05ID:IUsMolpf publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
849デフォルトの名無しさん
2020/07/05(日) 08:25:21.85ID:9F15TCk0 public通したprivateは単体としては怪しいというのはその通りだけど、
そもそも呼ばれないprivateを書くバカはいないわけで、条件があるから
書いてんだよね。で、条件をpublicの段階でテストするわけだから
ほぼ通ってるわけだよ。
上のチンコテストだとnullから16まで流せば全部通る。
違いは、上の例でprivateにnull突っ込んだらヌルポだわな。そこをテストするのは
コード変えなきゃいけないし、OOの大規模ビジネスソフトではそういうことは
やらない。それをやらなきゃいけない環境なら関数型でもいけるはず。
そもそも呼ばれないprivateを書くバカはいないわけで、条件があるから
書いてんだよね。で、条件をpublicの段階でテストするわけだから
ほぼ通ってるわけだよ。
上のチンコテストだとnullから16まで流せば全部通る。
違いは、上の例でprivateにnull突っ込んだらヌルポだわな。そこをテストするのは
コード変えなきゃいけないし、OOの大規模ビジネスソフトではそういうことは
やらない。それをやらなきゃいけない環境なら関数型でもいけるはず。
850デフォルトの名無しさん
2020/07/05(日) 08:31:48.84ID:ckfZDtdO >>849
できない時点でこの話は終わりさ
やらないわけには行かないんだから
90%できてても残り10%をどうやってもやる方法がないんだから
その方法はどうやっても採用できないし
わざわざする理由もない
別の方法ではできるんだから
できない時点でこの話は終わりさ
やらないわけには行かないんだから
90%できてても残り10%をどうやってもやる方法がないんだから
その方法はどうやっても採用できないし
わざわざする理由もない
別の方法ではできるんだから
851デフォルトの名無しさん
2020/07/05(日) 08:33:02.53ID:9F15TCk0852デフォルトの名無しさん
2020/07/05(日) 08:35:22.60ID:9F15TCk0 >>850
いやだから16まで流せば全部できてるけど。
ビジネス系ではやらないよ。組み込みで全部
テストしなきゃいけないというならわかるので
すれば良い。ただOOの手法とは違う。
デベロッパー千人のところでやってるの?
やってないでしょ?
いやだから16まで流せば全部できてるけど。
ビジネス系ではやらないよ。組み込みで全部
テストしなきゃいけないというならわかるので
すれば良い。ただOOの手法とは違う。
デベロッパー千人のところでやってるの?
やってないでしょ?
853デフォルトの名無しさん
2020/07/05(日) 09:13:35.35ID:iCbhqS6F 通ってればいいっていうなら単体テスト全否定だろw
結合テストなりで全部やりゃいいって話になる。
結合テストなりで全部やりゃいいって話になる。
854デフォルトの名無しさん
2020/07/05(日) 09:23:53.74ID:9F15TCk0 >>853
だからその線引きをどこでやるのかっていう事で、
privateまで全部テストケース書いてエッジケースもネガティブも
全部やるなら関数型で良いんだよ。
別にバカにする気は無いし、関数型のが難しい場面もたくさんあるが、
大規模(デベロッパーだけで数百人)のOOプロジェクトやった事ある?
だからその線引きをどこでやるのかっていう事で、
privateまで全部テストケース書いてエッジケースもネガティブも
全部やるなら関数型で良いんだよ。
別にバカにする気は無いし、関数型のが難しい場面もたくさんあるが、
大規模(デベロッパーだけで数百人)のOOプロジェクトやった事ある?
855デフォルトの名無しさん
2020/07/05(日) 09:30:39.94ID:9F15TCk0 上のチンコの例で言えば、funcSとfuncBのテストをテストケース書いて
コードを書き換えた上でやってドキュメントなりログなりで残すの?
だったらpublicでやれば良いし、そうやってpublicにするなら関数型でも
おんなじ事でしょ。
チンコがnullなのか16以上そこそこでかいのかまでしか関係ないわけで
privateがnullをハンドリングしてないとか無駄なんだよ。もちろん
命に関わるようなところではそれくらいの厳格さが求められる場合も
あるだろうが、普通のビジネスソフトではそこまでやらない。
他のチームが関わる場所を少なくするためにカプセル化するわけで、
そんな全部publicにしたら意味ないんだよ。
コードを書き換えた上でやってドキュメントなりログなりで残すの?
だったらpublicでやれば良いし、そうやってpublicにするなら関数型でも
おんなじ事でしょ。
チンコがnullなのか16以上そこそこでかいのかまでしか関係ないわけで
privateがnullをハンドリングしてないとか無駄なんだよ。もちろん
命に関わるようなところではそれくらいの厳格さが求められる場合も
あるだろうが、普通のビジネスソフトではそこまでやらない。
他のチームが関わる場所を少なくするためにカプセル化するわけで、
そんな全部publicにしたら意味ないんだよ。
856デフォルトの名無しさん
2020/07/05(日) 09:41:54.39ID:LRfXHt7v 弊社はC2カバレッジ100%未満は出荷できませんけどね。
857デフォルトの名無しさん
2020/07/05(日) 09:42:35.87ID:j0cUMVMZ >>854
線引じゃねーよクソ野郎
publicでたまたま呼ばれた1パターンと
privateの網羅テストが同じになってたまるかアホかよ
クラスのなかにあるのでpublicから呼ばれたときだけ動けば
ルーチンとして不出来でもOKなんてあるわけないだろ
お前はクソだからもう死ねよ
線引じゃねーよクソ野郎
publicでたまたま呼ばれた1パターンと
privateの網羅テストが同じになってたまるかアホかよ
クラスのなかにあるのでpublicから呼ばれたときだけ動けば
ルーチンとして不出来でもOKなんてあるわけないだろ
お前はクソだからもう死ねよ
858デフォルトの名無しさん
2020/07/05(日) 09:45:43.25ID:9F15TCk0 >>857
まあじゃあ君はprivateまでテストケース書いてやっとけば良いんじゃない?
誰も止めてないし。大規模ビジネスソフトでは世界的に言って普通ではないというだけで。
僕はあんまり関わることのないレベルの世界だけど、まあ多分一生関わらないので
君が良いならそれで良いと思うよ。
まあじゃあ君はprivateまでテストケース書いてやっとけば良いんじゃない?
誰も止めてないし。大規模ビジネスソフトでは世界的に言って普通ではないというだけで。
僕はあんまり関わることのないレベルの世界だけど、まあ多分一生関わらないので
君が良いならそれで良いと思うよ。
859デフォルトの名無しさん
2020/07/05(日) 09:51:39.34ID:BTTSshKd >>857
君は大変なんだねwテストがんばれーwww
君は大変なんだねwテストがんばれーwww
860デフォルトの名無しさん
2020/07/05(日) 09:54:43.54ID:bzHIXl0a861デフォルトの名無しさん
2020/07/05(日) 10:02:55.49ID:9F15TCk0 >>856
正直QAやってたのは随分前の話だから最近のQAツールは知らんけど、
privateが全部通ってれば100%なわけで、そもそもprivateがある理由は
使われるためなんだから普通は誰も一回も使ってない場合なんかはないわな。
レベルが高くなると通らないケースも出るだろうが。だから線引きってこと。
チンコテストならnullから16までやれば100%通ってる。privateかpublicかって
のは関係ない。ただしprivateはnullをハンドリングしてない。それをどうするかって話。
正直QAやってたのは随分前の話だから最近のQAツールは知らんけど、
privateが全部通ってれば100%なわけで、そもそもprivateがある理由は
使われるためなんだから普通は誰も一回も使ってない場合なんかはないわな。
レベルが高くなると通らないケースも出るだろうが。だから線引きってこと。
チンコテストならnullから16までやれば100%通ってる。privateかpublicかって
のは関係ない。ただしprivateはnullをハンドリングしてない。それをどうするかって話。
862デフォルトの名無しさん
2020/07/05(日) 10:03:22.77ID:iCbhqS6F863デフォルトの名無しさん
2020/07/05(日) 10:05:36.79ID:9F15TCk0864デフォルトの名無しさん
2020/07/05(日) 10:08:05.85ID:9F15TCk0 >>862
だから僕もNTTデータとかは知らんと上に書いてるけれども。
アメリカの大規模ソフトは中の人だし、他の会社のデベロッパも何人も知ってるので、
実際にアメリカの業界は知ってる。
君の「クソブロジェクト」ではないプロジェクトは会社名は出す必要はないが
例えばアメリカのERPとかそのレベルでなんなの?
だから僕もNTTデータとかは知らんと上に書いてるけれども。
アメリカの大規模ソフトは中の人だし、他の会社のデベロッパも何人も知ってるので、
実際にアメリカの業界は知ってる。
君の「クソブロジェクト」ではないプロジェクトは会社名は出す必要はないが
例えばアメリカのERPとかそのレベルでなんなの?
865デフォルトの名無しさん
2020/07/05(日) 10:09:56.64ID:9F15TCk0 だいたい質問を質問で返す人は答えるのに不都合がある人。
数百人のデベロッパーのプロジェクトをやったことなくても全く問題は
ないんだが(ロッキードのミサイルの制御の人とか数百人もいないし)、
「あるよ」とは帰ってこない。
数百人のデベロッパーのプロジェクトをやったことなくても全く問題は
ないんだが(ロッキードのミサイルの制御の人とか数百人もいないし)、
「あるよ」とは帰ってこない。
866デフォルトの名無しさん
2020/07/05(日) 10:15:56.23ID:bzHIXl0a867デフォルトの名無しさん
2020/07/05(日) 10:19:00.51ID:9F15TCk0 >>866
ちょっと弱いかな。「普通はやらんけどやりたかったりやる必要があるならやれば?」
くらい?privateを全部テストケース書いてエッジやネガティブやるとなると多くの場合
サグラダファミリアになるし、普通はやらない。
でもやりたいならやれば良いとは思うのでだいたいそういう感じか。
ちょっと弱いかな。「普通はやらんけどやりたかったりやる必要があるならやれば?」
くらい?privateを全部テストケース書いてエッジやネガティブやるとなると多くの場合
サグラダファミリアになるし、普通はやらない。
でもやりたいならやれば良いとは思うのでだいたいそういう感じか。
868デフォルトの名無しさん
2020/07/05(日) 10:31:49.01ID:BTTSshKd 組み込みおじさんはそこに義務感を感じ、他者に強要するのだろう
難儀なこった
難儀なこった
869デフォルトの名無しさん
2020/07/05(日) 10:37:41.26ID:9F15TCk0 組み込みとかだと多くの場合そもそもOOあんまりいらんと思うのよね。
人工呼吸器の制御とかだときびしくやらないといけないのはわかるし、
やってない人工呼吸器とか俺も付けられたくないけどさw
OOのメソッドとかはちょっと違う話だわな。カプセル化とかは数百人になると
生きてくる。個人的には自分一人の個人プロジェクトでも使うけど。
数年後にまたやる羽目になったりした時に楽なので。
人工呼吸器の制御とかだときびしくやらないといけないのはわかるし、
やってない人工呼吸器とか俺も付けられたくないけどさw
OOのメソッドとかはちょっと違う話だわな。カプセル化とかは数百人になると
生きてくる。個人的には自分一人の個人プロジェクトでも使うけど。
数年後にまたやる羽目になったりした時に楽なので。
870デフォルトの名無しさん
2020/07/05(日) 10:45:19.20ID:MQ9nuMmc871デフォルトの名無しさん
2020/07/05(日) 10:53:33.35ID:kFjTOHVy >>867
どこに差があるのかよくわからんが、どちらにしても一行目は問題ないにしても
二行目はここに存在しない敵を攻撃している印象。
いちいち関係ない話を絡めなくてもいいじゃんと思うが、二度も書くということは
そっちが主張したい本音ということかな?
どこに差があるのかよくわからんが、どちらにしても一行目は問題ないにしても
二行目はここに存在しない敵を攻撃している印象。
いちいち関係ない話を絡めなくてもいいじゃんと思うが、二度も書くということは
そっちが主張したい本音ということかな?
872デフォルトの名無しさん
2020/07/05(日) 10:55:30.48ID:sn+7aSX4 OOPは理解している人とOOPを理解していない人が単体テストについて不毛な争いをするスレかな?
873デフォルトの名無しさん
2020/07/05(日) 10:58:45.46ID:9F15TCk0 >>871
いや、元々がpublicじゃなくてprivate単位でやれという話からなんだからその話だよ。
publicでprivateの分岐通ってるなら良いじゃんといなら誰も否定していないのでは?
逆にprivateで一度も通ってない部分があっても良いじゃんとも言っていないような。
if文書くのに絶対通らない物を書く人いるわけないでしょw
ただ、公式なテストとして、privateのレベルでテストケース書いてログ残してコード
書き換えてコンパイルし直してやるというのは少なくとも普通のビジネスのソフトとしては
一般的なベストプラクティスではないし普通はアメリカの大手一流ではやらないということ。
例外はあるとしても。
いや、元々がpublicじゃなくてprivate単位でやれという話からなんだからその話だよ。
publicでprivateの分岐通ってるなら良いじゃんといなら誰も否定していないのでは?
逆にprivateで一度も通ってない部分があっても良いじゃんとも言っていないような。
if文書くのに絶対通らない物を書く人いるわけないでしょw
ただ、公式なテストとして、privateのレベルでテストケース書いてログ残してコード
書き換えてコンパイルし直してやるというのは少なくとも普通のビジネスのソフトとしては
一般的なベストプラクティスではないし普通はアメリカの大手一流ではやらないということ。
例外はあるとしても。
874デフォルトの名無しさん
2020/07/05(日) 11:03:24.23ID:LRfXHt7v 土台が腐ってたら。
全部検査するほうが楽。
全部検査するほうが楽。
875デフォルトの名無しさん
2020/07/05(日) 11:04:34.60ID:9F15TCk0 幸いそういうのには当たったことはないw
上に書いたように例外は認める。
上に書いたように例外は認める。
876デフォルトの名無しさん
2020/07/05(日) 11:09:23.64ID:MQ9nuMmc アメリカの大手一流ってどこだろ?
877デフォルトの名無しさん
2020/07/05(日) 11:11:04.89ID:MQ9nuMmc アメリカや大手や一流が正しいとは限らないけどね
ボーイングの飛行機があんなことになってるように
ボーイングの飛行機があんなことになってるように
878デフォルトの名無しさん
2020/07/05(日) 11:11:13.65ID:9F15TCk0 まあ会社的にはプログラマなら全員知ってるとこ。それ以上は言わん。
879デフォルトの名無しさん
2020/07/05(日) 11:13:19.35ID:9F15TCk0 >>877
だからボーイングの制御系とかはそもそも全然別の話。
もちろん正しいとは限らないけど標準なのは確かだわな。
日本初のOOより優れたこういうメソッドがある!というなら
もちろん喜んで聞くけどね。
だからボーイングの制御系とかはそもそも全然別の話。
もちろん正しいとは限らないけど標準なのは確かだわな。
日本初のOOより優れたこういうメソッドがある!というなら
もちろん喜んで聞くけどね。
880デフォルトの名無しさん
2020/07/05(日) 11:14:37.74ID:kFjTOHVy >いや、元々がpublicじゃなくてprivate単位でやれという話からなんだからその話だよ。
>ublicでprivateの分岐通ってるなら良いじゃんといなら誰も否定していないのでは?
そう、それが一致しているならいちいち関係ない話を絡めなくてもいいんでは?
public経由のテストで十分網羅できるのにそれでもprivateメソッド単位のテストが
必要なんて主張している人いたかな?そこに誤解があるんじゃないの?
>ublicでprivateの分岐通ってるなら良いじゃんといなら誰も否定していないのでは?
そう、それが一致しているならいちいち関係ない話を絡めなくてもいいんでは?
public経由のテストで十分網羅できるのにそれでもprivateメソッド単位のテストが
必要なんて主張している人いたかな?そこに誤解があるんじゃないの?
881デフォルトの名無しさん
2020/07/05(日) 11:15:16.65ID:9F15TCk0 >>880
いるから揉めてるんすよ。
いるから揉めてるんすよ。
882デフォルトの名無しさん
2020/07/05(日) 11:16:31.89ID:M+BkbwUs >>881
それはどれ?レスを教えて
それはどれ?レスを教えて
883デフォルトの名無しさん
2020/07/05(日) 11:17:47.72ID:MQ9nuMmc アメリカの大手の一流がそうしてるから正しいのだという権威にすがった論理を
展開されておられたのでその会社ってどちらの会社なのって聞いてみたんだけど
そんな会社本当にあるの?
展開されておられたのでその会社ってどちらの会社なのって聞いてみたんだけど
そんな会社本当にあるの?
884デフォルトの名無しさん
2020/07/05(日) 11:18:34.49ID:MQ9nuMmc t_wadaの次はアメリカの大手一流か、議論の根拠が権威ばっかりやな
885デフォルトの名無しさん
2020/07/05(日) 11:21:40.50ID:9F15TCk0 例えばこの方。
848デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
メソッド全部ちゃんとエッジケースやネガティブまでやれって業界があるのは
わかるし、必要だとも思うけど、それはOOのビジネス系だでは普通やらないということを
言ってただけなんだけど、バカだアホだお前は素人だといろんな方面から変に噛みつく
やつばかりでもう僕はいやになっちゃった。この人が噛み付いてきたということではないよ。
もちろんまともな人のが多いんだろうけどおかしな人のが目立つからね。
848デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
メソッド全部ちゃんとエッジケースやネガティブまでやれって業界があるのは
わかるし、必要だとも思うけど、それはOOのビジネス系だでは普通やらないということを
言ってただけなんだけど、バカだアホだお前は素人だといろんな方面から変に噛みつく
やつばかりでもう僕はいやになっちゃった。この人が噛み付いてきたということではないよ。
もちろんまともな人のが多いんだろうけどおかしな人のが目立つからね。
886デフォルトの名無しさん
2020/07/05(日) 11:22:22.08ID:/MeFbFCW いちいち論点ずらすな。
お前ら、何で争ってるんだよ。
お前ら、何で争ってるんだよ。
887デフォルトの名無しさん
2020/07/05(日) 11:23:41.69ID:MQ9nuMmc OOのビジネス系ってどんな仕事?
そんないい加減なことやっていい仕事ある?
トラブってもうちうちでなーなーで済むようなBtoBの仕事?
自社内でしか使わないシステムとか?
そんないい加減なことやっていい仕事ある?
トラブってもうちうちでなーなーで済むようなBtoBの仕事?
自社内でしか使わないシステムとか?
888デフォルトの名無しさん
2020/07/05(日) 11:24:18.36ID:9F15TCk0 アメリカの大手一流が不満なら自分の業界の実例をあげたらいかがだろうか?
privateをテストケース書いて全件やってるとこなんておそらくないぞ。あるというならあげれば良いだけの話。
テストツールどうやって動いてるねん。コード自動で書き換えてコンパイルし直しか。話がおかしいのすぐわかるだろ。
privateをテストケース書いて全件やってるとこなんておそらくないぞ。あるというならあげれば良いだけの話。
テストツールどうやって動いてるねん。コード自動で書き換えてコンパイルし直しか。話がおかしいのすぐわかるだろ。
889デフォルトの名無しさん
2020/07/05(日) 11:24:52.69ID:/MeFbFCW まず、このスレの連中は議論する前に論理学を学ぶことをお勧めするよ。
あと、詭弁について調べろ。
あと、詭弁について調べろ。
890デフォルトの名無しさん
2020/07/05(日) 11:25:24.17ID:MQ9nuMmc >>888
アメリカの大手一流ってどこの会社なん?
アメリカの大手一流ってどこの会社なん?
891デフォルトの名無しさん
2020/07/05(日) 11:25:52.62ID:9F15TCk0892デフォルトの名無しさん
2020/07/05(日) 11:26:35.07ID:9F15TCk0 >>890
君の会社はどこなん?
君の会社はどこなん?
893デフォルトの名無しさん
2020/07/05(日) 11:27:26.12ID:MQ9nuMmc894デフォルトの名無しさん
2020/07/05(日) 11:27:47.35ID:kFjTOHVy >>885
それは網羅してないからダメという意見では?
そこに反論するならば「privateのテストを強制すべきではない」ではなく
「public経由でも網羅することは可能」ではないかね?(できるなら)
それは網羅してないからダメという意見では?
そこに反論するならば「privateのテストを強制すべきではない」ではなく
「public経由でも網羅することは可能」ではないかね?(できるなら)
895デフォルトの名無しさん
2020/07/05(日) 11:27:51.75ID:9F15TCk0896デフォルトの名無しさん
2020/07/05(日) 11:28:29.72ID:MQ9nuMmc897デフォルトの名無しさん
2020/07/05(日) 11:28:59.86ID:YdQ981ul >>870
新しい理論や手法を提唱する人には良くあることだと思うけど、その理論はある前提、ある側面では正しいけど、常に無条件に適用することは正しくないと本人は分かっていて、敢えてそういうことはわざわざ詳しくは説明しない。自分の論が有用な物だと主張したいがため、嘘はつかない範囲で相手が勝手に誤解してすごいと思わせるような物言いをする。
で、その理論に感銘を受けた人の一部が、理論の表面的な効能だけをありがたく受け取って問題点や前提条件などは正しく理解しないまま、受け売りの知識を他所で披露する。
そこで議論になると、本質をちゃんと理解してないまま自説を擁護しようとするから、無理が生じたり話が噛み合わなかったりする。
という流れでイマココなのかなと思う。
新しい理論や手法を提唱する人には良くあることだと思うけど、その理論はある前提、ある側面では正しいけど、常に無条件に適用することは正しくないと本人は分かっていて、敢えてそういうことはわざわざ詳しくは説明しない。自分の論が有用な物だと主張したいがため、嘘はつかない範囲で相手が勝手に誤解してすごいと思わせるような物言いをする。
で、その理論に感銘を受けた人の一部が、理論の表面的な効能だけをありがたく受け取って問題点や前提条件などは正しく理解しないまま、受け売りの知識を他所で披露する。
そこで議論になると、本質をちゃんと理解してないまま自説を擁護しようとするから、無理が生じたり話が噛み合わなかったりする。
という流れでイマココなのかなと思う。
898デフォルトの名無しさん
2020/07/05(日) 11:29:53.38ID:MQ9nuMmc >>897
なるほどね、わかる気がする
なるほどね、わかる気がする
899デフォルトの名無しさん
2020/07/05(日) 11:29:56.16ID:M+BkbwUs 大手一流の名前を言うだけで逃げそう(笑)
900デフォルトの名無しさん
2020/07/05(日) 11:33:32.02ID:MQ9nuMmc 足ガクガクになってまうよー
901デフォルトの名無しさん
2020/07/05(日) 11:36:47.20ID:Ua1+WoRk まぁ、単体テストでprivateを直接呼び出すのは変な話だけどな。
デバッグならともかく、単体テストでリフレクションによるprivate強制実行とか反則でしょ。
デバッグで許される理由は、バグを見つける可能性があるから。
単体テストで駄目な理由は、テストの合否判定が不当に変わる恐れがあるから。
というのが自分の見解だが、皆さんはどう?
スレが加速してからの途中参加だから、自分の発言に自信ないけど。
デバッグならともかく、単体テストでリフレクションによるprivate強制実行とか反則でしょ。
デバッグで許される理由は、バグを見つける可能性があるから。
単体テストで駄目な理由は、テストの合否判定が不当に変わる恐れがあるから。
というのが自分の見解だが、皆さんはどう?
スレが加速してからの途中参加だから、自分の発言に自信ないけど。
902デフォルトの名無しさん
2020/07/05(日) 11:37:26.26ID:9F15TCk0 >>894
そもそもpublicを経由するのが網羅してないから、経由せずにprivate単位で
コード書き換えてテストやるべきという主張自体がOO的にはおかしいわけです。
見せたくないからprivateなわけで。
もちろんデベロッパー個人でコード入れて確認することはあるだろうけれども、
開発手順としてテストケース書いてログ残してというのは違う。
public経由で内部を網羅してるかしてないかは知ったことではない、というのが正解。
上の例で言えばfuncBやfuncSがnullをチェックしてようがしていまいが他のチームには
関係ないわけです。入り口でnullチェックしてれば。
個人的にはサイズがでかければprivateでも入れるけども、それをテストケース書いて
ログ残してと要求されたことはないし、普通はされんはず。少なくともアメリカでは。
そもそもpublicを経由するのが網羅してないから、経由せずにprivate単位で
コード書き換えてテストやるべきという主張自体がOO的にはおかしいわけです。
見せたくないからprivateなわけで。
もちろんデベロッパー個人でコード入れて確認することはあるだろうけれども、
開発手順としてテストケース書いてログ残してというのは違う。
public経由で内部を網羅してるかしてないかは知ったことではない、というのが正解。
上の例で言えばfuncBやfuncSがnullをチェックしてようがしていまいが他のチームには
関係ないわけです。入り口でnullチェックしてれば。
個人的にはサイズがでかければprivateでも入れるけども、それをテストケース書いて
ログ残してと要求されたことはないし、普通はされんはず。少なくともアメリカでは。
903デフォルトの名無しさん
2020/07/05(日) 11:38:33.09ID:MQ9nuMmc GoogleであってもMicrosoftやOracleもバグのないソフトは作れないし
銀の弾丸的な手法があるわけもなく、アメリカ、大手、一流という箔付けに頼ってるだけでしかない
銀の弾丸的な手法があるわけもなく、アメリカ、大手、一流という箔付けに頼ってるだけでしかない
904デフォルトの名無しさん
2020/07/05(日) 11:41:45.16ID:Xwol7cCi905デフォルトの名無しさん
2020/07/05(日) 11:43:37.87ID:9F15TCk0 >>896
君の会社はどこなの?
アメリカ大手1流でブライベート単位でのテストケース書いたりした網羅的なテストは「していない」という証明は悪魔の証明だから無理だけど。全社で働いたわけじゃないし。
逆にアメリカ大手1流でやっているという証明は一件出すだけなのでGAFAのどこでも、マイクロソフトでもアドビでも簡単にできるのでぜひどうぞ。
ただ、なんかコピペで爆撃されたオートメーションツールでは、特にコンパイル必要な言語は、直接privateテスト出来ないよ。当たり前の話。
君の会社はどこなの?
アメリカ大手1流でブライベート単位でのテストケース書いたりした網羅的なテストは「していない」という証明は悪魔の証明だから無理だけど。全社で働いたわけじゃないし。
逆にアメリカ大手1流でやっているという証明は一件出すだけなのでGAFAのどこでも、マイクロソフトでもアドビでも簡単にできるのでぜひどうぞ。
ただ、なんかコピペで爆撃されたオートメーションツールでは、特にコンパイル必要な言語は、直接privateテスト出来ないよ。当たり前の話。
906デフォルトの名無しさん
2020/07/05(日) 11:45:23.06ID:MQ9nuMmc >>905
アメリカの大手一流ってどこなんよ?
アメリカの大手一流ってどこなんよ?
907デフォルトの名無しさん
2020/07/05(日) 11:45:48.03ID:MQ9nuMmc その会社がやってるからすごいんでしょ、はよ教えてやー
908デフォルトの名無しさん
2020/07/05(日) 11:47:16.10ID:MQ9nuMmc もう何でもええから言うて、そしたら僕がすごーいって言うから、もうそれでええやんか
909デフォルトの名無しさん
2020/07/05(日) 11:49:23.59ID:9F15TCk0 また別IDが下痢便とか発狂し始めた。
お前はほんとにウンコとかそのレベルのことが好きだな。
お前はほんとにウンコとかそのレベルのことが好きだな。
910デフォルトの名無しさん
2020/07/05(日) 11:51:02.27ID:9F15TCk0911デフォルトの名無しさん
2020/07/05(日) 11:51:58.59ID:MQ9nuMmc >>910
アメリカの大手一流ってどこなんよ?
アメリカの大手一流ってどこなんよ?
912デフォルトの名無しさん
2020/07/05(日) 11:52:54.88ID:MQ9nuMmc たぶんアップルは単体テストやってない、SSLでアホなバグだしてたから、あの会社適当だわ、しらんけど
913デフォルトの名無しさん
2020/07/05(日) 11:53:26.19ID:9F15TCk0 >>911
君が自分の名刺でもあげたら考えとくわー
君が自分の名刺でもあげたら考えとくわー
914デフォルトの名無しさん
2020/07/05(日) 11:55:12.71ID:MQ9nuMmc915デフォルトの名無しさん
2020/07/05(日) 11:55:58.39ID:M+BkbwUs >>902
> そもそもpublicを経由するのが網羅してないから、経由せずにprivate単位で
> コード書き換えてテストやるべきという主張自体がOO的にはおかしいわけです。
誰がそんなこと言ってるの?
少なく遠も俺は
1. privateはpublic経由でテストすれば十分
2. もしpublic経由でテストできないほど複雑なら、そもそも設計がおかしい
3. 設計の問題を修正して、責務を分割すれば、自然にpublicになるはず
と言ってる。
テストするためにpublicにするのではなく
問題がある設計を直せばpublicになる。と言っている。
> そもそもpublicを経由するのが網羅してないから、経由せずにprivate単位で
> コード書き換えてテストやるべきという主張自体がOO的にはおかしいわけです。
誰がそんなこと言ってるの?
少なく遠も俺は
1. privateはpublic経由でテストすれば十分
2. もしpublic経由でテストできないほど複雑なら、そもそも設計がおかしい
3. 設計の問題を修正して、責務を分割すれば、自然にpublicになるはず
と言ってる。
テストするためにpublicにするのではなく
問題がある設計を直せばpublicになる。と言っている。
916デフォルトの名無しさん
2020/07/05(日) 11:55:59.42ID:9F15TCk0917デフォルトの名無しさん
2020/07/05(日) 11:58:34.47ID:9F15TCk0 >>915
いや だ か ら この人。
848デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
いや だ か ら この人。
848デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
918デフォルトの名無しさん
2020/07/05(日) 11:59:21.06ID:MQ9nuMmc アップルのSSLのバグはこれね
Apple史上最悪のセキュリティバグか、iOSとOS XのSSL接続に危険すぎる脆弱性が発覚──原因はタイプミス?
https://appllio.com/20140223-4899-apple-ios-bug-ssl-goto-fail
Apple史上最悪のセキュリティバグか、iOSとOS XのSSL接続に危険すぎる脆弱性が発覚──原因はタイプミス?
https://appllio.com/20140223-4899-apple-ios-bug-ssl-goto-fail
919デフォルトの名無しさん
2020/07/05(日) 12:06:18.88ID:wqV8YbJ4 IUsMolpfに文句言えばいいのに。
920デフォルトの名無しさん
2020/07/05(日) 12:07:47.85ID:kFjTOHVy >>902
ああつまり、重要度は関数仕様>ブラックボックステスト>ホワイトボックステストだから
テストのために仕様変更はすべきでないという主張か。
それはわからんでもない気はするけど、そういうウォーターフォールが絶対というわけでもないしな。
その是非はさておき、そこが論点なら例えばリフレクションのような形でテストできたり、あるいは
テスト仕様を書く本人が関数仕様も決定することができる条件なら全然問題ないわけだ。
ああつまり、重要度は関数仕様>ブラックボックステスト>ホワイトボックステストだから
テストのために仕様変更はすべきでないという主張か。
それはわからんでもない気はするけど、そういうウォーターフォールが絶対というわけでもないしな。
その是非はさておき、そこが論点なら例えばリフレクションのような形でテストできたり、あるいは
テスト仕様を書く本人が関数仕様も決定することができる条件なら全然問題ないわけだ。
921デフォルトの名無しさん
2020/07/05(日) 12:07:48.24ID:9F15TCk0922デフォルトの名無しさん
2020/07/05(日) 12:08:47.51ID:MQ9nuMmc >>921
せやろw
せやろw
923デフォルトの名無しさん
2020/07/05(日) 12:13:26.38ID:9F15TCk0924デフォルトの名無しさん
2020/07/05(日) 12:16:58.82ID:kFjTOHVy >なんにしてもprivateを(例外はあるにせよ)全部公式な形でテストしろというのは
>OOの手法のプロジェクトでは「普通は」やらんというだけなのになんでこんな揉めるのか。
全部やれなんて主張している人がいないから。
>OOの手法のプロジェクトでは「普通は」やらんというだけなのになんでこんな揉めるのか。
全部やれなんて主張している人がいないから。
925デフォルトの名無しさん
2020/07/05(日) 12:19:09.22ID:9F15TCk0 >>924
だからいるだろうが。本人なの?
848デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
だからいるだろうが。本人なの?
848デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
926デフォルトの名無しさん
2020/07/05(日) 12:20:23.64ID:MQ9nuMmc927デフォルトの名無しさん
2020/07/05(日) 12:21:30.51ID:MQ9nuMmc privateメソッドが正しいことは確認する、その上でpublicのメソッドが正しいかテストするって感じ
928デフォルトの名無しさん
2020/07/05(日) 12:30:30.98ID:kFjTOHVy >>925
これが「privateのテストを全部やれ」に読めてしまうのか。そこが原因だな。
これが「privateのテストを全部やれ」に読めてしまうのか。そこが原因だな。
929デフォルトの名無しさん
2020/07/05(日) 12:32:35.17ID:M+BkbwUs >>923
> ウォーターフォールは関係ないし、重要度をつけてるわけでもないけれども、
> 普通はprivateはソースコード変えてまでテストするものではないというだけの単純な話。
テスト中に設計の問題が発覚しても
ソースコード書き換えないの?
ソースコード変えてまでテストするものではないというけど
なんでソースコードを作成&自分が書いたそのコードをテストしてるときに
自分が作成してるソースコードを変えたらだめなの?
> ウォーターフォールは関係ないし、重要度をつけてるわけでもないけれども、
> 普通はprivateはソースコード変えてまでテストするものではないというだけの単純な話。
テスト中に設計の問題が発覚しても
ソースコード書き換えないの?
ソースコード変えてまでテストするものではないというけど
なんでソースコードを作成&自分が書いたそのコードをテストしてるときに
自分が作成してるソースコードを変えたらだめなの?
930デフォルトの名無しさん
2020/07/05(日) 12:36:24.73ID:M+BkbwUs 普通の開発だったら
0. なにかの修正を行う必要が発生する
1. その修正のためにソースコードを修正する
2. 修正したコードが正しいかテストする
3. 1〜2を繰り返し修正したコードに問題がなければ開発完了
4. 統合テストとかより大きなテストを行う
でしょ?
public・privateメソッドをテストしたいっていうのは
この1〜2のフェーズで発生することなのに、
なんでテストがやりにくいなと思ったときに
ソースコードを修正したらだめなの?
0. なにかの修正を行う必要が発生する
1. その修正のためにソースコードを修正する
2. 修正したコードが正しいかテストする
3. 1〜2を繰り返し修正したコードに問題がなければ開発完了
4. 統合テストとかより大きなテストを行う
でしょ?
public・privateメソッドをテストしたいっていうのは
この1〜2のフェーズで発生することなのに、
なんでテストがやりにくいなと思ったときに
ソースコードを修正したらだめなの?
931デフォルトの名無しさん
2020/07/05(日) 12:38:58.81ID:wqV8YbJ4 >>926
スマホでも見やすくなったな。
あー、なるほど。
でも、サンプルみたら少し混乱してきた。
自分はクラスの単体テストをイメージしてたけど、まさか、Mainクラスの中に定義されたprivateメソッドの単体テスト(?)の話をしていたとか?
もう単体テストの意味が少し崩壊してきたが...
スマホでも見やすくなったな。
あー、なるほど。
でも、サンプルみたら少し混乱してきた。
自分はクラスの単体テストをイメージしてたけど、まさか、Mainクラスの中に定義されたprivateメソッドの単体テスト(?)の話をしていたとか?
もう単体テストの意味が少し崩壊してきたが...
932デフォルトの名無しさん
2020/07/05(日) 12:46:16.73ID:BTTSshKd どういう流れなのか追うのもめんどいなw
933デフォルトの名無しさん
2020/07/05(日) 12:52:51.86ID:9F15TCk0 >>928
そもそも300くらいからそういう話だから。
privateはpublicからアクセスして全部網羅できるから問題ないなんて
誰も否定してないしそういうことならもともと荒れてない。
>>929
あのさ、例えばバグが発生したらコード書き換えるのは当たり前だよね?
そんな話では当然ないよね?
privateを直接テストするためには外部から呼べないのだから、呼ぶためには
クラス内に書くしかないわけだよ。で、ソースに書き込んでクラス内に書いて
テストしたあとまたそのコードを取り除いてとかするの?それをドキュメント化
する?
普通はコード書いてる最中にテストコードを入れて確認するのは公式なテストの
メソッドでは無いし、それをドキュメント化したりするのは求められないと
思うが。
>>926
ワロタw
けどそうじゃ無い。privateで直接アクセスした時のみnullがでるということ。
intじゃ無いのは例のためにわざとそうなっている。あとchinTestが呼ばれてないし、
OptionalにisEmpty無いのでは。
そもそも300くらいからそういう話だから。
privateはpublicからアクセスして全部網羅できるから問題ないなんて
誰も否定してないしそういうことならもともと荒れてない。
>>929
あのさ、例えばバグが発生したらコード書き換えるのは当たり前だよね?
そんな話では当然ないよね?
privateを直接テストするためには外部から呼べないのだから、呼ぶためには
クラス内に書くしかないわけだよ。で、ソースに書き込んでクラス内に書いて
テストしたあとまたそのコードを取り除いてとかするの?それをドキュメント化
する?
普通はコード書いてる最中にテストコードを入れて確認するのは公式なテストの
メソッドでは無いし、それをドキュメント化したりするのは求められないと
思うが。
>>926
ワロタw
けどそうじゃ無い。privateで直接アクセスした時のみnullがでるということ。
intじゃ無いのは例のためにわざとそうなっている。あとchinTestが呼ばれてないし、
OptionalにisEmpty無いのでは。
934デフォルトの名無しさん
2020/07/05(日) 12:54:31.17ID:9F15TCk0 nullがでる->ヌルポがでる
935デフォルトの名無しさん
2020/07/05(日) 12:54:57.72ID:M+BkbwUs >>933
> privateを直接テストするためには外部から呼べないのだから、呼ぶためには
> クラス内に書くしかないわけだよ。で、ソースに書き込んでクラス内に書いて
> テストしたあとまたそのコードを取り除いてとかするの?それをドキュメント化
> する?
誰がそんな事するって言ってんの?
お前が想像が間違ってる
> privateを直接テストするためには外部から呼べないのだから、呼ぶためには
> クラス内に書くしかないわけだよ。で、ソースに書き込んでクラス内に書いて
> テストしたあとまたそのコードを取り除いてとかするの?それをドキュメント化
> する?
誰がそんな事するって言ってんの?
お前が想像が間違ってる
936デフォルトの名無しさん
2020/07/05(日) 12:56:01.25ID:MQ9nuMmc >>933
えっとごめんそのnullの問題は設計が下手なだけだと思ってて、設計を見直すべきかと
privateのテストをどうしますかの例として出したので問題ないっしょ
君はこのプログラムをどうやってテストするん?
えっとごめんそのnullの問題は設計が下手なだけだと思ってて、設計を見直すべきかと
privateのテストをどうしますかの例として出したので問題ないっしょ
君はこのプログラムをどうやってテストするん?
937デフォルトの名無しさん
2020/07/05(日) 12:56:34.25ID:3WDjCjSx よくもまあ粉薬をオブラートで包むような話でこれだけのレスで盛り上がれるなー
938デフォルトの名無しさん
2020/07/05(日) 12:57:28.17ID:M+BkbwUs いやーびっくりだw
設計がおかしいから設計を修正するって話をしてるのに
設計を修正した後に修正前に戻すなんでやらないだろ!って言われちゃった(笑)
だーれも修正前に戻すなんて言ってないの
おかしい設計を修正して「開発完了」なの
設計がおかしいから設計を修正するって話をしてるのに
設計を修正した後に修正前に戻すなんでやらないだろ!って言われちゃった(笑)
だーれも修正前に戻すなんて言ってないの
おかしい設計を修正して「開発完了」なの
939デフォルトの名無しさん
2020/07/05(日) 12:57:46.31ID:JiRnWiGC たぶん、スレタイがスレタイだから、手続き型でプログラムを書く人のイメージする単体テストとオブジェクト指向プログラマーのイメージする単体テストで齟齬が生じているのでは?
そりゃ、サンプルみたいに関数が定義されていたらprivateだろうと関数はテストするべきって発想になるのは不思議じゃないし、オブジェクト指向に基づき設計されたクラスを単体テストする話であれば、privateをテストって、どういう意味なんだろって不思議がるだろうよ。
そして、たぶん、サンプルコードに対して真っ先に突っ込むべき点はOOPでも何でもないコードという点だと思うのだが、そこはいいのかな?
そりゃ、サンプルみたいに関数が定義されていたらprivateだろうと関数はテストするべきって発想になるのは不思議じゃないし、オブジェクト指向に基づき設計されたクラスを単体テストする話であれば、privateをテストって、どういう意味なんだろって不思議がるだろうよ。
そして、たぶん、サンプルコードに対して真っ先に突っ込むべき点はOOPでも何でもないコードという点だと思うのだが、そこはいいのかな?
940デフォルトの名無しさん
2020/07/05(日) 12:57:47.49ID:MQ9nuMmc OptionalにisEmptyが無いというのは何言ってるのかわからない
本当になかったらコンパイルに失敗するよ
本当になかったらコンパイルに失敗するよ
941デフォルトの名無しさん
2020/07/05(日) 13:00:08.78ID:M+BkbwUs942デフォルトの名無しさん
2020/07/05(日) 13:00:23.50ID:MQ9nuMmc943デフォルトの名無しさん
2020/07/05(日) 13:00:34.24ID:9F15TCk0944デフォルトの名無しさん
2020/07/05(日) 13:03:47.50ID:MQ9nuMmc >>943
ヌルポになるような設計はおかしいのがそれはコーディング力の稚拙さゆえ。
だから、いまはそのヌルポの問題は置いておこう。
さて、君はこのプログラムをどうテストするのか教えて欲しいっていうのが僕の要望だよ。
ヌルポになるような設計はおかしいのがそれはコーディング力の稚拙さゆえ。
だから、いまはそのヌルポの問題は置いておこう。
さて、君はこのプログラムをどうテストするのか教えて欲しいっていうのが僕の要望だよ。
945デフォルトの名無しさん
2020/07/05(日) 13:06:51.97ID:9F15TCk0 >>944
いやだから そ う じ ゃ な く て
privateでだけヌルポが出るように書いてるの。privateとpublicのテストの話だから。
出さないだけならnullチェック入れれば良いだけの話だが、そういうことじゃ無くて
わざと出るようになってるの。
そのプログラムならstaticなのだからそのまま呼べば良いし、
chinTestも呼ばれてないけどpublicなのだからテストしたければそのまま
呼べば良い話。
いやだから そ う じ ゃ な く て
privateでだけヌルポが出るように書いてるの。privateとpublicのテストの話だから。
出さないだけならnullチェック入れれば良いだけの話だが、そういうことじゃ無くて
わざと出るようになってるの。
そのプログラムならstaticなのだからそのまま呼べば良いし、
chinTestも呼ばれてないけどpublicなのだからテストしたければそのまま
呼べば良い話。
946デフォルトの名無しさん
2020/07/05(日) 13:10:29.02ID:JiRnWiGC >>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()
こんな風に内部実装を知らなくても呼べる。
スマホだからインデントとか崩れは許してほしいが
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()
こんな風に内部実装を知らなくても呼べる。
947デフォルトの名無しさん
2020/07/05(日) 13:11:36.99ID:MQ9nuMmc >>945
わざと出るように入れたのが現実の実装と乖離してるので、わざと入れる意味が無いので
気にする必要ないですよってこと
君はpublic経由でprivateをテストするんだって立場ですよね
君はどうテストを書きますかってことを教えて欲しいです
君の元のコードでもいいですよ、僕が変更したコードでも良いですよ
君はどうprivateをテストしますか?
わざと出るように入れたのが現実の実装と乖離してるので、わざと入れる意味が無いので
気にする必要ないですよってこと
君はpublic経由でprivateをテストするんだって立場ですよね
君はどうテストを書きますかってことを教えて欲しいです
君の元のコードでもいいですよ、僕が変更したコードでも良いですよ
君はどうprivateをテストしますか?
948デフォルトの名無しさん
2020/07/05(日) 13:12:18.35ID:JiRnWiGC 残念ながら、クラスを使えばOOPという認識は間違い。
949デフォルトの名無しさん
2020/07/05(日) 13:13:15.86ID:MQ9nuMmc >>948
僕は君の認識が間違いだと思ってる、君の方が残念
僕は君の認識が間違いだと思ってる、君の方が残念
950デフォルトの名無しさん
2020/07/05(日) 13:13:55.43ID:MQ9nuMmc クラスの存在こそがOOPの本質
951デフォルトの名無しさん
2020/07/05(日) 13:13:59.63ID:JiRnWiGC え、そこに反論されるの?
何このスレ。
何このスレ。
952デフォルトの名無しさん
2020/07/05(日) 13:14:57.78ID:JiRnWiGC JavaScriptとかpythonとか、元々、クラスはサポートしていないのに?
プロトタイプベースはオブジェクト指向じゃないとでも?
プロトタイプベースはオブジェクト指向じゃないとでも?
953デフォルトの名無しさん
2020/07/05(日) 13:17:49.53ID:MQ9nuMmc >>951
えじゃねえよ、なめんなよ
えじゃねえよ、なめんなよ
954デフォルトの名無しさん
2020/07/05(日) 13:18:05.20ID:9F15TCk0 >>947
意味がないどころか、そこにしか意味がないんだよ。
それ「だけ」を見せるためのコードなんだから。staticとか
なら話の流れとなんにも関係がないのでそれこそ意味がない。
でもあえていうなら、そもそもまず連打が好きじゃ無い。自分ならループにするけど、
それだけでもない。
まず壊すようにテストすんの。null入れたり、変なオブジェクト入れたり。
で、privateをテストするんじゃなくて、要件通り動くかどうか。nullからint maxまで
回して、要件通りの結果が全てでくるか。変なオブジェクト入れたらどうか。
そういう感じ。
でも最初に書いたように、publicとprivateの話なんだから、そこで
エラーが出るか出ないかがないとこのスレ的にはなんの意味もない。
意味がないどころか、そこにしか意味がないんだよ。
それ「だけ」を見せるためのコードなんだから。staticとか
なら話の流れとなんにも関係がないのでそれこそ意味がない。
でもあえていうなら、そもそもまず連打が好きじゃ無い。自分ならループにするけど、
それだけでもない。
まず壊すようにテストすんの。null入れたり、変なオブジェクト入れたり。
で、privateをテストするんじゃなくて、要件通り動くかどうか。nullからint maxまで
回して、要件通りの結果が全てでくるか。変なオブジェクト入れたらどうか。
そういう感じ。
でも最初に書いたように、publicとprivateの話なんだから、そこで
エラーが出るか出ないかがないとこのスレ的にはなんの意味もない。
955デフォルトの名無しさん
2020/07/05(日) 13:18:37.20ID:MQ9nuMmc956デフォルトの名無しさん
2020/07/05(日) 13:19:41.30ID:9F15TCk0 クラスの存在はOOPの大事な部分だけど、OOPの言語を使ってもほとんどOOPでは
無いというのはよくある話。巨大クラス一個とかだと頭を抱える。
無いというのはよくある話。巨大クラス一個とかだと頭を抱える。
957デフォルトの名無しさん
2020/07/05(日) 13:22:07.34ID:MQ9nuMmc >>954
現実にありえない実装見せて、ほらね、と言われても僕は戸惑うばかり
そんな現実にありえないことを想定するからまずいんじゃないですかね
現実にそういうコード書いてるんじゃないかと僕はちょっと君のコーディング力を
疑わしく思ってきたのだけれども
public経由で、標準出力に出力するようなprivateコードを一生懸命テストしますか?
がんばり屋さんだなとは思うけど、効率悪くないですかね
現実にありえない実装見せて、ほらね、と言われても僕は戸惑うばかり
そんな現実にありえないことを想定するからまずいんじゃないですかね
現実にそういうコード書いてるんじゃないかと僕はちょっと君のコーディング力を
疑わしく思ってきたのだけれども
public経由で、標準出力に出力するようなprivateコードを一生懸命テストしますか?
がんばり屋さんだなとは思うけど、効率悪くないですかね
958デフォルトの名無しさん
2020/07/05(日) 13:22:29.69ID:MQ9nuMmc >>956
そんな極端な話ちゃうやろボケ
そんな極端な話ちゃうやろボケ
959デフォルトの名無しさん
2020/07/05(日) 13:24:13.83ID:JiRnWiGC そりゃ、クラスはオブジェクト指向を実現する上で便利だからね。大切な存在さ。でも、クラスなんて無くてもオブジェクト指向でコードは書けるし、逆に、クラスが合っても手続き型の記述をしたら、そりゃ、オブジェクト指向じゃねーわ。
つーか、クラスを使ったらオブジェクト指向ってマジで言ってる?
それってつまり、このスレで時々名前の出るstaticおじさんの書いたコードもオブジェクト指向だと言い張るつもり?
つーか、クラスを使ったらオブジェクト指向ってマジで言ってる?
それってつまり、このスレで時々名前の出るstaticおじさんの書いたコードもオブジェクト指向だと言い張るつもり?
960デフォルトの名無しさん
2020/07/05(日) 13:25:43.22ID:9F15TCk0 >>957
えーー、違うそうじゃ無い。多分君よくわかってない。
例なわけで実際にありえないとかありえる訳が無い。そんな話じゃ無いし
根本的な部分がわかってない。
publicでは問題がなく、private単体だと問題がでるコードなわけで。この意味はわかる?
えーー、違うそうじゃ無い。多分君よくわかってない。
例なわけで実際にありえないとかありえる訳が無い。そんな話じゃ無いし
根本的な部分がわかってない。
publicでは問題がなく、private単体だと問題がでるコードなわけで。この意味はわかる?
961デフォルトの名無しさん
2020/07/05(日) 13:29:16.63ID:MQ9nuMmc >>959
staticおじさんの元の話知ってる? 僕はリアルタイムであれを読んでたからよく知ってるんだけれども
staticおじさんは必要なところではオブジェクト作るよ、でもASP.NETのForm Applicationのフレームワークには
もともとリッチなオブジェクトが用意されてるから実務ではそれを組み合わせるだけで事足りることが多いよ
だからstaticメインで組み上げてオーケーさって話だったよ
オブジェクト指向信者がアホな前提置いて話を発散させただけでstaticおじさんが言ってることはわりあいまともだった
こういう議論の場で神クラスを引き合いに出して批判するという極端なことやって意味があるのかなと僕は疑問ですね
staticおじさんの元の話知ってる? 僕はリアルタイムであれを読んでたからよく知ってるんだけれども
staticおじさんは必要なところではオブジェクト作るよ、でもASP.NETのForm Applicationのフレームワークには
もともとリッチなオブジェクトが用意されてるから実務ではそれを組み合わせるだけで事足りることが多いよ
だからstaticメインで組み上げてオーケーさって話だったよ
オブジェクト指向信者がアホな前提置いて話を発散させただけでstaticおじさんが言ってることはわりあいまともだった
こういう議論の場で神クラスを引き合いに出して批判するという極端なことやって意味があるのかなと僕は疑問ですね
962デフォルトの名無しさん
2020/07/05(日) 13:30:55.04ID:JiRnWiGC いや、そもそもstaticおじさんのコードはオブジェクト指向でも何でもねーよ!
話反らすな。
話反らすな。
963デフォルトの名無しさん
2020/07/05(日) 13:32:41.77ID:MQ9nuMmc >>962
staticおじさんの書いたコードもオブジェクト指向だと言い張るつもり?
と君が聞いたからstaticおじさんに対する僕の所見を述べたつもり
ASP.NETのオブジェクトを使ってるならオブジェクト指向でしょ
オブジェクト指向が為せる技だと思うよ
staticおじさんの書いたコードもオブジェクト指向だと言い張るつもり?
と君が聞いたからstaticおじさんに対する僕の所見を述べたつもり
ASP.NETのオブジェクトを使ってるならオブジェクト指向でしょ
オブジェクト指向が為せる技だと思うよ
964デフォルトの名無しさん
2020/07/05(日) 13:33:02.71ID:MQ9nuMmc オブジェクト指向便利だよね
965デフォルトの名無しさん
2020/07/05(日) 13:33:43.81ID:9F15TCk0 コードあげてくれるのは偉いと思うので気がひけるのだが、上のコードは
privateとpublicの違いを表すための部分がまるですっぽ抜けてるし、そもそも
staticだし結構それ自体staticおじさん感がある。すまんw
privateとpublicの違いを表すための部分がまるですっぽ抜けてるし、そもそも
staticだし結構それ自体staticおじさん感がある。すまんw
966デフォルトの名無しさん
2020/07/05(日) 13:33:52.51ID:JiRnWiGC >>963
ちげーよ。ASPがオブジェクト指向であって、staticおじさんのコードはオブジェクト指向でも何でもねーよ。
ちげーよ。ASPがオブジェクト指向であって、staticおじさんのコードはオブジェクト指向でも何でもねーよ。
967デフォルトの名無しさん
2020/07/05(日) 13:37:13.08ID:MQ9nuMmc >>966
でもASP.NETのフレームワークがオブジェクト用意してなかったらstaticおじさんはコード書けなかったと思うし
staticおじさんのコードはオブジェクト指向を有効的に活用した非常に優れたコードだと思いますよ
必要もないのにオブジェクト作るのはアホですわ
でもASP.NETのフレームワークがオブジェクト用意してなかったらstaticおじさんはコード書けなかったと思うし
staticおじさんのコードはオブジェクト指向を有効的に活用した非常に優れたコードだと思いますよ
必要もないのにオブジェクト作るのはアホですわ
968デフォルトの名無しさん
2020/07/05(日) 13:38:05.15ID:MQ9nuMmc staticおじさんは必要な場面ではオブジェクト作るっていってるからねー
僕はstaticおじさんに詳しいんだ
僕はstaticおじさんに詳しいんだ
969デフォルトの名無しさん
2020/07/05(日) 13:38:11.20ID:9F15TCk0 神のGTO感があるw
970デフォルトの名無しさん
2020/07/05(日) 13:40:17.58ID:MQ9nuMmc 物事の本質を見誤ると道を踏み外すよ
状態に依存してないのにインスタンスメソッドにしたりとか
staticメソッドを定義したらstaticおじさんと言ったりとか
そういうバカのできあがりですよ
状態に依存してないのにインスタンスメソッドにしたりとか
staticメソッドを定義したらstaticおじさんと言ったりとか
そういうバカのできあがりですよ
971デフォルトの名無しさん
2020/07/05(日) 13:40:37.05ID:JiRnWiGC972デフォルトの名無しさん
2020/07/05(日) 13:42:50.97ID:MQ9nuMmc >>971
何が気に入らなくて僕に絡んでるのかわからないですが
クラスがオブジェクト指向の本質であることには変わりないですよ
クラスとはデータと処理をセットにして持つことができるものです
クラスを定義することこそがオブジェクト指向の本質です
何が気に入らなくて僕に絡んでるのかわからないですが
クラスがオブジェクト指向の本質であることには変わりないですよ
クラスとはデータと処理をセットにして持つことができるものです
クラスを定義することこそがオブジェクト指向の本質です
973デフォルトの名無しさん
2020/07/05(日) 13:44:43.62ID:MQ9nuMmc 責務ごとにオブジェクトをわけましょうなんていうのは
オブジェクト指向でプログラミングすることを前提にした設計論でしか無いです
クラスの存在こそがオブジェクト指向の本質です
オブジェクト指向でプログラミングすることを前提にした設計論でしか無いです
クラスの存在こそがオブジェクト指向の本質です
974デフォルトの名無しさん
2020/07/05(日) 13:45:21.93ID:JiRnWiGC975デフォルトの名無しさん
2020/07/05(日) 13:47:18.05ID:MQ9nuMmc976デフォルトの名無しさん
2020/07/05(日) 13:47:27.85ID:JiRnWiGC977デフォルトの名無しさん
2020/07/05(日) 13:52:06.41ID:JiRnWiGC >>975
まぁ、いいさ。これ以上は不毛だ。スレも終わるし。
俺は俺の思う正しいオブジェクト指向で今後も楽をさせてもらうよ。
そっちも、そっちの思うオブジェクト指向とやらを使い続けるがいい。
成果が出た方が正義だ。
まぁ、いいさ。これ以上は不毛だ。スレも終わるし。
俺は俺の思う正しいオブジェクト指向で今後も楽をさせてもらうよ。
そっちも、そっちの思うオブジェクト指向とやらを使い続けるがいい。
成果が出た方が正義だ。
978デフォルトの名無しさん
2020/07/05(日) 13:55:35.80ID:h7Qz+vpg オブジェクト指向だから髪型は自由なのさ
彡 ⌒ ミ
(´・ω・`) 不毛とかいうな!
彡 ⌒ ミ
(´・ω・`) 不毛とかいうな!
979デフォルトの名無しさん
2020/07/05(日) 13:56:22.57ID:MQ9nuMmc ハゲに謝るべき
980デフォルトの名無しさん
2020/07/05(日) 13:56:24.62ID:VS9zJ3bZ よし
話を一度整理しよう
privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね
話を一度整理しよう
privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね
981デフォルトの名無しさん
2020/07/05(日) 14:06:22.83ID:MQ9nuMmc ナイスな整理と言わざるを得ない
議論もリファクタリング可能であることを如実に示した
議論もリファクタリング可能であることを如実に示した
982デフォルトの名無しさん
2020/07/05(日) 14:09:58.85ID:MQ9nuMmc >>976
僕のコードはオブジェクト指向ですよ
そこんとこよろしくですよ
オブジェクトをどう分けるかって話はありますよ
しかし、それとは独立してオブジェクトは存在するので
オブジェクトを定義できるクラスの存在そのものがオブジェクト指向の本質なわけです
だからオブジェクト指向言語にはクラスが存在します
生物学の類、目のようなものです、どう分類するかは副次的な話であって
分類できることこそが最も重要な事柄です
僕のコードはオブジェクト指向ですよ
そこんとこよろしくですよ
オブジェクトをどう分けるかって話はありますよ
しかし、それとは独立してオブジェクトは存在するので
オブジェクトを定義できるクラスの存在そのものがオブジェクト指向の本質なわけです
だからオブジェクト指向言語にはクラスが存在します
生物学の類、目のようなものです、どう分類するかは副次的な話であって
分類できることこそが最も重要な事柄です
983デフォルトの名無しさん
2020/07/05(日) 14:18:27.81ID:9F15TCk0 正直あの短さでOOかどうかと(スタティックでインスタンス化もないコードだが)言うのは
不毛だけどID:JiRnWiGCの組み込みおじさんのがOO感はあるよ。
で、staticで出されてもprivateのテストがどうかと言う話には全く寄与しないわけだが、
じゃあ逆に、>>805のチンコテストのfuncSとfuncBはどうやってテストするの?
パブリック経由で全パターンと言うことならこれでこの話はおしまい。
パブリック経由でやりましょう。
違うと言うなら具体的にコードでおながいします。
smallestを9じゃなくて8にしろとかいう苦情は受け付けますw
不毛だけどID:JiRnWiGCの組み込みおじさんのがOO感はあるよ。
で、staticで出されてもprivateのテストがどうかと言う話には全く寄与しないわけだが、
じゃあ逆に、>>805のチンコテストのfuncSとfuncBはどうやってテストするの?
パブリック経由で全パターンと言うことならこれでこの話はおしまい。
パブリック経由でやりましょう。
違うと言うなら具体的にコードでおながいします。
smallestを9じゃなくて8にしろとかいう苦情は受け付けますw
984デフォルトの名無しさん
2020/07/05(日) 14:23:34.49ID:MQ9nuMmc985デフォルトの名無しさん
2020/07/05(日) 14:24:31.67ID:MQ9nuMmc クラスにしてもメソッドにしても責務でわけないと
行数が50行超えたから分割しなければみたいなアホなことやってるのはアホですわ
行数が50行超えたから分割しなければみたいなアホなことやってるのはアホですわ
986デフォルトの名無しさん
2020/07/05(日) 14:25:15.84ID:JiRnWiGC (組み込みおじさんじゃないんだけどな...組み込みもやるけど)
987デフォルトの名無しさん
2020/07/05(日) 14:26:22.88ID:MQ9nuMmc >>986
器用ですね、じゃあ僕との仲直りもすぐにできそうですね
器用ですね、じゃあ僕との仲直りもすぐにできそうですね
988デフォルトの名無しさん
2020/07/05(日) 14:28:26.22ID:9F15TCk0989デフォルトの名無しさん
2020/07/05(日) 14:30:37.73ID:MQ9nuMmc >>988
staticにしたのは状態に依存してないからですね
staticにしたのは状態に依存してないからですね
990デフォルトの名無しさん
2020/07/05(日) 14:31:51.93ID:9F15TCk0 下痢便君は10代後半から20代前半というところかなあ。
ウンコチンコのレベルと絡んでてもおじさんあんまり面白く無いんだよね。
自分でチンコテストのコードあげたけどw
でもコードあげたのは偉いと思うので頑張ってね。
ウンコチンコのレベルと絡んでてもおじさんあんまり面白く無いんだよね。
自分でチンコテストのコードあげたけどw
でもコードあげたのは偉いと思うので頑張ってね。
991デフォルトの名無しさん
2020/07/05(日) 14:33:06.78ID:JiRnWiGC あー、組み込みおじさんにも解るように だよ。
俺自身、組み込みもやるからややこしいが、ずっと前に登場した組み込みおじさんとは別人だよ。
まぁ、慌てて書いたから余計な発言だったか。
もう、この際OOPの利点さえ感じていればなんでもいいことにするよ。
スレも少ないし、ヒートダウンしたし。
俺自身、組み込みもやるからややこしいが、ずっと前に登場した組み込みおじさんとは別人だよ。
まぁ、慌てて書いたから余計な発言だったか。
もう、この際OOPの利点さえ感じていればなんでもいいことにするよ。
スレも少ないし、ヒートダウンしたし。
992デフォルトの名無しさん
2020/07/05(日) 14:33:34.85ID:MQ9nuMmc >>990
僕まだ小学生でちゅ
僕まだ小学生でちゅ
993デフォルトの名無しさん
2020/07/05(日) 14:35:03.91ID:9F15TCk0 あー組み込みおじさん(固有名詞)が居たのね。一般名詞のつもりでした。
この板昨日からなので。
この板昨日からなので。
994デフォルトの名無しさん
2020/07/05(日) 14:35:40.42ID:9F15TCk0 >>992
偉いねえ。
偉いねえ。
995デフォルトの名無しさん
2020/07/05(日) 14:37:40.20ID:MQ9nuMmc 参照透明なメソッドだとテストしやすいしバグの混入も減らせるのでおすすめ!
間違っても>>805こんな下痢便分割しちゃダメ
間違っても>>805こんな下痢便分割しちゃダメ
996デフォルトの名無しさん
2020/07/05(日) 14:38:27.28ID:9F15TCk0 しかし小学生の下痢便君とかと話ててもこっちは損するばかりだしなあ。
マジで。しかも下痢便君はましな方な可能性さえあるし。
予想以上だった、この板。マジやばい。ASP.NETのオブジェクトを使ってるなら
オブジェクト指向だし。
マジで。しかも下痢便君はましな方な可能性さえあるし。
予想以上だった、この板。マジやばい。ASP.NETのオブジェクトを使ってるなら
オブジェクト指向だし。
997デフォルトの名無しさん
2020/07/05(日) 14:38:41.11ID:MQ9nuMmc >>993
マジで!? ID:gS37C1rZ これ絶対君だと思ってた、言ってること薄っぺらいしアホだし
マジで!? ID:gS37C1rZ これ絶対君だと思ってた、言ってること薄っぺらいしアホだし
998デフォルトの名無しさん
2020/07/05(日) 14:42:18.59ID:h7Qz+vpg 不毛
彡 ⌒ ミ
(´・ω・`)
彡 ⌒ ミ
(´・ω・`)
999デフォルトの名無しさん
2020/07/05(日) 14:43:23.60ID:9F15TCk0 >>997
マジで某アメリカの誰でも知ってるとこの中の人だよ。
日本人あんまり居ないので、これ以上はやばいからどこだか
下痢便君に教えるわけが無いけど。
インデントとか言ってたの君だっけ?
そんなくだらない(しかも的外れな)揚げ足取りじゃなくて、
君のコード、根本的なとこに問題あるんだけど、わからない人に
わかれと言ってもわからないだろうからなあ。
ちゃんとOOをやったらわかるかも。頑張ってね。下痢便君w
マジで某アメリカの誰でも知ってるとこの中の人だよ。
日本人あんまり居ないので、これ以上はやばいからどこだか
下痢便君に教えるわけが無いけど。
インデントとか言ってたの君だっけ?
そんなくだらない(しかも的外れな)揚げ足取りじゃなくて、
君のコード、根本的なとこに問題あるんだけど、わからない人に
わかれと言ってもわからないだろうからなあ。
ちゃんとOOをやったらわかるかも。頑張ってね。下痢便君w
1000デフォルトの名無しさん
2020/07/05(日) 14:43:28.02ID:MQ9nuMmc >>998
ハゲて頑張っておられる方にお詫び申し上げます
ハゲて頑張っておられる方にお詫び申し上げます
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 16日 14時間 55分 52秒
新しいスレッドを立ててください。
life time: 16日 14時間 55分 52秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 日本の立場説明へ…外務省局長が北京到着 “台湾有事”首相答弁に中国反発 ★3 [煮卵★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★2 [蚤の市★]
- NHK、受信料の未払い世帯に督促強化へ 民事手続きの新組織を設置 差し押さえなどの強制執行も [1ゲットロボ★]
- 橋下徹氏「この喧嘩は日本の完敗」 台湾有事答弁めぐる外務省局長訪中で指摘「中国に怒られてご説明に伺った日本と見られる」 [muffin★]
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- 【外交】日中関係悪化、長期化の様相 2012年には自動車輸出80%減も ロイター★2 [1ゲットロボ★]
- 高市早苗の中国問題、「オーバーツーリズムが解消されてウザい中国人が消えるから日本の勝ち」という風潮になってしまう [562983582]
- 「稼ぐのよ!」高市が電話でガチャ切り😱鈴木農水大臣に伝えたこと… [993451824]
- 愛国者ナザレンコ「左翼は自己中な差別主義者で偽善者。日本人ファーストを叩いておいて台湾人が死んでも知らな〜いでしょ。中露の犬」 [856698234]
- 【悲報】有名ウヨ論客、「現実的に考えて中国と仲直りするしかなくね?」と言ったら野良ウヨから総叩きにあう [856698234]
- 【高市悲報】経団連会長、高市と面談「おい!ちゃんと中国と対話しろよ!😨」 [359965264]
- 【悲報】女性初の総理大臣 高市早苗氏、安倍晋三さんが積み上げてきたものを一瞬でぶっ壊してしまう😱wwwwwwwwwwwwwwwwwwwwww [871926377]
