目次
すべては効率化のための「配慮」へつながる
こんにちは。技術チームの岩谷です。本連載ではオブジェクト指向プログラミング(OOP)をおさらいする連載を書かせていただいています。今回は過去の連載で説明させていただいたOOPの要素を振り返る形でOOPの特徴をまとめてみたいと思います。
プログラム処理を「責任」という単位でまとめる
これは「OOPと非OOPの違い|オブジェクト指向プログラミング(OOP)をおさらいしよう(1)」の回で申し上げさせていただきました。OOPと非OOPの大きな違いの一つに「インスタンスオブジェクトによるデータの保持」が挙げられます。このデータの保持機能が「データを管理する責任範囲」を「プログラムの構成単位」と一致させる事を可能にしました。これによってOOPに登場以前は「手続きのまとまり」にすぎなかった各プログラムに「責任のまとまり」という新たな役割を与えることができたのです。
コードを再利用する機能:「継承」
これは「継承によってコードを再利用する|オブジェクト指向プログラミング(OOP)をおさらいしよう(2)」で申し上げました。「継承」を行うという事はプログラミングコードの継承を行うのみならず、上記で申し上げた「責任」の継承を行うことにもほかなりません。この為、
- 既存クラスを継承するプログラムには既存クラスの責任範囲を理解したうえで、その責任ごと自分のプログラムで引き受ける姿勢が求められる
- 継承元のプログラムには「自分自身が後々継承元となる」事を見越した上での設計や実装が求められる
事をここでは申し上げさせてください。
振る舞いを再利用する機能:インターフェース
これは
- インターフェースとは?~継承とは役割が違う~|オブジェクト指向プログラミング(OOP)をおさらいしよう(3)
- ポリモルフィズム(多態性)とは?~クラスは違えど同じ目的には同じメソッド名を~|オブジェクト指向プログラミング(OOP)をおさらいしよう(6)
で申し上げました。「このクラスは、○×△メソッド(≒関数)を持ちます!」という「約束」をコードの実装から切り離して再定義した物がインターフェースです。OOPがインターフェースという機能を持っていることによってプログラム間における「振る舞い」が再利用しやすくなります。これがシステムにおける設計思想の一貫性や未来に追加開発される機能の取り込み順応性の向上に貢献していることをお伝えさせていただきました。
安全なシステムを作る為の配慮:カプセル化
これは「カプセル化とは?~安全なシステムを作る為の配慮~|オブジェクト指向プログラミング(OOP)をおさらいしよう(4)」の回で申し上げました。オブジェクトの中に納められたデータや処理を、外部に対して「見せる/隠す」がもたらす「自分自身の機能を安全に利用してもらう」という「配慮」がシステム全体への貢献として求められる事をご理解いただければと思います。
OOPの思想が色濃く反映された共通プログラム:フレームワーク
またとある回では、上記のようなOOPの機能を用いた共通プログラムがあることをご紹介させていただきました。それが「フレームワークとは?~自作のプログラムを「呼び出してくれる」共通プログラム~」でした。フレームワークの存在によってシステム全体の開発効率・運用効率が飛躍的に向上している事をお伝えさせていただきました。また上記の説明の他に、フレームワークの多くが内部で利用している技法として「リフレクション」が挙げられます。これに関しては、
- リフレクションとは?~文字列で指定されたクラスのメソッドを実行~|オブジェクト指向プログラミング(OOP)をおさらいしよう(7)
- リフレクション解説第二回~プログラムの内部構造をデータとして取得~|オブジェクト指向プログラミング(OOP)をおさらいしよう(8)
で説明をさせていただきました。
自分が作ったプログラムが「より便利に使ってもらえる」姿を想像しながら開発をしたい
OOPの特徴はこれまで説明させていただいたようにさまざまなものがあります。しかしそこに託されているメッセージには一貫したものがあります。それを私は、
自分が作ったプログラムを他の人により便利に使ってほしい
という「願い」だと考えています。そのための「配慮」をプログラム的に表現する手段としてカプセル化や継承・インターフェースという機能が備わっているのだと考えています。我々が日々作っているプログラムも時と場所はそれぞれ違えど誰かの役に立つ為に存在しています。それが我々の利用するプログラミング言語であるOOPの思想にこんなにも溢れているのだとすれば「ああ、プログラムという行為には人の善意や愛情がこめられているのだなぁ」とうれしくなってしまうのは私だけでしょうか。