カプセル化(英語: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:ifygL6bT217デフォルトの名無しさん
2018/09/24(月) 20:10:52.64ID:Kxio7RVg ハンドラやコンテキストつかって
オブジェクトを操作するのはまさしくオブジェクト指向の便利な部分だからな
UNIXのi/oなんかもハードウェアがうまく抽象化されてる
ファイルディスクリプタ使って簡単に読み書きができるからな
オブジェクトを操作するのはまさしくオブジェクト指向の便利な部分だからな
UNIXのi/oなんかもハードウェアがうまく抽象化されてる
ファイルディスクリプタ使って簡単に読み書きができるからな
218デフォルトの名無しさん
2018/09/24(月) 20:13:11.48ID:oYzwCf5A オブジェクト指向にメリットなんて無いからね
219デフォルトの名無しさん
2018/09/24(月) 20:17:40.60ID:csv6kfNU220デフォルトの名無しさん
2018/09/24(月) 20:22:15.20ID:csv6kfNU 結局の所、小規模なものはオブジェクト指向使っても失敗しない
大規模なものは、オブジェクト指向を使うと失敗しにくくなる
って所が重要なんじゃないですかね?
失敗したときにそれがオブジェクト指向的な原因か
構造化的な原因か、なんてことよりよりも
大規模なものは、オブジェクト指向を使うと失敗しにくくなる
って所が重要なんじゃないですかね?
失敗したときにそれがオブジェクト指向的な原因か
構造化的な原因か、なんてことよりよりも
221デフォルトの名無しさん
2018/09/24(月) 20:30:44.15ID:Kxio7RVg 低学歴知恵遅れにオブジェクト指向はまずムリ
日本では、ITドカタは低学歴底辺がなる職業だからな
だいたい程度がしれたヤツラが群がってくる
この板みれば分かるとおり
日本では、ITドカタは低学歴底辺がなる職業だからな
だいたい程度がしれたヤツラが群がってくる
この板みれば分かるとおり
222デフォルトの名無しさん
2018/09/24(月) 20:31:28.52ID:e4NBE4Fp う〜ん、ここ見てるとオブジェクト指向はクソと言いたくなるね。
何らかの問題を解決したい、もっと便利で問題の発生しない手法は無いだろうかというような要望があって、
それを実現するためにオブジェクト指向なるものが発明されたとすれば、
同じ考えでオブジェクト指向を採用するのも良いだろうけど、
最初からオブジェクト指向ありきはダメなんじゃないの?
なんかさ、なんでも右ならえで無理に採用してるような気がするんだよなあ。
オブジェクト指向に限った話じゃ無いけど、特に日本では。
何らかの問題を解決したい、もっと便利で問題の発生しない手法は無いだろうかというような要望があって、
それを実現するためにオブジェクト指向なるものが発明されたとすれば、
同じ考えでオブジェクト指向を採用するのも良いだろうけど、
最初からオブジェクト指向ありきはダメなんじゃないの?
なんかさ、なんでも右ならえで無理に採用してるような気がするんだよなあ。
オブジェクト指向に限った話じゃ無いけど、特に日本では。
223デフォルトの名無しさん
2018/09/24(月) 20:32:33.20ID:csv6kfNU224デフォルトの名無しさん
2018/09/24(月) 20:35:08.38ID:csv6kfNU >>221
優れた人が優れた道具を使う
それに対抗するために、もっと優れた道具ができたとしても
それだって優れた人が使ったほうがもっと効果が高いわけで
優れてない人が、優れてない道具を使って勝つには
人海戦術しかないんだよね
優れた人が優れた道具を使う
それに対抗するために、もっと優れた道具ができたとしても
それだって優れた人が使ったほうがもっと効果が高いわけで
優れてない人が、優れてない道具を使って勝つには
人海戦術しかないんだよね
225デフォルトの名無しさん
2018/09/24(月) 20:38:06.78ID:Kxio7RVg ぜんぜん分かってないわ
刃物は道具でもあるし
人を殺すこともできる
刃物は道具でもあるし
人を殺すこともできる
226デフォルトの名無しさん
2018/09/24(月) 20:38:44.95ID:Kxio7RVg あやまった使い方をすれば
簡単にケガをする
簡単にケガをする
227デフォルトの名無しさん
2018/09/24(月) 20:42:45.07ID:e4NBE4Fp228デフォルトの名無しさん
2018/09/24(月) 20:50:20.68ID:Kxio7RVg 教育コストはものすごいかかるが
手続き型言語でオブジェクト指向をみっちり体験してから
オブジェクト指向の教育に移行したほうがいい
この手順踏んだほうが間違いが少ない
そうでないと
ID:csv6kfNU ← コイツ
みたいに頭悪いのが大量に量産され続ける
手続き型言語でオブジェクト指向をみっちり体験してから
オブジェクト指向の教育に移行したほうがいい
この手順踏んだほうが間違いが少ない
そうでないと
ID:csv6kfNU ← コイツ
みたいに頭悪いのが大量に量産され続ける
229デフォルトの名無しさん
2018/09/24(月) 21:03:48.14ID:u7Hms91/230デフォルトの名無しさん
2018/09/24(月) 21:19:43.39ID:AdxflhqI オブジェクト指向のメリットって何?
この問いに今だかつて一人も答えてくれた事は無い
どっか他の文献指差して丸投げとか
逃げと食い下がりを駆使して結局答えないとか
この問いに今だかつて一人も答えてくれた事は無い
どっか他の文献指差して丸投げとか
逃げと食い下がりを駆使して結局答えないとか
231デフォルトの名無しさん
2018/09/24(月) 21:47:42.62ID:oYzwCf5A232デフォルトの名無しさん
2018/09/24(月) 21:48:43.99ID:FEoaRsa5 低学歴は無理せずにIT土方やってなさい
233デフォルトの名無しさん
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:99b9Jx0M■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「女性同士、子ども連れはお断り」居酒屋の張り紙が物議、飲食店の入店拒否はどこまで許される? [ぐれ★]
- H3ロケット8号機、打ち上げ後に「第2段エンジン早期に燃焼終了」 ★2 [少考さん★]
- 鈴木農水相「自由にコメ作れば価格が暴落する」おこめ券はコメ価格に「ほとんど影響なし」 ★2 [Hitzeschleier★]
- 高市首相、就任2カ月 取材対応よりSNS発信重視 不都合な情報、伝えぬ恐れも [Hitzeschleier★]
- 長期金利上昇一時2.095% 27年ぶり、日銀の利上げ継続観測 [蚤の市★]
- 【MLB】ヤクルト・村上宗隆、ホワイトソックスと2年総額53億で合意! 背番号は5 米報道…低迷チームが白羽の矢、短期契約★2 [冬月記者★]
- 北海道新聞「高市首相、取材対応よりSNS発信重視。不都合な情報 伝えぬ恐れも」 [834922174]
- 日銀が利上げ決定したけど約8割が変動金利で借りてるわけだけど、無理な利上げできないから詰んでねこの国? [472617201]
- 【特大悲報】1千億円の日本製衛星を積んだH3ロケット、打ち上げ失敗…宇宙のもずくに☠★3 [339712612]
- 【無職出禁】有職達の休憩所🥴😶‍🌫😃🏡
- 【高市ショック】長期金利が2.1%に上昇した [115996789]
- 【高市悲報】ネトウヨ「いつから日本が輸入で成り立ってる国になったんですか😤」 [359965264]
