Document

クラスその2∽(アドバンス)∽
福岡工業大学
梶原 大慈
1
クラス(∽アドバンス)
クラスにあるパッケージに属する場合には、クラスを表示する際に、パッケ
ージ名をクラス名の前に修飾することができます。
パッケージ名
会社
従業員
クラス名
会社: :従業員
2
属性(∽アドバンス)
クラスの属性は下記の形式で多重度およびプロパティ文字列を表記
することがでる。 例として従業員のクラス属性を上げる。
ステレオタイプ
可視性 名前 : 型表現 [多重度] =
―
従業員ID
int
[1]
初期値
{プロパティ文字列}
{unique}
従業員
-勤続年数 : int[1] = 1
-従業員ID : int[1] {unique}
3
操作(∽アドバンス)
クラスの操作は下記の形式で引数の入出力種別、引数のデフォルト
値、プロパティ文字列を表記することがでる。 例として商品のクラス操
作を上げる。
ステレオタイプ 可視性 名前 (入出力種別 引数名 : 型 デフォルト値) : 戻り値型{プロパティ文字列}
≪accessor≫
+
商品名設定(
in
商品名 : String デフォルト商品
void
商品
≪accessor≫+商品名取得():String{concurrency=sequential}
≪accessor≫+商品名設定(in 商品名:String=デフォルト商品):void
4
タグ付値、メタ属性(∽アドバンス)
タグ付値をUMLモデル要素に付けることにより、UMLのモデル要素に情報を付加
することができる。タグ付値は{ }で囲まれ以下の記述で表記する。
{タグ = 値}
以下は図形クラスを用いてのタグ付値の表記の例である。
図形
{abstract,
作成者=田中太郎,
作成日=2007/5/5,
ステータス=分析}
5
派生属性(関連)(∽アドバンス)
派生属性は、他の属性などから計算できる属性のことである。その
ため派生属性は冗長な情報であるがわかりやすさ設計上の理由から
つけられることがある。以下に例を示す。
従業員
派生属性
入社年月日
/勤続年数
6
派生属性(関連)(∽アドバンス)
派生属性と同様に、他の関数からたどれますが、わかりやすさやパ
フォーマンスの向上などの理由から、派生関連を引く場合もあります。
/直接命令する(派生関連)
社長
課長
平社員
命令する
命令する
命令する
部長
命令する
係長
7
クラススコープ,インスタンススコープ(∽アドバンス)
インスタンススコープ : 属性および操作が、個々のオブジェクトにそれぞれ当て
はまる場合、その属性、操作をインスタンススコープという。
クラススコープ
: あるクラスから生成されたオブジェクトで共通の属性の値を持
っている属性や、クラスに対して呼び出す操作はクラススコー
プという。
オブジェクト
運転手 = 田中さん
クラス
運転手 = 鈴木さん
インスタンススコープ
定員 = 4
運転手 = 伊藤さん
クラススコープ
8
クラススコープ,インスタンススコープ(∽アドバンス)
クラススコープは属性、操作の下に下線を引いて表現します。とくに何も指定がな
ければ、インスタンススコープになる。以下に表記と操作の呼び出しの例を示す。
表記の例
タクシー
インスタンススコープ
定員=4
運転手名
クラススコープ
生成()
配車()
操作の呼び出しの例
クラススコープの操作はクラスに対して呼び出す
インスタンススコープの操作は
オブジェクトに対して呼び出す
田中運転手のタクシー = タクシー.生成()
田中運転手のタクシー = タクシー.生成()
鈴木運転手のタクシー = タクシー.生成()
クラス
クラススコープ
田中運転手のタクシー.配車()
オブジェクト
インスタンススコープ
9
パラメタライズドクラス(∽アドバンス)
※UML2.Xからはテンプレートクラスとなっている。
クラスからオブジェクトを生成するようにパラメタライズドクラスはクラスを生成する。
パラメタライズドクラスは未束縛の仮パラメタを持っているが、そのままでは使用できず
、仮パラメタを束縛することで初めて使用可能なクラスを生成する。
仮パラメタは以下のように記述する。
仮パラメタ名 : 型 = デフォルト値
次にパラメタライズドクラスの表記例を記す。
顧客リスト
顧客タイプ,i : int
仮パラメタ
追加(in ctype : 顧客タイプ)
パラメタライズドクラス
≪bind≫<顧客タイプ‐>法人>
法人リスト
明示的束縛
顧客リスト<顧客タイプ->法人>
暗黙的束縛
10
パラメタライズドクラスとC++の対応
C++での記述
T
List
テンプレートクラスの宣言
template<class T> class List{
//attributes and operation
・
・
・
};
テンプレートクラスのインスタンス化
typedef List <Student> StudentList;
≪bind≫<T‐>Student>
StudentList
11
制約∽アドバンス)
制約を用いてモデルに条件や制限を付けることができる。制約は{ }
の中に記述する。記述内容は、自然言語でも、何らかの形式言語でも
構わない。以下に属性に制約をつけた例を記す。
銀行口座
属性に付けた制約
-預金残高 : int{値は0以上}
12