※この記事は「2021年5月2日」に更新しました。
前回は、プレースホルダについて、説明しました。
今回は、オブジェクト指向について。
私なりに、オブジェクト指向に関する、基本的な用語や考え方を整理していきます。
オブジェクト指向とは
オブジェクト指向とは、ソフトウェアを構成する一つの部品を様々なアプリケーションで共通的にできるようにプログラミングする技術です。
クラスという概念があり、クラスの利用者は内部構造や詳細を気にしなくても使えるのが理想です。
ちなみに C言語は、手続き指向型のプログラミング言語です。
手続き指向型の場合は、システムを細分化して、機能ごとに考えるようなイメージです。
クラスとは
プログラミングをしていると、複雑なデータ構造を自分で作りたい場合があります。
そんなときに使えるのが、クラスという考え方です。
オブジェクト指向の世界では、クラスはソフトウェアを構成する部品として表現されます(C言語の構造体を進化させたようなイメージ)。
例えば、車というクラスがあったとします。
車は、色、車名などの状態を持ちます。
更に、走る、止まるといった機能を持ちます。
この例で言うと、クラスは車の設計図のようなものです。
クラスはプロパティとメソッドから成り立ちます。
メソッド部分が機能でプロパティ部分が状態と思ってもらうと良いでしょう。
プロパティとメソッドについて
プロパティは、クラスの中の変数のようなものです。
メソッドは、クラスの中の関数のようなものです。
PHP では ->(アロー演算子)でアクセスできます。
インスタンスとは
先程説明したクラスを動作させるには、インスタンスというものを生成する必要があります。
インスタンスは、クラスから生成した実際に動作するオブジェクトのことです。
new という命令を使うことでインスタンスを生成することができます。
例えば、PDOによるデータベースへの接続のときに以下のような記述をします。
$dbh = new PDO('mysql:host=ホスト名;dbname=データベース名;charset=文字コード', ユーザー名, パスワード);
このような感じで、インスタンスを生成するわけです。
コンストラクタとは
クラスには、インスタンスを生成するときに自動的に実行される特殊なメソッドがあります。
コンストラクタと言います。
オブジェクトの初期化のようなものです。
継承とは
オブジェクト指向の凄いところなんですが、継承(インヘリタンス)という考え方があります。
例えば、車というクラスを作成したとして、空を飛ぶ機能がなかったとします。
そんなときに空を飛ぶ機能だけ差分プログラミングを行い、空を飛ぶ車を作成するといった感じです。
つまり、既存のコードはなるべく再利用し、新規に書くコードをなるべく少なくするということです。
カプセル化とは
オブジェクト指向では、基本的にクラスの外部からメンバ変数へ直接アクセスすることは推奨されていません。
必ずメソッドを経由して、アクセスしなくてはいけません。
このことをカプセル化といい、オブジェクト指向を実現するためには必要不可欠な技術です。
ポリモーフィズムとは
多様性とも呼ばれる。
同じ名前のメソッドを持っているが、動作を実現する方法が異なるようなオブジェクトを上手に共通的に扱うこと。
オーバーライドとは
継承は既存のクラスを再利用する利点がありますが、一部の機能だけ変更するということもできます。
これが、オーバーライドです。
つまり、親クラスにあるメソッドを子クラスで上書きするということです。
最後に
いかがでしょうか。
クラスから実際に動作するインスタンスを生成し、カプセル化という技術によって、使う人はクラス内部の細かいことをあまり気にしなくても良い。
そして継承で既存のクラスを使いまわせる。
プログラミングが初めてという方は、このくらいの理解でも良いかと思います。