はてなキーワード: カプセル化とは
エンジニアなの?
ただの決めつけだし、対人論証ですね
Rustでは、pubで可視性管理を管理してカプセル化し、データ構造を定義し、traitでデータ構造に対する操作のインターフェースを定義し、
ジェネリクスやトレイトオブジェクトを使ってさまざまなデータに対して多相で処理を提供することが一般的です
「RustはOOPじゃないし」に対する反論としてはこちらの方が重要であり、私がエンジニアであるかどうか、どのようなプロダクトを書いたかなどはノイズでしかなく、答える必要も、考える必要もありません
Rust言語が公式で「Rustはオブジェクト指向もできるよ!」ってアピールするための3つの主張の2番目が「カプセル化もできるよ!」なんだぞ
そこから考えれば
「カプセル化はオブジェクト指向の本質の1つとみなされている」
と
OOPとよく紐づけられる
そのアプローチは非常に効果的ですね。メイン関数内での処理をシンプルに保つことで、コードの可読性と保守性が向上します。以下にその考え方を反映したサンプルコードを示します。
import json # ビジネスロジックの関数 def business_logic(data): # ビジネスロジックの詳細 pass # 設定情報のロード def load_config(config_file): with open(config_file, 'r') as f: config = json.load(f) return config def main(): # 設定情報のロード config = load_config('config.json') # ビジネスロジックの実行 business_logic(config) if __name__ == "__main__": main()
このコードでは、メイン関数は設定情報をロードし、その情報を元にビジネスロジックを実行するだけです。技術的な詳細は関数内にカプセル化されており、メイン関数はそれらの関数を呼び出すだけです。これにより、コードは自然言語を読むような形で読むことができ、技術的詳細は隠蔽されます。また、各関数の担当者も明確になります。このような設計は、大規模なプロジェクトやチームでの開発に特に有効です。
そんな変更ができる時点でカプセル化が徹底されてないんだよな
コードを書く上で重要なことは?という質問に対して、アスペならば「実行できること」と答えるだろう。
当たり前なことしか言っていない。「実行できること」という文からは全く有益な知見を得られない。
実行できることは重要性ではなく、必要性である。重要性とは、必要なことをすべてやった上でなおやる価値のあることを意味する。
そう考えた時に私がよく思うのは「最短時間で理解可能」であることが重要であると思うわけである。
しかしここに宗教がある。そもそも、人間が物事を理解するプロセスは人それぞれである。
私は一度、関数やモジュールで適切に分離するためのリファクタリングというものを行ったことがある。
というのも、一つの関数に万を超える行が書かれていたため、上司がリファクタリングを命令したためである。
具体的詳細はprivateメソッドに、公開する必要のあるものはpublicメソッドに移した。
そして当初働いていた職場での反応はどうだったかというと、「スパゲッティコード」だというのだ。
スパゲッティコード?一つの関数に万を超える行があるほうがスパゲッティだと普通は思うだろう。
ところが、彼らの脳内では、「常にコードの詳細が見えていなければ気がすまない」という、カプセル化を無視する思想で動いていたため、関数化すると関数の最下層まで辿らないと気がすまないらしかったのである。
このようにして、教育の無い人間はコードの読み方もカプセル化も知らないので、非生産的な方法が最短の方法になってしまうのである。
コードを最短で理解するためにはどうするのか。基礎知識を教育された集団の中に身を置くのがまず先決である。
例えばcalc_monthly_salary_yen(Person p)という行が存在した時、いちいちcalc_monthly_salary_yenの中身を常に見に行くような人たちはダメだ。
「人間のデータを入力すれば円単位で月の給料を計算してくれるんだろう」とざっくりと自然言語的に読み進められる人たちでなければ「最短理解」は難しい。
オブジェクト指向とかかっこいい言い方をしても無駄だ。従来の構造化プログラミングから進歩したことなど一つもない。オブジェクト指向がなぜダメであるのか、それを今から話すぜ。
1. データと処理をまとめるという発想。
データと処理をまとめてクラスとして置くという発想がある。しかし、このようなことをしなくとも、モジュールという単位で利用データと処理の集合をまとめればよかったので、クラスを使う必要はない。しかもクラスはインスタンス化のときに、不要な情報まで持ってくるのでメモリ効率が明らかに悪い。コンピュータが進化しているからメモリのことはあまり考える必要がないとはいえ、必要ない処理をまとめて閉じ込めるのは無駄が多い。なぜクラスという名詞で概念分類できると考え始めたのかは不明だが、アルゴリズムとデータ構造という構造化プログラミングの手法を、クラスと型というパラダイムに変換することで型にうるさいC++馬鹿を生み出し、彼らが発狂することになってしまった。しかもデータと処理にわざわざ依存関係を持たせて、変更に対する柔軟性を失わせている。
2. 継承
継承によって既存の構造を持ってこようとする必要性が全く無い。それどころか、継承を使うことによってプログラムがスパゲティ化し、依存関係のグラフがややこしくなってしまう。継承など使わず、必要な情報はスコープの限られた共通の変数、または関数の引数として用意しておけば良い。もしクラスをどうしても使いたければ、共通のインターフェイスをもたせたほうがマシである。インターフェイスを使えば、クラス利用者が意識すべきpublicメソッドがなんであるか把握できる。
3. カプセル化
オブジェクト指向の中で役立つ概念はカプセル化だけである。しかし、カプセル化はクラスなしで構造化プログラミングの方法で実装できる。pythonでは、モジュールの中でアンダースコアから始まる関数を用意しておけば、それがprotectedやprivateと似たように機能させることができる。オブジェクト指向がなぜカプセル化が独自の概念だと言い始めたかは謎。
4. ポリモーフィズム
同じ名前のメソッドを、入力に応じて処理の内容を変える。このようなことはオブジェクト指向などと誇大宣伝をするほどのことでもない。構造化プログラミングで似たようなことができる。
これまでいろいろな書籍やサイトから情報を得てきて、オブジェクト指向のプログラムを、「知識とスキルを持った職人をいっぱい雇ったプロジェクト」というように理解している。
極論を言えば、オブジェクト指向=擬人化思考というように捉えているけれど、この理解はどの程度あっているのだろうか?
とすると、
職人は、会社の指示によって働き、持っている知識とスキルを使って仕事をする。
知識やスキルは、各職人が会社に指示されたマニュアルを読んで覚える。
とか
オブジェクト指向が特に有用なのは、特に複数の会社と協力して作業する場合である。
そのような大規模なプロジェクトであるならば、各企業の職人一人一人に指示するよりも、マニュアル一つで指示した方が簡単だし、間違いが少ない。
オブジェクト指向の三大概念として、いろいろな媒体で紹介されている「継承」「ポリモーフィズム」「カプセル化」も、それぞれ「一つのマニュアルを用意して、職人に利用してもらいやすくする」「各職人は、自分にとって必要なマニュアルの一部を読んで知識とスキルを手に入れる(ここの理解は自信がない)」「マニュアルは、職人によって勝手に書き換えられないようにするべき」みたいな感じでなんとなく理解している。
ただ、根本のオブジェクト指向がよくわかっていないため、これが合っているのかもわからない。
のだけれど、なんとなく色々勉強してきて、複数人とプログラムを組むとか、大きなプロジェクトとかでもない限り理解していなくても問題なさそうなので、回収率100%を超える競馬プログラムが出来上がるのを夢見て寝ます。
この3点は私も共通している。両親については片親で過干渉ではあったが、しかし大切にはしてくれていた。それでもあなたと同じ思考から抜け出せない。これは、境遇、個人の努力を超えて、先天的な脳の作り(ADHD)が大きく関係しているのではないか。これに人間関係の失敗経験が積み重なりフィードバックとなり囚われの強化、すなわち脳の悪い思考プロセスのネットワークの強化になっていくと仮定している。
人間関係の失敗でさらにこの自己評価が補強されてしまい、どうにも身動きができなくなってしまったのだけど、ここから脱するためにやったことを書く。
"考え方"についてはプロに任せ、むしろ考えない方法を身につけたほうがいい。
まず、ADHDはワーキングメモリが足りないため問題を大雑把にまとめて考えてしまう。
全体を捉えて、最も期待値の高い解決方法を理性的に選べている自信はあるだろうか。あなたはある程度客観視できているだろうから落ち着いているときに考えればおそらく、高ストレス時に思っていたことが実は的外れだったという経験があるんじゃないかと思う。
例えば就労が困難だったというケース(あくまで一般論の例)を考える。そうなる理由はそんなにシンプルではなく大量の変数が複雑に絡んでいる。 しかし、"自分が馬鹿だから仕事ができない"という形で問題をカプセル化してしまえば、ワーキングメモリが節約できるため、ADHDは問題を単純化して自分を責める。一時的にはそれが一番ストレスが少ないのだ。本当は"環境が悪かった。定型発達でも仕事が原因で自殺していることもある"など、別の可能性が考えられるのに。
では、いつも正しい判断をするにはどうしたらいいだろう?これは、"自分の判断を常に保留する"が疲弊したADHDには正しい方針だと思う。判断は常にプロに任せる。それはどこに住んでどんな仕事をすればいいか、という大局的な判断だけでなく、"誰が悪いのか"、"なぜこうなったのか"、"どうして不快なのか"なども含めてだ。特性上、強力に単純化してしまうので疲弊してIQが下がっている今はどれも的外れになる。
寝て起きたら、デモデモダッテ思考が顔を出した。父と離れたいなんて、私のわがままじゃないかと疑っている。よく分からないから、今日、相談支援専門員さん(何回かソーシャルワーカーさんと書いてるけど、勘違いでした)に電話してみようかと思う。
だからこれで電話できたあなたはとても賢いし、自分を客観視するセンスがある。
マインドフルネス瞑想がよい。方法は適当にぐぐるとでてくる。(大きいトラウマがあると難しい場合がある。↓に追記あり) 浮かんだアイディアを0.5秒以内に棄却できるようになってくれば、鬱でも躁でも、脳の暴走状態を食い止めやすくなる。
人生史を書くとか考えたものをすべて紙に出すとか、自分のトラウマを再認識するようなセラピーは無理に実践しないほうがいい場合がある。プロのセラピストでない限り PTSD のトリガーになりかねないので、慎重に。
ストレスは回避反応を高める。ただでさえADHDは弱いとされる、長期的な価値を評価するための前頭前野が働かなくなり、極端な単純化をし始める。生存のヒントを得るために(存在しないかもしれない)脅威をあちらこちらに探し始める。
IQを上げる方法はたくさんある。有酸素運動と無酸素運動を組み合わせたインターバルトレーニング、読書、楽器演奏、人との会話、人と比べて自分が優れていると実感する、など。しかし、どれもそれができる基盤が無ければ成り立たない。基盤は、どんな形であれ"安心できる生活"だ。
プロに相談して模索しているのはとても素晴らしい。これこそ良い判断だと思う。
あなたの場合、愛着のある肉親だろうが、親元、実家から離れるのは最優先だ。トラウマ体験のある場所にいると記憶のトリガーが多く、思考のノイズが高まる。瞑想を頑張っていても考えの棄却という技術では捌ききれない量になる。例えるなら、イラク戦争でPTSDになった米兵が戦後もその戦場の脇で延々とセラピーを受けるなんてことがあるだろうか。アメリカに帰って湖で犬とキャンプでもしているべきだろう。
追記や他へのレスを見ると、同居した者と揉めた経験からグループホームや同棲に抵抗があると言っている。
↓もそう。私もこの囚われとは長年付き合っている。 自分の場合、親には愛されているはずなのに。
環境を変えても、私がダメだからダメだと、ずっと思ってた。愛されるためには愛される能力が必要で、残念ながら私にはそれが決定的に欠けていると思えるから。
ちょっとつらいかもしれないから今は受け入れられなくてもいいのだけど、これこそADHD特有の極度な問題の単純化の例になっている。あのときうまくいかなかったという一例を以って、だからあれはやめたほうがいいのだ、というように考えるとワーキングメモリが大幅に節約できる。実際は、相手が特別クズだったとかグループホームガチャとか色々分解できて、次の一手はまたフラットに考えることもできるはずなのに。
今は総括(判断)せず、プロに任せて、最善の環境に居れるまで模索するのがよい。次がダメだったとしても単純化せず、また次のチャンスを模索する。単純化のバイアスを除いて考えれば、定型発達でも転職、離婚、病気のような失敗は何度も経験するのだ。
人間のつながりが欲しいと思ったとき、そうできている人とのライフスタイルを比較するのがいいと思う。親族、家、お金、車などの財産ではなく、朝起きて何をしているのか、どんな本を読んでいるのか、どんなご飯を食べているのか、どんな娯楽を好んでいるのか。"考える"代わりに"行動する"のがよい。考えても考えても財産もライフスタイルも変わらないどころか極度の単純化で誤った判断をするのが疲弊したADHDの末路だ。
安全な生活が得られるようになってきたら、形から入る。脳は考えて変わるわけではなく、運動、適度な負荷(勉強、練習など)、食事で変わるのだ。脳に振り回されて困っていたのだから、脳を手なずけるのがよい。だから順番を変える。"まともな自分になれば孤独ではない生活が得られる"というのはやめて、"孤独じゃない人の生活を真似てみればまともな自分になれる"ということ。
私も自分自身そう思いたいという部分はあるんだけど、見ている文章を見る限り全然馬鹿ではない。というか文章のみのコミュニケーションであれば誰も重度の発達障害とは感じない。
これはこの番組の予告だけ見ても思った。もし道路で出会ったらまるで思考が通じない人にしか見えないのに、文章は物凄く理知的で美しいのだ。
https://www2.nhk.or.jp/archives/tv60bin/detail/index.cgi?das_id=D0009050591_00000
我々は入出力や瞬発的な行動については困難があるかもしれない。しかし、中身までおかしいわけじゃない。
親さえもそれはわかってくれなかったかもだけど、今は世の中に知見が溜まってきているし、お互いこのようにネットで話すこともできるようになってきた。だから幼少期よりはまだ模索できる道は多いはずだ。
おせっかいかもしれないけど増田がきっかけで過集中に入ったので最後まで書きました。
スターがついていたので。
hamamuratakuo 個人的な見解だが、頭が悪い人に共通している特徴は「嘘つき」であること。全てを曖昧にしており、現実を直視できず、被害妄想に耽溺。それゆえ認識が歪んで知性も劣化している。嘘をやめることが改善のスタート地点
言っていることの大筋は私と同じだ。しかし、それを「頭が悪い」「嘘つき」という主観性の強い表現であえて言い直す必要は無い。今回で言えば頭が悪いのではなくワーキングメモリが小さいと言えるし、嘘つきなのではなくワーキングメモリの節約を無意識に行っている、というようにより具体性のある話にしたつもりだし、「嘘をやめる」に対応する極度の単純化をやめる方法も示したつもり。
これも脱線するが、自分は発達障害を自覚する前、定型発達的な人々に対してリスペクトを欠いた態度を取っていた。彼らは(今思えばADHDの私に比べれば、だが)会議で発言しない、積極性が無い、すぐ行動しない。「頭が悪い」愚鈍な人々だと思っていた。つまり自分が得意なことができない人を簡単に「頭が悪い」と言うのは主観的すぎる。特に今回の文脈では発達障害という特異な脳の状態について話しているのだから、少し配慮してもいいんじゃなかろうか(隙自語同士なのでまぁいいけど)。発達障害と知的障害は異なる。高IQの発達障害は大勢いるし、発達障害の診断時にIQテストを受けるのでむしろ発達障害者のほうが自分のIQを正しく理解している。
misarine3 嘘ではなく現実を正しく把握できなsので偏って間違った認識を伝えてしまうケースもある。あとADHDかと思ったら発達性トラウマ障害(複雑性PTSD)というケースもあるので一考してほしい。
programmablekinoko マインドフルは合わなかった。多動優先だとじっとしているのが難しい。有酸素運動で強制的に頭空っぽにするか、NBackやラジオ流しながら何かを音読するなど、脳内のノイズをかき消す方法が自分には良かった。
https://anond.hatelabo.jp/20220118124641
これはそうかもしれない。実は自分の場合は自己流の荒療治でトラウマの追体験を繰り返してみたり瞑想でつらいことを棄却する訓練をやってみたりと実験してみた。この中で瞑想が継続できたということなので、n=1 なのは確か。カウンセラーや精神科医などプロに相談しながらがよい。
本当は睡運瞑野がうまくかみ合えばいいのだけど、睡運瞑野ができるのは睡運瞑野がうまくいっているときだけという難しさがある。 瞑想の代わりに運動する、それもできないなら何もせず寝てしまうなどで、あまり考えないようにできるといい。
sisya 前提が少しおかしい。「頭が悪いから人に大事にされない」ではなく「考えが足らずに人が傷つくことをしてしまっているが、そのことに自分が気づけないので遠ざけられる」なので、相手にその旨先に伝えてくといい。
自分のアイディアはこれとも違う。そもそも「大事にされていない」「遠ざけられている」という認識が正しくないかもしれないというのが私の立場だ。元増田についても、すでにこのスレッドやブクマで多くの人から大事にされているのだから大きな反例になっている。 少なくとも汲める事実は「両親からのモラハラがあった」「グループホームで暴力を起こした人がいた」ということだけだ。これを「遠ざけられている」と読み取ることは、私が何度も言っている極端な単純化だ。
もし「自分の考えが足りず人を傷つけるのだ」というところに根拠を置いてしまうと、「自分の考えを洗練させなければならない」という出来もしない曖昧な課題が作られてしまう。私もおそらく元増田も、このような袋小路でさんざん自分を苦しめてきた。私の主張が伝わっていれば、期待値が高い対処は例えば「なるべく親元から離れる」「相性のいいグループホームを探し、医師など専門家の支援を受ける」などになる。的外れな自省をさせる意味は無い。
aox ASMRに限らず増田さんみたいにスパスパ考えられて実行できるなら誰も苦労しないのでは ʕ•̫͡•ʕ•̫͡•ʔ•̫͡•ʔ•̫͡•ʕ•̫͡•ʔ•̫͡•ʕ•̫͡•ʕ•̫͡•ʔ•̫͡•ʕ•̫͡•ʕ•̫͡•ʔ•̫͡•ʔ•̫͡•ʕ
私も偉そうに書いてしまっているので労せずこれに至ったと思われても仕方ないが、これに至るまでは大変な苦労をした。自殺未遂をして警察に保護されそのまま措置入院(強制)というのを何度かやった。ずっと不登校だったが一念発起して就職した会社も、それで復職できず退職した。短絡的な行動で多くの人間関係を失った。何年も睡眠が浅く、悪夢で夜中に飛び起きることが多かった。今もギリギリのバランスでやっと立っているが、それでも以前に比べれば前向きに暮らせている。むしろ読む人がこんな苦労をせず役立ててくれるなら幸いだ。