手続き型プログラミングとの違い

オブジェクト指向を使ったプログラミングについて理解するためには、従来から使われてきた「手続き型プログラミング」との違いを知ることが重要です。ここでは手続き型プログラミングとオブジェクト指向プログラミングの違いについて解説します。

手続き型プログラミングとは

オブジェクト指向を使ったプログラミングが行われる前は、手続き型プログラミングという方法が一般的でした。これは現在でも利用されているものです。手続き型プログラミングとは、処理の手順を順番に記述していくプログラミングの方法です。プログラムは「何をどの順番で実行するか」を中心に構成されます。

手続き型プログラミングでは例えば、次のような流れで処理を書いていきます。

1. コンピュータへの具体的な操作手順を時系列で指示していきます
2. 繰り返し行われる処理は関数などにまとめて必要に応じて呼び出します
3. 最終的な結果を表示する

このように、処理の流れ(手続き)を中心としてプログラムを作成することから、手続き型プログラミングと呼ばれます。

手続き型プログラミングの簡単な例を作成してみます。

double price = 1000;
double tax = price * 0.1;
double total = price + tax;

System.out.println(total);

このプログラムでは、行うべき処理を順番に記述し、上から順番に処理を実行しています。手続き型プログラミングの場合、上から順に実行されるため処理の流れが分かりやすいというメリットがあります。また小さいプログラムの場合、簡単に作成することもできます。

一方、手続き型プログラミングでは、同じデータをプログラム中のさまざまな処理が直接扱うことが多くなります。そのため、あとで仕様変更などによる修正が必要になった場合に、どこを修正すればよいのか分かりにくくなることがあります。

先ほどの例でも、変数 price に対して直接値を設定したり演算を行ったりしています。これくらいの短いプログラムであれば特に問題にはなりませんが、プログラムが長く複雑になるほど、修正箇所を探し出すのは大変になります。

オブジェクト指向との違い

オブジェクト指向では、処理の手順ではなく役割を持ったオブジェクトを中心にプログラムを構成します。オブジェクトには、扱うデータとそのデータを操作する処理がまとめられており、オブジェクト同士が協力しながら動作していきます。

先ほどの手続き型の例を、オブジェクト指向の考え方で書き直すと次のようになります。まずはオブジェクトの元になる商品クラスを定義します。

class Product {

    private double price;

    Product(double price) {
        this.price = price;
    }

    double getTotalPrice() {
        double tax = price * 0.1;
        return price + tax;
    }
}

続いて商品クラスのオブジェクトを作成し、オブジェクトに税込み価格の取得を依頼し、その結果を出力します。

public class Main {
    public static void main(String[] args) {

        Product product = new Product(1000);
        double total = product.getTotalPrice();

        System.out.println(total);
    }
}

オブジェクト指向では、価格のようなデータを単なる変数として扱うのではなく、商品を表すオブジェクトの中に持たせます。そしてデータに対する処理もオブジェクトのメソッドとして定義することで、データと処理を一体として管理します。あとから商品に関する修正が必要になった場合でも、商品クラスの見直しだけで済みます。

今回のような簡単な例では、手続き型プログラミングの方が簡単に記述できます。しかし、プログラムが複雑で大規模になるほど、オブジェクト指向によるプログラミングのメリットが発揮されます。そのため、Java ではオブジェクト指向の考え方が重要になります。

-- --

手続き型プログラミングとオブジェクト指向プログラミングの違いについて解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。