2. モデル・図の作成 |
2.3 クラスの設計 |
![]() |
次は、クラスの情報をさらに詳細化し、属性と操作の設計について考えていこう。属性や操作については、C++やJavaの概念との違いはそれほどないんだよ。 |
|
![]() |
Chen君は「カプセル化」という言葉を知っているかな? |
![]() |
はい。オブジェクト指向の大きな特徴のひとつで、オブジェクトの内部情報には、そのオブジェクトのインターフェースを通してしかアクセスできないというものですよね。 |
![]() |
そうだよ。UMLの表記法では、属性や操作に対する外部からのアクセスを制御するための可視性を指定することができるんだ。可視性を適切に設定することによって、カプセル化を行うことができるんだよ。属性や操作に対する可視性には3種類あって、次に示す記号を名前の前に付けて表すんだよ。 |
|
![]() |
外部インターフェースとしての操作に対する可視性はpublic、実装上の操作に対する可視性はprivateかprotectedと考えればいいのですか? |
![]() |
そうだよ。また、内部情報となっているすべての属性に対する可視性は、通常privateかprotectedになるということも分かるね? |
![]() |
はい。 |
![]() |
では、まず属性について考えてみよう。分析段階では、属性の名前だけを示していたよね。設計段階では、抜けている属性がないかをチェックして、それぞれの属性に対して、データ型とデフォルト値(必要であれば)、そして可視性を指定しなければいけないんだよ。では、「顧客」クラスの属性についてはどうなるか分かるかな? |
図2.3.1 Chen君が作成した「顧客」クラスの属性 |
![]() |
すべての属性について、型と可視性を追加しました。ここでは、文字列操作をするためのStringクラスをライブラリとして導入し、型として定義しています。可視性については、すべてprivateにしています。 |
![]() |
これでいいだろう。次は、操作について考えてみよう。分析段階では、ユースケースで表現された振る舞いを実現するために操作を定義したよね。設計段階では、その操作に実装レベルの詳細情報を追加したり、新しい操作を追加したりして、クラスを完成させるんだよ。 |
![]() |
実装レベルの情報とはどんなものですか? |
![]() |
実装レベルの情報とは、操作の引数や型、戻り値といった操作のシグニチャのことだよ。引数については分析段階でも少し示したので、ここでは型と戻り値を中心に決定しよう。では、操作シグニチャを定義して、クラス図とシーケンス図を更新してみよう。 |
図2.3.2 Chen君が作成したシーケンス図(一部):注文商品の受け付けに関する部分を抜粋
|
図2.3.3 Chen君が作成したクラス図(一部):注文商品の受け付けに関する部分を抜粋
|
![]() |
ここでは、注文に関連する部分を抜き出しています。それぞれの操作について、型や戻り値を定義しました。「注文商品」クラスの新規作成という操作の場合、引数の商品番号はString、個数の型はint、指定配送センターの型は配送センターになると思います。そして、この操作によって「注文商品」オブジェクトが生成されるので、戻り値の型は注文商品です。シーケンス図では、引数の型だけしか表示していません。 | |||||||||
![]() |
うん、よくできたね。ここでは、分かりやすくするために操作名などを日本語で表示しているが、実際は、この段階で開発言語に合わせた名前に変更するんだよ。C++のように日本語が使えない場合は、英文字の名前に変更しなければいけないんだ。 | |||||||||
![]() |
分かりました。 | |||||||||
![]() |
また、クラスの操作には、いくつかの種類があるんだよ。今まで定義してきた操作は、インプリメンタ操作といって、そのクラスの基本的な機能を表すものなんだ。 | |||||||||
|
||||||||||
![]() |
なるほど。設計段階では、実装のための内部操作についても考えないといけないのですね。 | |||||||||
![]() |
そうだよ。図2.3.3には表示していないが、クラスごとにコンストラクタ、デストラクタをきちんと定義する必要があるよ。また、クラスの属性の可視性はすべてprivateにしていたよね。このうち、外部に公開する必要のある属性については、アクセス操作を提供するんだよ。 | |||||||||
![]() |
Jun先輩、外部からは、アクセス操作を通してしか属性にアクセスできないですよね。それなら、アクセス操作をうまく使って設計すれば、クラスの内部情報をカプセル化することができるというわけですね。 | |||||||||
![]() |
そのとおりだよ、Chen君。 | |||||||||
|
||||||||||
![]() |
次は、関係の設計に入ろう。 | |||||||||