3.5.3 隠蔽
「従業員」についての情報では,個人的な内部情報(例えば,操作「報酬」で査定処理するための情報や,属性「入社年月日」の値など)は,直接アプリケーションからはアクセスできないようにすることが好ましいと考えられます。その理由を次に示します。
-
情報秘匿のため,アプリケーションから直接参照させたくない場合
(例)
属性「基本給」の値は,「報酬」などのルーチンの内部処理で参照するが,直接外部には公開させたくない場合
-
アプリケーションから直接参照しても意味がない場合
(例)
作業実績を評価してコード化した値を属性値として保持しているときに,そのような値をアプリケーションから参照しても用途がない場合
-
内部情報がアプリケーションによって直接変更されることを防ぎたい場合
(例)
属性「入社年月日」の値がアプリケーションによって来年の日付に変更されるのを防ぎたい場合
- 〈この項の構成〉
(1) 隠蔽レベル
HiRDBでは,抽象データ型の属性及びルーチンの宣言で隠蔽レベルを指定して,それらへのアクセスを制御できます。
隠蔽レベルには次に示す三つのレベルがあります。
-
その抽象データ型の定義内だけで,属性の値へのアクセス及びルーチンを使用できます。
例えば,t_従業員型の属性「入社年月日」についてPRIVATEを指定することが考えられます。
PRIVATEを指定するときには,サブタイプの定義内やアプリケーションから,その属性へのアクセス及びルーチンを使用できないということを意識して,指定する必要があります。
-
その抽象データ型の定義内及びその抽象データ型のサブタイプの定義内だけで,属性の値へのアクセス及びルーチンを使用できます。
例えば,t_従業員型のルーチン「報酬率」についてPROTECTEDを指定することが考えられます。これによって,t_従業員型のサブタイプt_営業部員からは,属性「入社年月日」を直接参照することなく,「報酬率」の処理内容(入社年度から勤続年数を算出し,その値を基に報酬率を算出していることなど)を知らなくても,ルーチン「報酬率」を実行でき,報酬率を算出できます。
-
PRIVATE,PROTECTEDのような限定はなく,その抽象データ型やサブタイプ以外の抽象データ型の定義内やアプリケーションからも,属性の値へのアクセス及びルーチンを使用できます。
例えば,ルーチン「勤続年数」のようにアクセスに制限が不要な場合に,PUBLICを指定することが考えられます。
隠蔽レベルと抽象データ型の値の属性へのアクセス及びルーチンの使用可否を次の表に示します。
隠蔽レベル |
アクセス元 |
|||
---|---|---|---|---|
その抽象データ型の定義内 |
サブタイプの抽象データ型の定義内 |
左記以外の抽象データ型の定義内 |
アプリケーション |
|
PUBLIC |
○ |
○ |
○ |
○ |
PROTECTED |
○ |
○ |
× |
× |
PRIVATE |
○ |
× |
× |
× |
- (凡例)
-
○:抽象データ型の属性の値へのアクセス及びルーチンを使用できます。
×:抽象データ型の属性の値へのアクセス及びルーチンを使用できません。SQLエラーとなります。
ある抽象データ型Tに対する,隠蔽レベルとアクセス可否の関係を次の図に示します。
抽象データ型を定義した表の作成,設計方法については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。抽象データ型を定義した表のデータ操作方法については,マニュアル「HiRDB UAP開発ガイド」を参照してください。