パスワードを忘れた? アカウント作成
15113126 journal
日記

dotkuwaの日記: オブジェクト指向と関数型の類似点と相違点 2

日記 by dotkuwa

オブジェクト指向と関数型の両プログラミング手法は、
・参照透過性(処理を同じ引数で実行すると同じ結果になる)の無い、
 一部の処理の扱い(必要悪)
を度外視すれば、同じだと思います。
そこを度外視すれば、
・名前+引数という物を、呼んだり呼ばれたりして、因果関係の連鎖を
 構成する
だけとなり、大した相違点は無いと思います。

-----------------------------
 
問題は、上記必要悪をどう扱うかだと思います。全てが参照透過性の
有る処理だけなら、作成もテストも楽でしょうけれど、
それでは、絵を描いた段ボールを貼り付けた画面と同じ(同じ結果)
となり、人間の要望には答えられ無くなります。
参照透過性の無い処理は、まさに必要悪です。
 
オブジェクト指向では、
・参照透過性の無い処理は、オブジェクト本体でやる
・その代わり、引数は、静的な数字や文字列、またはそれらを集めた
 「データオブジェクト」とするのが不文律となる
 (オブジェクト本体で必要悪をやるので、引数でも必要悪を扱う
  必要性が全く無いので、引数に動的な値・型を置く必要が全く
  無い。)
となります。
それに対し、関数型では、
・関数本体は参照透過性の有る処理だけを行う
・その代わり、引数には、動的な参照透過性の無い値・型(モナドという?)
 を設定する
となる様です。
参照透過性の無い必要悪をどこで処理し、参照透過性の有るたちの
良い処理をどこで処理するかの個性だと思います。
ですので、どちらが優位かという議論は不適当だと思います。

-----------------------------
 
なお、モナドと言う値・型は、実装されているのを一度も見たことが無い
ですが、想像としまして、
・参照透過性の無い、必要悪な処理は、オブジェクト指向の様な姓と名
 (クラス名とメソッド名みないな)で扱うのが有効
なので
(「必要悪」を姓(クラス名みたいな)で範囲指定し、
 名(メソッド名みたいな)で特定する)、
もし、モナドの実装が有った場合、やはり姓と名で処理を指定する事に
なるのではと、思います。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 新しい技法は、航空機の被弾箇所やMMTと同様に
    ・外聞が悪く論文にならない(必要悪な)箇所
    を無視した議論で、
    オブジェクト指向プログラミングは論文発祥でない、その様な箇所も
    サポートした現実的なものなのかも知れない。
    継承やゲッタ、セッタのみの議論ならトリートとかが改良になるの
    かも知れないが、必要悪を範囲指定する為にはそれでは不十分で、
    フルのオブジェクトが必要になるのでは?

    • by dotkuwa (9387) on 2021年01月31日 8時41分 (#3969629) 日記

      「オブジェクト指向プログラミングは論文発祥でない」というのは
      言い過ぎでした。すいません。
       
      言いたかったのは、
      ・第一原理の有る分野での論文のやり方で、第一原理の無い分野の
       論文を語られると、必ずバイアスがかかる
      のでは??、
      ということです。第一原理があれば
      ・できるだけ簡単に書く、細かいところは省く
      事をしても、最終的に第一原理が有る為、第一原理を知っている
      (知らない人は無資格)人が受け取れば、全員、同じ認識に
      たどり着く性質が有り、
      そういう分野の論文の書き方はそれに合った物になるでしょう。
       
      そういう分野の論文の書き方に阿り、学を曲げる事は本当に
      「科学的」なのでしょうか?
      だから、かろうじて第一原理の近似を構成できる「関数」
      が過度に評価される事になります。
       
      この前、一緒に作業している人と、
      ・奇数日と偶数日で出社日を切り替えよう
      と打ち合わせしましたが、
      ・自分は出る日と思っていて、その人は家の日と思っていて
      こんな簡単な事でも、第一原理が無い為、通じなくなりました。
      (具体的なスケジュール表に、実際に記入した後に、気づきました。
       これがこの分野での「必要最小限な複雑さ」なのでしょう。
       もちろん、スケジュール表でも足りない分野も幾らでも有ります。)
       
      テストでも、関数のテストなら即自動化出来るでしょうし、少なくとも
      30年前には(COBOLで)実際にしていました。
      (COBOLは言語単体では手続き型ですが、JCLから見ると関数型です。)
      しかし(たとえば)画面の場合、1クリック毎にハードコピーが無ければ
      「通じない」のはファクトで有り、
      ・できるだけ簡単に書く、細かいところは省く
      を持ち込まれると、不正確になります。これは、学を曲げる行為です。
      論文の書き方にバイアスがかかっていて、それは構造的な物(オーサーの
      悪意では無い)の様にも思われます。
       
      そりゃあ、100年後とかに圧倒的な碩学が出て、網羅的な教科書を
      書いた前提なら、それが事実上の第一原理となるのかも知れませんが、
      少なくとも今は、プログラミングの世界では、第一原理が無いとして
      振る舞うのが順当で、そうしない人間は曲学阿論の徒で有ると断定され、
      糾弾されるべきです。

      親コメント
typodupeerror

192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり

読み込み中...