オブジェクト指向ってクソじゃねぇよ? Part2

■ このスレッドは過去ログ倉庫に格納されています
2018/10/18(木) 23:20:41.34ID:/ofNkRJS
すごいんだよ?


カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、
オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、
オブジェクトの実際の型を隠蔽したりすることをいう。

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

一方、カリフォルニア大学バークレー校の有識者を中心としたインターネットを作った人たちは「階層化の有害性」として
「絶対に使うな」としている。大雑把にいうと、その時は良くても、将来的な改修の際に隠蔽されたデータに
アクセスできないと解決できない問題が出てきて、結果的にデスマーチに陥るというのである。

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

https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96

前スレ オブジェクト指向ってクソじゃね?
https://mevius.5ch.net/test/read.cgi/tech/1535085129/
2018/11/06(火) 18:49:11.18ID:pbTvUYL6
>>716
c言語方式
極めるとグローバル変数を一切使用しない関数に行き着く
2018/11/06(火) 19:48:06.13ID:4FZ8VBND
イミュータブル性、スコープに合わせた資源管理、関数の長さ、ビルドの構成
この辺りを気にした方がマシ。
2018/11/06(火) 20:19:36.81ID:u4fT6EdO
>>717
関数がファーストクラスじゃないから制限が多いかな
2018/11/06(火) 20:24:27.77ID:8BHBMccI
カプセル化なんかをメリットとして力説するのが痛いんじゃない?

変数のスコープや寿命なんて、オブジェクト指向言語以前の命題でさ
2018/11/06(火) 20:26:55.09ID:K8RrAru7
まあ、C言語でもオブジェクト指向は出来るからなぁ
2018/11/06(火) 20:35:26.74ID:4FZ8VBND
とはいえ、ポリモルフィズムが有効な場合というのは見極めが難しいからな。
そのコードの流れと直交するような動作ならいいけど、
そんなのコードに慣れてない奴には絶対判断できん。

もう少しソリッドな技術から学ぶ方が重要。
2018/11/06(火) 21:09:25.86ID:pbTvUYL6
>>722
いや、リーナスさんも言ってるけど
曖昧さってのはガンにしかならない
2018/11/06(火) 21:38:14.09ID:4FZ8VBND
>>723
個人的に同意だが、しかしある機能においてはどうしても動的に変えられるように
作らなきゃならんこともあると思う。
例えばUSBドライバのロードとか。
2018/11/06(火) 21:49:55.31ID:9ybaAnNd
Cで作るにしてもデータ隠蔽や関数ポインタ使って動的に動作変えるとかやるからな
2018/11/06(火) 22:19:48.19ID:pbTvUYL6
>>725
やんねーよ
そんなん
2018/11/06(火) 22:33:55.97ID:5ks02k45
workingset みたいなもん定義して
ws->pre_fn(ws), ws->work_fn(ws), ws->post_fn(ws)
とかはCでもやる
2018/11/06(火) 22:35:06.48ID:2Imqjq5w
なんだただの無能かよ
お前は一生switch文書いてろ
729デフォルトの名無しさん
垢版 |
2018/11/06(火) 23:32:49.41ID:98MtNrWT
やっぱcはゴミだわ
730デフォルトの名無しさん
垢版 |
2018/11/06(火) 23:49:50.37ID:ATtfWESv
ところでさぁ、

この車、タイヤがパンクしてるぜ!
この俺、チンポがシコシコしてるぜ!

どちらも「オブジェクト指向」だろう? 違うか?

注目は、選択肢イです。この上向きが集約で、下向きが分解です。
自動車は、アクセルやブレーキ、ハンドルなどに分解されるからです。
http://sm.seeeko.com/archives/65913086.html

浮気に激怒の妻、眠る夫の局部を切断しトイレに流す(印)
TechinsightJapan 2018年02月25日 04:00
https://www.excite.co.jp/News/world_clm/20180225/Techinsight_20180225_477828.html
2018/11/07(水) 00:04:50.55ID:MnvgpN9Q
CがゴミってんならC++なんてクソだろ?それもゲリクソ
あっちこっちで食あたりコードを生み出すゲリクソ生産機
2018/11/07(水) 00:05:19.02ID:Qiut+jNc
オブジェクト指向とかいうブラックボックス礼賛思想
こんなんに付き合ってたら頭おかしなるで
2018/11/07(水) 00:16:59.62ID:nAQp6wBh
オブジェクトはどういう操作してもバグらないのが前提
常に整合性を保てるクラスを作るのはとてもテスト工数がかかる
わりに合わないと思うこともある

でも問題を分離することが人間の進歩だ
オブジェクト指向はとても遠大で高邁な理想なんだ
2018/11/07(水) 00:37:46.20ID:Uv/5eSRN
Cの関数ポインタはよく使ったなー
今でも別な言語で似た使い方するけど楽の一言に尽きる
2018/11/07(水) 00:38:57.58ID:Uv/5eSRN
>>732
オブジェクト指向そのものはブラックボックス思想ではないんだよ
オブジェクト指向でプログラムを組む人がブラックボックスを作りたがるだけなんだよ
2018/11/07(水) 00:58:25.04ID:UCphLCxy
ソースコード見れるのにブラックボックスってどういうこと?

ライブラリの関数、中身見ないから
ブラックボックスっていうのなら、
それは手続き型でも同じだし
2018/11/07(水) 01:12:33.71ID:T8AyQ5+v
ブラックマジックの間違いだったとか
2018/11/07(水) 01:42:59.61ID:Z88Q6V1f
>>736
グローバル変数のデメリットを理解してる?
2018/11/07(水) 01:51:06.86ID:UCphLCxy
>>738
手続き型はグローバル変数になるから、
オブジェクト指向で隠蔽化するってこと?


手続き型でもローカル変数にして
隠蔽化=ブラックボックス化するのは同じでしょうって
言ってるんだが?
2018/11/07(水) 03:22:51.34ID:/RV3raqf
>>717
極めるw
何を極めたんだよ
関数ポインタを諦める事か?
741デフォルトの名無しさん
垢版 |
2018/11/07(水) 03:35:19.63ID:h4FWJh3K
>>729
OS無しの組込にはアセンブラかCしか選択肢がないけどね。(良い悪いはともかく)
C++も最近増えたみたいだけど、書き込む領域がそれなりに無いと。
2018/11/07(水) 08:25:23.73ID:60G+FgCT
逆にC以外の言語で使えるのと言ったらhaskell位しか思いつかない。
743デフォルトの名無しさん
垢版 |
2018/11/07(水) 13:02:23.58ID:R2gvt502
>>739
>隠蔽化=ブラックボックス化するのは同じでしょうって

511 デフォルトの名無しさん 2018/10/29(月) 23:32:40.68 ID:LL+W6ENh
随意筋←implements─チンポ─implements→不随意筋
2018/11/07(水) 15:29:42.78ID:wjSd2cHh
>>717
変数をすべてローカルで作って、
関数に引数10個ぐらい使って引き渡してるソースなら見たことがある。

たしかに極まってるわ。
2018/11/07(水) 16:49:01.37ID:xNIAd77E
>>744
それ、構造体にしてポインタ渡しにしねえか普通。
2018/11/07(水) 17:28:35.58ID:iy3fg8p3
ついでに構造体のメンバに関数へのポインタをセットするのは気持ち悪いから、構造体に実装埋め込みたいよね?
2018/11/07(水) 17:59:56.06ID:YuYLxFMn
構造体という名前の特殊な関数だと思い込めばいい
それでクロージャみたく解決だ
2018/11/07(水) 18:01:48.26ID:Z88Q6V1f
>>744
実際やると10個じゃ済まない
50個ぐらい行くかも

でもやってみればわかる
それでもソースは読みやすい
2018/11/07(水) 18:49:57.53ID:1MfDECIP
んなわけあるかあほか
設計能力がないだけじゃねぇか
750デフォルトの名無しさん
垢版 |
2018/11/07(水) 18:56:11.17ID:WrYxOUux
>50個ぐらい行くかも
>
>でもやってみればわかる
>それでもソースは読みやすい
読みずれーよ馬鹿w
関数のさらにネストしたところでしか使わん変数を引数で引回すコードの
メンテをしたことあるがめちゃくちゃ大変だぞ。
2018/11/07(水) 19:52:01.40ID:Z88Q6V1f
>>750
エアプ乙

でも引数からしかアクセスないじゃない?
これがメンバ変数だったりグローバル変数だったりするから滅茶苦茶になるんよ
引数オンリーは絶対に問題起きない
やってみろ
レベル上がるぞ
2018/11/07(水) 19:58:50.02ID:WrYxOUux
本当の馬鹿か。。
さすがに構造体否定する奴は初めて見たわ。
2018/11/07(水) 20:17:31.42ID:xNIAd77E
みんなthisポインターにズルズル引きずってしまえば楽さw
2018/11/07(水) 20:32:58.61ID:Z88Q6V1f
>>752
やってみりゃわかるよ
引数に書いてた一覧を
構造体に移植するだけよ
つまり関数と似た名前の構造体ができるだけ
意味があると思うなら用意すればいい
俺も最初はやっていた

完全に同じもんが必要になることなんて
まずないから放置
2018/11/08(木) 00:45:08.19ID:CWqVGGGe
お前ら今までのレスでさんざ書かれてきた問題点を
何も学んでないな
2018/11/08(木) 02:37:06.73ID:3xGWJe6p
>>754
巨大な構造体を引回す関数群か
ポインタ渡しにすることになるから、もはやグローバル変数と変わりはないな
2018/11/08(木) 03:18:02.43ID:rJTiWJ81
>>756
巨大な構造体で、どうやってグローバル変数のように
どこからでも参照できちゃう状態にできるの?

どこからでも参照できないなら、ローカル変数と変わりないな
2018/11/08(木) 03:24:31.46ID:rJTiWJ81
>>754
> 引数に書いてた一覧を
> 構造体に移植するだけよ
> つまり関数と似た名前の構造体ができるだけ
> 意味があると思うなら用意すればいい

えとな、引数に書いていた一覧を構造体に移植するだけだから、
関数と似た名前の構造体ができるだけなんだぞ。

意味がないのは、お前が「引数に書いていた一覧を構造体に移植するだけ」
という変なことをやってるからだ。全てお前自身の問題なんだよ。



構造体にする基準は、リファクタリングの「引数オブジェクトの導入」の基準と同じだ
https://ja.wikipedia.org/?curid=93818
> 引数オブジェクトの導入
> たびたび一緒に受け渡しされる複数の値は、オブジェクトとしてまとめたほうが分かりやすい。

「一緒に受け渡しされる複数の値」を構造体にするんだよ
全部を一つの構造体にするバカはお前だけだ
759デフォルトの名無しさん
垢版 |
2018/11/08(木) 04:49:57.80ID:2oWgTmr1
追加するのは簡単だけど、削除したり改変したりするのが大変だねー。
760デフォルトの名無しさん
垢版 |
2018/11/08(木) 05:08:09.76ID:yQlGi5bN
プログラミング言語の性能差
主な言語とスループット
言語 スループット 特性
C/C++ 100 静的言語ネイティブコード
Java 1〜10 静的言語VMバイトコード
Ruby/Python 0.1〜1 動的言語
オンラインゲームのサーバではC/C++が最も使われ

http://www.wata-lab.meijo-u.ac.jp/file/seminar/2013/2013-Semi1-Atsushi_Somekawa.pdf


Javaのメモリ管理自動化機能は便利だけど、ネットワーク通信では使いにくいねえw

731 デフォルトの名無しさん sage 2018/11/07(水) 00:04:50.55 ID:MnvgpN9Q
CがゴミってんならC++なんてクソだろ?それもゲリクソ
あっちこっちで食あたりコードを生み出すゲリクソ生産機
761デフォルトの名無しさん
垢版 |
2018/11/08(木) 05:15:39.14ID:yQlGi5bN
メモリ管理がポインタがうんたらなんてややこしい話はJavaやRubyでは関係無いけど、
ネットワーク通信だとC/C++の一択でポインタをいじくり回してメモリ管理するしか無い。

この認識で、違うか?
762デフォルトの名無しさん
垢版 |
2018/11/08(木) 05:22:41.91ID:yQlGi5bN
プログラミング言語
1 C/C++
2 その他

・・・だと思う。
2018/11/08(木) 06:16:25.68ID:eumdoCgr
CとC++を一緒にまとめて語ってる事がナンセンス
2018/11/08(木) 08:34:35.38ID:A44A323l
>>757
全ての関数の引数にその巨大な構造体のポインタを入れるとそうなるね
2018/11/08(木) 08:49:16.98ID:lZiGipil
>>751
void main()
{
struct {
int x,y,z,foo,bar,everything;
} global;

func(&global);
}
2018/11/08(木) 08:55:45.61ID:rJTiWJ81
>>764
> 全ての関数の引数にその巨大な構造体のポインタを入れるとそうなるね

グローバルってことは、ポインタを渡された関数以外からアクセスできるわけだけど、
それでどうやって渡された関数以外からアクセスするの?
渡された関数だけからしか参照できないなら、ローカル変数と変わりないな
767デフォルトの名無しさん
垢版 |
2018/11/08(木) 09:13:35.62ID:Tu3rCJEk
てか、ポインタもグローバル変数と同じくらいバグの温床だろ。。。
2018/11/08(木) 09:47:29.81ID:fig5AsF0
寿命とスコープの話がごっちゃになってね?

常駐もののブートストラップルーチンのローカル変数の寿命はプログラム終了までだろうし、
それが引数のポインタからたどれたとして、スコープはチェーンしている関数内だろ?
2018/11/08(木) 11:02:53.68ID:A44A323l
>>766
全ての関数に巨大な構造体のポインタを渡してる前提だから、
「ポインタを渡された関数以外から」なコードは存在しないよ
2018/11/08(木) 11:12:42.71ID:tTk6seYb
>>767
プログラミングすること自体がバグ
2018/11/08(木) 11:50:41.01ID:UOIeR1Y3
>>769
存在しないとまで言われると書きたくなるな。実装依存だが自動変数をスタックに取るなら、こんなコードでたどり着けるかな?

void main()
{
int x;
foo();
}

void foo()
{
int y;
*(&y+2)=65535;
}
2018/11/08(木) 12:04:19.71ID:A44A323l
>>771
foo関数の引数にポインタがないよ
巨大な構造体のポインタを全ての関数に渡す前提を忘れてる

>>765が具体的なコードを上げてくれてるね
2018/11/08(木) 12:16:35.11ID:UOIeR1Y3
>>772
すまん、765=771だ。
fooにグローバルもどきな構造体のポインタを渡せば十分変態なコードはかけるし、
渡さなければ絶対到達できないというわけでもないと言いたかった。
2018/11/08(木) 14:00:18.43ID:rIAZPlkA
>>773
まあ、お前のコードクソだからそういうのが日常って常識を主張したいわけだろ
775デフォルトの名無しさん
垢版 |
2018/11/08(木) 20:41:43.42ID:bfPcGDVv
>>773
お前が無能だということは分かった
2018/11/08(木) 20:53:43.69ID:5JF/nZv7
カプセル化が下手だとやりたいことが出来ないとかありうるんだよなぁ。
逆にやりたいことが全部用意されてるライブラリとかは、ほほうとなる。
777デフォルトの名無しさん
垢版 |
2018/11/08(木) 21:49:16.26ID:j6Jh7/pK
>>775
おまえらが無能だとゆうことはずっと前から分かっとった
778デフォルトの名無しさん
垢版 |
2018/11/08(木) 22:15:02.93ID:dNW1RU/q
言うをゆうって書く人は初等教育を受けてるのかしら
2018/11/08(木) 22:16:42.59ID:jAeiPwgX
うんにゃ
780デフォルトの名無しさん
垢版 |
2018/11/08(木) 22:16:44.15ID:j6Jh7/pK
言うはゆうて読むんやで
2018/11/08(木) 22:32:48.69ID:rJTiWJ81
ゆうていみやおうかとちゃぺぺぺぺぺぺ
2018/11/08(木) 22:34:05.72ID:Zz75hCIC
ホントにこういう頭のおかしいやつたまにいるからな
引数10個越える関数とか平気で書いてくるから
勿論レビューで突き返すけど
783デフォルトの名無しさん
垢版 |
2018/11/08(木) 22:34:47.03ID:j6Jh7/pK
>>782←なんやこの脈絡ないバカ?
2018/11/08(木) 22:41:41.77ID:rJTiWJ81
>>771
その理屈なら、すべてのローカル変数は
グローバル変数と言ってるのと同じ
意味がない
2018/11/08(木) 23:14:52.98ID:zSj2m2N1
>>782
いくつだったらおkなの?
何か引数の数について書いてある文献あるんですか?
2018/11/08(木) 23:17:23.51ID:zSj2m2N1
比較にwin32api出されてこれ駄目なんですか?
あなたが参考にしてるソースってなんですか?
そのソフト売れてるんですか?
ぐらいの質問には答えられたほうがいいな
2018/11/08(木) 23:39:31.38ID:rJTiWJ81
>>785
https://postd.cc/code-review-best-practices/

> メソッド引数の数: メソッドや関数の持つ引数が3つ以下になっていますか? 
> 3つよりも多い場合は、別のやり方でグループ化した方がよいかもしれないというサインです。
2018/11/08(木) 23:40:57.11ID:rJTiWJ81
https://myenigma.hatenablog.com/entry/20131214/1387014201

> 7章 高品質なルーチン
>
> 入力専用のすべての引数にはconstを使う。
> ルーチンに渡した引数はすべて使う
> 状態変数、エラー変数は引数の最後に置く
> 引数の数は最大7個にする。
> それ以上になった時はデータをクラス化する。
2018/11/09(金) 00:57:45.46ID:jjG5PJM7
>>787
クラスとか言ってるってことは俺よりレベル低いじゃんそいつ
2018/11/09(金) 01:01:33.47ID:jjG5PJM7
>>788
こいつも同じ
グローバル変数を使っては行けない理由が薄すぎる
多分わかってないな
名著?は所詮メディアが作ったもんだし信用しないほうがいいよ
実際おそらく何十冊も読んできたであろう君がオブジェクト指向のメリットを一つも説明できないだろ?
ビジネスにおけるメリットの説明とは数字と結びつけてするものってのは理解してるよな?
791デフォルトの名無しさん
垢版 |
2018/11/09(金) 01:15:11.16ID:zbV5OyFz
バカは構造体に構造体をいれることができることすら
分かってないからな

ずっとでかい構造体をひきわたしまくってるバカもいるからな
関数でなんの変数を変化させたか分からないようなシロモノを作る

頭おかしいほどめちゃくちゃでかいクラス作るヤツとにてる

この板にいるような低学歴知恵遅れにありがち
2018/11/09(金) 01:20:07.57ID:UVRb8J0Z
>>790
> 名著?は所詮メディアが作ったもんだし信用しないほうがいいよ

いや、ふつうに、かんがえて、
おまえのほうを、しんようしない
2018/11/09(金) 01:28:14.21ID:jjG5PJM7
>>792
それは自分で考えた結果なの?
それともネームバリューにやられちゃった?
2018/11/09(金) 01:39:11.07ID:UVRb8J0Z
>>793
実績にやられた
2018/11/09(金) 01:39:48.83ID:UVRb8J0Z
各所で信頼できると言われてる実績 >>>>>>>> おまえ
796デフォルトの名無しさん
垢版 |
2018/11/09(金) 03:43:18.48ID:XqJA0EYx
このゲームすぐ持ち物いっぱいになるな
http://dragon-quest.me/dq10/28435/


追加するのは簡単だけど、削除したり改変したりするのが大変になるねぇwww
797デフォルトの名無しさん
垢版 |
2018/11/09(金) 03:45:54.57ID:XqJA0EYx
どのプレイヤーとも共有されるだけに、サーバー側でいじるとプレイヤーの画面表示が狂ってしまう!
798デフォルトの名無しさん
垢版 |
2018/11/09(金) 06:44:58.06ID:2asOwCt8
postdって
記事同士の内容が反している様な時も有るから
本当の意味で正解とゆうのが無いか
未だ見出されていない
とゆう事なんだと思う
2018/11/09(金) 07:01:17.46ID:3PJfnI/r
>>784
「普通の方法じゃ無理」ってのならわかる。
「存在しない」ってのなら同意できないわ、C言語がわかってない。
2018/11/09(金) 07:30:48.02ID:UVRb8J0Z
>>799
グローバル変数も変数なんだから、
変数としての性質を持っていなければいけない

例えばポインタ変数は変数だが、
それは「ポインタを入れてる変数」が変数なのであって
ポインタが先示す先は変数ではない

変数は、型と名前によって定義されるものだ
アドレス指定でメモリを直接読み書きした所で、
それは変数ではない
2018/11/09(金) 07:55:30.37ID:o+/dpDfL
>>795
でもそれを頼りにした結果がこれじゃん
オブジェクト指向のメリットを数字をあげて一つも説明できないわけでしょ?
もういい加減気づいても良くない?
サルじゃないんだから
2018/11/09(金) 08:02:29.61ID:UVRb8J0Z
>>801
> オブジェクト指向のメリットを数字をあげて一つも説明できないわけでしょ?

数字? オブジェクト指向が使われてる
プロジェクト数とかでいい?

なんの数字がでればいいかいってみて 
2018/11/09(金) 09:16:38.16ID:q+lSU0Ha
>>802
はぁ?
使用プロジェクトが多いってのがオブジェクト指向の1番のメリットってことでいいの?
ってかお前オブジェクト指向の良し悪し云々の前にそもそもある技術を評価することそのものが
できないじゃん
2018/11/09(金) 09:25:17.08ID:UVRb8J0Z
>>803
だからそうやって文句言い出しそうだから、
どんな数字を出せばいいか聞いたのに
どんな数字ならお前は納得するんだよ?
2018/11/09(金) 10:12:55.60ID:z1XmYBYX
無能が頑張ってるな
お前がやってる単純な処理ならOOは要らんから一生懸命手続きを並べていけ
2018/11/09(金) 18:08:23.28ID:JrL9fe62
>>804
そりゃ、お前がオブジェクト指向のメリットだと思うことを金銭的にいくら儲けることができるのか
そのロジックを説明するんだよ
2018/11/09(金) 18:24:56.53ID:qPfMyD8q
20年以上前から語られてるパラダイムが理解できないなら諦めろ
if文の羅列とgrep置換がお前の武器だ
がんばれ
2018/11/09(金) 18:50:22.21ID:DMldCTyP
オブジェクト指向はともかく、
関数、構造体、グローバル変数の問題、
この辺りのことでここまで話が通じないとは思わんかったわ。
2018/11/09(金) 19:48:19.86ID:dt2W+h7o
OOPは設計と相性がいいと思う
手続き型で実装する前提で設計書を書くと
設計書まで手続き型のコードみたいになってしまう
810デフォルトの名無しさん
垢版 |
2018/11/09(金) 19:49:24.81ID:XqJA0EYx
チンポがシコシコするぜ!!
811デフォルトの名無しさん
垢版 |
2018/11/09(金) 19:54:15.96ID:EUp1VEAA
そらそうだ。
言語のプラットフォームに思考も引きずられるからね。
だから何か一つ言語を身につけたら、色々なプラットフォームの言語触っておいた方がいい。
(身に付かないうちは全部中途半端になるから避けるべきだが)
2018/11/09(金) 19:55:14.16ID:UVRb8J0Z
数字を出せと言ってる割に、
どんな数字が出れば納得するかも言わない。

責任者出せと言ってるようなもんだなw
ただ文句を言いたいだけ
2018/11/09(金) 20:20:38.87ID:p97kvqgN
いつものつまんないメンバー
コテ付けてくれよ
2018/11/09(金) 22:10:45.59ID:2asOwCt8
構造化プログラミングって
数値じゃなくて理論で広まったように思えたけど?
815デフォルトの名無しさん
垢版 |
2018/11/09(金) 22:43:04.68ID:NlMocJkJ
バカじゃないおめえらて居るんか?
816デフォルトの名無しさん
垢版 |
2018/11/10(土) 01:10:27.13ID:zvqLr7Dq
チンポがシコシコするぜ!!
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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