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


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

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



1 名前:デフォルトの名無しさん [2020/06/18(木) 23:47:36.69 ID:l/2SQUll.net]
カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、オブジェクトの実際の型を隠蔽したりすることをいう。

かつて偏差値の低い学校向けの情報処理系教科書において「カプセル化は大変すばらしいものであり絶対に使うように」と大体的に宣伝された。

一方、カリフォルニア大学バークレー校の有識者を中心とした「インターネットを作った人たち」は「階層化の有害性」として「カプセル化は絶対にやめろ」としている。

https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

覚えといてね

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

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

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

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

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

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



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

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

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

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

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

覚えた?確定事項よ

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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






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

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

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