この記事ではプログラミング・パラダイム(プログラミングの方法論)の1つであるオブジェクト指向について解説します。Pythonはオブジェクト指向での開発にも非常に適したプログラミング言語の1つです。
目次
プログラミング・パラダイム
関数定義や変数のスコープについての解説で、プログラムコードが長く複雑になってくると変数名を決めるのが難しくなってくるという話をしました。
従来の命令型プログラミング(手続き型プログラミング)ではプログラムが大規模になってくるとあちこちで同じグローバル変数を使うことになり、意図せずグローバル変数を上書きしてしまった結果、予期せぬエラーに悩まされるという事態に陥りがちでした。
そこで解決策として登場したのが関数型プログラミングとオブジェクト指向プログラミングです。
関数型についてはすでに学習したとおりローカル変数によってこの問題に対処していますが、オブジェクト指向プログラミングはクラスやオブジェクトといったグループごとに固有の変数を設定することでそれを実現するとともに、コードの再利用を促進しシステムの開発や保守をより効率的にしています。
概念だけ説明していてもわかりにくいので、今回も実際に例を見ながら進めていきましょう。
オブジェクトとは
まずはオブジェクト指向という名前にも用いられているオブジェクトについて学びましょう。
オブジェクトとは簡単に言うと『データ(変数)と命令(関数)をまとめたもの』を指します。このオブジェクトにまとめられている関数のことをメソッドと呼びます。
例えばゲームのモンスターオブジェクトに名前やHP・攻撃力といった変数と、攻撃する・移動するといった関数をまとめて1つのオブジェクト(物・事)として扱う、といった具合です。
クラスとは
オブジェクト指向ではオブジェクトを作る際に、まずその設計図となるクラスを定義します。
引き続きゲームのモンスターを例に考えてみましょう。
ゲームには様々なモンスターが登場しますが、全てのモンスターに共通する属性として「名前」「ヒットポイント(HP)」「攻撃力」「防御力」などのデータ(変数)、「登場時に○○が現れたというメッセージを表示する」「攻撃時にダメージを与える」「攻撃時に○○の攻撃!というメッセージを表示する」などの処理(メソッド)を持ちます。
この共通の属性をまとめたものがオブジェクトの設計図であるクラスです。
オブジェクト指向ではこのように定義したクラスを元に個別のモンスターを複数作成します。
クラスから作成したオブジェクトのことをインスタンスと呼びますが、これはオブジェクトと同じ意味で覚えておいて大丈夫です。
オブジェクト指向の特徴
オブジェクト指向プログラミングは次のようなメリットを持ちます。
- 変数とメソッドがセットになっているため、どの変数をどのメソッドで処理するのかが明確になっておりバグが出にくい
- 設計図であるクラスとそのオブジェクトが分離されているため再利用や分類がしやすい
一方で次のような難点があります。
- プログラムを書く前の計画や設計が非常に重要となる
このように各プログラミング・パラダイムには一長一短があります。
とはいえ2022年現在、多くのライブラリやフレームワークがオブジェクト指向を用いて開発されており、それらを使いこなすためにはオブジェクト指向の理解は欠かせません。
次の記事からは実際にプログラムを書きながらオブジェクト指向への理解を深めていきましょう。