カプセル化は愚かな考え

■ このスレッドは過去ログ倉庫に格納されています
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)
2020/08/21(金) 15:41:01.39ID:2S3OsUgZ
>>290
関数型の主張が「どんな場合でも引数で渡して戻り値で戻したほうがいい」だから
オブジェクト指向の主張は元から、内部にプロパティが多数ある場合の話をしてる
292デフォルトの名無しさん
垢版 |
2020/08/21(金) 15:47:59.93ID:xkZp2iCS
グローバル変数未使用で関数のみを使って状態にも対処できる!
オブジェクト指向なんて選択肢はない!
と言い張る子の霊圧が消えた...
293デフォルトの名無しさん
垢版 |
2020/08/21(金) 15:49:18.62ID:x4g5r5SE
>>252
ぉ?Javaディスってんのか?

>>290
> ボタン自体は状態を持つものだから、オブジェクト指向で実装するのが自然でしょ?
いや、別にオブジェクト指向で実装するのが自然っていうのは乱暴だろ。

ほんと、ソース貼れよ。引きこもりのアマグラマーがw
294デフォルトの名無しさん
垢版 |
2020/08/21(金) 15:50:37.63ID:xkZp2iCS
そして日本語もまともに読めないらしい
295デフォルトの名無しさん
垢版 |
2020/08/21(金) 16:05:07.06ID:xkZp2iCS
はよこいつにとどめさしてあげて
2020/08/21(金) 16:24:00.01ID:2S3OsUgZ
もう死んでね?w
ボタンを関数型で作れなかったんだから
297デフォルトの名無しさん
垢版 |
2020/08/21(金) 17:27:54.83ID:Tdq0GS4g
>>296
お前作れんの?
298デフォルトの名無しさん
垢版 |
2020/08/21(金) 17:28:26.23ID:Tdq0GS4g
作れなかったら>>296の負けだから
299デフォルトの名無しさん
垢版 |
2020/08/21(金) 17:33:06.64ID:UrYJ9hGn
>>271
たしかC++ってそういうもんだがw
しかも同じく嫌いだよw
整理できてない

で、なんでクラスだとそれが楽になるのかね

>さておき、実際にはほとんどデフォルトで使うから、「クラスなら面倒がない」と言いたいのかな

こういうことかね、て先回りして聞いてるんだが
300デフォルトの名無しさん
垢版 |
2020/08/21(金) 17:34:24.29ID:Q2DXCe4b
Reduxみたいなやつな。
はよ作れ。
301デフォルトの名無しさん
垢版 |
2020/08/21(金) 17:49:58.82ID:xkZp2iCS
ちなみに俺はGUIを実装したことある
302デフォルトの名無しさん
垢版 |
2020/08/21(金) 17:50:12.82ID:xkZp2iCS
オブジェクト指向でな!
303デフォルトの名無しさん
垢版 |
2020/08/21(金) 17:54:10.24ID:xkZp2iCS
作れもしないくせにど素人が楯突くな
304デフォルトの名無しさん
垢版 |
2020/08/21(金) 17:57:19.01ID:UrYJ9hGn
そんなにうじゃっとしてないか

https://bituse.info/winapi/5
//ボタンコントロール作成
hwnd_button=CreateWindowA("button","ボタン",WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
50,50,100,100,hwnd,(HMENU)CHILD_ID,hInstance,NULL);

親ウィンドウの準備がイラっとするのかな
305デフォルトの名無しさん
垢版 |
2020/08/21(金) 17:59:06.13ID:xkZp2iCS
そんなお膳立てされたAPI使っていいって誰が言った?
306デフォルトの名無しさん
垢版 |
2020/08/21(金) 18:03:32.36ID:UrYJ9hGn
ちなみに多くの人が、「クラスオブジェクト指向な記述で」を「オブジェクト指向で」と言ってるようだね
スタティック関数で動かすオブジェクト指向もあるので(C++、WinAPI)
略すなら「クラスで」と言った方がいい(これも不正確だが)
2020/08/21(金) 18:22:59.95ID:iO1OXKqS
windows apiはc言語でしょ
308デフォルトの名無しさん
垢版 |
2020/08/21(金) 20:03:28.77ID:Q2DXCe4b
システムワイドでReduxのような仕組みを適用するのは無理だろうか?
309デフォルトの名無しさん
垢版 |
2020/08/21(金) 20:12:46.04ID:7ttzM/39
思うに、このスレに集まってる人らの
業務内容が違うんから議論がズレるんじゃないか?


Web系の場合メモリ上の
オブジェクトは一瞬で役目を終えるから
正直カプセル化とかいらない
node.jsやPHPでデータベースのへselect文投げると
連想配列オブジェクトの配列が帰ってくるから
つまりテーブルから動的にクラスののオブジェクトが
生成するから正直クラス定義もいらない
staticでなんの問題もないと思う。
状態管理は特有のセッションに保持するだろう。


でもゲーム系だとキャラのHPみたいなゲージ管理や
持ち物、装備品などいつまでもメモリ上に
居座って状態管理が必要だからオブジェクト指向
とカプセル化は大切。
310デフォルトの名無しさん
垢版 |
2020/08/21(金) 20:23:39.45ID:Q2DXCe4b
うーん。
職業プログラマが5chで情報交換してたら、ちょっとひどすぎない?

俺は自分の職業の板なんて行かない。
見たことはもちろんあるけど、素人が玄人のフリしてうんちく述べてるだけで、俺らが何か書き込むことは無いと思うよ。

それとも職業プログラマってそんなに程度低い?
素人とうんちく語り合うほど?
311デフォルトの名無しさん
垢版 |
2020/08/21(金) 20:24:45.30ID:Q2DXCe4b
プロが匿名掲示板で情報交換して得るものなんてないでしょ。

あったら怖いわw
2020/08/21(金) 20:34:27.65ID:x4g5r5SE
>>309
常駐プログラム云々いっちゃうと、GCが優れてる!いや、C++のデストラクタの方が!
とか、そういう話にもなっちゃうからオブジェクト指向云々は関係ないような。
優秀なCプログラマならCでもリークしないプログラム書くでしょ。

static云々言ってるバカは、オブジェクト指向でもリーク起こすと思うわ。
313デフォルトの名無しさん
垢版 |
2020/08/21(金) 20:49:57.82ID:xkZp2iCS
オブジェクトのライフサイクルとカプセル化がなんの関係あるんだ?
314デフォルトの名無しさん
垢版 |
2020/08/21(金) 20:50:21.42ID:xkZp2iCS
素人発言が目立ちだしたな
315デフォルトの名無しさん
垢版 |
2020/08/21(金) 20:51:44.98ID:xkZp2iCS
素人が玄人のフリしてうんちく述べてるのがうざいから消えてほしいとは思ってる
でも中にはプロっぽい人も紛れてる
316デフォルトの名無しさん
垢版 |
2020/08/21(金) 20:55:22.67ID:Q2DXCe4b
いや、無いない。

素人が適当なこと書いてるから訂正するか?
無い無い。

レベルが違いすぎるのよ。

それとも何か?
プログラマという職業に限ってそんなにレベルが低いか?
素人と言い争うほどか?
317デフォルトの名無しさん
垢版 |
2020/08/21(金) 20:57:07.65ID:xkZp2iCS
自分が素人って認めたんかpublic staticくん
2020/08/21(金) 21:01:52.55ID:2S3OsUgZ
>>304
誰もWinAPIの話とは言ってないが、それボタンはウインドウハンドルを返すのよ
つまりクラスのメンバ変数に状態を持ってインスタンスのポインタを返してるのと同じ
オブジェクト指向なんだよね

こういうのって本質的に複数の状態を持ってるわけだから
関数型で作るの大変でしょ?
319デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:09:07.17ID:Q2DXCe4b
Windows自体がオブジェクト指向だから、関数型と相性悪いのかもしれないな。

もしかすると、それが原因でWindowsが無くなるのかもしれないな。
320デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:13:17.11ID:xkZp2iCS
頭のネジ外れてんな
締め直してこい
2020/08/21(金) 21:15:49.53ID:2S3OsUgZ
>>319
だからWindowsの話はしてないんだって
勝手にWin32の話にしておいてWindowsのせいにするなよ

なんでもいいから関数型で複数のプロパティを持つボタンのようなもの作ってみろって
一つの関数で複数のプロパティを操作することもある
そして将来の拡張性も考えないといけない
関数型でできるんか?
322デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:17:53.68ID:Q2DXCe4b
ホビーの奴と話し合うことなど、一ミリたりとも無いけどな。
レベルが全く違う。

プログラマに限っては、そんなにレベルが低いか?
アマチュアと話し合うことがあるのか?
323デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:19:50.51ID:Q2DXCe4b
>>321
ウェブ界では、状態をすべて外に追い出すのが流行ってるようだけどな。
2020/08/21(金) 21:20:35.07ID:2S3OsUgZ
関数型っていうのは結局ガイドラインみたいなもんやろ

引数だけから戻り値が決定する関数はテストがしやすいから
可能であればそうするようにしましょう

実際には可能でない場合が多い
何十個の引数と専用の戻り値型でも作れば
理論上は可能かもしれないが使いづらくなる
2020/08/21(金) 21:21:00.45ID:2S3OsUgZ
>>323
それって結局グローバル変数なんだけどねw
2020/08/21(金) 21:21:03.27ID:yq0UM+AD
あおりではなく
カプセル化をうまく説明してあるサイトを長い間探しているんだが
決定版はどこ?
327デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:21:51.79ID:Q2DXCe4b
いや俺は状態をすべて外に追い出すというのが目からうろこよ。

最終的にどうなるのか知らんけど、これは突き詰めて結果を導いてほしいな。
328デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:23:58.46ID:Q2DXCe4b
頑張ったけど駄目でしたという場合もあるだろうけどな。

その結果が納得できるところまで突き詰めてほしいな。
2020/08/21(金) 21:24:48.58ID:2S3OsUgZ
ウェブでは状態を全て追い出いたために、巨大な「状態オブジェクト」ができて
複数の関数から、共有の状態オブジェクトを変更するようになってしまってる

引数から戻り値が決まる関数型とは別のものだよ
分離された状態オブジェクトを読み書きして
状態オブジェクトが変更される
330デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:26:23.35ID:Q2DXCe4b
>>329
状態を入力に取れば良いだけだろ。
2020/08/21(金) 21:27:19.73ID:7UnAdk+W
>>309
ゲームの種類にもよるけどアクションやシューティングの場合
基本は以下3ステップの無限ループでTODO管理アプリみたいなものと核は同じ

1. 入力を処理
2. 状態を更新
3. 出力を生成

ReactでもElmでもRxでも関数型のパラダイムなら
直前の状態と入力(ユーザー操作やタイマーや衝突など)から
新しいバージョンの状態を作ってそれをもとに出力を生成して画面を更新する
332デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:28:09.14ID:2S3OsUgZ
>>330
「状態」がオブジェクト、つまり配列と連想配列の組み合わせで
どこが必要なのかわからないから、テストが困難になる
333デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:29:07.77ID:xkZp2iCS
アマチュアと話し合ってるんじゃなくて
アマチュアがボケ倒してるからつっこんでるんだろw
334デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:29:17.98ID:2S3OsUgZ
Reactなんかでいう「状態」というのはオブジェクトのこと
335デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:29:25.77ID:Q2DXCe4b
>>332
逆かもしれんぞ?

状態が外に記録されているので、把握しやすくなる。

それどころか状態の圧縮など、自動化されやすくなり、テストが容易になる。
336デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:30:03.37ID:xkZp2iCS
どんだけかまってほしいんだよ
337デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:32:12.90ID:2S3OsUgZ
もともとC++のクラスっていうのは構造体の拡張なんだよね
この構造外がReactなんかでいう状態のこと

関数(状態=構造体へのポインタ, 引数1, 引数2, ...)
というのが

構造体へのポインタ->関数(引数1, 引数2, ...)
に変わったのがC++

この2つは書き方が違うだけで本質的には同じもの
338デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:32:44.45ID:Q2DXCe4b
>>333
無い無い。
小学生がごっこ遊びしてるところにプロが違う違うと口挟むか?

自分の職業の板を見てもそんな感じよ。
突っ込もうなんて思わないし、実際突っ込んでるプロも見たことが無い。
素人同士でわいわい言い争ってる。

レベルが違いすぎんのよ。
輪に入るわけがない。

職業プログラマは素人の輪に入れるのか?
339デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:33:20.00ID:2S3OsUgZ
>>335
> 状態が外に記録されているので、把握しやすくなる。

状態が外にあっても中にあっても本質的には同じ
どちらにしろオブジェクト指向
340デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:35:42.95ID:Q2DXCe4b
考えてみろよ。
園児が模型の飛行機でブーンとやってるところに、職業パイロットが通りすがったら、違う違う対気速度が低下するからこうだなどと口をはさむか?

そのくらいのレベルの差があるわけよ。
それともなに?
職業プログラマは素人と大した変わらんとでも?
341デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:37:03.29ID:Q2DXCe4b
>>339
状態遷移表などは圧縮できるし、事前の検査も可能。

ここを否定せずに、研究してみてはどうか?
新しいモノは中国に期待するべきか?
342デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:41:12.88ID:2S3OsUgZ
>>341
そりゃオブジェクト指向でもそれは可能なんだから当たり前やろw
2020/08/21(金) 21:43:15.03ID:e1ADUqIj
>>151-152
ついにこのへんに言及したレスが出てきたな
状態がある問題をプログラミングする以上
どっちの方法がマシかを問うのが次に取るべき立場
状態は悪、関数型は神、みたいな話はもうみんな飽きたろ?
344デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:43:58.68ID:xkZp2iCS
俺は容赦なく模型飛行機で遊んでいる園児(お前)を空爆する
345デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:45:13.13ID:Q2DXCe4b
>>344
だからお前はアマチュアとバレてるわけよ。
346デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:47:12.41ID:Q2DXCe4b
>>343
状態と計算を分離する結果、関数型の恩恵にあずかれるなら、分離する方向に行くのが正しいのではないか。
347デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:47:34.18ID:2S3OsUgZ
>>343
前から言ってるが、関数型は少数の値型と一つの戻り値で十分な関数としての要件を
満たしているときに便利なもので、そうでないものを無理やり対応させても不便なだけという話

関数型が優位なのは理論上の話で、理論上の話だと数十個の引数でもOKという扱いだから
2020/08/21(金) 21:48:43.03ID:u4nsg/nb
>>280
オブジェクトの内部状態が変わるのと戻り値だけが変わるのとでは影響範囲が違うだろう。
それこそグローバル変数とローカル変数のスコープの違いみたいに。
349デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:49:03.22ID:2S3OsUgZ
>>346
> 状態と計算を分離する結果、関数型の恩恵にあずかれるなら、分離する方向に行くのが正しいのではないか。

「関数型の恩恵にあずかれるなら」

結局そこ

「関数型の恩恵にあずかれるなら」関数型
「関数型の恩恵にあずかれないなら」オブジェクト指向
適切なものを組み合わせて使うべき

「関数型の恩恵にあずかれない」例の一つがボタン
350デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:52:29.11ID:Q2DXCe4b
ボタンこそ、恩恵にあずかれるのでは?
351デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:52:48.76ID:2S3OsUgZ
>>348
> オブジェクトの内部状態が変わるのと戻り値だけが変わるのとでは影響範囲が違うだろう。

今話をしてるのは
オブジェクトの内部状態 "すべて" を "一つの" 戻り値にしたとき
影響範囲はオブジェクトの内部状態を変えるのと同じことになってるという話をしてる

例えばボタンのスタイルは前景色、背景色、座標、フォント、余白などいろんなスタイルあるが
オブジェクト指向ではボタンのスタイルとしてオブジェクトの内部状態に組み込んでる
これらの前景色、背景色、座標、フォント、余白などをあわせてスタイルオブジェクトとして

関数からスタイルオブジェクトを返すからテストしやすい!といっても
何がテストしやすいのさっぱりわからない
352デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:54:15.43ID:2S3OsUgZ
色を変える関数を作るとするならば


スタイルオブジェクト = setColor(スタイルオブジェクト, 色)

これが関数型

この時、setColorがどの属性をいじるかなんてコードを見ないとわからない
353デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:56:32.11ID:2S3OsUgZ
ボタンのスタイルオブジェクトの場合、関数型ではこうなるのだろうか?

ボタン.スタイル = setColor(ボタン.スタイル, 色)

本質的に関数型に適合しないようなものを
無理やり関数型にしても意味ないよ
354デフォルトの名無しさん
垢版 |
2020/08/21(金) 21:59:18.77ID:xkZp2iCS
どこに状態持っとくかで状態管理のしやすさが変わるんだよな
あるComponentでそれと関係のない状態変数が無造作に置かれてるよりは
必要な場所からのみアクセスできるようになってるほうがありがたい
必要ない場所でその状態変数について気にしなくていいから
355デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:01:46.81ID:2S3OsUgZ
>>353はドットでつないでるから関数型には見えないw
実際はこうなのだろうか?

ボタン = setStyleColor(ボタン, 色)

ボタンには色以外の複数のスタイル属性や
ボタンの有効無効などの属性を持っている

つまりsetStyleColorという関数は
ボタンという連想配列データの一部分をいじる関数になる

それはオブジェクト指向でボタン.スタイル.setColor(色)の場合に
色というメンバ変数を書き換えてるのと大差ない
356デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:02:23.83ID:2S3OsUgZ
>>354
そうやってできたのがオブジェクト指向やなw
357デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:03:35.09ID:xkZp2iCS
結局そこに行き着くw
358デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:08:32.02ID:Q2DXCe4b
関数型Windowsが出せなければ、Windowsは無くなるだろな。
359デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:09:51.39ID:2S3OsUgZ
>>358
何年以内に?w
ま、それを明言するだけの勇気はお前にないだろうね
2020/08/21(金) 22:10:10.19ID:u4nsg/nb
>>351
オブジェクトとして永続的に存在するものと単なる戻り値が同じわけないだろう。
戻り値として返されたオブジェクトをすぐに破棄するってんならまぁわかるが。
361デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:11:42.64ID:2S3OsUgZ
単なる戻り値も永続的に存在するので同じ
362デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:17:04.55ID:Q2DXCe4b
俺はこれはある意味何かが起きると思ってんだよ。

賢い奴ら数名は気が付いているようだが。

今頃オブジェクト最強とか言ってるようでは気づけんだろうけど。
363デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:18:31.62ID:2S3OsUgZ
>>362
いつまでに?

そのうち何かが起きるという予言は
宇宙の歴史から見ればそのうち当たるだろう
程度の話でしかないよ
364デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:22:11.20ID:Q2DXCe4b
30年かかると思うよ。

でもWindowsは3年でなくなるだろな。

Windowsが30年かけて地位を築いたように。

関数型ウィンドウも30年かけて地位を築く。
365デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:23:47.42ID:2S3OsUgZ
>>364
じゃあお前のスレはここでいいねw

Windows10は当初の2025年で終了でしょうね
https://medaka.5ch.net/test/read.cgi/os/1566090910/
366デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:25:37.21ID:2S3OsUgZ
向こうのスレに記録残してきたw
367デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:25:41.16ID:Q2DXCe4b
Microsoftは世界最大規模の研究所を持ってるから、Windows Fを出してくる可能性がある。
すでに待機中かもしれん。
368デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:26:40.34ID:Q2DXCe4b
>>365
やはりアマチュアか。
369デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:26:55.36ID:2S3OsUgZ
>>367
いつまでに?w
お前にどれだけ自信があるかわかるね
短くすればすぐに外れたのがわかる、長くすれば自信がないw
370デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:29:14.10ID:Q2DXCe4b
>>369
ほんとバカだな。

それは技術の話か?

Microsoftの戦略次第だろうが。

Maicrosoftに聞け。
371デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:30:16.45ID:Q2DXCe4b
このスレにいくつかのアイデアが埋まっている。

気づいたものが次世代ウィンドウシステムを作るのだろう。
それが関数型ウィンドウだ。
372デフォルトの名無しさん
垢版 |
2020/08/21(金) 22:31:37.03ID:2S3OsUgZ
>>370
ほらな、かってな予想を立てて、自分の予想に自信がないw
2020/08/21(金) 22:42:46.86ID:Xt87XuMs
全て不変にすれば、パフォーマンス以外の問題点は解決する
374デフォルトの名無しさん
垢版 |
2020/08/22(土) 00:29:04.18ID:H4y73psn
>>318
だから言ってるように、オブジェクト指向は否定してない
オブジェクトの操作を、クラスで書くか、関数で書くかっていう記述方法の違いでしか言ってない
関数はスカラー関数に限ってない

流れがプロパティ保持の話ばかりだけど、その程度ではクラスにする必要ない
クラスの特徴はメソッドと継承

そのメソッドが外に出てるのがスタティック関数
書く場所が違うだけで、機能は同じ

Obj.Close
Close( Obj )
の違い
で、実は後者の方が生産性が高い、ということもあるかもしれんねと(体感)

かといってWinAPLみたいに長い名前の膨大なグローバル関数がずらーっとあると、生産性低い
そこは子クラスでなくても、名前空間で分類するだけでも整理が付くので、工夫次第

さらに外人の「動詞+目的語」じゃなく、「主語+動詞」という命名なら分類ごとに並ぶ
× OpenObj、CloseObj
〇 ObjOpn、ObjClose
(クラスのメソッドなら後者の並びになるが、なら関数名自体もそのセンスでいいじゃんていう)

継承は、いろんなイベントで共通の処理があるフォームのバージョン違いだと、ごっそりソースは減る
でもイベント関数自体を共通にして、中で条件分岐の方が見通しがいいかもしれない
(エクセルでシートイベントに対するブックイベントみたいな)
クラス継承は、継承の様子は掘って掘ってしないと調べがつかないので
2020/08/22(土) 00:58:01.96ID:qyHD0ees
>>374
>書く場所が違うだけで、機能は同じ

ポリモーフィズムの実現方法が異なるというのが本質的な違い
変更要求に対してコードの修正範囲が変わるのでどちらがいいのかというのは状況による

obj.close()はobjがclosableであればいい
close(obj)はcloseがobjの型をサポートしている必要がある

len([0,1,2,3]), len(“foo”)と[0,1,2].length, “foo”.lengthの違い
namespaceやmoduleのサポートが貧弱な言語だと前者は名前空間を汚染しやすい
376デフォルトの名無しさん
垢版 |
2020/08/22(土) 02:55:48.95ID:H4y73psn
>>375
“foo”.length はまたややこしい話で
実装はスタティック関数ってこともある(C#の拡張関数)
これは間違いなく生産性高い
むしろそこからスタティック関数の方が生産性高いのではという発想

改めてメソッドを実装しなくても無限に連鎖できる
“foo”.length.text.length
関数は元々無限にネストできるが
length( text( length("foo") ) )
ただし括弧が見にくい、起点が後ろの方にある、組の引数が遠いとこに分かれる、ので眼精疲労が起きる
377デフォルトの名無しさん
垢版 |
2020/08/22(土) 03:06:31.41ID:T+/LMfcE
> これは間違いなく生産性高い
それはどうやって計測したのか言ってみ
2020/08/22(土) 03:33:53.88ID:T+/LMfcE
実装がスタティック関数 → スタティック関数は生産性が高い

ならば

実装がスタティック関数ではない → スタティック関数は生産性が低い
379デフォルトの名無しさん
垢版 |
2020/08/22(土) 05:08:17.36ID:TIWYvQ38
>>338
16年この業界にいる現役だよ。
むしろ、一般人ががプログラム言語なんかに興味持つ方が驚き。
現場で使えない派遣のプログラマーをアマグラマーって馬鹿にしてるけど、アマチュアさんいるんやね。プログラムは好き勝手に書いてた方が楽しいよ。

囲碁とか将棋のプロがアマを見る気持ちがこのスレで分かった気がする。
2020/08/22(土) 05:09:53.91ID:Q5VkNyRi
若造でワロタ
381デフォルトの名無しさん
垢版 |
2020/08/22(土) 05:25:55.26ID:TIWYvQ38
>>376
おまえ、それ、マルチスレッド処理でも同じこと言えんの?
GUIの話してんのかわからんけど、異なる複数の処理がスタティック関数にアクセスすること考えてないだろ?

なんか、Cでmalloc使わない!って豪語して、スタックオーバーフロー起こしてどうしていいかわからなくなってたPG思い出したわ。
382デフォルトの名無しさん
垢版 |
2020/08/22(土) 05:26:43.69ID:TIWYvQ38
>>380
そりゃ、自分より年寄りはいるだろう。
すごい人もいっぱいいて、日々勉強だわな。
383デフォルトの名無しさん
垢版 |
2020/08/22(土) 05:30:08.48ID:YtG8IJDk
そりゃ恥ずかしいと思わないと。

この板は文法やライブラリの使い方を取り扱う板。

プロが欲するのはお客様の情報で、ここにいるべきではないだろ。
384デフォルトの名無しさん
垢版 |
2020/08/22(土) 05:54:29.25ID:H4y73psn
>>381
某大手メーカー系が何年も直せなかったマルチスレッドで起こしてるバグを小一時間で直してあげたことあるよw
(マルチスレッドで確率的に起きる事故はステップ実行で探せないから、勘が必要)

関数がスタティックかどうかと、処理がぶつかるどうかは無関係
組み込み関数を想像すれば分かるだろw

各スレッドがその関数に渡すインスタンスが別ならぶつからない
同じインスタンスの必要があるならシリアル化するだけ
そっちこそマルチスレッドの扱いが曖昧っぽいなw
2020/08/22(土) 17:03:26.86ID:fmjqBEq5
>>381
16年間どこの業界で何してきてたの君
386デフォルトの名無しさん
垢版 |
2020/08/22(土) 18:46:30.33ID:hdxSNQ+Y
>“foo”.length はまたややこしい話で
>実装はスタティック関数ってこともある(C#の拡張関数)
>これは間違いなく生産性高い
>むしろそこからスタティック関数の方が生産性高いのではという発想
このあたり失笑なんだけど
こんなちっちゃい部分にクローズアップして生産性を語られても
387デフォルトの名無しさん
垢版 |
2020/08/22(土) 18:53:23.88ID:hdxSNQ+Y
しかも"foo".length()が実装はスタティック関数なのは
C#が提供してる拡張方法がそうなってるだけで
データと処理を紐づけてるのはオブジェクト指向そのものじゃないか
388デフォルトの名無しさん
垢版 |
2020/08/23(日) 00:21:55.02ID:eNcX4Z1l
オブジェクト指向とはオーバーロードである。

ってことも無いのでは?
2020/08/23(日) 01:11:38.44ID:Gvt1TzeD
オブジェクト指向=○○ではなくて、
オブジェクト指向はいろんな課題を解決するための
テクニックを詰め込んだ言語
イコールで何かと結びつくものではない
結びついたらオブジェクト指向という必要がないだろ
2020/08/23(日) 01:13:25.91ID:HeDyBrKq
>>389
ゴミクズ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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