オブジェクト指向ってクソじゃね?
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2018/08/24(金) 13:32:09.36ID:ifygL6bT
カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、
オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、
オブジェクトの実際の型を隠蔽したりすることをいう。

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

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

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

https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96
0939デフォルトの名無しさん
垢版 |
2018/10/18(木) 12:45:03.88ID:0Dh4HQ87
>>936
何歳って概念も結構大事で、6歳未満にはできない、とか、6歳未満だからいくら、とか結構決まり事があるんよ。
それ守らないと保険組合からお金がもらえない。
暦の上の、いわゆる法律上の年齢も無視できないんよ。
それは、医師の指示を実施した日で計算するとか、日付の取り方も色々ある。

医学的に必要になってくるとすると、何ヶ月早産児の何ヶ月児が、正規産だと何ヶ月児だよ、とか。
こっちは、だいたい週計算する。
0940デフォルトの名無しさん
垢版 |
2018/10/18(木) 12:45:24.34ID:b1Fs59oz
日付クラスを継承して誕生日クラスとか作り出す奴がいるから無駄に複雑になる。
0941デフォルトの名無しさん
垢版 |
2018/10/18(木) 13:23:27.88ID:b1Fs59oz
無駄にクラス化しようとする奴も同罪。だからオブジェクト指向がクソと言われる。
0942デフォルトの名無しさん
垢版 |
2018/10/18(木) 14:01:33.21ID:bqWuTIEf
だから業務共通クラスの1メソッドにしとくんだろ、普通

バッチが日跨ぎしても基準日は変えないとか、業務やシステムの要素と切り離しできるなら話も変わるけど
0943デフォルトの名無しさん
垢版 |
2018/10/18(木) 14:13:24.19ID:A+ZA0oir
クラスもいいけど、共通処理は単なる関数ライブラリの方がありがたいよな。
0944デフォルトの名無しさん
垢版 |
2018/10/18(木) 14:59:01.57ID:6luTq9qj
>>940
継承は間違い
日付型のフィールドを持つだけの誕生日値オブジェクトクラスを作るのが正解だな
0946デフォルトの名無しさん
垢版 |
2018/10/18(木) 16:59:23.38ID:A+ZA0oir
2つの日付けを引数にしてその日数を返す関数あれば、それだけでよくね?
変にクラス内に閉じ込めてもメリット無いと思うんだけど?
少なくともpersonクラスには誕生日を返すくちがあればそれでいいと思うよ。
それをどう加工するかは、表示クラスだったり年金計算クラスだったりでやればいいんだよ。
0947デフォルトの名無しさん
垢版 |
2018/10/18(木) 17:52:04.62ID:/ofNkRJS
>>946
コンピュータの立場で考えるのではなく
人間の立場になって考えるようにしましょう

Personクラスはどういう属性を持っているか?
それを考えるのが設計。実装のことは一旦忘れましょう
0948デフォルトの名無しさん
垢版 |
2018/10/18(木) 17:55:05.67ID:80M+etW5
関数型や手続きだとこんな議論にならん辺りやっぱオブジェクト指向はアカンな
0949デフォルトの名無しさん
垢版 |
2018/10/18(木) 18:03:23.12ID:b1Fs59oz
誕生日から年齢導くだけの処理に、幾つのファイルとどの位のコストが必要なのかねぇ。
保守性とはホント真逆だわ。
0950デフォルトの名無しさん
垢版 |
2018/10/18(木) 18:12:21.82ID:vIc/Em84
>>949
年齢を整数のまま扱うといつか誰かが
Xピクセル=10歳+50kg
みたいな奇妙な演算をやらかす
それは困るからクラス化して保守性をあげよう
0951デフォルトの名無しさん
垢版 |
2018/10/18(木) 18:17:11.53ID:b1Fs59oz
それよりも複雑化によるデメリットの方が計り知れない。
そもそもコード量を減らすためにクラス化とかあるのに逆に増えるってどんな呪いだよ。
0952デフォルトの名無しさん
垢版 |
2018/10/18(木) 18:20:48.86ID:vIc/Em84
>>951
重複コードがほぼ一掃されるので全体のコード量は減る
利用者側は年齢にまつわる詳細なルールを知らなくても使えるようになるから複雑性も解消される
0955デフォルトの名無しさん
垢版 |
2018/10/18(木) 18:34:20.75ID:7CPcoAfm
設計がおかしいとおかしなクラスが乱造される

一クラス一機能をつら抜いてFileRemoverとかFileRenamerクラス作ってる人は死んだほうがいい
MultiFileRemoverとか本当に必要なら作れよと思う
0957デフォルトの名無しさん
垢版 |
2018/10/18(木) 18:42:34.52ID:80M+etW5
オブジェクト指向は書く量と段取りを増やすデメリットをもって
パーツや責任関係の切り分けを行う作業と理解しております
0959デフォルトの名無しさん
垢版 |
2018/10/18(木) 19:06:46.96ID:vIc/Em84
日付型とかあるじゃん
あれ中身はただの整数値だけどだからってじゃあ整数値のままでいいじゃんとはならない
なぜなら整数値を日付とみなして注意深く扱うよりも
さっさと日付型を作ってしまったほうが間違いが減って問い合わせや演算が楽になり理解しやすくなるから
同じことをドメインでもやりましょうというだけの話なんだけど何をそんなに恐れてるのだろう
0960デフォルトの名無しさん
垢版 |
2018/10/18(木) 19:25:21.20ID:7CPcoAfm
架空言語にて

private Name name=new Name()

public Person(string name){
Name tmpName=new Name(name);
if(tmpName != null){
this.name=tmpName;
}
}
0961デフォルトの名無しさん
垢版 |
2018/10/18(木) 19:26:39.70ID:qf9NxgCD
>>947
そう言うのがいるからうちの会社は社用スマホが古いんだから、もっとアプリ軽くしろとか注文入って鯖に処理を移す事になるんだよ。。。
ある程度はどっちに比重置くか考えて作った方がいい。
そういう所こそ設計の腕の見せ所。
0962デフォルトの名無しさん
垢版 |
2018/10/18(木) 19:30:01.60ID:/ofNkRJS
> そう言うのがいるからうちの会社は社用スマホが古いんだから、もっとアプリ軽くしろとか注文入って鯖に処理を移す事になるんだよ。。。

全く無関係の話をされても困るんだが?
0963デフォルトの名無しさん
垢版 |
2018/10/18(木) 19:39:03.88ID:qf9NxgCD
理想と現実は違うって事。
人間のこと考えたいけど、仕様変更繰り返すうちにグダグダになる。
出来る事は破綻しない様に事前に想定される事に対処して、その後も破綻しない様に管理することだけ。
0965デフォルトの名無しさん
垢版 |
2018/10/18(木) 19:54:07.63ID:qf9NxgCD
>>964
そう。
そのはずだ。
入門書でAnimalクラスを継承してDogクラスとCatクラスが〜とか例えた弊害か、人間の事をとかなる。
人間の事を考えるなら顧客の事だ。
0967デフォルトの名無しさん
垢版 |
2018/10/18(木) 20:37:26.00ID:4AdjqlvR
>>938
エキスパートと思われる人にヒアリングしたら
そいつが「年齢にまつわる宇宙の真理」とか求め出すというクソ案件はたくさんある。
0968デフォルトの名無しさん
垢版 |
2018/10/18(木) 21:17:00.48ID:A+ZA0oir
>>947
だからさ、業務によって年齢の扱いが違うんだから、固有の業務に特化した属性なんて実装は避けるべきなんだよ。
やりたいならpersonクラスじゃなくて業務クラスに持たせるべき。
それじゃ無いと、様々な業務に適用させる度に微妙に違う属性を返さなきゃならんくなるだろ?
0969デフォルトの名無しさん
垢版 |
2018/10/18(木) 21:24:05.33ID:/ofNkRJS
> だからさ、業務によって年齢の扱いが違うんだから、固有の業務に特化した属性なんて実装は避けるべきなんだよ。

Personクラスはそもそも業務に特化したクラスだろう?

現実世界の人間を完全シミュレートする。それがオブジェクト指向だって
考えてるのはお前だけやで
0971デフォルトの名無しさん
垢版 |
2018/10/18(木) 21:26:42.98ID:/ofNkRJS
パーツの使い回しはオブジェクト指向じゃなくてもできるんで
それは全然違いますー
0972デフォルトの名無しさん
垢版 |
2018/10/18(木) 21:28:20.39ID:/ofNkRJS
いやはや驚きだ。これが馬鹿というものか

まさか、どんな業務にでも通用する
Personクラスを想定していたとは

世界にたった一つPersonクラスがあれば
ゲームから業務まで何でも使えるものを想定していたとはな

愚かとしか言いようがない
0973デフォルトの名無しさん
垢版 |
2018/10/18(木) 21:32:01.02ID:A+ZA0oir
少なくとも会社や自分の作るアプリで使い回す為にオブジェクト指向で作るんだからな。
おまえみたいに毎回特定業務に特化してフルスクラッチから作るとかバカしかやらんぞ。
0974デフォルトの名無しさん
垢版 |
2018/10/18(木) 21:33:57.36ID:/ofNkRJS
>>973

え?お前こういったじゃん

> やりたいならpersonクラスじゃなくて業務クラスに持たせるべき。

お前は、使い回すために業務クラス作ってんのか?
どんな業務でも汎用的に使えるもの = 業務クラスだったのか?
0975デフォルトの名無しさん
垢版 |
2018/10/18(木) 21:35:16.82ID:/ofNkRJS
使い回さ(せ)ないもの = 業務クラス
Personクラスは使い回せない = 業務クラス

俺はこう言ってるだけなんだが、
こいつは何を言ってるんだろうか?
0976デフォルトの名無しさん
垢版 |
2018/10/18(木) 21:37:02.39ID:A+ZA0oir
アホに構ってしまった。
personなんて一般的な名前で個別に特化したクラスを作るあほは社会の迷惑だからしんでくれ。
0977デフォルトの名無しさん
垢版 |
2018/10/18(木) 21:38:08.80ID:/ofNkRJS
>>976
キミはネームスペースというものを知ったほうが良いぞ
多くの言語ではクラスはネームスペースの中に入れるから
一般的な名前が使えるんだよ
0979デフォルトの名無しさん
垢版 |
2018/10/18(木) 21:59:23.07ID:d31P7rqb
マクロ使ってスコープ無視してるんじゃね
0981デフォルトの名無しさん
垢版 |
2018/10/18(木) 22:20:46.14ID:d31P7rqb
名前空間内に入っていてその業務に特化したpersonという標準クラスはok派。
それを継承して使いまわしてもいいじゃない。
0982デフォルトの名無しさん
垢版 |
2018/10/18(木) 22:53:19.65ID:2FmMLZik
名前空間のせいで型名が長い
その反動で関数名は短すぎるから型を省略したら情報が少なすぎて読めない

型を宣言する言語としない言語の対立が最も激しくなる仕組み
0984デフォルトの名無しさん
垢版 |
2018/10/18(木) 23:17:56.72ID:sfuI0a7S
オブジェクト指向で作った時点で失敗

メンバ変数の状態の数だけパターンが増えていく
これを仕様で固定せず
オブジェクトの状態数×オブジェクトの状態数
の工数爆発を汎用性による品質の向上とか思ってるキチガイばっかで救いようがない

無限の汎用性とは無限のバグ数を持っていることを悟るべき
0986デフォルトの名無しさん
垢版 |
2018/10/18(木) 23:19:44.24ID:THsg9J3q
人類クラスからホモクラスを導出するぐらい頭ワルイことを平気でするからな
0987デフォルトの名無しさん
垢版 |
2018/10/18(木) 23:22:42.95ID:Buojxy+7
オブジェクト指向は愚かな考え。排便メソッドを実装した人間クラスから美少女クラスが作れない
0988デフォルトの名無しさん
垢版 |
2018/10/18(木) 23:25:00.93ID:qf9NxgCD
>>973-974
あー。。。
オブジェクト指向は素晴らしいかもしれん。
だがな。
納期に追われた焦った脳で扱うには手が余る。
精々次の一回使い回せたら使えたってのが現実。
(と言うか、そんなんだから継承は悪とか言われるわけで)

上で誰かがライブラリ的な方が嬉しいとか書いてたろ?
あれが真実。(誓って書いたのは俺じゃあない)
流石にまんま関数をライブラリにしなくて、関数とクラスをまとめたライブラリにするが。(むしろ気持ち悪いかこれは)

だから言ったろ?
現実と理想は違うって。

理想を追い求めて納期間に合わなくて、クビになったら元も子もないやろ?
いつかは。。。とか思いつつ、その連続よ。
0990デフォルトの名無しさん
垢版 |
2018/10/18(木) 23:28:09.99ID:qf9NxgCD
そう思うんなら、まだ現実を知らない。
0991デフォルトの名無しさん
垢版 |
2018/10/18(木) 23:28:24.82ID:THsg9J3q
一番頭ワルイやつが大量にレスしてるわ。。。
まさに典型的な頭の悪さ
0993デフォルトの名無しさん
垢版 |
2018/10/18(木) 23:33:25.51ID:/ofNkRJS
>>988
Personのような業務クラスは使いまわしできるわけがないのは常識で
どうせ作る力ないんだから作るな。使え。
オープンソースなんかの汎用クラスを使え
見事にオブジェクト指向で世界中使い回し出来てるんだから。
0994デフォルトの名無しさん
垢版 |
2018/10/18(木) 23:35:05.22ID:THsg9J3q
業務でどこの馬の作ったか分からんような
ちゃんと試験されたかどうかすらわからんようなコードを使うとかな
コイツは間違いなくニート
0995デフォルトの名無しさん
垢版 |
2018/10/18(木) 23:43:20.55ID:/ofNkRJS
ちゃんと試験すればいいだけじゃね?

どうせ自分で作っても試験するんだから
他人が作ったものを試験するほうが
作るコストが節約できる

第一そもそも作る能力がないレベルなんだから
他人のが使えませんと言っても
自分で作ることもできませんっていうのが落ちだろう
0996デフォルトの名無しさん
垢版 |
2018/10/18(木) 23:45:03.61ID:THsg9J3q
クソニートの世界では手続きとういもんがないのは分かる
0999デフォルトの名無しさん
垢版 |
2018/10/18(木) 23:46:57.71ID:THsg9J3q
オマエはこのスレで頭わるいことばっかり書きこむまえに
ハロワへいく必要がある
1000デフォルトの名無しさん
垢版 |
2018/10/18(木) 23:47:17.33ID:vIc/Em84
>>984
状態をクラスにカプセル化することによって独立性を保てる境界ができる
すると状態の組み合わせ数が激減するんだよ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 55日 10時間 15分 8秒
レス数が1000を超えています。これ以上書き込みはできません。

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