オブジェクト指向プログラミング
オブジェクト指向プログラミング(OOP)は、データやメソッドを表現するために「オブジェクト」という概念を使ったコンピュータプログラムの書き方です。通常、コンピュータプログラムは、コンピュータにある特定のことをある特定の方法で行うようにコンピュータに指示を与えるだけのものであり、手続き型プログラミングと呼ばれていました。しかし、オブジェクト指向プログラミングでは、コンピュータプログラムは、互いに話しかけるオブジェクトを利用して、そのオブジェクトの中のデータを変化させ、ユーザーが望むように動作するようにしています。また、オブジェクト指向プログラミングはそのように設計されているため、プログラムの他の部分や他の人にもコードを簡単に再利用することができ、開発者を支援します。
ほとんどのプログラミング言語は、コンピュータプログラムの書き方の異なるタイプが混在しています。例えば、Pythonでは、オブジェクト指向プログラミングと手続き型プログラミングの両方でコンピュータプログラムを書くことができます。OOPでコンピュータプログラムを書くことができるプログラミング言語はたくさんあります。C++, Java, Ruby, Perl, Emarald, Sapphire, PHP, Pythonなどです。
特徴
オブジェクト指向プログラミングの主な考え方は、すべてのものがオブジェクトであるということです。しかし、オブジェクトにはさまざまな種類があります。
- 変数は、プログラミング言語でサポートされているさまざまな型の情報(またはデータ)を保持することができます。例としては、整数データ型やリストデータ構造などがあります。変数は、手続き型プログラミング言語からすでに利用可能なアイデアです。オブジェクト指向プログラミングでは、変数は主に属性として知られています。
- 手続き(関数、メソッド、ルーチンとしても知られています)は、コンピュータに入力を取り、計算やデータの変更を行い、出力をユーザーに返すように指示する命令のリストです。プロシージャは、手続き型プログラミング言語からすでに利用可能なアイデアでもあります。オブジェクト指向プログラミングでは、プロシージャは主にメソッドとして知られています。
- クラスは、異なる変数とプロシージャの集合体です。クラスは通常、ユーザーが望む方法で動作するようにデータに変更を加えるために、互いに話をします。
オブジェクトとは、クラスのインスタンスを指す用語です。
批判
以下の例では、Human
というクラスを作成します。このクラスには、name
(人の名前) と friend
(友人の名前) という属性があります。Human
クラスの各メソッドには、name
属性と friend
属性の両方を使用する命令のリストが含まれています。
パイソン
このコードはPythonで書かれています。
ジャワ
このコードはJavaで書かれています。
人間クラス
上記のHumanクラスに話しかけるためのメソッド
オブジェクト指向プログラミングが流行っていても、それを悪いと思って批判している人はたくさんいます。
- Luca Cardelli氏は「オブジェクト指向言語の工学的特性が悪い」と題した論文を書いています。
- 私は Lisp Machine のウィンドウシステムで作業していたときに OOP を使用していましたが、それが優れたプログラミング方法であるという一般的な見解には同意できません。
- Potokらの研究は、OOPと手続き的アプローチの生産性にほとんど差がないことを教えてくれます。
- クリストファー・J・伊達氏は、OOPと他のものを比較すること、特にOOPと他のものがどのように関係しているかを比較することは、OOPの意味について人々の意見が一致していないので難しいと述べています。
- アレクサンダー・ステパノフは、OOPは数学のように限定された視点を与えることを示唆し、"人工知能とほぼ同じくらいのデマ"と呼んでいます。
- 成功したインターネットセールスマンでありプログラマーでもあるポール・グラハム氏は、OOPの目的は、平均的な組織の平均的なプログラマーが「あまりにも大きなダメージを与えないようにする」ための群れのメカニズムとして機能することだと示唆しています。これはまた、より強力でコンパクトな方法で物事を行う方法を知っている、より速くて優れたプログラマーの動きを鈍らせることにもなります...。[1]
質問と回答
Q:オブジェクト指向プログラミングとは何ですか?
A:オブジェクト指向プログラミングとは、データやメソッドを表す「オブジェクト」を使ってコンピュータプログラムを記述する方法です。
Q: オブジェクト指向プログラミングは手続き型プログラミングとどう違うのですか?
A: 手続き型プログラミングでは、コンピュータプログラムは、コンピュータに特定のことを特定の方法で行うように指示する命令のリストです。オブジェクト指向プログラミングでは、コンピュータプログラムは、互いに会話するオブジェクトを使用して、そのオブジェクト内のデータを変更し、ユーザーが望む方法で動作します。
Q:オブジェクト指向プログラミングは、開発者にとってどのようなメリットがあるのでしょうか?
A:オブジェクト指向プログラミングでは、コードをプログラムの他の部分や、他の人にも簡単に再利用することができます。
Q:プログラミング言語Pythonは何で知られていますか?
A: Pythonは、オブジェクト指向プログラミングと手続き型プログラミングの両方でコンピュータプログラムを記述することができます。
Q: オブジェクト指向プログラミングでコンピュータ・プログラムを書くことができるプログラミング言語の例を挙げてください。
A:オブジェクト指向でプログラムを書くことができるプログラミング言語には、C++、Java、Ruby、Perl、Emarald、Sapphire、PHP、Python、C#、などがあります。
Q:オブジェクト指向プログラミングにおけるオブジェクトとは何ですか?
A: オブジェクトとは、オブジェクト指向プログラミングにおいて、データとメソッドを含む実体のことです。
Q: オブジェクト指向プログラミングにおいて、オブジェクトはどのように機能するのでしょうか?
A: オブジェクトは互いに影響し合って、そのオブジェクト内のデータを変化させ、ユーザーの望むように動作します。