カプセル化は愚かな考え

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2020/07/29(水) 17:17:58.13ID:u638n5uE
■危険性

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

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

大雑把にいうと、教科書の上では素晴らしく、開発を始めた最初のうちは良いが、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。

オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。

ソースコードが存在し改修が可能であればカプセル化しても問題ない。ソースコードがあってもライセンス的に改修できない場合や、そもそもバイナリのライブラリしかない場合などは絶望的である。

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)
760デフォルトの名無しさん
垢版 |
2020/08/31(月) 23:12:59.79ID:KpYRvIVn
エラーチェックをしたいときはsetter
2020/09/01(火) 00:02:49.23ID:TdzDL303
もしかして
貧血ドメインモデル
2020/09/01(火) 00:41:56.64ID:EzjTWAdj
>>760
それ、エラーチェックをしたいときはpublicメソッド呼び出しと
言ってるのと同じことだけど、何の関係があるの?
2020/09/01(火) 00:52:29.54ID:PZXbhIm5
JavaBeansではセッタとメソッドは別の概念
セッタを通じて状態にアクセスすることでオブジェクトは
よりスマートになる
2020/09/01(火) 00:54:01.92ID:PZXbhIm5
一周回ってアクセサが再評価される段階に入った
2020/09/01(火) 02:05:29.12ID:ETu8a3Hk
>>763
なんねーよ
バカジャネーノ
ブッコロ
2020/09/01(火) 02:06:41.53ID:ETu8a3Hk
何がカプセル化だよ
settergetter使うなら丸出しと変わんねーよ
767デフォルトの名無しさん
垢版 |
2020/09/01(火) 02:27:10.74ID:/xk9LnpH
これからの時代、多態性よりポリフェノールのほうが重要。
768デフォルトの名無しさん
垢版 |
2020/09/01(火) 04:55:11.55ID:Z9W01AEm
下駄 雪駄
2020/09/01(火) 09:15:18.95ID:G32wsX1x
>>766
そんなわけないやろ。
2020/09/01(火) 09:26:14.90ID:PZXbhIm5
>>766
おいお前それはないよ
2020/09/01(火) 10:03:35.97ID:EzjTWAdj
>>766
お前もしかしたら全てのメンバ変数に
setter/gette作ってんのか?
お前が丸出しにしてるだけだろw
2020/09/01(火) 10:13:31.32ID:FqTPqd+i
これこそ露出狂という奴だなw
2020/09/01(火) 11:42:47.53ID:G32wsX1x
今時、意図せずフィールド丸出しはない
2020/09/01(火) 11:53:13.42ID:4pPofKRH
>>771
は?そもそもオブジェクト指向とか言うクソ使ってねーわ
775デフォルトの名無しさん
垢版 |
2020/09/01(火) 12:14:48.18ID:lpkaZteT
>>774
オブジェクト指向は既に俺の股間に付いているのだから、オブジェクト指向プログラミング言語は要らない!
2020/09/01(火) 12:27:07.84ID:wBGQmF0I
だから適切なインターフェイス作成ができないなら素直に関数にしとけと。。
馬鹿に限って自分のクラス設計に自信持ってんだよな。。
777デフォルトの名無しさん
垢版 |
2020/09/01(火) 12:50:13.91ID:/xk9LnpH
CSSはJavascriptで実装されただけあって、仕様も混沌としてるな。
動的確保前提の設計なので、いちいちイラっとする。
2020/09/01(火) 12:52:31.23ID:1Eq9ttpo
ハァ?
779デフォルトの名無しさん
垢版 |
2020/09/01(火) 12:59:45.89ID:/xk9LnpH
教科書は「後で説明するので今はそういうものだと思ってください」というのは無い。
前から順番に読んでいくと、説明なく出てくるものが無いのである。

仕様を書くときは、教科書のように書くことを徹底する。
するとどうなるか?
相互参照が無くなるのである。
相互参照が無くなれば、変数の大きさは一意に決まる。
つまり不要不急の動的確保が無くなるのである。

これがC/C++の掟である。
780デフォルトの名無しさん
垢版 |
2020/09/01(火) 13:15:28.27ID:Z9W01AEm
今まで見たもっともひどいクラス設計は?
2020/09/01(火) 13:22:15.49ID:EzjTWAdj
>>779
1+1=2なんです。今はそういうものだと思ってください。
って最初からやってるぞw
782デフォルトの名無しさん
垢版 |
2020/09/01(火) 13:26:52.52ID:/xk9LnpH
Javaのようなお猿さん言語はプリミティブ以外はすべて参照、つまり動的に確保される。
だからいつでもどこでも動的でいいのだなどと思わないでほしい。
あなた方はお猿さん。
そしてお猿さん用言語を使っている。
しかし、世の中には人間もいることを忘れないでほしい。

人間はもっと効率の良い設計を求めるものだ。
2020/09/01(火) 13:31:17.95ID:EzjTWAdj
Javaのような人間用言語はプリミティブ以外はすべて参照、つまり動的に確保される。

というふうに入れ替えても問題ないんじゃね?w
784デフォルトの名無しさん
垢版 |
2020/09/01(火) 13:35:01.05ID:/xk9LnpH
入れ替えた場合、C/C++は天才用言語になるからダメだ。
2020/09/01(火) 14:09:37.70ID:FqTPqd+i
>>779
小学生の教科書からやり直せ
2020/09/01(火) 14:12:06.91ID:ETu8a3Hk
脳筋プログラマばっかりだな
787デフォルトの名無しさん
垢版 |
2020/09/01(火) 15:05:15.80ID:OC0cfHje
>>780
MFC
788デフォルトの名無しさん
垢版 |
2020/09/01(火) 15:29:52.72ID:fuWow3G5
>>781
高校までの教科書は大学入ったら全部役に立たないよなω
789デフォルトの名無しさん
垢版 |
2020/09/01(火) 15:31:01.61ID:fuWow3G5
>>787
あれはただのwrapper以下だからなー
790デフォルトの名無しさん
垢版 |
2020/09/01(火) 15:51:55.50ID:/xk9LnpH
MFCは30年前のライブラリだからな。
よくまあここまで生き残ったわ。
791デフォルトの名無しさん
垢版 |
2020/09/01(火) 16:28:44.96ID:fuWow3G5
同じ時期かそれより前にあった OWL の方が10000倍マシだった
792デフォルトの名無しさん
垢版 |
2020/09/01(火) 20:39:35.27ID:QR4OvP6I
御子を捨てよ、良いな?
2020/09/01(火) 21:24:37.44ID:eOhMfKjO
Delphi最強
2020/09/01(火) 21:52:46.77ID:NYV7WRkk
>>779
Javaの教科書には

class Test {
public static void main(argv[]) {
System.out.println("Hello");
}

とりあえずこれで動きます。「あとで説明するので今はそういうものだと思ってください」
と堂々と書いてあるぞ。
2020/09/01(火) 22:55:07.49ID:RK7Kdsp4
>>794
× public static void main(argv[]) {
○ public static void main(String[] argv) {
796デフォルトの名無しさん
垢版 |
2020/09/01(火) 23:46:39.13ID:cXm81OcM
プロパティは、可変階層と同じく若気の興味本位系ではあるが
ベテランになってからも、いくつか使ったことはある

設定時処理のカプセル化
カプセル化と言っても隠したいわけじゃなく、設定する時に絶対にこの処理を通す、という便利機能
「発火」は未経験だが、下手な作りだとなり得る構造だね
ちゃんとできてたとしても、よほどの事情がない限り、普通の関数で書いた方がシンプルで理解もしやすいと思う

なぜ使ったのか、過去ソースを見てみたら、なるほどw
SET時だけでなくGET時にも複雑な処理があるものがあり、これをそれぞれ関数で書くと、関数名が2倍に増える
少なくとも関数名の数を半分にする効能はある
言ってみれば1つの関数に2つの内部関数がある構造なので
2020/09/02(水) 00:29:23.85ID:KTyhBksd
ベテランねー
798デフォルトの名無しさん
垢版 |
2020/09/02(水) 01:31:27.80ID:J/rUgEv/
関数でもできるな
引数が未設定ならGET動作に切り替わると
実際そういう関数も作る
プロパティだと逆に2個になってしまう言語の場合
2020/09/02(水) 01:58:36.95ID:HgpWbw0i
藻前ラ、モチツケ
https://i.imgur.com/DJzoN7F.jpg
800デフォルトの名無しさん
垢版 |
2020/09/02(水) 08:33:16.30ID:yy35G5fq
>>759
Lombok調べてきました感がw

お前が実務経験ないアマチュアってことはよくわかったから口出さないでくれ。
801デフォルトの名無しさん
垢版 |
2020/09/02(水) 09:26:13.66ID:9/rkp9iy
単純なValueオブジェクトはCとかだと
struct Color {
int r, g, b;
};
Color color;
int red = color.r;
みたいに書けるところをわざわざgetter/setter毎回作るの?
アホらしくない?
2020/09/02(水) 10:33:19.59ID:ifuz91bD
>>800
何も言い返さないのかよw
2020/09/02(水) 10:36:53.36ID:lZ/LLDT1
>>801
Valueオブジェクトって何か知ってる?
2020/09/02(水) 11:10:55.31ID:Hwtp1D+h
オブジェクト指向はフレームワーク実装者が意識すべきもの
フレームワーク利用者はその枠でただベタにアプリ実装すればよい

プロパティはフレームワーク実装側から見ると自分自身に対しては何も利益がないけど
フレームワーク利用者の行動をコントロールできるという点で利益がある
805デフォルトの名無しさん
垢版 |
2020/09/02(水) 12:01:34.43ID:9/rkp9iy
ValueオブジェクトってDDD関連で出てくる単語だったのね
その意味では知らなかったけど、そんなこと聞きたいんじゃない
806デフォルトの名無しさん
垢版 |
2020/09/02(水) 12:08:34.16ID:64Ct0prY
>>801
必要なら作っていいし、必要ないならCみたいに書けばいい
807デフォルトの名無しさん
垢版 |
2020/09/02(水) 12:21:27.36ID:9/rkp9iy
ホントかなぁJava触ってるやつらは
getter/setter使わず単にpublicフィールドにしたら
文句行ってきそうなイメージだったけど
808デフォルトの名無しさん
垢版 |
2020/09/02(水) 12:33:16.41ID:KTyhBksd
ValueObjectはReadOnlyが基本だからfinalにして変数をpublicにします
809デフォルトの名無しさん
垢版 |
2020/09/02(水) 13:30:42.14ID:FrAP3fk+
オブジェクト指向に対する愚痴を延々と続ける人には主に2つのタイプがある。

1つはその人にとってオブジェクト指向が新しいパラダイムでありそれを受け入れる事が出来なかった老害タイプ。

もう1つはJavaを通してしかオブジェクト指向を理解しようとしないJava屋の土方タイプ。

両方の属性を持ったタイプが最もタチが悪い。
2020/09/02(水) 13:31:38.92ID:6n47TPOy
>>809
そもそも誰もメリット説明できてないけどねw
811デフォルトの名無しさん
垢版 |
2020/09/02(水) 13:53:16.93ID:HxHRAGOQ
>>810
メリットがわからないなら使わなければいいだけ
2020/09/02(水) 13:56:40.83ID:6n47TPOy
メリットのつもりだけどちっともメリットになってないやつがいるよな
不必要な階層化が明らかにバグ増やしてるやつ

やめとけって
813デフォルトの名無しさん
垢版 |
2020/09/02(水) 14:23:36.56ID:b48j9NlC
>>779
ホントか?

https://ezoeryou.github.io/cpp-intro/

コレのHelloWorldには「コードの詳細な意味はさておくとして」とあるぞ
814デフォルトの名無しさん
垢版 |
2020/09/02(水) 17:14:55.68ID:KTyhBksd
C++のこれダサくない?
std::cout << "hello" ;

<<これダサくない?

イキりマンが設計したとしか思えない
2020/09/02(水) 17:53:01.12ID:6n47TPOy
>>814
俺もクソだと思う
816デフォルトの名無しさん
垢版 |
2020/09/02(水) 17:57:46.65ID:PicHUi2j
明らかに (hoge)printf の方が使い易い
2020/09/02(水) 18:23:05.03ID:oyfP4D/d
C++でそれ使った事無かったなw
何故かhello worldではそのコードが書かれている事が多いけどw
2020/09/02(水) 18:31:49.16ID:X9xcF9vI
std::cout << "hello" << std::endl;
819デフォルトの名無しさん
垢版 |
2020/09/02(水) 19:19:30.10ID:9/rkp9iy
ダサいけどprintfのセキュリティ的な問題がないから使っておる
2020/09/02(水) 21:24:37.75ID:Hwtp1D+h
>>814
普段からLinuxを使ってないとその発想にならないと思う
PHPのほうが自然
2020/09/02(水) 21:42:32.36ID:/nOWjplL
>>809
「オブジェクト指向を妄信する人への揶揄」が「オブジェクト指向に対する愚痴」に見えている可能性
822デフォルトの名無しさん
垢版 |
2020/09/02(水) 21:44:17.02ID:vGE3/anR
>>821
>「オブジェクト指向を妄信する人への揶揄」が

ならば「チンポがシコシコする」という日本語表現は、文法的に正しいのか?

チンポ「を」シコシコするのではなくて、チンポ「が」シコシコする。この場合、「チンポ」は主語となる。

オブジェクト指向で言う「集約」は2種類あって、全体(俺)と部分(チンポ)が繋がっている場合と、
全体(俺)と部分(チンポ)が別々になっている場合とが考えられる。けれども「チンポ」はそれ自体
が独立した生き物であり、所有者の意思とは無関係に、勃起して「シコシコする」。
例えば寝てる時にエロい夢みて朝起きてみたらチンコが勃起して射精してたとか。

違うか?

「胸がドキドキする」は良いが、「チンポがシコシコする」はダメな理由を、50字以内で述べろ!
823デフォルトの名無しさん
垢版 |
2020/09/02(水) 21:46:22.75ID:vGE3/anR
>>809
>1つはその人にとってオブジェクト指向が新しいパラダイムであり

俺の股間に付いているモノは「オブジェクト指向」とは違うのか?
824デフォルトの名無しさん
垢版 |
2020/09/02(水) 21:51:21.43ID:C0O9Iab7
>>804
フレームワーク作成者の
身の保身のために
無意味な作業何度もさせられるんか?

フレームワークだけやないで
大抵の既存クラスがそんなもんや
825デフォルトの名無しさん
垢版 |
2020/09/02(水) 21:51:33.18ID:iHJfSlZg
>>811
老害のドカタに使わないという選択肢があると思うか?

選ぶ自由がない環境でしか生きられない上にリアルで相手にされないから5chで愚痴を言い続ける。

低脳低スキルを他者のせいにするメンタリティのやつには何言っても無駄よ。建設的議論にはなりえない。
826デフォルトの名無しさん
垢版 |
2020/09/02(水) 22:01:00.56ID:vGE3/anR
>>810
「チンポがシコシコする」という日本語は、何かオカシイか?
2020/09/03(木) 00:55:17.34ID:oPPXaQOW
>>825
イキってクソコード撒き散らす害悪よりかはマシだけどな。
お前のクソスキルはどうでもいいからとりあえず関数かけ馬鹿。
2020/09/03(木) 01:19:00.75ID:UIrbSeQG
藻前ラ、モチツケ
https://i.imgur.com/2QRRE2u.jpg
829デフォルトの名無しさん
垢版 |
2020/09/03(木) 11:50:45.09ID:DK3Ul6vK
誰?
タイトルは?
2020/09/03(木) 12:14:39.09ID:HRrMH9TX
>>829
必死だな(藁
2020/09/03(木) 14:28:11.70ID:GKTly5Nv
SubjectとObjectの違い
832デフォルトの名無しさん
垢版 |
2020/09/03(木) 17:30:23.79ID:9nAKzDdi
結局これ人間性の問題なのよ。

カプセル化を容認するような人間は、犯罪も容認するし、なにも守れない。
2020/09/03(木) 17:31:02.51ID:ZSeh1kM5
>>814
それがかっこよかったんだよ。
2020/09/03(木) 17:31:54.36ID:ZSeh1kM5
型安全なprintfですんだ話し
835デフォルトの名無しさん
垢版 |
2020/09/03(木) 18:52:57.27ID:D+Mzdye0
僕はオチンチニストです
836デフォルトの名無しさん
垢版 |
2020/09/03(木) 21:35:19.31ID:9nAKzDdi
オポンティーヌと言えば、あわしろいくやを連想してしまうな。
837デフォルトの名無しさん
垢版 |
2020/09/03(木) 23:15:25.43ID:/DfmFXGp
オブジェクト指向否定する前に小学校の国語からやりなおせカス
838デフォルトの名無しさん
垢版 |
2020/09/03(木) 23:26:55.29ID:s/nu4dlU
>>837
オブジェクト指向は俺の股間に付いているからな!
2020/09/03(木) 23:44:41.85ID:HRrMH9TX
ズンドコベロンチョは至高!
ズンドコベロンチョ否定する前に小学校の国語からやりなおせカス

何にでも使える。
2020/09/04(金) 01:10:13.14ID:gbrpP/bR
https://video.twimg.com/ext_tw_video/1293154574795067398/pu/vid/1280x720/8c4iCDgG8QEnD1Y9.mp4
2020/09/04(金) 17:25:27.12ID:i4uc+bjy
オブジェクト指向は設計を間違えるときついことが起こる。
C++みたいな純ではないのはその辺り、コードがわかりにくくなるだけでなんとか対応できる。
2020/09/04(金) 17:52:24.10ID:/hJPKHew
関数型言語は設計を間違えるときついことが起こる。

そして正しい設計の話は一切でない
ボタンを作るにはどうすればいいんだ?
843デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:14:27.54ID:0wfgbo8M
>>842
GUI Toolkitしだいだと思うよ
F#ならnew Buttonで作れる
844デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:23:09.61ID:zzSWw99B
>>839
「ズンドコベロンチョ」は、俺の股間に付いている!
2020/09/04(金) 18:26:08.59ID:/hJPKHew
>>843
> F#ならnew Buttonで作れる
そりゃオブジェクト指向の機能を使ってるからな
846デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:27:32.23ID:0wfgbo8M
>>845
関数型言語ではオブジェクト指向の機能を使います
2020/09/04(金) 18:33:51.31ID:/hJPKHew
>>846
単に「オブジェクト指向の機能を使います」で十分でしょw
848デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:35:52.20ID:0wfgbo8M
>>847
何の話ですか?
2020/09/04(金) 18:37:23.97ID:/hJPKHew
>>848
どの言語でもオブジェクト指向を使うという話です。
850デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:39:00.61ID:0wfgbo8M
>>849
つまり関数型言語ではオブジェクト指向の機能を使うってことですね
851デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:40:16.94ID:0wfgbo8M
関数型言語は「どの言語」に含まれます
852デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:41:18.57ID:0wfgbo8M
> ボタンを作るにはどうすればいいんだ?
関数型言語だからといって悩む必要などないのです
ボタンはnew Buttonで作れます
2020/09/04(金) 18:42:55.29ID:67e8l95x
>>850
「関数型を名乗っている言語でも」っていうのが正確ですね
なので純粋な関数型では不可能なんです。
2020/09/04(金) 18:43:21.23ID:67e8l95x
>>852
さっきも書いたように、それはオブジェクト指向の機能です。
2020/09/04(金) 18:44:27.17ID:67e8l95x
F#はオブジェクト指向言語+関数型言語
オブジェクト指向言語に関数型を取り入れた言語なんです。
純粋な関数型ではないんです。
856デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:46:57.81ID:0wfgbo8M
>>853
ボタンの機能にはGUI Toolkitが必要です
HaskellでGtkを使う例
https://www.stackbuilders.com/tutorials/haskell/gui-application/
857デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:48:03.77ID:0wfgbo8M
>>854
関数型言語ではオブジェクト指向の機能を使います
2020/09/04(金) 18:52:10.66ID:67e8l95x
結局の所、有用なものはすべてオブジェクト指向なんです。
859デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:55:33.07ID:0wfgbo8M
関数型言語も有用なのでオブジェクト指向と言って良いでしょう
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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