オブジェクト指向とMVC

オブジェクト指向

オブジェクト指向プログラミングを簡単に説明することは難しいですが、あえて簡単に説明すると、プログラム自体が複数のオブジェクトで構成されており、個々のオブジェクトが互いに作用し合って全体の動作が成り立っているプログラムの作り方です。各々のオブジェクトはその動作が定義された設計図に従い動作します。オブジェクト同士の繋がりは基本的に疎の状態を保ちます。また、オブジェクトの内部構造(状態)は外部からは隠蔽されます。
オブジェクトの設計図は"クラス"と呼ばれます。例えば、「自動車クラス」というものがあった場合、それは自動車の設計図です。実態は存在せずあくまでも概念的な情報です。オブジェクトが実体化されたものは"インスタンス"と呼ばれます。例えば、自動車クラスをインスタンス化するということは設計図(自動車クラス)に基づいて実体化させることです。基本的にはクラスとインスタンスは1対多です。(1対1を保つように設計することもあります singletonデザインパターン参照)
オブジェクトの機能を"メソッド"と呼びます。当然メソッドはクラスにその定義がされ、インスタンス化された実態がその機能を利用できます。例えば、自動車クラスには「走る」というメソッドや「給油」というメソッドがあるかもしれません。
オブジェクト内部では変数を持ちます。例えば自動車クラスには「ガソリン残量」とか「燃費」「走行距離」などが変数として内部にあるでしょう。

例えば自動車クラスの設計図は以下のようになります。

class 自動車 {
    private 燃費;
    private ガソリン残量;
    private 走行距離;

    public function コンストラクタ(設定燃費) {
        燃費 = 設定燃費;
        ガソリン残量 = 0;
        走行距離 = 0;
    } 

    public function 走る(予定走行距離) {
        if((ガソリン残量-燃費*予定走行距離) > 0) {
            ガソリン残量 -= 燃費*予定走行距離;
            走行距離 += 予定走行距離;
            return 予定走行距離;
        } else {
            実際走行距離 = ガソリン残量/燃費;
            ガソリン残量 = 0;
            走行距離 += 実際走行距離;
            return 実際走行距離;
        }
    }

    public function 給油(給油量) {
        ガソリン残量 += 給油量;
    }

    public function ガソリン残量確認 {
        return ガソリン残量;
    }

    public function 総走行距離確認 {
        return 走行距離;
    }
]

このクラスを実際のプログラムで利用する場合は

$sports_car = new 自動車(10);
$eco_car = new 自動車(30);
$sports_car.給油(50);
$sports_car.走る(10);
$sports_car.走る(30);
..
..

などと利用します。これらのオブジェクト指向の例はほんの一部の機能だけを説明したにすぎません。実際には自動車クラスを基本として、ハイブリットカークラスに拡張する"継承"というクラス拡張の方法や、コンストラクタ/デストラクタといわれる初期化,インスタンス破棄時の関数などたくさんの作法があります。が、ここでは基本を覚えておけばよいでしょう。
オブジェクト指向を正しく理解する
PHP(クラスとオブジェクト)

【演習】
上の自動車の例と同じように現実社会のオブジェクトに対してクラス設計図を書いてみましょう。

MVC

MVCとはプログラムの設計方法の一つです。一般にはクライアントからの入力を受け付け、その入力内容に応じて処理を分岐し、処理結果をクライアントに応答(結果画面を描画)するようなアプリケーションを設計する場合、このMVCの設計手法を用いると、プログラムの可読性も向上し、また、再利用性、拡張性に富んだプログラムになるケースが多く、最近では広く採用されています。MVCオブジェクト指向で構成されています

MVCの基本要素

MODEL

主にデータの操作(取得,更新,削除など)を行うためリソース(DB,外部APIなど)にアクセスし処理を行う部分。

VIEW

クライアントにUIを返却する部分。画面デザインなどを担当する。

CONTROLLER

クライアントからのリクエストを受け付け、適切な処理内容を決定する部分

フレームワーク

MVCでプログラムを開発する際に、その汎用的な機能をまとめて提供し、またアプリケーションの土台となるMVC機能を提供する開発キットをフレームワークという。このフレームワークを用いて開発を行うと開発者は必要な箇所に必要な機能を追記する形で独自のアプリケーションを実現することができ、生産性が向上する。また複数人で開発する場合、設計方針の基礎が共有化されるメリットがあるのでフレームワークを採用することは有効です。Rubyで有名なRuby on Railsもこのフレームワークのことを指します。フレームワークは各言語でたくさんの種類のものが提供されていますが、それぞれ使い方もさまざまなので、好みのものを見つけて使うと良いでしょう。もちろんMVCの考え方に従って、自分なりのフレームワークを自作することも方法としては良いでしょう

デザインパターン

デザインパターンとはプログラムを開発する際の汎用的な設計技法の集合です.「GoFのデザインパターン」と呼ばれるデザインパターンが有名です。GoFで紹介されているのは23のデザインパターンですが、すべてが即応用できるものではありませんが、有効なものもたくさんあるので、これらを理解して自分のプログラムに応用してみても良いでしょう。
矢沢久雄の早わかりGoFデザインパターン(ITPro)