X



オブジェクト指向ってクソじゃね?
■ このスレッドは過去ログ倉庫に格納されています
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
0222デフォルトの名無しさん
垢版 |
2018/09/24(月) 20:31:28.52ID:e4NBE4Fp
う〜ん、ここ見てるとオブジェクト指向はクソと言いたくなるね。

何らかの問題を解決したい、もっと便利で問題の発生しない手法は無いだろうかというような要望があって、
それを実現するためにオブジェクト指向なるものが発明されたとすれば、
同じ考えでオブジェクト指向を採用するのも良いだろうけど、
最初からオブジェクト指向ありきはダメなんじゃないの?

なんかさ、なんでも右ならえで無理に採用してるような気がするんだよなあ。
オブジェクト指向に限った話じゃ無いけど、特に日本では。
0223デフォルトの名無しさん
垢版 |
2018/09/24(月) 20:32:33.20ID:csv6kfNU
>>222
お前の書き込みは、オブジェクト指向がクソだということが目的になっていて、
その他の何かが、オブジェクト指向よりも優れているという話になってない
0224デフォルトの名無しさん
垢版 |
2018/09/24(月) 20:35:08.38ID:csv6kfNU
>>221
優れた人が優れた道具を使う

それに対抗するために、もっと優れた道具ができたとしても
それだって優れた人が使ったほうがもっと効果が高いわけで

優れてない人が、優れてない道具を使って勝つには
人海戦術しかないんだよね
0225デフォルトの名無しさん
垢版 |
2018/09/24(月) 20:38:06.78ID:Kxio7RVg
ぜんぜん分かってないわ
刃物は道具でもあるし
人を殺すこともできる
0226デフォルトの名無しさん
垢版 |
2018/09/24(月) 20:38:44.95ID:Kxio7RVg
あやまった使い方をすれば
簡単にケガをする
0227デフォルトの名無しさん
垢版 |
2018/09/24(月) 20:42:45.07ID:e4NBE4Fp
>>223
いや、オブジェクト指向をクソだなんて思ってないよ。
むしろ好きな方なんで。

でも、肯定派の人ってありきでしょ。
それは違うかなって。
0228デフォルトの名無しさん
垢版 |
2018/09/24(月) 20:50:20.68ID:Kxio7RVg
教育コストはものすごいかかるが
手続き型言語でオブジェクト指向をみっちり体験してから
オブジェクト指向の教育に移行したほうがいい

この手順踏んだほうが間違いが少ない

そうでないと
ID:csv6kfNU ← コイツ
みたいに頭悪いのが大量に量産され続ける
0229デフォルトの名無しさん
垢版 |
2018/09/24(月) 21:03:48.14ID:u7Hms91/
>>228
バカにコストかけて教育するのもなんだかなー
バカとハサミは使いよう、というけれど、なかなか良い使いようが見つからんね。
0230デフォルトの名無しさん
垢版 |
2018/09/24(月) 21:19:43.39ID:AdxflhqI
オブジェクト指向のメリットって何?
この問いに今だかつて一人も答えてくれた事は無い
どっか他の文献指差して丸投げとか
逃げと食い下がりを駆使して結局答えないとか
0231デフォルトの名無しさん
垢版 |
2018/09/24(月) 21:47:42.62ID:oYzwCf5A
>>230
困ったことにどっかの文献ですら
ちゃんと理詰めで仕組みを解説してるものは皆無
完全なオカルトテクノロジー
0233デフォルトの名無しさん
垢版 |
2018/09/24(月) 23:07:18.05ID:Kxio7RVg
転ばぬ先の杖
STOP オブジェクト指向
0234デフォルトの名無しさん
垢版 |
2018/09/24(月) 23:31:05.04ID:JEGqIfby
>>230
いびつな答え方するんだがそりゃ間違いなくパーツや責任関係の切り分けからーの作りやすくなるってことやろな
俺は嘘だと思う
0235デフォルトの名無しさん
垢版 |
2018/09/25(火) 08:11:13.05ID:ffbXNZny
色んなサイトでオブジェクト指向の説明してるけど説明が下手すぎねえか?
設計図とか野菜や動物に例えるとか理解してんのかと思うわ
雛形作ってからそこに入力規格を統一したデータをぶち込むって例えでいいだろ
0237デフォルトの名無しさん
垢版 |
2018/09/25(火) 08:48:25.26ID:Eix7hoc3
オブジェクト指向とは雛形作ってそこに入力規格統一したデータをぶち込むってことだぞ
0240デフォルトの名無しさん
垢版 |
2018/09/25(火) 12:27:26.16ID:6l+mHu1d
ぶち込んだ経験ないやつには難しいやろな
0241デフォルトの名無しさん
垢版 |
2018/09/25(火) 12:30:49.14ID:Ti214GxU
オブジェクト指向とは関数仕様があってそこに仕様通りの引数渡すことなのね。
すごい、ようやく俺でもオブジェクト指向が理解できた!
0242デフォルトの名無しさん
垢版 |
2018/09/25(火) 15:04:59.78ID:GnoTTlW7
>>215
>オブジェクト指向って何ですか?
オブジェクトを中心に組むこと
クラスベースの言語ならクラス
Cは関数で組むけどC#はクラスで組む

>C言語では
できる
けどCは向いてない
C#とかJavaとか
最初からOOをサポートしてる言語の方がやりやすい
0247デフォルトの名無しさん
垢版 |
2018/09/25(火) 18:58:18.78ID:bhDxFTjN
そうでなければむしろ最強レベルの苦痛を伴う変更になるんだよね?
無意味じゃない?
0250デフォルトの名無しさん
垢版 |
2018/09/25(火) 19:10:47.09ID:bhDxFTjN
例えばさヘッダーと内容と記述者と更新日時がある条件を満たしたときに
ヘッダーにある文字列を入れて欲しいと

でもヘッダーは他の全てを知らないので関連するオブジェクト全てに手を入れなければならないと

こういうの想像できないの?
レベル低くね?
0252デフォルトの名無しさん
垢版 |
2018/09/25(火) 19:22:34.13ID:GnoTTlW7
>>250
>ヘッダーと内容と記述者と更新日時
たとえばブログのエントリのように
それらの情報に関連性があるのであれば
ひとつのオブジェクト(クラス)にする

そのオブジェクトは当然関連するデータを知っているので
変更もスムーズにできる
一方オブジェクト指向でない場合には
それらのデータがバラバラになっているから変更しにくい

この場合は疎結合というより高凝集の側面が出ている
オブジェクト指向で正しく組むと高凝集疎結合になる
0253デフォルトの名無しさん
垢版 |
2018/09/25(火) 19:28:22.29ID:bhDxFTjN
>>252
って変更を各オブジェクトに入れないとできないよね?
c言語だと普通に処理書くだけやで
0254デフォルトの名無しさん
垢版 |
2018/09/25(火) 19:40:26.69ID:du+nhKJd
オブジェクト指向は設計思想として好きだけど
オブジェクト思考的パラドックスに陥っている気がする
0255デフォルトの名無しさん
垢版 |
2018/09/25(火) 19:54:06.59ID:o8KZiItl
これだけ前もって言っといた方がええやろ
データとメソッドをオブジェクトで綺麗にまとめることを自慢する輩はオブジェクト指向ですらないと
0256デフォルトの名無しさん
垢版 |
2018/09/25(火) 20:13:12.32ID:BMMTvniR
データとメソッドをオブジェクトで綺麗にまとめられるのは事実
別に自慢はしてない

オブジェクト指向を勘違いしている人はオブジェクト指向を、
不可能なことを可能にする技術だと勘違いしておいて
不可能なことを可能にしてないと(自分の勘違いを)批判してる

オブジェクト指向は従来のやり方でも可能ではあるが
大変なことをより分かりやすく簡単に実現するための技術
0257デフォルトの名無しさん
垢版 |
2018/09/25(火) 20:53:51.26ID:GnoTTlW7
>>253
>c言語だと普通に処理書くだけ
大規模になると「普通に」って言っても
関連のある変数を探すのが大変になってくる
だからオブジェクト指向の方が変更しやすい
0258デフォルトの名無しさん
垢版 |
2018/09/25(火) 21:06:16.95ID:BMMTvniR
オブジェクト指向は大規模開発のために作られた
だが小規模開発で使用しても問題ない
0262デフォルトの名無しさん
垢版 |
2018/09/25(火) 22:46:19.22ID:FLKmzsJJ
>>256
> オブジェクト指向を勘違いしている人はオブジェクト指向を、
> 不可能なことを可能にする技術だと勘違いしておいて
> 不可能なことを可能にしてないと(自分の勘違いを)批判してる

こういう意見おなかいっぱい
「OOPのメリットはXXXです」
以外の文章はもういい
0263デフォルトの名無しさん
垢版 |
2018/09/25(火) 22:57:23.11ID:BRabQ1iT
流れを追っていくとOOPのメリットはリファクタリングにかかるコストが安いって読めるけど
これじゃあダメなのか?
0264デフォルトの名無しさん
垢版 |
2018/09/26(水) 00:31:24.02ID:bs5egenN
オブジェクト指向のデメリットが単純にコードの段取りや量が増えて鈍臭いんだから
メリットは必然的にその分作りやすくなるって事に消去法でなるやろ

まあ嘘である
0266デフォルトの名無しさん
垢版 |
2018/09/26(水) 04:39:27.51ID:8XNtqdsN
セッター、ゲッター、プロパティを使わない。
これはカプセル化を強いる抜本的なアプローチだ。
これはDependency Injectionアプローチの実装も必要になるし、
"言え、訊くな"という格言の遵守も必要となる。

おれの居るところ真逆のプロジェクトだ使いまくりでワロタ
0267デフォルトの名無しさん
垢版 |
2018/09/26(水) 06:02:50.00ID:Jt0rVGX1
セッター、ゲッター、プロパティを使うなってのはクラスは全て操作だけで実装しろってことなのかな?
0268デフォルトの名無しさん
垢版 |
2018/09/26(水) 08:59:38.32ID:cdctReAr
>267
イメージ的にはそうだと思う
ただ操作対象を設定する必要は有るから全く使わないという事では無い
ゲッターセッターの一番の問題点は
それを不用意に使ってしまうとグローバル変数をただ面倒な手順を増やして使うだけになってしまい易いから
不用意に使わないようにする
という訓練の為に
使うな
と言っているのだろう
あくまでオブジェクト指向プログラミングが全くと言って出来ない人向けなんだろう
というよりそう書いて有るけど
オブジェクト指向プログラミングの最大の問題点は
標準教範が存在していない事なんだよなぁ
そのギプスなんたらは教範の一部に成れる可能性が有るかもしれない
0270デフォルトの名無しさん
垢版 |
2018/09/26(水) 22:10:14.19ID:Ye0laooE
メタプログラミングが不要な用途だけなら、オブジェクト指向知らなくても組める。
まあいつまでももそれだと、大規模システムの仕事は無理だが。
0271デフォルトの名無しさん
垢版 |
2018/09/26(水) 22:27:48.39ID:xMAwDWlb
ゲッターセッターの悪いのは
インタフェースありきの設計の中に
実装上の変数がうっすら見えてきちゃうこと
そんなもんを前提に設計してはならない
実装に対してプログラミングするのではなく
インタフェースに対してプログラミングするのだ

同じ理由で、それを書き易くしたC#のプロパティみたいなもんは糞
池沼の要望に迎合したような糞
0272デフォルトの名無しさん
垢版 |
2018/09/26(水) 22:42:34.06ID:yzZF1GUc
>>271
メソッドとプロパティ (setter, getter) は本質的に同じものだよ

オブジェクトのメソッドの大半はオブジェクトの状態を取得または変化させる
(状態を参照しないならそのオブジェクトに持たせる必要はないわけで)

オブジェクトのメソッドのうち、一つの変数を変更するものがsetterで
一つの変数を取得するものがgetter・・・になってることが多いが別にそうする必要はない。

例えば内部変数が配列で要素の0番目を読み書きするsetter/getter
要素の1番目を読み書きするsetter/getterを作っても良い
もちろんsetter/getterではなくメソッドでやっても良い
どちらでも同じことができる。

言い換えると、システムを作るのに、メソッドだけでも実現できるし
プロパティ (setter/getter) だけでも実現できるということ

メソッドとプロパティ (setter/getter) の違いは
UMLのクラス図を書いたことがあればわかる。
UMLのクラス図には操作と属性の両方が存在するんだよ。
なぜか? それは人間の思考を反映させた結果だから
実装段階の思考ではなくて設計段階の思考ですでに操作と属性が別れてる。

メソッドとプロパティは本質的には同じものでコンピュータから
見れば同じものとして扱えるが、我々は人間なんだ。

人間がそれは操作、それは属性って分類して考えてるから、
それをコードに反映させられる記述能力の高さを求めた結果
メソッドとプロパティができたんだよ

しかたないね。人間だもの
0273デフォルトの名無しさん
垢版 |
2018/09/26(水) 23:05:14.04ID:xMAwDWlb
> メソッドとプロパティ (setter, getter) は本質的に同じものだよ
> (以下ポエム略)

??
なぜそれを俺にレスしたのか不明
0274デフォルトの名無しさん
垢版 |
2018/09/26(水) 23:25:48.93ID:+un+mAjX
むしろおまえ以外の誰にレスしろというのか不明w
0275デフォルトの名無しさん
垢版 |
2018/09/27(木) 00:13:38.88ID:oacq4Bqj
だが実際にはクラスを半グローバル変数の格納構造体みたいに使って
setter/getterでアクセスして外側から中の実装を多角的に覗くような記述をし
そこに更に継承を使って依存でスパゲティー状態になっちゃうから
ソフトウエアの表現方法としての有効性に疑問を持ち始めた人が現れてきたんじゃないかな
0277デフォルトの名無しさん
垢版 |
2018/09/27(木) 00:35:00.12ID:pq96CSzd
刺身にタンポポのせてるヤツが
ちゃんとキリキリ働いてるか
その働きぶりをたまに覗きたいことはある

こっちからなにをするということはない
0278デフォルトの名無しさん
垢版 |
2018/09/27(木) 00:42:24.43ID:oacq4Bqj
>>276
確かに悪い使い方が都市伝説みたいに普及しすぎて、ろくろくまともな開発したことの
無い輩まで頓珍漢なオレオレオブジェクト指向論を吹聴するにいたったブームには参ったが、、

使い方の問題のみならず、そういう表しにくい構造がソフトウエアそのものにあるじゃないかと思う。
非常に表しにくい場合が少なからずあり、小さいサンプルコードの断片で説かれるOOの美しいはずの
メリットは実践で適用の場が乏しいということ
0279デフォルトの名無しさん
垢版 |
2018/09/27(木) 00:54:06.21ID:oacq4Bqj
>>260
このギプスのサイトに書いてある方法は
すごく制約した方法であり、
いろいろ大変かも知れないけど
守れば副作用の少ないモジュラリティーと
深すぎない階層設計が可能になるかもしれないのはよく分かる。
でも、守るためには強い規律とメンバのスキルと
工数のゆとりが必要だと思った。
つまり、現実にはなかなか難しい話だろうなと。
0280デフォルトの名無しさん
垢版 |
2018/09/27(木) 01:41:53.45ID:DSKWvsHE
いや、単純にオブジェクト指向なんてやったって地獄に落ちるだけ
クラスっていうゴミ箱に突っ込んで臭いものに蓋してる状態じゃいつまでたってもバグなんて取れないんだよ

単純にプログラムを

入力→処理→出力

という繰り返しの塊にしなければならない
メソッドを呼ぶたびに状態が変化
するようなもん誰も管理できない
0281デフォルトの名無しさん
垢版 |
2018/09/27(木) 01:45:45.45ID:oacq4Bqj
オブジェクト指向の解釈が多彩なので、あれだけど
オブジェクトscopeは有効な場面は多々あるんだよな
closureとか部分適用とか
0282デフォルトの名無しさん
垢版 |
2018/09/27(木) 01:46:43.86ID:pq96CSzd
オブジェクト指向でも
詳細化したらデータフロー図に落とせる設計でないと
お話にならない
0283デフォルトの名無しさん
垢版 |
2018/09/27(木) 01:47:55.67ID:DSKWvsHE
状態を持ってしまうのがまずい
いや、持つだけなら好きにすればいい
内包してしまうのがまずいと言うのが正確か?
0284デフォルトの名無しさん
垢版 |
2018/09/27(木) 01:50:10.34ID:pq96CSzd
以前(>>161)にも書いたとおり
コレ以外方法はない

この原則さえ守れば破綻は回避できる
大体の大きな問題は起きなくなる

 @公開インタフェースは可能な限り少なくする
 A原則として、よほど適切な理由がないかぎり、可能な限り継承よりコンポジション使う
 B下位階層(ここでの階層は>>101>>106の意味)のクラスが上位階層のクラスのインターフェースに絶対に直接アクセスしてはいけない
  ※ 当然、下位クラスが上位クラスのインターフェースを直接呼びだすようなリフレクションは禁止
 C下位階層のインスタンスが非同期で上位のインスタンスに処理を依頼したい状況が発生した場合(可能な限りこんな状況が起きる設計は当然避けるべき)、
  処理のやりとりはメッセージキューで行い、可能な限り少ない回数で簡潔なメッセージを用いて簡単に完結できるようにする、複雑なメッセージシーケンスも禁止
  (コレは並立するインスタンス間でも同じ)
 D同じ階層に並立するインスタンスをムダに乱立させるのは当然禁止

コンポジションとメッセージシーケンス、クラスの階層(ここでの階層は>>101>>106の意味)、インスタンスの生存期間さえ
ドキュメントで適切におさえることができる状態になっていれば
問題やエンハンスが発生しても持続可能対応できる
0285デフォルトの名無しさん
垢版 |
2018/09/27(木) 01:52:11.89ID:DSKWvsHE
単純にメソッドの成功条件に内部で持たれているメンバの見えない奴が関わってたりすると最悪
プログラムのどこでそいつが変更されるのかわからん

こういう問題が起きるたびに途方も無い労力を支払うのが単純に無駄
オブジェクト指向を考えた奴はわざと技術者の仕事を作るためにこれを考えたのではないか?
というぐらい一切メリットがない
0286デフォルトの名無しさん
垢版 |
2018/09/27(木) 01:54:14.64ID:DSKWvsHE
>>284
だからな
お行儀のよいクラス作るほど
その実開発者は地獄を見るんだよ
オブジェクト指向がクソな原因は
簡単で内部に状態を保持することなんだよ
0288デフォルトの名無しさん
垢版 |
2018/09/27(木) 02:02:11.90ID:oacq4Bqj
単純な入れ子構造になっているか分かりにくい
ランダムに依存しうるネットワーク構造は管理しにくい
しかもノードインスタンスごとに状態を持っていたり
何の×ゲームだよ
0289デフォルトの名無しさん
垢版 |
2018/09/27(木) 02:41:53.03ID:y/NaeiDF
割と真面目にオブジェクト指向は将来的に絶対破滅するという想定で作るといい気がしてきた
上で出てる上手くいく方法とかは「延命措置」とみなして
そう考えたら何かすっきりする
0290デフォルトの名無しさん
垢版 |
2018/09/27(木) 02:47:01.34ID:Fk1HpByz
そう。1000年後には絶対破滅するという想定で、
今の仕事を全力でやればいい。
今必要なら、必要ってことさ、AHAHAHAHA〜
0293デフォルトの名無しさん
垢版 |
2018/09/27(木) 07:40:33.24ID:zZL/tnLy
>>283
公開されてるメソッドの呼ばれ方による状態繊維が簡易なレベルならば問題ない
といったところ。
通信ソケットの実装みたいなものはどうしても状態を持つのは仕方ないけど、
でもそれもできる限り小さく持つってのが最近の感覚じゃないかね。

内部に巨大で複雑なオブジェクトをガツガツ作る様なメソッドがある場合は
なんか問題ある気がする。
0294デフォルトの名無しさん
垢版 |
2018/09/27(木) 08:19:49.02ID:emgF57xx
状態を持つなって言ってるのは関数型の考えから?
常にオブジェクト指向言語の方がメジャーなんだが
0295デフォルトの名無しさん
垢版 |
2018/09/27(木) 08:20:57.92ID:BciEc+9A
昔はgetter/setterを使うべきと言ってたような気がする。
でもその時にそれに疑問を持っていた人達もいたと思うんだ。

結局、クソなのはこういう手法が良いですよという言を真に受けて無理に採用する所じゃね?
このなんとかキブスが自分にぴったりくるなら採用すれば良いし、おかしいと思うなら採用しなくて良い。
オブジェクト指向も一緒でぴったり来てねえのに採用するのは良くないと思う。
0296デフォルトの名無しさん
垢版 |
2018/09/27(木) 08:24:56.86ID:emgF57xx
グローバル変数をそのまま使うよりは
ゲッターセッターをかぶせた方がマシだけど
使わないにこしたことはないってこと
0297デフォルトの名無しさん
垢版 |
2018/09/27(木) 09:26:17.13ID:DSKWvsHE
>>294
状態を持つと単純にテストがしにくい

あるクラスにprivateでドキュメントにも記述のないメンバ変数が10個あって
その内包するクラスにもメンバが10個あって・・・なんてプログラムだと
そのクラスの持つ状態は10*10*・・・
みたいに増えていく
完璧にプログラムを制御しようとすると
その全てを把握しなければならない
実際にはそれは不可能なのでオブジェクト指向的に組んだプログラムはそもそもバグっている
0298デフォルトの名無しさん
垢版 |
2018/09/27(木) 09:32:35.44ID:wRik+4En
>>295
あんたは使うべきの意味を理解してないよ
使うべきっていうのは今も一緒。

まずクラスのpublicフィールドを直接読み書きしたらいけないというルールがある。
そしてもう一つ、クラスのインターフェースを頻繁に変更してはいけないというルールがある

この2つのルールにより、publicフィールドを直接読み書きしていて、あとから読み書きに
何かしらの制限を書けたくなったときにgetter/setterに置き換えたらインターフェースが変わってしまう。
例えば obj.foo だったものを obj.getFoo() に書き換えないといけない
だから常にgetter/setterを使いましょうと言われていた

だけど今はプロパティを備えた言語ができた。
プロパティを備えた言語であれば、クラスのpublicフィールドというインターフェースを変えることなく
getter/setterにできるためあえて禁止する理由がなくなった
(obj.foo = 1 とかいて obj.foo に代入してるように見えて実は関数呼び出しになってる)

今はインターフェース(名前)を変えることなく、フィールドからgetter/setterに変更できるので
言われてないだけ。でもこれはプロパティを備えた言語に限った話
0299デフォルトの名無しさん
垢版 |
2018/09/27(木) 09:32:48.24ID:DSKWvsHE
んで思うのが
どうもアメリカらしくないなと
あれだけメリットとデメリットと数値化にこだわる国がなんでこんな丼勘定やねんと

オブジェクト指向なんて出回った頃にはもうすでに向こうではプログラミングは
無意味な公共事業の一環になっていたのではないか?
そしてそれにはもはや意味がなくて
できるだけ時間がかかる方法だけが採用されたと
0300デフォルトの名無しさん
垢版 |
2018/09/27(木) 09:34:56.57ID:wRik+4En
>>297
オブジェクトが状態を持つとテストがしにくいからといって
オブジェクトに状態を持たせなかったとしても、
状態を持ってるアプリケーションから状態を消し去ることは不可能なわけで
どこかに状態が存在するので、結局その部分のテストはしにくくなるよ
単にテストしにくい場所が変わるだけの話
0302デフォルトの名無しさん
垢版 |
2018/09/27(木) 09:45:20.17ID:DSKWvsHE
>>300
まず、それが見えているかどうかが問題
引数から渡す形ならドキュメントに記述を強制できる
さらに同じ引数で実行したらなるべく同じ結果が返って来ることも保証できる
これで気をつけるのはファイルアクセスやDBアクセス、日時、通信などに限定できる
オブジェクト指向は全てのクラスが失敗作であると言える
0303デフォルトの名無しさん
垢版 |
2018/09/27(木) 09:59:43.55ID:wRik+4En
>>302
いや、どんな言語で作ろうが、
アドベンチャーのフラグ管理は大変だよ
関数型言語なんか、実装が不可能なレベル
0305デフォルトの名無しさん
垢版 |
2018/09/27(木) 11:05:48.54ID:fvjtmZUM
実は倍精度浮動小数点数のインスタンス変数があったら2^64個の状態があるって話だ
もしくは10x10x10と10+10+10がほぼ一緒の値という主張だよ
0306デフォルトの名無しさん
垢版 |
2018/09/27(木) 11:44:32.68ID:emgF57xx
>>297
そんなことない

本格的なオブジェクト指向では
>>260みたいに小さなオブジェクト数にして
状態数も減らして単体テストしやすくする

むしろ関数型で複雑な状態遷移を実装するのは難しい
現にゲーム制作ではぜんぜん関数型が流行ってないからな
0308デフォルトの名無しさん
垢版 |
2018/09/27(木) 12:15:48.09ID:zzHSqWZa
>>306
何年か前にOOPのそのトレーニングやったけど
今にして思えばおかしなことをしてたなって思う

素直にGO使ったほうがいいよ
今は制約を気にせず非常に楽にコードが書ける
それでいてOOPのころの糞コードからかなり離れている
GOのおかげ
0310デフォルトの名無しさん
垢版 |
2018/09/27(木) 12:19:15.86ID:99b9Jx0M
状態を持たないオブジェクトwww
もはやオブジェクトちゃうやんw何の受け売りやそれw
0311デフォルトの名無しさん
垢版 |
2018/09/27(木) 12:24:21.66ID:nvNAA/EB
アクセスパターンを限定化する
これを理解出来ないなら
オブジェクト思考プログラミングはし無い方が良い
どういう訳か
凄まじい自信の有る人程解っていない
というのがこの界隈
0312デフォルトの名無しさん
垢版 |
2018/09/27(木) 12:31:34.84ID:zzHSqWZa
OOPで良いとされているが一番の間違いは
単機能の小さなクラスを沢山作ること

これはクラス数の爆発を産んでるので一番の害悪

例えば特定のファイルを読むためのクラス
そしてそのインターフェイスとDI用のクラスとテストケース
本当にこれが無駄

内部の状態に依存せず単機能でいいなら関数でつくればいいと気が付いた
0313デフォルトの名無しさん
垢版 |
2018/09/27(木) 12:37:21.63ID:emgF57xx
>>310
不変オブジェクトがあっても別にいい

>>312
>単機能の小さなクラスを沢山作ること
小さなクラスをたくさん作るからこそ変更しやすくなる

クラスの数を大きくして数を減らしてしまうと
作るときは一見楽に見えても後で変更コストが上がる
0314デフォルトの名無しさん
垢版 |
2018/09/27(木) 12:43:37.80ID:tnNln14X
>>313
それはOOP自体が悪いからそう見えるだけ
クラス数の爆発のほうが本当の害悪

上のトレーニングもクラスをちいさくする良い理由の一つとして
エディタの一画面にはいるから…

クラスが一ファイル内にないといけないその言語の制約だろう
パッケージ内に在ればいい言語に乗り換えよう
0315デフォルトの名無しさん
垢版 |
2018/09/27(木) 12:47:39.73ID:tnNln14X
クラスが小さいと困ることがある
インスタンス変数を2つに絞るのは愚か
確実にクラス設計が困難になる

変数をどこが持つべきかを設計しないといけない
そしてそれが間違っていた場合大規模な再設計とコーディングが必要になる

中程度のクラスにある程度必要とされる変数が入れておく方が開発工数は減る
0317デフォルトの名無しさん
垢版 |
2018/09/27(木) 12:53:47.09ID:99b9Jx0M
>>313
不変ゆうんは状態を持つから不変なんやぞw
受け売りでイキるのやめときw
0319デフォルトの名無しさん
垢版 |
2018/09/27(木) 13:18:51.56ID:M9UbUXxK
TCP接続をOOPで書くとして、オブジェクトの外側でTCPの例の状態遷移を気にする必要あるんかいな
0320デフォルトの名無しさん
垢版 |
2018/09/27(木) 14:18:04.82ID:mMx24hKT
不変オブジェクト自体が一つの状態であることは確かだと思うが、語弊がありそうだな。
可換原則的には互換性のある小さなクラスをたくさん作る、が正しいだろうけど、
実際にそれすると、とんでもないバカが現れて瞬時に全壊するのも見たことあるし。
やっぱり一概には言えないと思うわ。
0321デフォルトの名無しさん
垢版 |
2018/09/27(木) 14:21:34.40ID:emgF57xx
>>316
関数でもいい場合はあるが
クラスにするメリットもある

>>317
それは難癖でしかない
再代入しないことによって
状態変化のデメリットが生じないので問題ない
0322デフォルトの名無しさん
垢版 |
2018/09/27(木) 15:03:29.89ID:DSKWvsHE
>>319
気にする必要が無いように組んでもいいし組まなくてもいい
でもテストは全状態に対して行わなくてはならない
現状はおそらくそれをやってる奴が少ないのがまずい
ここではさもやるのが当然とばかりに主張はするがそのテスト方法は提案すら挙げられない雑魚
■ このスレッドは過去ログ倉庫に格納されています

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