Publish Patron Only Posts from your WordPress Site

オブジェクト指向の入り口

オブジェクト指向の入り口

まず基本的な事を少しおうかがいします。

  • オブジェクト指向プログラミング言語においてオブジェクトとは何ですか?
  • クラスベースオブジェクト指向プログラミング言語においてクラスとは何ですか?
  • クラスベースオブジェクト指向プログラミング言語においてインスタンスとは何ですか?
  • クラスベースオブジェクト指向プログラミング言語においてクラスからインスタンスの生成はどのように行われますか?
  • クラスベース以外のオブジェクト指向プログラミング言語にはどんな種類がありますか?
  • C++のプログラミングパラダイムはオブジェクト指向ですか?
  • Javaのプログラミングパラダイムはオブジェクト指向ですか?
  • オブジェクト指向プログラミングの三原則とされる以下に列挙するものはオブジェクト指向の本質的なものですか?
    • 継承
    • 多態性
    • カプセル化
  • “オブジェクト指向”と言う言葉は何を意味していますか?

いかがでしょうか?

もし「全問正解した!」答えることができる方がいたら、その方は「大嘘つき」です。多少失礼な物言いですが、ご容赦を。上の問題の一部はオブジェクト指向プログラミング言語の実装により異なるものが入っています。つまり、元々全問正解できない問いかけでした。
意地が悪いと思われますか?ですが、上の問題はそもそもオブジェクト指向とは何だったのか?と言う重要な問いかけです。
端的に言うと皆さんはオブジェクト指向と言う言葉の意味を知っていますか?と換言できます。

オブジェクト指向はカオス化している

本来のオブジェクト指向は、本当に素晴らしい発想です。確かに幾つかの言語の影響を受けていますし、良い機能は取り入れています。結果として当時まで誰も予測すら不可能なものができたのです。今でも本来のオブジェクト指向は生きていますし、開発も続けられています。
プログラミングパラダイムとしてのオブジェクト指向の確立は紆余曲折を経ている上、詳細の解釈も様々と言うとんでもないカオスっぷりを見せています。
ちなみに、上記問題で述べたオブジェクト指向プログラミングの三原則本来のオブジェクト指向には存在しなかったものです。
にも関わらず「オブジェクト指向プログラミングの三原則に従った言語仕様を総括的または部分的に備えた言語がオブジェクト指向プログラミング言語と判断される」と言う事態になっています。

純粋オブジェクト指向言語

私の知る限り二つしか存在しません。
Rubyは純粋オブジェクト指向言語だと明確に公式サイトのドキュメントで以下のように記述されています。

全てがオブジェクト
Rubyははじめから純粋なオブジェクト指向言語として設計されています。 整数のような基本的なデータ型をはじめとして、 全てのデータをオブジェクトとして統一的に取り扱えます。
クラス、継承、メソッド
Rubyは クラス、継承、メソッドのようなオブジェクト指向言語として基本的な機能は 当然持っています。

Ruby 2.6.0 リファレンスマニュアル > はじめに

このクラス、継承、メソッドと言う時点で、既に純粋オブジェクト指向言語では無いと言っているに等しいです。Rubyは単に「プリミティブなデータ型も含めて、全てをオブジェクトとして取り扱っています。」と宣言しているだけです。
もちろんRubyユーザーや開発チーム、そしてまつもとゆきひろ氏を貶めるつもりは毛頭ありません。
ですが、まつもと氏のような偉大なエンジニアですらオブジェクト指向の本質を見失っていると言うのは危機的状況だとは思いませんか?

大変申し訳無いとは思いますが、ソフトウェア工学の観点からはRubyのプログラミングパラダイムは構造化・命令型・オブジェクト指向の混在です。
現在の本来とはかけ離れて一人歩き…と言うよりも暴走している「オブジェクト指向プログラミングの三原則に従った言語仕様を総括的または部分的に備えた言語がオブジェクト指向プログラミング言語と判断される」と言う観点から言うならば、既存のオブジェクト指向プログラミング言語を標榜している数多くの言語の中でRubyは最も純粋オブジェクト指向言語に近いと言うことはできます。

次回から…

いよいよそもそもオブジェクト指向とは何か?と言う事をプログラミングの歴史を遡って、同時にその時の社会的背景も踏まえてオブジェクト指向は必然のものであり、決してそれまでのプログラミングパラダイムとは別次元のものではない事を説明したいと思います。
ただ、申し訳ないのですが1回ではとても終わりません。オブジェクト指向と言うパラダイムが生まれた時代的背景等も考察しつつ過去から話をしていきます。

サブスクリプションのお願い

大変申し訳ありませんが、次回以降のオブジェクト指向とは何か?シリーズは私のサイトにPatronでサブスクライブしてくださった方のみが読める様にさせて頂きます。
誤解しないで頂きたくないのですが私は利益の追求はしていません。ですがこうやって記事を書く時間や、今までの30年以上の経験と技術と知識を還元するにしても、無償でお教えできる事には限りがあります。
30年以上の間に書籍や実際の開発環境の為に購入した金額は考えたくもない位ですが…

私たちのようなロートルが今でも現役で活躍できる理由こそがそこにあります。昔はプログラマー30歳定年説なんて言われていましたが、50歳を超えたバリバリのプログラマーがいます。この人は別にSEやSAになれなかった可哀想な人ではありません。設計よりもコードを書き、新しい言語やフレームワークを覚えるのが楽しいから、昇進は断固として拒否し続けただけです。
つまり先ほど申し上げたロートルが今でも現役で活躍できる理由と言うのは尽きる事のない知的好奇心と、それを満たす為の自己投資です。

自分の将来の為になりそうな知識には対価を払って学習する。その姿勢が大事です。今の世の中、インターネットで検索すればすぐに判ると考えてらっしゃる方は、是非そうなさってください。
オブジェクト指向とは何か?と言う極めてシンプルな問いに対する答えのバリエーションが多すぎて混乱しますよ。これは断言できます。それは私が経験者だからです。
そして結局地道に書籍を読んで非常にスッキリしましたし、複数の文献に当たったので間違えていないと言えます。そして検索した時間は取り返しの付かない無駄な時間だったと思い知らされました。時間はお金で買い戻すことはできません。ですが書籍はお金で買えます。今はAmazon等で簡単に買えると思いますが、実際に書店に足を運んで中を読んでみないと買う価値があるかどうかすら判らないですよね?書籍を買ったら混乱が加速した…と言う話も良く聴きます。Amazonのレビューなんかに振り回されちゃダメです。サクラかも知れないですよ?間違えた思い込みで書かれているかも知れませんよ?
自分の目で見て確かめたもの以外は信じると痛い目に遭います。

では、次回からプログラミングパラダイムの歴史を過去から見てくる旅に一緒に出かけましょう!

執筆を続ける為に Masaruをご支援ください。
Publish Patron Only Posts from your WordPress Site
%d人のブロガーが「いいね」をつけました。