オブジェクト指向って自然な文法だな 3 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>749
ネットに踊らされてないで自分でやってみなさい >>750
カプセル化が必要だとするならそれは設計が間違っているというのがhaskellの議論で明らかになったわけです >>747
手続き型つまり構造化プログラミング
オブジェクト指向は構造化プログラミングの
延長線上にあるものだから手続き型は友達です
仲良くしましょう 純粋関数型と呼ばれるどこぞの言語にもdoがあるでしょう
つまり手続き型は数学的モデルのあるちゃんとした方法なんです
それを駄目だと思うのは慣れすぎてマンネリ化してるからなんです 原点に帰ろう
c言語からやり直そう
linuxはc言語で書かれていますが
完全にオブジェクト指向です >>753
前どこかのスレにコマンド引数の偶数番目と奇数番目を分けてリストに入れて、後から1、2番目を一つの組み。3、4番目を2つ目の組み。。。
みたいにして表示するコードをHaskellとPythonとRubyで書いたが、皮肉にもグローバル変数があっても良いはずのHaskellだけがグローバル変数作らないで済んで、
PythonとRubyはグローバル変数作らないとダメだった。
Pythonは書き様によってはグローバル変数無くせそうだったし、Rubyのsliceヒントに別の書き方のが全言語でグローバル変数要らなくなったし、シンプルになったけど。 >>755
doの書き方は手続き型言語でも宣言的と呼ばれる関数(メソッド)呼び出しの羅列の再現。
ループとかの手続き丸出しなのの再現はあくまで再帰。
だが再現はループの代わりにもなるが、あくまで値を返す関数。
メソッドチェーンと同じで返ってくる値の型を意識する。 >>757
> PythonとRubyはグローバル変数作らないとダメだった。
これ↓のどこでグローバル変数を作る必要があると?
print(list(zip(*[iter(sys.argv[1:])]*2)))
p ARGV[0...ARGV.size/2*2].each_slice(2).to_a >>761
お、そう書けるのね。
おいらPythonやRubyは(Haskellもそこまでじゃないけど)初心者程度だから。
そもそも重要なのは手続き型言語はグローバル変数がバグの温床になるのに、Python、Rubyじゃいとも簡単に作れちゃうって事ね。
Haskellみたいなグローバル変数がバグの温床になるわけじゃない言語でさえもパッケージ単位でカプセル化考慮されてるのに、初心者程グローバル変数宣言しちゃうし、出来ちゃうのは問題だよ。 >>761
って、よく見たらsliceの方のアルゴリズムだし。。。
上でも、そっちはグローバル変数使わなかったって書いてるだろ。
コマンド引数の配列なりリストなりを
args!!i -- Haskell の場合
args[i] #Ruby、Pythonの場合
このインデックスのiを奇数か偶数か判定して、それぞれのリスト(配列)を作ってzipするアルゴリズムではグローバル変数使った。
おいらの力量のせいだったのかもしれんが、そう言う書き方に自然となったのが問題って話。 >>763
ふつうに書けばシンプルに書けるものをなんでわざわざ複雑にせなあかんのかがわからん
p ARGV[0...ARGV.size/2*2].select.with_index{ |_,i| i.even? }.zip(ARGV.select.with_index{ |_,i| i.odd? }) (function(){
処理
})();
JavaScript でも、グローバルスコープにしないため、ファイル全体を無名関数で囲む。
Rubyでも、囲めばよい
結局、囲むという事は、クラスと同じ。
関数・クロージャ・ブロック・ラムダ式など、どういう表現をしようが、
スコープがあるという事は、クラスと同じ >>764
その発想は無かった。
>>766
実はHaskellも最初リスト内包表記でグローバル変数作ってたんだけどね。
結局判定する関数のevenとoddしか違いが無かったからmakeList関数作って纏めただけなんだが、同じリスト内包表記あるPythonで同じ様にしようとしたらi % 2 == 0とか書かないといけなかったのね。
んで、まあ良いや。0か1かで奇数偶数分けられるから関数作っちゃえって思ったらエラー出た。
定数じゃないとダメっぽくて諦めたけど、リスト内包表記に拘らなければ関数に出来たと思う。
(もしくは将来的にリスト内包表記のif式に外部から変数渡せる様になったら作れる)
処理全体を関数にしちゃうってのは確かにグローバル変数を無くす有効な手段だが、初心者ほどそんな事しない。 >>767
ファイル名とファイルの内容をzipするコード書いた後の実験的なコードだったんで、そう言う発想になった。
後でsliceなコードのが単純だし、グローバル変数使わないって気付いたけど。
ここではどうしても使わざるを得ない場面が出て来たってのを言いたかっただけ。 >>771
>ここではどうしても使わざるを得ない場面が出て来たってのを言いたかっただけ。
それが間違いなんだって言ってんだろ
どうしようもないアホだな そもそも771は長くても10行程度のコードしか書けないクソ初心者だろ?
その規模じゃグローバル変数でも問題ないわ もう継承、ポリモーフィズム、カプセル化も禁止でいいよ 継承、実装、DIの違いをポケモンを例に説明してくれ。 >>776
間違いというか効率悪い方の例をわざわざあげてる意味わかってる?
この例に限らず、グローバル変数がバグの温床になるって分かってるのに、
どうしてもグローバル変数使わないと書けない場面があるから黙認されてるっていうのが、
もうオブジェクト指向はグローバル変数に対して根本的な解決策を持たない不完全なパラダイムだって証左だよ。 >>782
Haskellだってどーしよーもないコード書くやついくらでもいるわ
お前はそのどーしよーもないコードの書き方すら知らない存外の低脳ってだけの話 プログラムを勉強して日が浅いのですが、LSPを意識すると継承って何の意味があるんだろうと思ってしまいます
置換可能を実現できるということは、サブクラスはスーパークラスそのものってことになるような気がして
LSPの概念は、どう便利なのでしょうか グローバル変数が無いと書けない場面なんて無い
グローバルスコープのシングルトンオブジェクトでいい
必要ならね >>784
>サブクラスがスーパークラスそのもの
受けとる側の視点ではそれでいいんだよ
違いを意識する/したいのは渡す側 >>786
なるほど、なんとなく解った気がします
あとは、どういうシュチュエーションで便利かモデリングの数をこなして覚えたいと思います >>787
まあ、低次元なことを言うと、
「いろいろサブクラスを作ったけど、受ける側の関数は全く変更せずに済んだ!わーい!」
てのがメリットの一例。 メソッドディスパッチの問題だろ?
というBlogをみて「ああそれだよそれ、そういうのでいいんだよ」(孤独のグルメ風表現)になった 第1目標:修正が他までどんどん波及していって修正地獄にならないようにする
なのに、変な原理原則マンに限ってそこがスッポリ抜けてたりするからな 原理原則っつーか原理主義者っつーか
そもそもOOは原理といえるほど理屈がしっかりしてないだろ
複数のオブジェクトにまたがるメソッドをどこに実装しようかっていう初歩のレベルで
すっきりしないというのに
むろんマルチメソッドという考え方もあるけど、ほとんどのOOPには実装されてないしな
だから複数の色んなことを同時に考慮して、うまい具合にしなきゃならないっつーのに
原理原則とかでは無いわ
我々は空間と時間を両方扱っているわけで、片方だけに着目すりゃよいってものでもないわ 第一、OO程度の原理原則に思考回路が縛られるって
潜在的に、そうとうオツムが弱いよな
世の中の理屈とかけ離れすぎているというか、単純化しすぎ >>792
> 複数のオブジェクトにまたがるメソッドをどこに実装しようかっていう初歩のレベルで
オブジェクト指向は、現実世界で実現しているオブジェクトに
ソフトウェアの設計を合わせようとするものだが、
現実世界のオブジェクトでは、
「複数のオブジェクトにまたがるメソッド」は
どこに実装されているんですか?
複数のオブジェクトにまたがるメソッドというものが
そもそも不自然なメソッドですよね? >>794
>現実世界のオブジェクトでは、
>「複数のオブジェクトにまたがるメソッド」は
>どこに実装されているんですか?
物理法則に実装されてる はい皆さん>>794を読んでください
もうこの時点でアホっぽいってわかるでしょ
ありえないぐらいで、釣りじゃないかと疑うぐらい
アホらしいけどまず基本的なことからいうと
コンピュータは日本語で「計算機」ともいうのでそっちの方向から攻めると
足し算は現実世界のどこに実装されているんですか?っていうぐらいアホなイチャモン
物や物体的なことにこだわって、概念的なことであるとか関係性といったものを
認めない姿勢は技術者ではない以前に、人間的ですらない >>795
物理法則っていうのは、
例えばすべての物体は引力があるとか?
あ、これ複数のオブジェクトにまたがるんじゃなくて
個々のオブジェクトに引力があるのか
例えば、熱を加えると発火するとか?
あ、これもその物体が変化するだけか
複数のオブジェクトにまたがるメソッドってなんですかね? >>797
数値を入力してボタンを押すと足し算を行うのは
計算機というオブジェクトが持ってる機能ですよね?
それとも電気信号レベルの話をすれば良いのですか?
そろばんでも足し算ができますが、
もしかしてこの2つを同一のものとみなしてるのですか?
そろばんは電気信号じゃなくて物体の位置で表現するって
だけですからね。 アホか
数学上での足し算という「概念」の話だ
1に2を足すと3になるっていう概念上の関係性の話だ
別に現実世界に実装があるわけじゃないが、1に2を足すと3になるし、有用なんだよ
ついでに言うと、1とか2とかいう数字自体からして現実世界に実装が存在しているわけではない
1とか2はあくまで数学上の概念だ
もう本当にあほだなぁと思う、あきれて言葉も出ない
こうなったらもうエンジニアとして終わりなんだと思うし
人としても鬱病になる末路なんだろうか、知ったこっちゃないが >数値を入力してボタンを押すと足し算を行うのは
>計算機というオブジェクトが持ってる機能ですよね?
>それとも電気信号レベルの話をすれば良いのですか?
この発言もかなり面白くて、この言葉通りにプログラムをすれば
すべてのメソッドはコンピュータインスタンスに紐づくことになる
computer.add(1,2); computer.func(a,b,c);ってところか?
OOだなんだいったって、実際に処理をするのは「コンピュータ」
に他ならないんだから至極当然な意見だわなwww
たしかに現実世界を模してるわ
いわゆるGODクラス、staticおじさんと同じだ
つまりもう、自分がどういう立場をとっていて何を言っているのかすら
よくわかっていない状態ということだな
病的 >>800
> 1に2を足すと3になるっていう概念上の関係性の話だ
1という値の数値オブジェクトに
2という数値オブジェクトを引数に
数値オブジェクトの加算メソッドを呼び出すと
3という数値オブジェクトになるって話? >>798
引力を物体間の相互作用じゃなくてオブジェクト単体で定義される性質と思ってんの? >>803
そりゃそうでしょw
地球の引力を計算するには、月の存在が必要だ!
などといったら笑われるよw ほらまたバカなこと言いだしたでしょ、すごいでしょ、この病気
俺がかなり煽った文体で書きこんでるのにもかかわらず
お前の援軍は誰も現れないでしょ、これが現実
頭悪すぎて他人の言っていることも自分の言っていることすら理解できないという
もうどうしようもない残念さで、誰も味方がいない
この手の人は本当にもうどうしようもなくて
かわいそうだからと周りの人が説得を試みても全くの無駄というか
普通の人が当たり前にできる思考が、どうにも理解できないらしく
必ず自分にわかる範囲で自分の領域に持ち込んで考えようとするんだが
その行為自体が間違っているってことが何故か分からないらしい
袋小路でとにかく打つ手なし まず引力に関して言えば、引力という力の存在は認められているが
なぜ引力という力が働くのかということは
本当のところは誰にもわからない
つまりは表面上そう見えるからそういう力があるのだろうという程度のものであり
根本的な原理は未解明なので、誰が引力を実行しているかとか考えるだけバカ
あと本質的に>>803が言いたいのは、オブジェクトが一つしかなければ
引力など定義しても無意味だし、引力の効能は性質となって表れないから
定義もされないっていう意味だろう
まぁ一般的な考え方だな
世の中は極めて相対的だしな
お金の価値ですらそうだしな > オブジェクトが一つしかなければ
> 引力など定義しても無意味だし、
オブジェクトが一つしかない状態に限っていえば
無意味なんだと言われましても・・・
数字だって一つしかなければ
足し算は無意味ですよ? あ、そうか
マルチメソッドはオブジェクトが一つしかなければ無意味だ!
って言いたいんだな。 わかりやすいところでWeb検索の例だと
Googleのページランクの仕組みは非常に現代的だったわな
たくさんあちこちからリンクが張られているページは有用性が高いのだろう
そして有用性の高いページからリンクが張られているページもまた有用性が
高いのだろうっていう
そんで、かつてのYAHOO方式は負けたわけだ
でも別に珍しいことではなくて、論文とかでもたくさん引用されている論文は
価値が高いってことになってるし、まぁ基本といいますか
たくさん友達のいる人は有能なんだろうってのも大体あってるし
取引先の多い企業、特に大企業との取引がある会社は信用が有るってのも
一般的な価値基準だわなぁ
資本主義に関しても、お金のような流動性のあるものに着目するっていうのが
現代的であるし、お金をどんどん回して経済を発展させようってのも
政治家の大好きな謳い文句だわな
大体世の中そういう構図になっているから、反対へ行く人や軽んじる人
もしくは君みたいに理解できない人は北朝鮮になる
ただ何事もバランスは大事なんだけど、そうはいってもどっちに軸足を置いておくか
ってのはあるわな
簡単な方の考え方は誰にでもできるし、意識する必要もないし、学ぶべき部分もないから
あまり重要視されないんだけど、本音と建て前みたいな話にもなってくるわ
ただ、とっちが建前になってどっちが本音になるかは相手とシチュエーションによるという
つまり俺もOOPを、「使う」わけだが、いつも「必要悪」という考えはある
絶えず反対のことを考えながら吟味してOOする
そのぐらいでちょうど良いバランス
ただ、本音と建前の世界なのでコンセンサスが取りにくい
hpXZLyYVみたいなのが入ってくると破たんする
いちいち面倒くさいんでLinusがC++を追い出す気持ちもわかる
OOPをおもちゃにする奴はマジで糞 あと、物理量としての引力、っつーか質量と、相互作用としての引力の働き
では差があるわな
しかも現実世界の引力のメカニズムは解明されていない
どういう理屈で力が働くのかとか、だれにも分からん
>例えばすべての物体は引力があるとか?
>あ、これ複数のオブジェクトにまたがるんじゃなくて
>個々のオブジェクトに引力があるのか
「個々のオブジェクトに引力がある」って何ですか?
すべての人には年齢がある、と同じノリですか? >>343
あぁごめんな
ただあの人のインタビューとか読めばわかるけど
逆張り逆張り言ってる
あの人自身もRubyの筋が良いとかメインストリーム的な思想であるとは
考えてないんだよ
ただ、自分の人生の中で逆張りした場合にうまくいくことが多かったので
逆張りし続けているんだとか
だからRuby3.0でも逆張りの一種として
静的型の機能は導入しない方向を検討しているんだろうな
ただそう何度も逆張りが上手くいくとは思わないし
逆張りはしょせん逆張りだろ?あだ花というかなんというか
そういうこともあって結局Rubyはプチブームで終わった現状があるわけだし
変なことして注目を集めることはあってもそれは一過性だよ、芸人じゃあるまいし
しかも逆張りしたときに自分にとって都合がよいことが多かったってだけで
使い手のことは別に考慮されてないんだよなー シングルディスパッチ擁護勢ってwikipediaの多重ディスパッチのページのJavaの例を許容してるんだろうか? モノにこれこれの機能がある、なんていうモデリングは現実世界には適用しづらいのではないか
いわんや物理法則をや 物理法則は存在させるなら基底クラスかシステムに仕込んで全てのオブジェクトが従うもんでしょう。
個別のふるまいレベルで弄るもんじゃないから、そもそも例えですら出てくるようなもんじゃない。 そうだね
相互作用は全部神クラスに書けばいいね
オブジェクト指向w >>817
割とそのアプローチで合ってる
キャットドアの出番だ オブジェクト志向が現実のものをそのままモデル化するためにあるなんて大嘘誰が言い始めたんだ × オブジェクト志向が現実のものをそのままモデル化するためにある
○ 人間が自然に認識している現実のもの(オブジェクト)を使って
モデル化するから理解しやすいものが出来上がる。 オブジェクト指向は、現実世界で実現しているオブジェクトにソフトウェアの設計を合わせようとするものなんていう大嘘誰が言い始めたんだ 「せんし」に「たたかえ」送るとプレイヤーは細かいこと指示しなくても自分で戦ってくれる。
これはあくまでモデル上でのすっきりした切り分けの話であって、こういうオブジェクト化に
「戦場で仲間に"たたかえ"ってなんだよw」とか「順番に交互に殴るのかよ」とか言ってもまったく無意味だというのに
キャットドアじじいはなんかそういうことから理解できてない知恵遅れだからね。 オブジェクト指向の話をしていると
よく勘違いしてるやつが出てくる。
オブジェクト指向で現実世界を実現しようとするやつだ。
シミュレーションでもやらない限りそんなものは意味がない。
その逆、実現したいものを現実世界をヒントに
オブジェクト指向でモデル化するんだよ。
そうすることで現実世界という共通認識を利用して
実現したいものをわかりやすく表現することができる。 あくまでモデルであり振る舞いをシミュレートしてるだけ ドア本体とそれに付属するノブの状態(「開閉」と「回す、離す」)、
ノブに付属するラッチ(固定具)の状態(ノブの回転に応じて引っ込む)
をオブジェクト指向でモデリングしてみてよ
オートクローザーやドアストッパーが設置されることも加味しつつ 「たたかえ」送ってないのに勝手に雑な戦いを始めたがる「ばか」たち 現実世界とか言い出すといくらでも後出し要件が出てくる。
「でも現実を見てみなよ」って。
モデリング終わりがなくなってしまうわけだ。
そういうバカには5000兆円の見積書でも送りつけてやればいい。 物事を分類整理するための手法なのだから管理する要件でない不用な要素は極力排除しないとな 相互作用という物理では当たり前の考え方を
理解できない文系のためのモデリング
それがオブジェクト指向 >>824
例えば>>826のようの
現実世界にある何か(ドア)をオブジェクト指向で表現してくれ
なんていう考え方がアホなんだよ。
ソフトウェアでドアを作ることがあるとしたら、
ゲームとかだろうけど、ゲームとして必要なドアを
ソフトウェアで実現するならば、オブジェクト指向が便利ですね
なぜなら、ゲーム世界のドアをオブジェクトとして実装することができるので
現実世界で我々がよく知ってるドアを参考にできるからです。
ってな具合 文系って言い方はあれだけど、物理法則を因果関係的に捉えてるのかもな。
あれがこうしたらこれがこうなる、みたいに。 理系って言い方はあれだけど、物理法則を因果何的に捉えてるの? 人間って何歳の頃から、現実世界を
オブジェクト指向として認識するのだろうか?
同じ人間であっても自分の母親と他人の母親は別だって
理解できるし、人間と動物の区別もついているだろう。
そして、犬はワンワン、猫はニャーニャーって鳴くことを
理解するだろう。
人間の認識とはかくもオブジェクト指向であるものだろうか >>832
ゲームのドアなんぞ開く閉じるの状態と、開く条件(鍵とか)ぐらいだろ。
んで、自動ドア制御とかだとセンサーから信号が来た時だけ開いて、数秒したら閉じれば良い。
人が通った時の赤外線センサーか、人が挟まった時の圧力センサーかはプログラムは知る必要無い。
これらに共通のドアクラスなんぞ作って何か共通点があるの? >>838
開く閉じるの状態があるのは開口部のほうやけんど? >>839
それは現実世界のドアの話だろう?
ゲームの世界のドアは、現実世界を参考にできるが
ゲーム特有のドアという仕様を作る。
3Dゲームであれば、ドアには開く閉じるという状態は必要ないだろう
なぜなら物体をすり抜けられないという仕様と
蝶番を支点にドアを動かせるという仕様があればよいからだ
だけど2D RPGみたいなドアであれば、ドアの状態というものがあってもよい
開いているドアであれば、その上を移動することができ、
取っじているドアであれば、その上に移動することはできない。
このようにオブジェクト指向は現実世界の物シミュレートためのものじゃなくて
作りたい仕様を、みんなが持っている現実世界の共通認識を使って
わかりやすくする表現するための技術なんだよ
それにしても現実世界のドアについての人間の認識ってのも面白いよな。
ドアからすれば、物理的にはどういう位置にあるかでしかないのに、
人間は「開いている」「閉まっている」というドアの状態として認識しているわけだ
この認識、利用しない手はない! >>841
開口部の状態だって教わったのに意地はっちゃってw
ドアオブジェクトなんてそもそも必要ないんや
こーゆーのをモデリングゆーんやわかったかボケカス >>842
開口部って何って聞かれてるんだから
質問に答えなよw アスペだと「ドアが開いている」ときいて
ドアが開いているとか意味がわからない
開口部があってそこがドアというもので塞がれているかどうかだ。
だから「開口部がドアで塞がれていない」と言うべきだ
とか思うのだろうか?
アスペには常人の共通認識は通用しない
オブジェクト指向には不向きな人間だなw >>844
なあ?お前の考えた最強の抽象化ってぜんぜん抽象化じゃなかっただろ?
恥ずかしいけどこれで一つ賢くなったんだ
次はもう少し長くドヤれるようになるじゃないかw >>845
誰が最強の抽象化とか言ったんだ?
お前はだれと戦ってるんだ?
俺の言ってることに何一つ反論して無くて
俺のほうが正しかったと主張してるだけ
妄想も大概にしろよ。 >>846
え?お前なんか意味のある事言ってたの?
じゃあもう一度言ってみ?聞いてやるからw 抽象化というのは本質的な所
ドアには開いている・閉じているという
状態があると認識することだよ。
本当は開口部だーとか細かいことに
こだわるのは抽象化とは逆の考え
はい論破♪ >>847
もう一度言えばいいの?
それは現実世界のドアの話だろう?
ゲームの世界のドアは、現実世界を参考にできるが
ゲーム特有のドアという仕様を作る。
3Dゲームであれば、ドアには開く閉じるという状態は必要ないだろう
なぜなら物体をすり抜けられないという仕様と
蝶番を支点にドアを動かせるという仕様があればよいからだ
だけど2D RPGみたいなドアであれば、ドアの状態というものがあってもよい
開いているドアであれば、その上を移動することができ、
取っじているドアであれば、その上に移動することはできない。
このようにオブジェクト指向は現実世界の物シミュレートためのものじゃなくて
作りたい仕様を、みんなが持っている現実世界の共通認識を使って
わかりやすくする表現するための技術なんだよ
それにしても現実世界のドアについての人間の認識ってのも面白いよな。
ドアからすれば、物理的にはどういう位置にあるかでしかないのに、
人間は「開いている」「閉まっている」というドアの状態として認識しているわけだ
この認識、利用しない手はない! ドアが開いている、閉じているという話をする時
開口部なんて細かい枝葉は誰も考えてないって所が重要だね。
まあ密室殺人で警察に聞かれた時に
この部屋の開口部はドアで塞がれていましたなんて
言わないのと同じこと。 ■ このスレッドは過去ログ倉庫に格納されています