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

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:47:36.69ID:l/2SQUll
カプセル化(英語: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)
2020/07/05(日) 10:15:56.23ID:bzHIXl0a
>>863
だからそれは別の話なんだからさ。
「privateなら必ずしも単体テストする必要はないけどやりたいならやれば?」
これでいいじゃん。
867デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:19:00.51ID:9F15TCk0
>>866
ちょっと弱いかな。「普通はやらんけどやりたかったりやる必要があるならやれば?」

くらい?privateを全部テストケース書いてエッジやネガティブやるとなると多くの場合
サグラダファミリアになるし、普通はやらない。

でもやりたいならやれば良いとは思うのでだいたいそういう感じか。
2020/07/05(日) 10:31:49.01ID:BTTSshKd
組み込みおじさんはそこに義務感を感じ、他者に強要するのだろう
難儀なこった
869デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:37:41.26ID:9F15TCk0
組み込みとかだと多くの場合そもそもOOあんまりいらんと思うのよね。

人工呼吸器の制御とかだときびしくやらないといけないのはわかるし、
やってない人工呼吸器とか俺も付けられたくないけどさw

OOのメソッドとかはちょっと違う話だわな。カプセル化とかは数百人になると
生きてくる。個人的には自分一人の個人プロジェクトでも使うけど。
数年後にまたやる羽目になったりした時に楽なので。
870デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:45:19.20ID:MQ9nuMmc
>>847
それは僕も思ってた
机上の空論っぽいんだよね
2020/07/05(日) 10:53:33.35ID:kFjTOHVy
>>867
どこに差があるのかよくわからんが、どちらにしても一行目は問題ないにしても
二行目はここに存在しない敵を攻撃している印象。
いちいち関係ない話を絡めなくてもいいじゃんと思うが、二度も書くということは
そっちが主張したい本音ということかな?
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のレベルでテストケース書いてログ残してコード
書き換えてコンパイルし直してやるというのは少なくとも普通のビジネスのソフトとしては
一般的なベストプラクティスではないし普通はアメリカの大手一流ではやらないということ。
例外はあるとしても。
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
アメリカや大手や一流が正しいとは限らないけどね
ボーイングの飛行機があんなことになってるように
2020/07/05(日) 11:11:13.65ID:9F15TCk0
まあ会社的にはプログラマなら全員知ってるとこ。それ以上は言わん。
879デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:13:19.35ID:9F15TCk0
>>877
だからボーイングの制御系とかはそもそも全然別の話。

もちろん正しいとは限らないけど標準なのは確かだわな。
日本初のOOより優れたこういうメソッドがある!というなら
もちろん喜んで聞くけどね。
2020/07/05(日) 11:14:37.74ID:kFjTOHVy
>いや、元々がpublicじゃなくてprivate単位でやれという話からなんだからその話だよ。
>ublicでprivateの分岐通ってるなら良いじゃんといなら誰も否定していないのでは?

そう、それが一致しているならいちいち関係ない話を絡めなくてもいいんでは?
public経由のテストで十分網羅できるのにそれでもprivateメソッド単位のテストが
必要なんて主張している人いたかな?そこに誤解があるんじゃないの?
2020/07/05(日) 11:15:16.65ID:9F15TCk0
>>880
いるから揉めてるんすよ。
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のビジネス系だでは普通やらないということを
言ってただけなんだけど、バカだアホだお前は素人だといろんな方面から変に噛みつく
やつばかりでもう僕はいやになっちゃった。この人が噛み付いてきたということではないよ。

もちろんまともな人のが多いんだろうけどおかしな人のが目立つからね。
2020/07/05(日) 11:22:22.08ID:/MeFbFCW
いちいち論点ずらすな。
お前ら、何で争ってるんだよ。
887デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:23:41.69ID:MQ9nuMmc
OOのビジネス系ってどんな仕事?
そんないい加減なことやっていい仕事ある?
トラブってもうちうちでなーなーで済むようなBtoBの仕事?
自社内でしか使わないシステムとか?
888デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:24:18.36ID:9F15TCk0
アメリカの大手一流が不満なら自分の業界の実例をあげたらいかがだろうか?

privateをテストケース書いて全件やってるとこなんておそらくないぞ。あるというならあげれば良いだけの話。

テストツールどうやって動いてるねん。コード自動で書き換えてコンパイルし直しか。話がおかしいのすぐわかるだろ。
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:9F15TCk0
>>887
だからアメリカ製のパッケージとかコンサルとの間でよく揉めてるだろ。これは「バグ」じゃないとか。DBだってよくある話だわな。

君はどんな仕事なの?
2020/07/05(日) 11:26:35.07ID:9F15TCk0
>>890
君の会社はどこなん?
893デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:27:26.12ID:MQ9nuMmc
>>891
アメリカ製のパッケージとかコンサルとの間でよく揉めてる仕事なん?
なにそれ? 何言うてんの? 何の仕事してるんよ
2020/07/05(日) 11:27:47.35ID:kFjTOHVy
>>885
それは網羅してないからダメという意見では?
そこに反論するならば「privateのテストを強制すべきではない」ではなく
「public経由でも網羅することは可能」ではないかね?(できるなら)
895デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:27:51.75ID:9F15TCk0
>>882
>>848
デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
896デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:28:29.72ID:MQ9nuMmc
>>892
アメリカの大手一流でこうしてるから、こうするのが正解なんやー
言うてたからアメリカの超一流ってどこなんよ? と聞いたんやけど
なんで言えへんの
2020/07/05(日) 11:28:59.86ID:YdQ981ul
>>870
新しい理論や手法を提唱する人には良くあることだと思うけど、その理論はある前提、ある側面では正しいけど、常に無条件に適用することは正しくないと本人は分かっていて、敢えてそういうことはわざわざ詳しくは説明しない。自分の論が有用な物だと主張したいがため、嘘はつかない範囲で相手が勝手に誤解してすごいと思わせるような物言いをする。
で、その理論に感銘を受けた人の一部が、理論の表面的な効能だけをありがたく受け取って問題点や前提条件などは正しく理解しないまま、受け売りの知識を他所で披露する。
そこで議論になると、本質をちゃんと理解してないまま自説を擁護しようとするから、無理が生じたり話が噛み合わなかったりする。
という流れでイマココなのかなと思う。
898デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:29:53.38ID:MQ9nuMmc
>>897
なるほどね、わかる気がする
2020/07/05(日) 11:29:56.16ID:M+BkbwUs
大手一流の名前を言うだけで逃げそう(笑)
900デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:33:32.02ID:MQ9nuMmc
足ガクガクになってまうよー
2020/07/05(日) 11:36:47.20ID:Ua1+WoRk
まぁ、単体テストでprivateを直接呼び出すのは変な話だけどな。
デバッグならともかく、単体テストでリフレクションによるprivate強制実行とか反則でしょ。
デバッグで許される理由は、バグを見つける可能性があるから。
単体テストで駄目な理由は、テストの合否判定が不当に変わる恐れがあるから。

というのが自分の見解だが、皆さんはどう?
スレが加速してからの途中参加だから、自分の発言に自信ないけど。
902デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:37:26.26ID:9F15TCk0
>>894
そもそもpublicを経由するのが網羅してないから、経由せずにprivate単位で
コード書き換えてテストやるべきという主張自体がOO的にはおかしいわけです。

見せたくないからprivateなわけで。

もちろんデベロッパー個人でコード入れて確認することはあるだろうけれども、
開発手順としてテストケース書いてログ残してというのは違う。

public経由で内部を網羅してるかしてないかは知ったことではない、というのが正解。
上の例で言えばfuncBやfuncSがnullをチェックしてようがしていまいが他のチームには
関係ないわけです。入り口でnullチェックしてれば。

個人的にはサイズがでかければprivateでも入れるけども、それをテストケース書いて
ログ残してと要求されたことはないし、普通はされんはず。少なくともアメリカでは。
903デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:38:33.09ID:MQ9nuMmc
GoogleであってもMicrosoftやOracleもバグのないソフトは作れないし
銀の弾丸的な手法があるわけもなく、アメリカ、大手、一流という箔付けに頼ってるだけでしかない
2020/07/05(日) 11:41:45.16ID:Xwol7cCi
せっかく匿名で議論できるのに
「アメリカの大手一流」とか言い出しちゃうところが哀れやわ
>>805の下痢便コード出た時点でスレ終了やろ普通
905デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:43:37.87ID:9F15TCk0
>>896
君の会社はどこなの?

アメリカ大手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
もう何でもええから言うて、そしたら僕がすごーいって言うから、もうそれでええやんか
2020/07/05(日) 11:49:23.59ID:9F15TCk0
また別IDが下痢便とか発狂し始めた。

お前はほんとにウンコとかそのレベルのことが好きだな。
2020/07/05(日) 11:51:02.27ID:9F15TCk0
>>907
やって「ない」という話だけど。
まず日本語学んでやー よろしくなー
911デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:51:58.59ID:MQ9nuMmc
>>910
アメリカの大手一流ってどこなんよ?
912デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:52:54.88ID:MQ9nuMmc
たぶんアップルは単体テストやってない、SSLでアホなバグだしてたから、あの会社適当だわ、しらんけど
2020/07/05(日) 11:53:26.19ID:9F15TCk0
>>911
君が自分の名刺でもあげたら考えとくわー
914デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:55:12.71ID:MQ9nuMmc
>>913
アメリカの大手一流ではそれが普通なんやーおりゃーってイキっておられましたよね
だから聞いたのに、教えてくれないなんて酷いです、あんなにイキってたのに酷いです
2020/07/05(日) 11:55:58.39ID:M+BkbwUs
>>902
> そもそもpublicを経由するのが網羅してないから、経由せずにprivate単位で
> コード書き換えてテストやるべきという主張自体がOO的にはおかしいわけです。

誰がそんなこと言ってるの?

少なく遠も俺は
1. privateはpublic経由でテストすれば十分
2. もしpublic経由でテストできないほど複雑なら、そもそも設計がおかしい
3. 設計の問題を修正して、責務を分割すれば、自然にpublicになるはず
と言ってる。

テストするためにpublicにするのではなく
問題がある設計を直せばpublicになる。と言っている。
2020/07/05(日) 11:55:59.42ID:9F15TCk0
>>914
劣等感がひどいな君は。まずはカウンセラーに
かかりなさい。OOの話はそれからしようか。
2020/07/05(日) 11:58:34.47ID:9F15TCk0
>>915
いや だ か ら この人。

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
2020/07/05(日) 12:06:18.88ID:wqV8YbJ4
IUsMolpfに文句言えばいいのに。
2020/07/05(日) 12:07:47.85ID:kFjTOHVy
>>902
ああつまり、重要度は関数仕様>ブラックボックステスト>ホワイトボックステストだから
テストのために仕様変更はすべきでないという主張か。
それはわからんでもない気はするけど、そういうウォーターフォールが絶対というわけでもないしな。

その是非はさておき、そこが論点なら例えばリフレクションのような形でテストできたり、あるいは
テスト仕様を書く本人が関数仕様も決定することができる条件なら全然問題ないわけだ。
2020/07/05(日) 12:07:48.24ID:9F15TCk0
>>918
正直iOSは全然知らんけどこれは酷いなw
Public Private以前にStaticだからなんにしても直接テストする部分だな。
922デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:08:47.51ID:MQ9nuMmc
>>921
せやろw
923デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:13:26.38ID:9F15TCk0
>>919
横から狂犬が噛み付いてくるんだよ。

>>920
ウォーターフォールは関係ないし、重要度をつけてるわけでもないけれども、
普通はprivateはソースコード変えてまでテストするものではないというだけの単純な話。

そもそも「テスト」と言ってもいろんな段階があるわけだし、「ユニットテスト」にしても
プロジェクトによって意味が違うわけで。

なんにしてもprivateを(例外はあるにせよ)全部公式な形でテストしろというのは
OOの手法のプロジェクトでは「普通は」やらんというだけなのになんでこんな揉めるのか。
2020/07/05(日) 12:16:58.82ID:kFjTOHVy
>なんにしてもprivateを(例外はあるにせよ)全部公式な形でテストしろというのは
>OOの手法のプロジェクトでは「普通は」やらんというだけなのになんでこんな揉めるのか。

全部やれなんて主張している人がいないから。
2020/07/05(日) 12:19:09.22ID:9F15TCk0
>>924
だからいるだろうが。本人なの?

848デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
926デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:20:23.64ID:MQ9nuMmc
>>805
こう書いた方が良いと思うの
https://paiza.io/projects/mPhqBnYZnQukkW6HY9LmOQ
927デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:21:30.51ID:MQ9nuMmc
privateメソッドが正しいことは確認する、その上でpublicのメソッドが正しいかテストするって感じ
2020/07/05(日) 12:30:30.98ID:kFjTOHVy
>>925
これが「privateのテストを全部やれ」に読めてしまうのか。そこが原因だな。
2020/07/05(日) 12:32:35.17ID:M+BkbwUs
>>923
> ウォーターフォールは関係ないし、重要度をつけてるわけでもないけれども、
> 普通はprivateはソースコード変えてまでテストするものではないというだけの単純な話。

テスト中に設計の問題が発覚しても
ソースコード書き換えないの?

ソースコード変えてまでテストするものではないというけど
なんでソースコードを作成&自分が書いたそのコードをテストしてるときに
自分が作成してるソースコードを変えたらだめなの?
2020/07/05(日) 12:36:24.73ID:M+BkbwUs
普通の開発だったら

0. なにかの修正を行う必要が発生する
1. その修正のためにソースコードを修正する
2. 修正したコードが正しいかテストする
3. 1〜2を繰り返し修正したコードに問題がなければ開発完了
4. 統合テストとかより大きなテストを行う

でしょ?

public・privateメソッドをテストしたいっていうのは
この1〜2のフェーズで発生することなのに、
なんでテストがやりにくいなと思ったときに
ソースコードを修正したらだめなの?
2020/07/05(日) 12:38:58.81ID:wqV8YbJ4
>>926
スマホでも見やすくなったな。
あー、なるほど。

でも、サンプルみたら少し混乱してきた。
自分はクラスの単体テストをイメージしてたけど、まさか、Mainクラスの中に定義されたprivateメソッドの単体テスト(?)の話をしていたとか?
もう単体テストの意味が少し崩壊してきたが...
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無いのでは。
934デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:54:31.17ID:9F15TCk0
nullがでる->ヌルポがでる
2020/07/05(日) 12:54:57.72ID:M+BkbwUs
>>933
> privateを直接テストするためには外部から呼べないのだから、呼ぶためには
> クラス内に書くしかないわけだよ。で、ソースに書き込んでクラス内に書いて
> テストしたあとまたそのコードを取り除いてとかするの?それをドキュメント化
> する?

誰がそんな事するって言ってんの?
お前が想像が間違ってる
936デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:56:01.25ID:MQ9nuMmc
>>933
えっとごめんそのnullの問題は設計が下手なだけだと思ってて、設計を見直すべきかと
privateのテストをどうしますかの例として出したので問題ないっしょ
君はこのプログラムをどうやってテストするん?
2020/07/05(日) 12:56:34.25ID:3WDjCjSx
よくもまあ粉薬をオブラートで包むような話でこれだけのレスで盛り上がれるなー
2020/07/05(日) 12:57:28.17ID:M+BkbwUs
いやーびっくりだw

設計がおかしいから設計を修正するって話をしてるのに
設計を修正した後に修正前に戻すなんでやらないだろ!って言われちゃった(笑)

だーれも修正前に戻すなんて言ってないの
おかしい設計を修正して「開発完了」なの
2020/07/05(日) 12:57:46.31ID:JiRnWiGC
たぶん、スレタイがスレタイだから、手続き型でプログラムを書く人のイメージする単体テストとオブジェクト指向プログラマーのイメージする単体テストで齟齬が生じているのでは?

そりゃ、サンプルみたいに関数が定義されていたらprivateだろうと関数はテストするべきって発想になるのは不思議じゃないし、オブジェクト指向に基づき設計されたクラスを単体テストする話であれば、privateをテストって、どういう意味なんだろって不思議がるだろうよ。

そして、たぶん、サンプルコードに対して真っ先に突っ込むべき点はOOPでも何でもないコードという点だと思うのだが、そこはいいのかな?
940デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:57:47.49ID:MQ9nuMmc
OptionalにisEmptyが無いというのは何言ってるのかわからない
本当になかったらコンパイルに失敗するよ
2020/07/05(日) 13:00:08.78ID:M+BkbwUs
>>939
一人privateがテストしづらいからpublicに変更してテストして
"元に戻す" 話をしてるやつがいるみたいだが(笑)
942デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:00:23.50ID:MQ9nuMmc
>>939
僕はOOPのコードだと思ってるよクラスが定義されてるからね
君が思うOOPのコードはこれだっていうのを君に出していただきたいかな
943デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:00:34.24ID:9F15TCk0
>>935
もうお前は良いからスレを読め。

>>936
いやそうじゃなくて、publicで呼ばれるprivateを直接テストするのかという
話なので、そのためにわざわざヌルポになるように書いてるわけで、staticなら
そのままメソッド呼べば良い話。


もうこの板嫌。。。
944デフォルトの名無しさん
垢版 |
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なのだからテストしたければそのまま
呼べば良い話。
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()

こんな風に内部実装を知らなくても呼べる。
947デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:11:36.99ID:MQ9nuMmc
>>945
わざと出るように入れたのが現実の実装と乖離してるので、わざと入れる意味が無いので
気にする必要ないですよってこと

君はpublic経由でprivateをテストするんだって立場ですよね
君はどうテストを書きますかってことを教えて欲しいです
君の元のコードでもいいですよ、僕が変更したコードでも良いですよ
君はどうprivateをテストしますか?
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の本質
2020/07/05(日) 13:13:59.63ID:JiRnWiGC
え、そこに反論されるの?
何このスレ。
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の話なんだから、そこで
エラーが出るか出ないかがないとこのスレ的にはなんの意味もない。
955デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:18:37.20ID:MQ9nuMmc
>>952
JavaScriptにもPythonにもクラスあるよ
クラスがオブジェクト指向の本質だと気づいたから追加されたんじゃないでしょうかねー
956デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:19:41.30ID:9F15TCk0
クラスの存在はOOPの大事な部分だけど、OOPの言語を使ってもほとんどOOPでは
無いというのはよくある話。巨大クラス一個とかだと頭を抱える。
957デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:22:07.34ID:MQ9nuMmc
>>954
現実にありえない実装見せて、ほらね、と言われても僕は戸惑うばかり
そんな現実にありえないことを想定するからまずいんじゃないですかね
現実にそういうコード書いてるんじゃないかと僕はちょっと君のコーディング力を
疑わしく思ってきたのだけれども

public経由で、標準出力に出力するようなprivateコードを一生懸命テストしますか?
がんばり屋さんだなとは思うけど、効率悪くないですかね
958デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:22:29.69ID:MQ9nuMmc
>>956
そんな極端な話ちゃうやろボケ
2020/07/05(日) 13:24:13.83ID:JiRnWiGC
そりゃ、クラスはオブジェクト指向を実現する上で便利だからね。大切な存在さ。でも、クラスなんて無くてもオブジェクト指向でコードは書けるし、逆に、クラスが合っても手続き型の記述をしたら、そりゃ、オブジェクト指向じゃねーわ。
つーか、クラスを使ったらオブジェクト指向ってマジで言ってる?
それってつまり、このスレで時々名前の出るstaticおじさんの書いたコードもオブジェクト指向だと言い張るつもり?
960デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:25:43.22ID:9F15TCk0
>>957
えーー、違うそうじゃ無い。多分君よくわかってない。
例なわけで実際にありえないとかありえる訳が無い。そんな話じゃ無いし
根本的な部分がわかってない。

publicでは問題がなく、private単体だと問題がでるコードなわけで。この意味はわかる?
961デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:29:16.63ID:MQ9nuMmc
>>959
staticおじさんの元の話知ってる? 僕はリアルタイムであれを読んでたからよく知ってるんだけれども
staticおじさんは必要なところではオブジェクト作るよ、でもASP.NETのForm Applicationのフレームワークには
もともとリッチなオブジェクトが用意されてるから実務ではそれを組み合わせるだけで事足りることが多いよ
だからstaticメインで組み上げてオーケーさって話だったよ

オブジェクト指向信者がアホな前提置いて話を発散させただけでstaticおじさんが言ってることはわりあいまともだった
こういう議論の場で神クラスを引き合いに出して批判するという極端なことやって意味があるのかなと僕は疑問ですね
2020/07/05(日) 13:30:55.04ID:JiRnWiGC
いや、そもそもstaticおじさんのコードはオブジェクト指向でも何でもねーよ!
話反らすな。
963デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:32:41.77ID:MQ9nuMmc
>>962
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
2020/07/05(日) 13:33:52.51ID:JiRnWiGC
>>963
ちげーよ。ASPがオブジェクト指向であって、staticおじさんのコードはオブジェクト指向でも何でもねーよ。
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況