RON_wanwan
2021年06月10日更新 1074 Views

オブジェクト指向設計の概要知識を整理してみた

オブジェクト指向とは

1970年代より提唱されている、ものの考え方、「概念」である。コーディング数が増え、プログラミングが複雑化したことを背景に、解決策として打ち出された。「プログラミングをモノ(オブジェクト)として捉えよう」という考え方である。現在でも大規模開発時に適した考え方とされている。

では、このプログラミングの中のモノとは何か。
家での大掃除を例にする。家の中には、「扉」「廊下」「階段」「リビング」など色々なモノがある。これらを「扉」「廊下」「階段」の掃除はパパで、「リビング」はママね、、、と役割分担することも多いだろう。この「モノ」で考え、プログラミングにも名前をつけていくのがオブジェクト指向の考え方である。

これによりもたらされる代表的なメリットは下記である。
<オブジェクト指向のメリット>
・全体像を把握しやすい
・役割分担がしやすい
・修正がしやすい
・再利用がしやすく、開発の効率化に繋がる

オブジェクト指向の決まりごと

オブジェクト

オブジェクトとは、処理対象のデータとデータを操作する手続きを一体化(カプセル化)したものである。ここでのデータを「属性」、手続きを「メソッド」と呼ぶ。

例えば、銀行口座というオブジェクトは下記のようなイメージだ。
スクリーンショット 2021-05-27 9.02.21.png
支店名、口座番号、名義が属性であり、入金、出金、振込がメソッドである。

カプセル化(情報隠蔽)

上記の図のように、属性とメソッドをひとまとめにオブジェクト内にいれこむことを、「カプセル化」と言う。カプセルという言葉を聞くと、包みこむイメージを思い浮かべるがその通りであり、カプセル化によりオブジェクト内のデータは外部から直接アクセスできなくなり、決まった外部インターフェースでのみ可能である。カプセル化により、1つ1つのオブジェクトの独立性は高まり、部品化が進む。また、変更時の影響範囲も限られ保守が容易になる。

クラスとインスタンス

クラスとは、オブジェクトを生成する時の雛形であり、共通する性質をまとめたものである。クラスから生成されたオブジェクトの実体をインスタンスと呼ぶ。クラスはジェネラル、インスタンスは具体的な値を持つものとなる。

スクリーンショット 2021-05-27 23.00.19.png

メッセージパッシング

メッセージとは、オブジェクトが別のオブジェクトに対して処理を要求する際に使う、単位である。オブジェクト指向では個々のオブジェクトはカプセル化されているので、メッセージが唯一の連絡手段である。オブジェクト同士は互いにメッセージをやりとりしながら機能を補完し合い、処理を進めるが、これをメッセージパッシングと呼ぶ。

オブジェクト間の関係性

インヘリタンス(継承)

上位のクラス(スーパークラス)で定義された機能を、下位のクラス(サブクラス)が共通機能として引き継ぐことを指す。これにより、サブクラスではスーパークラスが持たない機能のみを定義すれば良いので、開発効率化につながり、後続の変更容易性も高まる。

下記は一例。まず乗り物の属性(データ)とメソッド(処理)を定義し、それを引継ぎ車と飛行機のサブクラスを作成する。
スクリーンショット 2021-05-27 23.00.38.png

※上記スーパークラスのメソッド「運ぶ」は、サブクラス上にて各々「道路を走る」「空を飛ぶ」に書き換えられている。このように同一のメッセージでクラス毎に異なる処理が行われることを、ポリモーフィズム(多様性)と呼ぶ。

is-a 関係(凡化-特化)

サブクラスがスーパークラスの一種であるということを表す。サブクラスからスーパークラスを作成することを「凡化」、スーパークラスからサブクラスを作成することを「特化」という。

スクリーンショット 2021-06-10 21.54.21.png

part-of関係(分解-集約)

あるクラスは他のクラスの一部であるということを表す。全体を表す部分を表すクラスへ展開することを分解、部分を表すクラスを1つのクラスにまとめることを集約と呼ぶ。

スクリーンショット 2021-06-10 21.56.17.png

スクリーンショット 2021-06-10 22.02.28.png

関連と依存関係

あるクラスと別のクラスに何らかの繋がりがある場合を関連。あるクラスから一時的に別のクラスを利用する関係を依存関係、と呼ぶ。また、矢印は矢印の方向にメッセージを送ることを表し、これを誘導可能性と呼ぶ。

スクリーンショット 2021-06-10 22.03.26.png

TBD...

関連記事

VPN、アプリケーションGW、RASなどネットワークセキュリティを図解。WAF、無線LANの暗号化なども含め、社内セキュリティの全体像を把握することを目指します。
2021年03月27日
プロキシサーバとリバースプロキシサーバの流れを図解。各々の機能・役割を含め把握することを目指します。
2021年04月03日
要求定義から始まり、設計、テストまでの大まかな流れを図解。外部設計と内部設計の違いを含め、各工程の作業内容を理解することを目指します。
2021年04月11日
代表的な図式手法となるUML、DFD、E-R図、決定表、状態遷移図を図解。各々の記載方法を含め理解することを目指します。
2021年07月11日
ホームへ戻る