【初心者用】 オブジェクト指向について、概念、詳細設計など

オブジェクト指向は開発において、どこの開発現場でも使われる知識なのでまとめて解説します。

オブジェクト指向はプログラミングにおいて特に設計も大切になるので、紹介していきます。

1. オブジェクト指向設計とは?


オブジェクト指向設計は、オブジェクト単位にシステムを設計する方式です。

この方式では、システムはいくつものオブジェクトで構成され、オブジェクト同士がお互いにメッセージをやりとりしながら処理していきます。

2. オブジェクトとは?


オブジェクトは、データ(属性)とそれを操作するメソッド(手続)を一体化したものです。

オブジェクトは、よく「もの」と訳されます。

3. オブジェクト指向の原則について


オブジェクト指向には、原則と呼ばれるものがあります。

オブジェクト指向では、既存のクラスを基にして、新しいクラスを生成することができます。

基となるクラスをスーパークラス(基底クラス)、新しく生成するクラスをサブクラス(派生クラス)といいます。


下記、その原則を紹介していきます。

3-1. クラス

クラスは、データとメソッドを持ったオブジェクトのひな型を定義したもので、設計図のようなものです。

3-2. インスタンス

インスタンスは、クラスを基にして生成されたオブジェクトです。

実際に処理する場合は、クラスの定義に基づいてインスタンスを生成します。

3-3. カプセル化

カプセル化は、オブジェクト内にデータとメソッドを、オブジェクトの外部から隠ぺいすることです。

カプセル化の効果として、オブジェクトの独立性を高めることができ、オブジェクト内のデータやメソッドを変更したとしても、他のオブジェクトがその影響を受けにくくなります。


オブジェクトに対して、唯一できる手段がメッセージを送ることで、オブジェクト間はメッセージをやり取りしながら処理していきます。

オブジェクトの中身を知らなくても、メッセージを送ることで必要な操作ができます。





https://webpia.jp/encapsulation/


具体的には、アクセス修飾子を利用して、オブジェクトへのアクセスを制限します。

以下はアクセス修飾子と説明です。

・public....外部からのアクセス可能。

・protected....外部からのアクセス不可。ただしサブクラスまたは同じパッケージ内のクラスからはアクセスできる。

・private....外部からのアクセス不可。内部クラスからのみアクセスができる。

3-4. 継承

継承(インヘリタンス)は、親クラス(スーパークラス)で定義しているデータやメソッドを、子クラス(サブクラス)に引き継ぐことです。

これにより、子クラス(サブクラス)では、親クラス(スーパークラス)との差異を定義するだけで済みます。

継承は、親クラスの機能を小クラスに引き継がせるので、小クラスは親クラスの機能が使えるようになります。





https://medium-company.com/


3-5. ポリモフィズム

ポリモフィズム(多相性・多態性)は、同一のメッセージを送っても、特有の動作を行うことができ、オーバライドで実現できます。

オーバライドは、親クラス(スーパークラス)で定義されたメソッドをそのまま継承するのではなく、子クラス(サブクラス)で再定義することで動作を変更することです。


例えば、動物クラスに「cry」という関数(メソッド)があるとし、動物クラスのサブクラスには、犬、猫、豚のクラスがあり、それぞれに独自の「cry」関数(メソッド)を実装しています。

結果として、動物クラスの「cry」を実行すると、犬クラスは「わん」と鳴き、猫は「にゃー」と鳴きます。

これがポリモフィズム(多相性・多態性)です。





https://medium-company.com/

4. クラスの階層化

クラスを階層化したとき、上位クラスと下位クラスには、次のような「汎化と特化」「集約と分解」の関係があります。

4-1. 汎化(抽象化)と特化

汎化は、下位クラスの共通部分を抽出して上位クラスを定義することです。

その逆を特化といいます。

「汎化」「特化」には、「下位クラス is a 上位クラス」の関係があり、例えば、「ゲーム機はコンピューターである」「スマートフォンはコンピューターである」は、is a 関係にあります。





http://jouhougijutu.seesaa.net/article/432284269.html


4-2. 集約と分解

集約は、上位クラスが下位クラスの組み合わせで構成されていることです。

その逆を分解といいます。

「集約」「分解」には、「下位クラス is part of 上位クラス」の関係があり、例えば、「CPUはコンピューターの一部である」、「メモリはコンピューターの一部である」は part of 関係にあります。





http://jouhougijutu.seesaa.net/article/432284269.html


5. UML

UML(Unified Modeling Language)は、オブジェクト指向におけるシステム開発で利用され、分析から設計、実装、テストまでを統一した表記法でモデル化したものです。

さまざま図がありますが、試験では次のような図が出題されています。

5-1. ユースケンス図

ユースケンス図は、システムが外部に提供する機能と、その利用者や外部システムとの関係を表現した図です。

例えば、次の「注文管理」システムでは、外部に提供する機能(注文を登録する、注文を照会する)は、ユースケンスと呼ばれ、楕円でシステム境界の内部に記述します。

また、その利用者である、「顧客係」や外部システムである「顧客情報管理システム」は、アフターと呼ばれ、人型でシステム境界の外部に記述します。





https://www.ogis-ri.co.jp/otc/hiroba/UMLTutorial/analysis/do_work/dowork1_1.html


5-2. オブジェクト図

オブジェクト図は、インスタンス間の関係を表現した図です。

ここで、インスタンスは、クラスを基にして生成されたオブジェクトです。





https://thinkit.co.jp/article/40/3/3.html

5-3. クラス図

クラス図は、クラス間の関係を表現した図です。

ここで、クラスは、オブジェクトのひな型を定義したものです。

長方形型で表し、上段からクラス名、属性名、操作名を記述します。

属性名と操作名は省略可能で、単にクラス名だけを書く場合もあります。

関連を表す線の終端である、「<>」は集約関係です。

「⇨」は、汎化関係を表しています。

属性名の前にある「/」は、派生要素です。

この属性の値は他の属性から計算できます。





https://thinkit.co.jp/article/40/3/3.html


また、クラス間を線で結び、次のような多重度を表記して、クラス間の関連を表します。

多重度 意味
1 1
* 複数
0..* 0以上
2..* 2以上

5-4. アクティビティ図

アクティビティ図は、ある振る舞いから次の振る舞いへの制御の流れを表現した図です。

実行順序、条件分岐、並行処理など制御の流れを記述し、フローチャートと同じようなイメージです。

実行順序や条件分岐、並行処理など、制御の流れを記述し、フローチャートと同じようなイメージです。





https://www.itsenka.com/contents/development/uml/activity.html


5-5. コミュニケーション図

コミュニケーション図は、オブジェクト間で送受信されるメッセージを表した図です。

オブジェクト同士の関係の観点からメッセージを表現します。





https://www.itsenka.com/contents/development/uml/communication.html

5-6. シーケンス図

シーケンス図は、オブジェクト間で送受信されるメッセージを表した図です。

時系列の観点からメッセージを表現します。





https://www.itsenka.com/contents/development/uml/sequence.html


6. まとめ

オブジェクト指向における、概念、実装、設計部分を紹介しました。

開発現場において、詳細設計や実装などをして役立つ知識になるので、実務でも使えるようにしておきましょう。