カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、
オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、
オブジェクトの実際の型を隠蔽したりすることをいう。
偏差値の低い学校向けの情報処理系教科書において「大変すばらしいものであり絶対に使うように」と大体的に宣伝された。
一方、カリフォルニア大学バークレー校の有識者を中心としたインターネットを作った人たちは「階層化の有害性」として
「絶対に使うな」としている。大雑把にいうと、その時は良くても、将来的な改修の際に隠蔽されたデータに
アクセスできないと解決できない問題が出てきて、結果的にデスマーチに陥るというのである。
オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で
縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」
という概念はない。
https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96
探検
オブジェクト指向ってクソじゃね?
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/08/24(金) 13:32:09.36ID:ifygL6bT233デフォルトの名無しさん
2018/09/24(月) 23:07:18.05ID:Kxio7RVg 転ばぬ先の杖
STOP オブジェクト指向
STOP オブジェクト指向
234デフォルトの名無しさん
2018/09/24(月) 23:31:05.04ID:JEGqIfby235デフォルトの名無しさん
2018/09/25(火) 08:11:13.05ID:ffbXNZny 色んなサイトでオブジェクト指向の説明してるけど説明が下手すぎねえか?
設計図とか野菜や動物に例えるとか理解してんのかと思うわ
雛形作ってからそこに入力規格を統一したデータをぶち込むって例えでいいだろ
設計図とか野菜や動物に例えるとか理解してんのかと思うわ
雛形作ってからそこに入力規格を統一したデータをぶち込むって例えでいいだろ
236デフォルトの名無しさん
2018/09/25(火) 08:46:47.22ID:Eix7hoc3 >>235
意味不明すぎてふいた
意味不明すぎてふいた
237デフォルトの名無しさん
2018/09/25(火) 08:48:25.26ID:Eix7hoc3 オブジェクト指向とは雛形作ってそこに入力規格統一したデータをぶち込むってことだぞ
238デフォルトの名無しさん
2018/09/25(火) 08:48:47.92ID:Eix7hoc3 わかってんのかお前ら
239デフォルトの名無しさん
2018/09/25(火) 11:00:50.48ID:bhDxFTjN さっぱりわからない
オブジェクト指向のメリットとか特に
オブジェクト指向のメリットとか特に
240デフォルトの名無しさん
2018/09/25(火) 12:27:26.16ID:6l+mHu1d ぶち込んだ経験ないやつには難しいやろな
241デフォルトの名無しさん
2018/09/25(火) 12:30:49.14ID:Ti214GxU オブジェクト指向とは関数仕様があってそこに仕様通りの引数渡すことなのね。
すごい、ようやく俺でもオブジェクト指向が理解できた!
すごい、ようやく俺でもオブジェクト指向が理解できた!
242デフォルトの名無しさん
2018/09/25(火) 15:04:59.78ID:GnoTTlW7 >>215
>オブジェクト指向って何ですか?
オブジェクトを中心に組むこと
クラスベースの言語ならクラス
Cは関数で組むけどC#はクラスで組む
>C言語では
できる
けどCは向いてない
C#とかJavaとか
最初からOOをサポートしてる言語の方がやりやすい
>オブジェクト指向って何ですか?
オブジェクトを中心に組むこと
クラスベースの言語ならクラス
Cは関数で組むけどC#はクラスで組む
>C言語では
できる
けどCは向いてない
C#とかJavaとか
最初からOOをサポートしてる言語の方がやりやすい
243デフォルトの名無しさん
2018/09/25(火) 15:05:47.22ID:GnoTTlW7244デフォルトの名無しさん
2018/09/25(火) 17:07:50.15ID:bhDxFTjN245デフォルトの名無しさん
2018/09/25(火) 18:10:21.54ID:GnoTTlW7 >>244
疎結合になるから
疎結合になるから
246デフォルトの名無しさん
2018/09/25(火) 18:52:32.16ID:bhDxFTjN >>245
それって君が想定した変更のときだけだよね?
それって君が想定した変更のときだけだよね?
247デフォルトの名無しさん
2018/09/25(火) 18:58:18.78ID:bhDxFTjN そうでなければむしろ最強レベルの苦痛を伴う変更になるんだよね?
無意味じゃない?
無意味じゃない?
248デフォルトの名無しさん
2018/09/25(火) 19:02:25.86ID:GnoTTlW7249デフォルトの名無しさん
2018/09/25(火) 19:05:45.05ID:bhDxFTjN250デフォルトの名無しさん
2018/09/25(火) 19:10:47.09ID:bhDxFTjN 例えばさヘッダーと内容と記述者と更新日時がある条件を満たしたときに
ヘッダーにある文字列を入れて欲しいと
でもヘッダーは他の全てを知らないので関連するオブジェクト全てに手を入れなければならないと
こういうの想像できないの?
レベル低くね?
ヘッダーにある文字列を入れて欲しいと
でもヘッダーは他の全てを知らないので関連するオブジェクト全てに手を入れなければならないと
こういうの想像できないの?
レベル低くね?
251デフォルトの名無しさん
2018/09/25(火) 19:16:48.81ID:GnoTTlW7252デフォルトの名無しさん
2018/09/25(火) 19:22:34.13ID:GnoTTlW7 >>250
>ヘッダーと内容と記述者と更新日時
たとえばブログのエントリのように
それらの情報に関連性があるのであれば
ひとつのオブジェクト(クラス)にする
そのオブジェクトは当然関連するデータを知っているので
変更もスムーズにできる
一方オブジェクト指向でない場合には
それらのデータがバラバラになっているから変更しにくい
この場合は疎結合というより高凝集の側面が出ている
オブジェクト指向で正しく組むと高凝集疎結合になる
>ヘッダーと内容と記述者と更新日時
たとえばブログのエントリのように
それらの情報に関連性があるのであれば
ひとつのオブジェクト(クラス)にする
そのオブジェクトは当然関連するデータを知っているので
変更もスムーズにできる
一方オブジェクト指向でない場合には
それらのデータがバラバラになっているから変更しにくい
この場合は疎結合というより高凝集の側面が出ている
オブジェクト指向で正しく組むと高凝集疎結合になる
253デフォルトの名無しさん
2018/09/25(火) 19:28:22.29ID:bhDxFTjN254デフォルトの名無しさん
2018/09/25(火) 19:40:26.69ID:du+nhKJd オブジェクト指向は設計思想として好きだけど
オブジェクト思考的パラドックスに陥っている気がする
オブジェクト思考的パラドックスに陥っている気がする
255デフォルトの名無しさん
2018/09/25(火) 19:54:06.59ID:o8KZiItl これだけ前もって言っといた方がええやろ
データとメソッドをオブジェクトで綺麗にまとめることを自慢する輩はオブジェクト指向ですらないと
データとメソッドをオブジェクトで綺麗にまとめることを自慢する輩はオブジェクト指向ですらないと
256デフォルトの名無しさん
2018/09/25(火) 20:13:12.32ID:BMMTvniR データとメソッドをオブジェクトで綺麗にまとめられるのは事実
別に自慢はしてない
オブジェクト指向を勘違いしている人はオブジェクト指向を、
不可能なことを可能にする技術だと勘違いしておいて
不可能なことを可能にしてないと(自分の勘違いを)批判してる
オブジェクト指向は従来のやり方でも可能ではあるが
大変なことをより分かりやすく簡単に実現するための技術
別に自慢はしてない
オブジェクト指向を勘違いしている人はオブジェクト指向を、
不可能なことを可能にする技術だと勘違いしておいて
不可能なことを可能にしてないと(自分の勘違いを)批判してる
オブジェクト指向は従来のやり方でも可能ではあるが
大変なことをより分かりやすく簡単に実現するための技術
257デフォルトの名無しさん
2018/09/25(火) 20:53:51.26ID:GnoTTlW7258デフォルトの名無しさん
2018/09/25(火) 21:06:16.95ID:BMMTvniR オブジェクト指向は大規模開発のために作られた
だが小規模開発で使用しても問題ない
だが小規模開発で使用しても問題ない
259デフォルトの名無しさん
2018/09/25(火) 21:51:35.20ID:CZcrESgD 強制的にOOに慣れるためのプログラミングスタイル、ってありませんか?
260デフォルトの名無しさん
2018/09/25(火) 21:56:25.48ID:GnoTTlW7261デフォルトの名無しさん
2018/09/25(火) 22:15:26.66ID:CZcrESgD >>260
thx a lot !!!
thx a lot !!!
262デフォルトの名無しさん
2018/09/25(火) 22:46:19.22ID:FLKmzsJJ >>256
> オブジェクト指向を勘違いしている人はオブジェクト指向を、
> 不可能なことを可能にする技術だと勘違いしておいて
> 不可能なことを可能にしてないと(自分の勘違いを)批判してる
こういう意見おなかいっぱい
「OOPのメリットはXXXです」
以外の文章はもういい
> オブジェクト指向を勘違いしている人はオブジェクト指向を、
> 不可能なことを可能にする技術だと勘違いしておいて
> 不可能なことを可能にしてないと(自分の勘違いを)批判してる
こういう意見おなかいっぱい
「OOPのメリットはXXXです」
以外の文章はもういい
263デフォルトの名無しさん
2018/09/25(火) 22:57:23.11ID:BRabQ1iT 流れを追っていくとOOPのメリットはリファクタリングにかかるコストが安いって読めるけど
これじゃあダメなのか?
これじゃあダメなのか?
264デフォルトの名無しさん
2018/09/26(水) 00:31:24.02ID:bs5egenN オブジェクト指向のデメリットが単純にコードの段取りや量が増えて鈍臭いんだから
メリットは必然的にその分作りやすくなるって事に消去法でなるやろ
まあ嘘である
メリットは必然的にその分作りやすくなるって事に消去法でなるやろ
まあ嘘である
265デフォルトの名無しさん
2018/09/26(水) 00:44:41.52ID:bs5egenN266デフォルトの名無しさん
2018/09/26(水) 04:39:27.51ID:8XNtqdsN セッター、ゲッター、プロパティを使わない。
これはカプセル化を強いる抜本的なアプローチだ。
これはDependency Injectionアプローチの実装も必要になるし、
"言え、訊くな"という格言の遵守も必要となる。
おれの居るところ真逆のプロジェクトだ使いまくりでワロタ
これはカプセル化を強いる抜本的なアプローチだ。
これはDependency Injectionアプローチの実装も必要になるし、
"言え、訊くな"という格言の遵守も必要となる。
おれの居るところ真逆のプロジェクトだ使いまくりでワロタ
267デフォルトの名無しさん
2018/09/26(水) 06:02:50.00ID:Jt0rVGX1 セッター、ゲッター、プロパティを使うなってのはクラスは全て操作だけで実装しろってことなのかな?
268デフォルトの名無しさん
2018/09/26(水) 08:59:38.32ID:cdctReAr >267
イメージ的にはそうだと思う
ただ操作対象を設定する必要は有るから全く使わないという事では無い
ゲッターセッターの一番の問題点は
それを不用意に使ってしまうとグローバル変数をただ面倒な手順を増やして使うだけになってしまい易いから
不用意に使わないようにする
という訓練の為に
使うな
と言っているのだろう
あくまでオブジェクト指向プログラミングが全くと言って出来ない人向けなんだろう
というよりそう書いて有るけど
オブジェクト指向プログラミングの最大の問題点は
標準教範が存在していない事なんだよなぁ
そのギプスなんたらは教範の一部に成れる可能性が有るかもしれない
イメージ的にはそうだと思う
ただ操作対象を設定する必要は有るから全く使わないという事では無い
ゲッターセッターの一番の問題点は
それを不用意に使ってしまうとグローバル変数をただ面倒な手順を増やして使うだけになってしまい易いから
不用意に使わないようにする
という訓練の為に
使うな
と言っているのだろう
あくまでオブジェクト指向プログラミングが全くと言って出来ない人向けなんだろう
というよりそう書いて有るけど
オブジェクト指向プログラミングの最大の問題点は
標準教範が存在していない事なんだよなぁ
そのギプスなんたらは教範の一部に成れる可能性が有るかもしれない
269デフォルトの名無しさん
2018/09/26(水) 21:23:07.74ID:2wWeimMK >>268
納得できる説明なのにおかしな改行で台無し・・・
納得できる説明なのにおかしな改行で台無し・・・
270デフォルトの名無しさん
2018/09/26(水) 22:10:14.19ID:Ye0laooE メタプログラミングが不要な用途だけなら、オブジェクト指向知らなくても組める。
まあいつまでももそれだと、大規模システムの仕事は無理だが。
まあいつまでももそれだと、大規模システムの仕事は無理だが。
271デフォルトの名無しさん
2018/09/26(水) 22:27:48.39ID:xMAwDWlb ゲッターセッターの悪いのは
インタフェースありきの設計の中に
実装上の変数がうっすら見えてきちゃうこと
そんなもんを前提に設計してはならない
実装に対してプログラミングするのではなく
インタフェースに対してプログラミングするのだ
同じ理由で、それを書き易くしたC#のプロパティみたいなもんは糞
池沼の要望に迎合したような糞
インタフェースありきの設計の中に
実装上の変数がうっすら見えてきちゃうこと
そんなもんを前提に設計してはならない
実装に対してプログラミングするのではなく
インタフェースに対してプログラミングするのだ
同じ理由で、それを書き易くしたC#のプロパティみたいなもんは糞
池沼の要望に迎合したような糞
272デフォルトの名無しさん
2018/09/26(水) 22:42:34.06ID:yzZF1GUc >>271
メソッドとプロパティ (setter, getter) は本質的に同じものだよ
オブジェクトのメソッドの大半はオブジェクトの状態を取得または変化させる
(状態を参照しないならそのオブジェクトに持たせる必要はないわけで)
オブジェクトのメソッドのうち、一つの変数を変更するものがsetterで
一つの変数を取得するものがgetter・・・になってることが多いが別にそうする必要はない。
例えば内部変数が配列で要素の0番目を読み書きするsetter/getter
要素の1番目を読み書きするsetter/getterを作っても良い
もちろんsetter/getterではなくメソッドでやっても良い
どちらでも同じことができる。
言い換えると、システムを作るのに、メソッドだけでも実現できるし
プロパティ (setter/getter) だけでも実現できるということ
メソッドとプロパティ (setter/getter) の違いは
UMLのクラス図を書いたことがあればわかる。
UMLのクラス図には操作と属性の両方が存在するんだよ。
なぜか? それは人間の思考を反映させた結果だから
実装段階の思考ではなくて設計段階の思考ですでに操作と属性が別れてる。
メソッドとプロパティは本質的には同じものでコンピュータから
見れば同じものとして扱えるが、我々は人間なんだ。
人間がそれは操作、それは属性って分類して考えてるから、
それをコードに反映させられる記述能力の高さを求めた結果
メソッドとプロパティができたんだよ
しかたないね。人間だもの
メソッドとプロパティ (setter, getter) は本質的に同じものだよ
オブジェクトのメソッドの大半はオブジェクトの状態を取得または変化させる
(状態を参照しないならそのオブジェクトに持たせる必要はないわけで)
オブジェクトのメソッドのうち、一つの変数を変更するものがsetterで
一つの変数を取得するものがgetter・・・になってることが多いが別にそうする必要はない。
例えば内部変数が配列で要素の0番目を読み書きするsetter/getter
要素の1番目を読み書きするsetter/getterを作っても良い
もちろんsetter/getterではなくメソッドでやっても良い
どちらでも同じことができる。
言い換えると、システムを作るのに、メソッドだけでも実現できるし
プロパティ (setter/getter) だけでも実現できるということ
メソッドとプロパティ (setter/getter) の違いは
UMLのクラス図を書いたことがあればわかる。
UMLのクラス図には操作と属性の両方が存在するんだよ。
なぜか? それは人間の思考を反映させた結果だから
実装段階の思考ではなくて設計段階の思考ですでに操作と属性が別れてる。
メソッドとプロパティは本質的には同じものでコンピュータから
見れば同じものとして扱えるが、我々は人間なんだ。
人間がそれは操作、それは属性って分類して考えてるから、
それをコードに反映させられる記述能力の高さを求めた結果
メソッドとプロパティができたんだよ
しかたないね。人間だもの
273デフォルトの名無しさん
2018/09/26(水) 23:05:14.04ID:xMAwDWlb > メソッドとプロパティ (setter, getter) は本質的に同じものだよ
> (以下ポエム略)
??
なぜそれを俺にレスしたのか不明
> (以下ポエム略)
??
なぜそれを俺にレスしたのか不明
274デフォルトの名無しさん
2018/09/26(水) 23:25:48.93ID:+un+mAjX むしろおまえ以外の誰にレスしろというのか不明w
275デフォルトの名無しさん
2018/09/27(木) 00:13:38.88ID:oacq4Bqj だが実際にはクラスを半グローバル変数の格納構造体みたいに使って
setter/getterでアクセスして外側から中の実装を多角的に覗くような記述をし
そこに更に継承を使って依存でスパゲティー状態になっちゃうから
ソフトウエアの表現方法としての有効性に疑問を持ち始めた人が現れてきたんじゃないかな
setter/getterでアクセスして外側から中の実装を多角的に覗くような記述をし
そこに更に継承を使って依存でスパゲティー状態になっちゃうから
ソフトウエアの表現方法としての有効性に疑問を持ち始めた人が現れてきたんじゃないかな
276デフォルトの名無しさん
2018/09/27(木) 00:30:43.91ID:Fk1HpByz277デフォルトの名無しさん
2018/09/27(木) 00:35:00.12ID:pq96CSzd 刺身にタンポポのせてるヤツが
ちゃんとキリキリ働いてるか
その働きぶりをたまに覗きたいことはある
こっちからなにをするということはない
ちゃんとキリキリ働いてるか
その働きぶりをたまに覗きたいことはある
こっちからなにをするということはない
278デフォルトの名無しさん
2018/09/27(木) 00:42:24.43ID:oacq4Bqj >>276
確かに悪い使い方が都市伝説みたいに普及しすぎて、ろくろくまともな開発したことの
無い輩まで頓珍漢なオレオレオブジェクト指向論を吹聴するにいたったブームには参ったが、、
使い方の問題のみならず、そういう表しにくい構造がソフトウエアそのものにあるじゃないかと思う。
非常に表しにくい場合が少なからずあり、小さいサンプルコードの断片で説かれるOOの美しいはずの
メリットは実践で適用の場が乏しいということ
確かに悪い使い方が都市伝説みたいに普及しすぎて、ろくろくまともな開発したことの
無い輩まで頓珍漢なオレオレオブジェクト指向論を吹聴するにいたったブームには参ったが、、
使い方の問題のみならず、そういう表しにくい構造がソフトウエアそのものにあるじゃないかと思う。
非常に表しにくい場合が少なからずあり、小さいサンプルコードの断片で説かれるOOの美しいはずの
メリットは実践で適用の場が乏しいということ
279デフォルトの名無しさん
2018/09/27(木) 00:54:06.21ID:oacq4Bqj >>260
このギプスのサイトに書いてある方法は
すごく制約した方法であり、
いろいろ大変かも知れないけど
守れば副作用の少ないモジュラリティーと
深すぎない階層設計が可能になるかもしれないのはよく分かる。
でも、守るためには強い規律とメンバのスキルと
工数のゆとりが必要だと思った。
つまり、現実にはなかなか難しい話だろうなと。
このギプスのサイトに書いてある方法は
すごく制約した方法であり、
いろいろ大変かも知れないけど
守れば副作用の少ないモジュラリティーと
深すぎない階層設計が可能になるかもしれないのはよく分かる。
でも、守るためには強い規律とメンバのスキルと
工数のゆとりが必要だと思った。
つまり、現実にはなかなか難しい話だろうなと。
280デフォルトの名無しさん
2018/09/27(木) 01:41:53.45ID:DSKWvsHE いや、単純にオブジェクト指向なんてやったって地獄に落ちるだけ
クラスっていうゴミ箱に突っ込んで臭いものに蓋してる状態じゃいつまでたってもバグなんて取れないんだよ
単純にプログラムを
入力→処理→出力
という繰り返しの塊にしなければならない
メソッドを呼ぶたびに状態が変化
するようなもん誰も管理できない
クラスっていうゴミ箱に突っ込んで臭いものに蓋してる状態じゃいつまでたってもバグなんて取れないんだよ
単純にプログラムを
入力→処理→出力
という繰り返しの塊にしなければならない
メソッドを呼ぶたびに状態が変化
するようなもん誰も管理できない
281デフォルトの名無しさん
2018/09/27(木) 01:45:45.45ID:oacq4Bqj オブジェクト指向の解釈が多彩なので、あれだけど
オブジェクトscopeは有効な場面は多々あるんだよな
closureとか部分適用とか
オブジェクトscopeは有効な場面は多々あるんだよな
closureとか部分適用とか
282デフォルトの名無しさん
2018/09/27(木) 01:46:43.86ID:pq96CSzd オブジェクト指向でも
詳細化したらデータフロー図に落とせる設計でないと
お話にならない
詳細化したらデータフロー図に落とせる設計でないと
お話にならない
283デフォルトの名無しさん
2018/09/27(木) 01:47:55.67ID:DSKWvsHE 状態を持ってしまうのがまずい
いや、持つだけなら好きにすればいい
内包してしまうのがまずいと言うのが正確か?
いや、持つだけなら好きにすればいい
内包してしまうのがまずいと言うのが正確か?
284デフォルトの名無しさん
2018/09/27(木) 01:50:10.34ID:pq96CSzd 以前(>>161)にも書いたとおり
コレ以外方法はない
この原則さえ守れば破綻は回避できる
大体の大きな問題は起きなくなる
@公開インタフェースは可能な限り少なくする
A原則として、よほど適切な理由がないかぎり、可能な限り継承よりコンポジション使う
B下位階層(ここでの階層は>>101>>106の意味)のクラスが上位階層のクラスのインターフェースに絶対に直接アクセスしてはいけない
※ 当然、下位クラスが上位クラスのインターフェースを直接呼びだすようなリフレクションは禁止
C下位階層のインスタンスが非同期で上位のインスタンスに処理を依頼したい状況が発生した場合(可能な限りこんな状況が起きる設計は当然避けるべき)、
処理のやりとりはメッセージキューで行い、可能な限り少ない回数で簡潔なメッセージを用いて簡単に完結できるようにする、複雑なメッセージシーケンスも禁止
(コレは並立するインスタンス間でも同じ)
D同じ階層に並立するインスタンスをムダに乱立させるのは当然禁止
コンポジションとメッセージシーケンス、クラスの階層(ここでの階層は>>101>>106の意味)、インスタンスの生存期間さえ
ドキュメントで適切におさえることができる状態になっていれば
問題やエンハンスが発生しても持続可能対応できる
コレ以外方法はない
この原則さえ守れば破綻は回避できる
大体の大きな問題は起きなくなる
@公開インタフェースは可能な限り少なくする
A原則として、よほど適切な理由がないかぎり、可能な限り継承よりコンポジション使う
B下位階層(ここでの階層は>>101>>106の意味)のクラスが上位階層のクラスのインターフェースに絶対に直接アクセスしてはいけない
※ 当然、下位クラスが上位クラスのインターフェースを直接呼びだすようなリフレクションは禁止
C下位階層のインスタンスが非同期で上位のインスタンスに処理を依頼したい状況が発生した場合(可能な限りこんな状況が起きる設計は当然避けるべき)、
処理のやりとりはメッセージキューで行い、可能な限り少ない回数で簡潔なメッセージを用いて簡単に完結できるようにする、複雑なメッセージシーケンスも禁止
(コレは並立するインスタンス間でも同じ)
D同じ階層に並立するインスタンスをムダに乱立させるのは当然禁止
コンポジションとメッセージシーケンス、クラスの階層(ここでの階層は>>101>>106の意味)、インスタンスの生存期間さえ
ドキュメントで適切におさえることができる状態になっていれば
問題やエンハンスが発生しても持続可能対応できる
285デフォルトの名無しさん
2018/09/27(木) 01:52:11.89ID:DSKWvsHE 単純にメソッドの成功条件に内部で持たれているメンバの見えない奴が関わってたりすると最悪
プログラムのどこでそいつが変更されるのかわからん
こういう問題が起きるたびに途方も無い労力を支払うのが単純に無駄
オブジェクト指向を考えた奴はわざと技術者の仕事を作るためにこれを考えたのではないか?
というぐらい一切メリットがない
プログラムのどこでそいつが変更されるのかわからん
こういう問題が起きるたびに途方も無い労力を支払うのが単純に無駄
オブジェクト指向を考えた奴はわざと技術者の仕事を作るためにこれを考えたのではないか?
というぐらい一切メリットがない
286デフォルトの名無しさん
2018/09/27(木) 01:54:14.64ID:DSKWvsHE287デフォルトの名無しさん
2018/09/27(木) 01:58:10.12ID:oacq4Bqj もう今日は寝ろよハゲども
ノシ
ノシ
288デフォルトの名無しさん
2018/09/27(木) 02:02:11.90ID:oacq4Bqj 単純な入れ子構造になっているか分かりにくい
ランダムに依存しうるネットワーク構造は管理しにくい
しかもノードインスタンスごとに状態を持っていたり
何の×ゲームだよ
ランダムに依存しうるネットワーク構造は管理しにくい
しかもノードインスタンスごとに状態を持っていたり
何の×ゲームだよ
289デフォルトの名無しさん
2018/09/27(木) 02:41:53.03ID:y/NaeiDF 割と真面目にオブジェクト指向は将来的に絶対破滅するという想定で作るといい気がしてきた
上で出てる上手くいく方法とかは「延命措置」とみなして
そう考えたら何かすっきりする
上で出てる上手くいく方法とかは「延命措置」とみなして
そう考えたら何かすっきりする
290デフォルトの名無しさん
2018/09/27(木) 02:47:01.34ID:Fk1HpByz そう。1000年後には絶対破滅するという想定で、
今の仕事を全力でやればいい。
今必要なら、必要ってことさ、AHAHAHAHA〜
今の仕事を全力でやればいい。
今必要なら、必要ってことさ、AHAHAHAHA〜
291デフォルトの名無しさん
2018/09/27(木) 03:51:07.23ID:fvjtmZUM >>260
部分的に構造化プログラミング養成ギプスのような気がする
部分的に構造化プログラミング養成ギプスのような気がする
292デフォルトの名無しさん
2018/09/27(木) 03:53:07.34ID:fvjtmZUM メソッドを呼び出す順番に依存してはならない
293デフォルトの名無しさん
2018/09/27(木) 07:40:33.24ID:zZL/tnLy >>283
公開されてるメソッドの呼ばれ方による状態繊維が簡易なレベルならば問題ない
といったところ。
通信ソケットの実装みたいなものはどうしても状態を持つのは仕方ないけど、
でもそれもできる限り小さく持つってのが最近の感覚じゃないかね。
内部に巨大で複雑なオブジェクトをガツガツ作る様なメソッドがある場合は
なんか問題ある気がする。
公開されてるメソッドの呼ばれ方による状態繊維が簡易なレベルならば問題ない
といったところ。
通信ソケットの実装みたいなものはどうしても状態を持つのは仕方ないけど、
でもそれもできる限り小さく持つってのが最近の感覚じゃないかね。
内部に巨大で複雑なオブジェクトをガツガツ作る様なメソッドがある場合は
なんか問題ある気がする。
294デフォルトの名無しさん
2018/09/27(木) 08:19:49.02ID:emgF57xx 状態を持つなって言ってるのは関数型の考えから?
常にオブジェクト指向言語の方がメジャーなんだが
常にオブジェクト指向言語の方がメジャーなんだが
295デフォルトの名無しさん
2018/09/27(木) 08:20:57.92ID:BciEc+9A 昔はgetter/setterを使うべきと言ってたような気がする。
でもその時にそれに疑問を持っていた人達もいたと思うんだ。
結局、クソなのはこういう手法が良いですよという言を真に受けて無理に採用する所じゃね?
このなんとかキブスが自分にぴったりくるなら採用すれば良いし、おかしいと思うなら採用しなくて良い。
オブジェクト指向も一緒でぴったり来てねえのに採用するのは良くないと思う。
でもその時にそれに疑問を持っていた人達もいたと思うんだ。
結局、クソなのはこういう手法が良いですよという言を真に受けて無理に採用する所じゃね?
このなんとかキブスが自分にぴったりくるなら採用すれば良いし、おかしいと思うなら採用しなくて良い。
オブジェクト指向も一緒でぴったり来てねえのに採用するのは良くないと思う。
296デフォルトの名無しさん
2018/09/27(木) 08:24:56.86ID:emgF57xx グローバル変数をそのまま使うよりは
ゲッターセッターをかぶせた方がマシだけど
使わないにこしたことはないってこと
ゲッターセッターをかぶせた方がマシだけど
使わないにこしたことはないってこと
297デフォルトの名無しさん
2018/09/27(木) 09:26:17.13ID:DSKWvsHE >>294
状態を持つと単純にテストがしにくい
あるクラスにprivateでドキュメントにも記述のないメンバ変数が10個あって
その内包するクラスにもメンバが10個あって・・・なんてプログラムだと
そのクラスの持つ状態は10*10*・・・
みたいに増えていく
完璧にプログラムを制御しようとすると
その全てを把握しなければならない
実際にはそれは不可能なのでオブジェクト指向的に組んだプログラムはそもそもバグっている
状態を持つと単純にテストがしにくい
あるクラスにprivateでドキュメントにも記述のないメンバ変数が10個あって
その内包するクラスにもメンバが10個あって・・・なんてプログラムだと
そのクラスの持つ状態は10*10*・・・
みたいに増えていく
完璧にプログラムを制御しようとすると
その全てを把握しなければならない
実際にはそれは不可能なのでオブジェクト指向的に組んだプログラムはそもそもバグっている
298デフォルトの名無しさん
2018/09/27(木) 09:32:35.44ID:wRik+4En >>295
あんたは使うべきの意味を理解してないよ
使うべきっていうのは今も一緒。
まずクラスのpublicフィールドを直接読み書きしたらいけないというルールがある。
そしてもう一つ、クラスのインターフェースを頻繁に変更してはいけないというルールがある
この2つのルールにより、publicフィールドを直接読み書きしていて、あとから読み書きに
何かしらの制限を書けたくなったときにgetter/setterに置き換えたらインターフェースが変わってしまう。
例えば obj.foo だったものを obj.getFoo() に書き換えないといけない
だから常にgetter/setterを使いましょうと言われていた
だけど今はプロパティを備えた言語ができた。
プロパティを備えた言語であれば、クラスのpublicフィールドというインターフェースを変えることなく
getter/setterにできるためあえて禁止する理由がなくなった
(obj.foo = 1 とかいて obj.foo に代入してるように見えて実は関数呼び出しになってる)
今はインターフェース(名前)を変えることなく、フィールドからgetter/setterに変更できるので
言われてないだけ。でもこれはプロパティを備えた言語に限った話
あんたは使うべきの意味を理解してないよ
使うべきっていうのは今も一緒。
まずクラスのpublicフィールドを直接読み書きしたらいけないというルールがある。
そしてもう一つ、クラスのインターフェースを頻繁に変更してはいけないというルールがある
この2つのルールにより、publicフィールドを直接読み書きしていて、あとから読み書きに
何かしらの制限を書けたくなったときにgetter/setterに置き換えたらインターフェースが変わってしまう。
例えば obj.foo だったものを obj.getFoo() に書き換えないといけない
だから常にgetter/setterを使いましょうと言われていた
だけど今はプロパティを備えた言語ができた。
プロパティを備えた言語であれば、クラスのpublicフィールドというインターフェースを変えることなく
getter/setterにできるためあえて禁止する理由がなくなった
(obj.foo = 1 とかいて obj.foo に代入してるように見えて実は関数呼び出しになってる)
今はインターフェース(名前)を変えることなく、フィールドからgetter/setterに変更できるので
言われてないだけ。でもこれはプロパティを備えた言語に限った話
299デフォルトの名無しさん
2018/09/27(木) 09:32:48.24ID:DSKWvsHE んで思うのが
どうもアメリカらしくないなと
あれだけメリットとデメリットと数値化にこだわる国がなんでこんな丼勘定やねんと
オブジェクト指向なんて出回った頃にはもうすでに向こうではプログラミングは
無意味な公共事業の一環になっていたのではないか?
そしてそれにはもはや意味がなくて
できるだけ時間がかかる方法だけが採用されたと
どうもアメリカらしくないなと
あれだけメリットとデメリットと数値化にこだわる国がなんでこんな丼勘定やねんと
オブジェクト指向なんて出回った頃にはもうすでに向こうではプログラミングは
無意味な公共事業の一環になっていたのではないか?
そしてそれにはもはや意味がなくて
できるだけ時間がかかる方法だけが採用されたと
300デフォルトの名無しさん
2018/09/27(木) 09:34:56.57ID:wRik+4En >>297
オブジェクトが状態を持つとテストがしにくいからといって
オブジェクトに状態を持たせなかったとしても、
状態を持ってるアプリケーションから状態を消し去ることは不可能なわけで
どこかに状態が存在するので、結局その部分のテストはしにくくなるよ
単にテストしにくい場所が変わるだけの話
オブジェクトが状態を持つとテストがしにくいからといって
オブジェクトに状態を持たせなかったとしても、
状態を持ってるアプリケーションから状態を消し去ることは不可能なわけで
どこかに状態が存在するので、結局その部分のテストはしにくくなるよ
単にテストしにくい場所が変わるだけの話
301デフォルトの名無しさん
2018/09/27(木) 09:35:52.22ID:wRik+4En302デフォルトの名無しさん
2018/09/27(木) 09:45:20.17ID:DSKWvsHE >>300
まず、それが見えているかどうかが問題
引数から渡す形ならドキュメントに記述を強制できる
さらに同じ引数で実行したらなるべく同じ結果が返って来ることも保証できる
これで気をつけるのはファイルアクセスやDBアクセス、日時、通信などに限定できる
オブジェクト指向は全てのクラスが失敗作であると言える
まず、それが見えているかどうかが問題
引数から渡す形ならドキュメントに記述を強制できる
さらに同じ引数で実行したらなるべく同じ結果が返って来ることも保証できる
これで気をつけるのはファイルアクセスやDBアクセス、日時、通信などに限定できる
オブジェクト指向は全てのクラスが失敗作であると言える
303デフォルトの名無しさん
2018/09/27(木) 09:59:43.55ID:wRik+4En304デフォルトの名無しさん
2018/09/27(木) 10:51:21.68ID:zzHSqWZa オブジェクト指向を捨てたGO言語を使おうってこと?
305デフォルトの名無しさん
2018/09/27(木) 11:05:48.54ID:fvjtmZUM 実は倍精度浮動小数点数のインスタンス変数があったら2^64個の状態があるって話だ
もしくは10x10x10と10+10+10がほぼ一緒の値という主張だよ
もしくは10x10x10と10+10+10がほぼ一緒の値という主張だよ
306デフォルトの名無しさん
2018/09/27(木) 11:44:32.68ID:emgF57xx307デフォルトの名無しさん
2018/09/27(木) 11:52:41.46ID:DSKWvsHE >>306
理由が全くねーじゃん
理由が全くねーじゃん
308デフォルトの名無しさん
2018/09/27(木) 12:15:48.09ID:zzHSqWZa >>306
何年か前にOOPのそのトレーニングやったけど
今にして思えばおかしなことをしてたなって思う
素直にGO使ったほうがいいよ
今は制約を気にせず非常に楽にコードが書ける
それでいてOOPのころの糞コードからかなり離れている
GOのおかげ
何年か前にOOPのそのトレーニングやったけど
今にして思えばおかしなことをしてたなって思う
素直にGO使ったほうがいいよ
今は制約を気にせず非常に楽にコードが書ける
それでいてOOPのころの糞コードからかなり離れている
GOのおかげ
309デフォルトの名無しさん
2018/09/27(木) 12:17:39.22ID:zzHSqWZa GOのtypeは非常に見通しがいい
c/c++のヘッダファイルはなんだったのかと
c/c++のヘッダファイルはなんだったのかと
310デフォルトの名無しさん
2018/09/27(木) 12:19:15.86ID:99b9Jx0M 状態を持たないオブジェクトwww
もはやオブジェクトちゃうやんw何の受け売りやそれw
もはやオブジェクトちゃうやんw何の受け売りやそれw
311デフォルトの名無しさん
2018/09/27(木) 12:24:21.66ID:nvNAA/EB アクセスパターンを限定化する
これを理解出来ないなら
オブジェクト思考プログラミングはし無い方が良い
どういう訳か
凄まじい自信の有る人程解っていない
というのがこの界隈
これを理解出来ないなら
オブジェクト思考プログラミングはし無い方が良い
どういう訳か
凄まじい自信の有る人程解っていない
というのがこの界隈
312デフォルトの名無しさん
2018/09/27(木) 12:31:34.84ID:zzHSqWZa OOPで良いとされているが一番の間違いは
単機能の小さなクラスを沢山作ること
これはクラス数の爆発を産んでるので一番の害悪
例えば特定のファイルを読むためのクラス
そしてそのインターフェイスとDI用のクラスとテストケース
本当にこれが無駄
内部の状態に依存せず単機能でいいなら関数でつくればいいと気が付いた
単機能の小さなクラスを沢山作ること
これはクラス数の爆発を産んでるので一番の害悪
例えば特定のファイルを読むためのクラス
そしてそのインターフェイスとDI用のクラスとテストケース
本当にこれが無駄
内部の状態に依存せず単機能でいいなら関数でつくればいいと気が付いた
313デフォルトの名無しさん
2018/09/27(木) 12:37:21.63ID:emgF57xx314デフォルトの名無しさん
2018/09/27(木) 12:43:37.80ID:tnNln14X >>313
それはOOP自体が悪いからそう見えるだけ
クラス数の爆発のほうが本当の害悪
上のトレーニングもクラスをちいさくする良い理由の一つとして
エディタの一画面にはいるから…
クラスが一ファイル内にないといけないその言語の制約だろう
パッケージ内に在ればいい言語に乗り換えよう
それはOOP自体が悪いからそう見えるだけ
クラス数の爆発のほうが本当の害悪
上のトレーニングもクラスをちいさくする良い理由の一つとして
エディタの一画面にはいるから…
クラスが一ファイル内にないといけないその言語の制約だろう
パッケージ内に在ればいい言語に乗り換えよう
315デフォルトの名無しさん
2018/09/27(木) 12:47:39.73ID:tnNln14X クラスが小さいと困ることがある
インスタンス変数を2つに絞るのは愚か
確実にクラス設計が困難になる
変数をどこが持つべきかを設計しないといけない
そしてそれが間違っていた場合大規模な再設計とコーディングが必要になる
中程度のクラスにある程度必要とされる変数が入れておく方が開発工数は減る
インスタンス変数を2つに絞るのは愚か
確実にクラス設計が困難になる
変数をどこが持つべきかを設計しないといけない
そしてそれが間違っていた場合大規模な再設計とコーディングが必要になる
中程度のクラスにある程度必要とされる変数が入れておく方が開発工数は減る
316デフォルトの名無しさん
2018/09/27(木) 12:49:58.82ID:tnNln14X 状態を持たない
そもそもが小さい
ならクラスじゃなくて関数を使え
そもそもが小さい
ならクラスじゃなくて関数を使え
317デフォルトの名無しさん
2018/09/27(木) 12:53:47.09ID:99b9Jx0M318デフォルトの名無しさん
2018/09/27(木) 12:55:53.67ID:tnNln14X319デフォルトの名無しさん
2018/09/27(木) 13:18:51.56ID:M9UbUXxK TCP接続をOOPで書くとして、オブジェクトの外側でTCPの例の状態遷移を気にする必要あるんかいな
320デフォルトの名無しさん
2018/09/27(木) 14:18:04.82ID:mMx24hKT 不変オブジェクト自体が一つの状態であることは確かだと思うが、語弊がありそうだな。
可換原則的には互換性のある小さなクラスをたくさん作る、が正しいだろうけど、
実際にそれすると、とんでもないバカが現れて瞬時に全壊するのも見たことあるし。
やっぱり一概には言えないと思うわ。
可換原則的には互換性のある小さなクラスをたくさん作る、が正しいだろうけど、
実際にそれすると、とんでもないバカが現れて瞬時に全壊するのも見たことあるし。
やっぱり一概には言えないと思うわ。
321デフォルトの名無しさん
2018/09/27(木) 14:21:34.40ID:emgF57xx322デフォルトの名無しさん
2018/09/27(木) 15:03:29.89ID:DSKWvsHE >>319
気にする必要が無いように組んでもいいし組まなくてもいい
でもテストは全状態に対して行わなくてはならない
現状はおそらくそれをやってる奴が少ないのがまずい
ここではさもやるのが当然とばかりに主張はするがそのテスト方法は提案すら挙げられない雑魚
気にする必要が無いように組んでもいいし組まなくてもいい
でもテストは全状態に対して行わなくてはならない
現状はおそらくそれをやってる奴が少ないのがまずい
ここではさもやるのが当然とばかりに主張はするがそのテスト方法は提案すら挙げられない雑魚
323デフォルトの名無しさん
2018/09/27(木) 15:09:59.98ID:wRik+4En はっきりさせておかないといけないのは
オブジェクト指向と関数型で条件が違う比較をしてるってこと
つまり
「オブジェクト指向で状態を扱う必要がある問題」
VS
「関数型言語で状態を扱わない問題」
という違った問題で比較している
アプリケーションから状態をなくすのは不可能なので
「関数型言語で状態を扱う問題」を解かなければいけないのだが
なぜか状態はすべてなくすことができるんだという間違った前提で
状態がない優しい問題を解いているだけになってる
オブジェクト指向と関数型で条件が違う比較をしてるってこと
つまり
「オブジェクト指向で状態を扱う必要がある問題」
VS
「関数型言語で状態を扱わない問題」
という違った問題で比較している
アプリケーションから状態をなくすのは不可能なので
「関数型言語で状態を扱う問題」を解かなければいけないのだが
なぜか状態はすべてなくすことができるんだという間違った前提で
状態がない優しい問題を解いているだけになってる
324デフォルトの名無しさん
2018/09/27(木) 15:43:16.13ID:emgF57xx325デフォルトの名無しさん
2018/09/27(木) 17:55:02.31ID:34EufdvK おれは関数型主義じゃじゃないけど適切にルール組んでその通りにやればいいだけじゃないか?
関数型はオブジェクト内に状態が隠蔽されてないから
やりやすいだけ
関数型はオブジェクト内に状態が隠蔽されてないから
やりやすいだけ
326デフォルトの名無しさん
2018/09/27(木) 17:57:15.64ID:34EufdvK Cだと構造体がなければほぼ全部シグネチャーに書きださなければならなかったけど
関数型は関数で組み合わせてあるから楽なんだろうなとは思う
関数型は関数で組み合わせてあるから楽なんだろうなとは思う
327デフォルトの名無しさん
2018/09/27(木) 18:00:53.71ID:34EufdvK オブジェクト指向でもやりようによっては状態の遷移がわかりやすくはかける
fluxとかじゃ状態はイミュータブル
actionを適用したらその都度新しい状態オブジェクトを作ってストアしてる
古い状態は書き換えられずに破棄される
fluxとかじゃ状態はイミュータブル
actionを適用したらその都度新しい状態オブジェクトを作ってストアしてる
古い状態は書き換えられずに破棄される
328デフォルトの名無しさん
2018/09/27(木) 19:04:14.07ID:DZkTxoQs 状態が複雑になる場合もなるべく明示した方が嬉しいよねってのが関数型のスタンス
Haskellは状態を持つ部分をモナド型クラスのインスタンス(=型)にするし、ML系は非数値状態を型に持たせて型検査の形で明示する
個人的には基本関数型で組んで、状態が必要不可欠な問題に対しては意味論的に隠蔽されているのが正しいならprivateでそれ以外はミュータビリティと型で制御が妥当かなと
その後でパフォーマンスが必要ならその部分をミュータブルなクラスベースOOPにする
Haskellは状態を持つ部分をモナド型クラスのインスタンス(=型)にするし、ML系は非数値状態を型に持たせて型検査の形で明示する
個人的には基本関数型で組んで、状態が必要不可欠な問題に対しては意味論的に隠蔽されているのが正しいならprivateでそれ以外はミュータビリティと型で制御が妥当かなと
その後でパフォーマンスが必要ならその部分をミュータブルなクラスベースOOPにする
329デフォルトの名無しさん
2018/09/27(木) 22:11:06.04ID:y/NaeiDF >>324
まあ冒頭副作用的な臭いからひっぺがしのモナドが思いつくなこれは
まあ冒頭副作用的な臭いからひっぺがしのモナドが思いつくなこれは
330デフォルトの名無しさん
2018/09/27(木) 22:52:16.03ID:ojLVUDGL オブジェクト指向ってウェブサイトの構築以外でどうやって使うんだ?
phpとかrubyはわかるがjava、c#やらでどういうシステム作れるか教えて
phpとかrubyはわかるがjava、c#やらでどういうシステム作れるか教えて
331デフォルトの名無しさん
2018/09/27(木) 22:55:44.14ID:pq96CSzd poco使ってc++でwebサーバーの振る舞い自体を組み込みで書く
332デフォルトの名無しさん
2018/09/27(木) 23:41:51.25ID:emgF57xx333デフォルトの名無しさん
2018/09/28(金) 00:59:07.19ID:2dxGIytS そもそもストラウプトのC++がまずかったんだよ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市内閣の若い世代の支持率は92.4% FNN世論調査 [♪♪♪★]
- 高市内閣の若い世代の支持率は92.4% FNN世論調査★2 [♪♪♪★]
- 【サッカー】日本代表の南野拓実は左膝前十字靱帯断裂の重傷 全治は明らかにされず フランス杯で負傷 所属先のモナコが発表 [久太郎★]
- H3ロケット8号機打ち上げ失敗、衛星軌道投入できず ★7 [少考さん★]
- ゼレンスキー氏「高市総理に感謝」 9000億円超追加支援に 「国際秩序に貢献」 (動画あり) [ごまカンパチ★]
- 【MLB】村上宗隆の『小型契約』は吉田正尚の影響か 市場が思いのほか停滞 「NPB打者に懐疑的。吉田が高すぎた」 [冬月記者★]
- 🏡
- 茶ぁしばこうやぁ···( ¨̮ )︎︎𖠚ᐝ12
- 【高市悲報】超有名YouTuber、「米山隆一が逮捕される」というデマ動画が20万回再生、無事訴えられる🥹 [931948549]
- 味噌ルーメンなんか誰が食うんだ
- 嫌儲の核保有反対派ってなんであんなに馬鹿みたいなやつしかいないの? [848333321]
- やっぱ運動してるやつはフェロモン沢山出るんかね
