雑記帳または /dev/null

ソフトウェア開発、哲学、プログラミング、その他雑多なものもののメモ

メモ - 「オブジェクト指向はすでに粒度が時代にあっていない 」について所感

元記事

https://nowokay.hatenablog.com/entry/2021/09/25/042831

本文について

  • オブジェクト指向」が多義的に使われているので、ここでは「オブジェクトを基本単位とするアプローチ」程度の意味で使っている模様
    • 基本的にはOMTの「データ構造と振る舞いが一体となったオブジェクトの集まりとしてソフトウェアを組織化すること」 に従う

    • ↑ともあるが、特段この定義を踏まえた議論はしていない
  • 全体の論旨としては、オブジェクトという単位はもう不要(≠必須ではない)で、関数という単位さえあれば十分、という内容
    • その根拠として「部品の再利用が喧伝されたが、結局ごく部分的なものにとどまった」
    • 「必須ではない」ではなく「不要である」という主張なのは、以下から明らかと言って良いと思う
      • 冒頭で「オブジェクトdis」と宣言(定期的に書いてるというだけで、本文とは無関係とするのはムリがある)
      • 「もうソフトウェアの記述としてはオブジェクトという単位は大きすぎて、関数という単位で管理すれば十分」
    • 部品の再利用という面では、オブジェクトという単位ではなくWeb APIという単位で、すなわち「サービス」という単位での再利用が主流になっている
      • これをさらに進めて、ラムダやファンクションといった単位での配置も使われてきている
      • そうするともうソフトウェアの記述としてはオブジェクトという単位は大きすぎて、関数という単位で管理すれば十分ということにもなります。 ※1

    • 「え、いまどきオブジェクト指向でつくらなくない?」っていつも思います。 ※2

    • もし「オブジェクト指向」を勉強したいと思ったら、その知りたいことは実際にはソフトウェア工学という分野でまとまっているので、そういったタイトルの本を読むのがいいと思います。 ※3

所感

「再利用」という観点では確かにサービス(Web API)という単位での提供が主流だけれど、サービスの中身をどう作るかはまた別の話ではないか

  • なので、※1は端的に論理の飛躍。
  • 外部I/Fの単位が「サービス」になったからといって、その内部構造も「サービス」を基本単位とする必然性も必要性も無い。
  • その方が都合良ければそうすれば良いけど、そこから主張できるのは精々が「オブジェクト以外を単位にすることがあっても良いよね」程度で、「オブジェクトという単位は不要だよね」は飛躍。
    • 「オブジェクト以外を単位にすることが有っても良いよね」なら、特に異論は無い。
  • また、Web APISOAを持ち出して語っていたのは「いかにしてソフトウェアを再利用するか」という話だったが、※1では「ソフトウェアの記述」にすり替わっている、あるいは飛躍している。
    • Web APISOAの隆盛がただちにその内部記述方法を規定するわけではないのは、↑のI/Fと内部構造の話と同じ。
    • 後述するが、 自身はソフトウェア記述においてオブジェクト指向のアプローチもオブジェクト単位の表現・記述も使っているし、そしてその恩恵も感じている
    • 大きすぎるオブジェクトや小さすぎるオブジェクトを作ってしまうことはあるが、それは単純に自分のしくじり。
      • 関数だったら大きすぎる関数や小さすぎる関数を作ることがありえなくなるわけでもなし。

※2は個人の感想としか言いようがない

  • 自分もWebサービス開発していて、そのI/Fは確かにAPI単位で提供してる。
  • しかしその内部ではオブジェクトを頻繁に使っているので、「そうなんですか、私はしょっちゅう使います」としか。

※3は検討の余地がありそうで、鵜呑みにするのは危険と思われる

オブジェクト指向が流行ったときは、分析設計で出てきた要素をコーディングでもそのまま使えるというのが大きな宣伝文句でした」

  • この話について、挙げるだけ挙げてその後特に言及してない(次の段落で、すぐに部品再利用の話へ移ってしまっている)が、この点についてはどういう評価なのだろう
  • これは現代でも重要な要素だと思うし、オブジェクトという単位を用いるからこそ発揮できる優位性だと思っている
  • 「分析設計ででてきた要素をコーディングでも使う」という話と、「作った部品を他の場所でも再利用する」という話が、同種同列だと捉えられているのだろうか。
    • だとしたら、前者は意味的・概念的な再利用であるのに対して、後者は実装的・機能的な再利用であるにも関わらず、その差異を無視している。
    • Knuthが言うところの「アート」と「サイエンス」の内、「サイエンス」にしか目を向けずに語っているような雰囲気を感じる(感想)