スポンサーリンク

【応用情報技術者試験】オブジェクト指向と手続き型プログラミングの違いをわかりやすく解説

手続き型は処理の手順や関数を中心に、オブジェクト指向は状態と操作を持つオブジェクトを中心にプログラムを構成します。どちらが常に優れているかではなく、どう責務を整理するかで比べましょう。

口座処理を同じ題材で比較する

観点手続き型オブジェクト指向
構成の中心処理手順・関数オブジェクトの状態と操作
口座の例口座データを入金・出金関数へ渡す口座オブジェクトの入金・出金メソッドを呼ぶ
データへの入口関数やモジュールで設計する公開メソッドとアクセス制御で設計する
再利用・保守関数・モジュールの分け方で変わるクラスの責務や関係の設計で変わる

手続き型でも、構造体やモジュールを使ってデータと処理を整理できます。オブジェクト指向でも、メソッドの内部には処理手順があります。「手続き型は再利用できない」「大規模開発は不可能」といった単純な優劣ではありません。

クラスとインスタンスを区別する

概念意味例
クラス共通する属性や操作を定義する型銀行口座クラス
インスタンスクラスを基に生成した実体Aさんの口座・Bさんの口座
カプセル化データと操作をまとめ、内部へのアクセスを制御出金メソッドで金額・残高を確認
継承既存クラスを基に新しいクラスを定義動物クラスを継承した犬クラス
多態性共通の操作で対象に応じた実装を利用犬と猫に鳴く操作を呼び出す

カプセル化・継承・多態性で整理する

カプセル化では、状態を変更する入口を決めて内部の詳細を隠します。継承では、共通の特徴を上位のクラスから引き継ぎます。多態性では、共通の操作から実際の対象に応じた処理を利用します。

動物を表す共通の型から「鳴く」を呼び出すと、犬では「ワン」、猫では「ニャー」と動作します。呼び出す側は共通の操作を使い、実際の対象に応じて処理が選ばれます。継承したメソッドの実装を子クラスで再定義するのがオーバーライドです。同じ名前のメソッドを引数の型や個数などを変えて定義するオーバーロードとは区別します。対応の詳細は言語によって異なります。

言語名だけで書き方を決めない

Cは手続き型の説明でよく使われ、Javaはオブジェクト指向の説明でよく使われます。ただしC++やPythonなどは複数のプログラミングスタイルを利用できます。方式を選ぶときは、変更のしやすさ、処理の分かりやすさ、チームの設計方針などで判断します。

理解を確かめる確認問題

「オブジェクト指向なら、手続き型より必ず高速で保守しやすい」は正しいでしょうか?

解答・解説を見る

誤りです。速度は実装や実行環境、保守性は責務や依存関係の設計によって変わります。まずは構成の中心と、状態の扱い方の違いを押さえましょう。

参考:Oracle:オブジェクト指向の概念

コメント