携帯電話における設定システムのアスペクト指向実現
2001MT024 平位 明日香
指導教員

1 はじめに2001MT106 辻 香織

野呂 昌満
FileSystem

CellularPhone

save(Data)load()

組込みソフトウェアは製品の開発サイクルが短いので，変更に柔軟に対応できる構造にする必要がある．一方で，オブジェクト指向開発では，一般に，変更における柔軟性が向上すると言われている. しかし，オブジェク
ト指向開発では，解決できないコンサーン横断問題 (横断的に関連する処理)[4] が確認されている．オブジェク
ト指向を組込みソフトウェアに適用しても，同様の問題があると予想される．コンサーン横断問題は，POP 技術により解決が試みられている．
我々は，組込みソフトウェアのひとつである携帯電話ソフトウェアをオブジェクト指向開発し，横断的処理の存在を確認した．オブジェクト指向開発では，コンサーン横断問題が残るので，変更における柔軟性が低下する．
これらの横断的処理をモジュール化するためには，一般的な POP 技術のひとつであるアスペクト指向の適用を考えた．
本研究では，アスペクト指向技術が組込みソフトウェアの柔軟性に寄与するかを考察する．組込みソフトウェアにおけるオブジェクト指向によるコンサーン横断問題を，アスペクト指向により解決することを目的とする．
携帯電話ソフトウェアは複数のハードウェアを並行に処理するので，典型的な組込みソフトウェアだと考えられる．上記の目的を達成するために，携帯電話ソフトウェ
アの設定システムを例にとり，開発をおこなう．
研究方法として，オブジェクト指向で実現した設定シス
テムの構造を観察し，横断的な処理をアスペクト指向により分離する．ソフトウェアの追加，変更を行った例を用いて，柔軟性が向上したことを示す．
平位は主に設定に関する状態遷移機械を，辻は主にデータベースシステムを担当した．

DBSystem
cpData : CPDataphoneData : PhoneData

instance : DBSystem
DBSystem()
get_CPData()
get_PhoneData()

init()
getInstance()
waitDB()
notifyDB()<<interface>>
CompositeData
data_name : String
searchData(String)

DataBaseData

com_data : Vector
fs : FileSystem
PATH : String
searchData(String)
accept(Visitor)
get_name()
getData(String)
setup(String, int)
setup(string, String)
setup(String, boolean)

CPDatasearchData(String)
accept(Visitor)
get_name()
reset()
set(Object)get()

PhoneDatainstance : PhoneDataBase

instance : MailDataBase

CPDataBase()

PhoneDataBase()

MailData()

CPComponent

Setup

CPSTM

CPStateSetupSTM

SetupState

図1

IntData

MailData

instance : CPDataBase

IntData(String)
IntData(String, int)
set(int)
get()
reset()

SetupAction

設定システムのクラス図

push 1 button/SoundMenu
push clear button/SetupMenu

soundState

push 2 button/DisplayMenu
push clear button/SetupMenu

displayState

setupState

設定メニューリスト

オブジェクト指向により実現した携帯電話の設定メニューリストについて述べる．本研究では，設定メニュー
リストを設定画面の集まりと定義する．設定メニューリ
ストは，構造が階層構造である．メニューをたどる処理

BooleanData

BooleanData(String)
BooleanData(String, boolean)set(boolean)get()
reset()

CPActionpush 3 button/SecurityMenu

2.1

StringData

StringData(String)
StringData(String, String)set(String)get()
reset()が状態の遷移と考えることができるので，状態遷移機械で表現できる．設定メニューリストは，State パターン
[2] を用いて実現した．単一の状態遷移機械で設定システムを実現した場合，構造が複雑になる．そこで，個々のサブシステム毎に状態遷移機械をもたせる構造にした．作成した設定システムの状態遷移図を図 2，3 に示す．decideState へのアクションで，データベースに値を設定する．これ以外のアクションはメニューの遷移である．

2 オブジェクト指向開発
携帯電話における設定システムをオブジェクト指向により実現し，横断的に関連した処理を確認した．設計，実現する際に，Java でオブジェクト指向実現した．実現した設定システムを図 1 に示す．

data : Object
intial_value : Object

push clear button/SetupMenu

push 4 button/MannerMenu
push clear button/SetupMenu

図2

securityState

mannerState

設定に関する状態遷移図

push 1 button/
PresetTonesMenu

callSoundpush clear button/
StateRingToneMenu
push ok button/
callRingToneState
push clear button/
callSoundDecideMenu
push 2 button/
IncomingCallMenu
PresetMelodiesMenu
callSoundpush 2 button/
push clear button/
State
RingToneLevelMenu
RingToneMenu
callRingToneLevelState
incomingCallState
push clear button/
push ok button/
IncomingCallMenu
callSound
DecideMenu
push 3 button/
push 1 button/
RingToneMenu

push 1 button/
IncomingCallMenu
push clear button/
SoundMenu

ViblationMenu

push 1 button/
RingToneMenu

callVibrationState

push clear button/
IncomingCallMenu

push 1 button/
PresetTonesMenu
push clear button/
RingToneMenu

ことを目的とした設計である．待ち受け画面を設定する
処理を図 4 に示す．
: SetupSTM

push ok button/
MailSound
DesideMenu
push 2 button/
PresetMelodiesMenu
mailSoundpush clear button/StateincomingMailState
RingToneMenu
push clear button/
mailRingToneLevelState
push clear button/
push ok button/
push okSoundMenu
IncomingMailMenu
MailRingToneLevelbutton/
DecideMenu
MailSoundpush 3 button/
DecideViblationMenu
mailVibrationState
Menu
pushokbutton/
push clear button/
MailVibrationDecideMenu
IncomingMailMenu
push clear button/
IncomingMailMenu
push 2 button/
RingToneLevelMenu

push 2 button/
IncomingMailMenu: DBSystem

getInstance();mailSoundState

setup("Stand_byDisp",

 +  );

waitDB()searchData("Stand_byDisp");set("

push 2 button/
ErrorToneMenu
push clear button/
SoundEffectsMenu

push clear button/
SoundMenu

push 3 button/
PowerOnMenu
soundEffectState

push clear button/
SoundEffectsMenu
push 4 button/
PowerOffMenu
push clear button/
SoundEffectsMenu

push 5 button/
SoundVolumeMenu
push clear button/
SoundEffectsMenu

errorToneStatepowerOnStatepowerOffState

push ok button/
ErrorTone
DecideMenu

 +  ");notifyDB()
new SetupCPData();decideState

getInstance();push ok button/
PowerOn
DecideMenu

save(setupCPData);save(FIleOutputStream);

getInstance();push ok button/
PowerOff
DecideMenu

getInstance();soundVolumeState

push ok button/
SoundVolume
DecideMenu

getData("Stand_byDisp");push 4 button/
VolumeMenu
push clear button/
SoundMenu

図3

volumeState: SetupCPData

getCPData();push clear button/ ButtonSoundState push ok button/
ButtonSound
SoundEffectsMenu
DecideMenu

push 3 button/
SoundEffectsMenu: FileSystem

new StringData();mailRingToneStatepush 1 button/
KeypadSoundMenu

soundSate: StringData: CPData

new CPData();push ok button/
VolumeDecideMenu

write(data);

音関連の設定に関する状態遷移図
図 4 待ち受け画面設定に関する処理のシーケンス図

2.2

データベースシステム

オブジェクト指向により実現したデータベースシステム
について述べる．アプリケーションからデータ構造を垣根なくアクセスできるという理由により，オブジェクト指向データベース (以下，OODB))[3] としてデータベースシステムを実現した．本研究では，設定，およびリセット，読み出しに関する処理について実現した．実現する際に，以下のパターンを用いた．

• Composite パターン
データを木構造で管理• Singleton パターン
データベースのインスタンスが複数存在すると，データの整合性がとれなくなるので，インスタンスを 1 つだけつくることを保証• Visitor パターン
木構造で実現したデータベースを操作するために使用
設定用サブシステムは階層構造をもつ．保守性の向上を目指し，この階層構造とデータベースの構造を対応一致させた．

2.3

3 アスペクト指向開発
複数のオブジェクトに横断的に関連する処理を，アスペクト指向により分離する．オブジェクト指向で実現した設定システムから横断的コンサーンを抽出する．設定シ
ステムにおける横断的コンサーンを 3.1 節に示す．

3.1

コンサーンの抽出

オブジェクト指向で実現した設定システムから 4 つの横断的コンサーンを抽出した．

• カスタマイズコンサーン• 排他制御コンサーン• インスタンス生成コンサーン• データ永続性コンサーン
カスタマイズコンサーン
データを設定する処理は，設定システムがもつ状態遷移機械と横断的に関連している (図 5 参照)．データを設定する処理では，データベースシステムにある設定項目を更新しなければいけない．設定項目を設定，およびリセットする処理が，設定システムの状態遷移機械と横断的に関連している．

設定システム設定システムは，設定メニューリストを実現した状態遷移機械とデータベースシステムによって構成される．
設定の処理は，状態遷移機械のアクションからデータベースシステムにアクセスする．データ永続性の実現は，データベースシステム内にファイルシステムを保持し，ファイルシステムが補助記憶処理を行う構造とした．
これは，アプリケーションインタフェースとデータ永続性処理を分離することで，システムの保守性向上させる

SetupAction
do_it()

Stand_byDispDecideMenu

ButtonSoundDecideMenu

do_it()

do_it()

public void do_it(){public void do_it(){cd.setup("Stand_byDisp",
iMAGE_PATH + fileNames[i]);}cd.setup("ButtonSound",true);}

図 5 設定に関する処理

排他制御コンサーン

DataBase
do_it()

排他制御に関する処理は，データベースが保持したい値を読み書きする処理と横断的に関連している (図 6 参照)．設定項目を設定，およびリセット，読み込む際の排他制御に関する処理が，データベースシステムと横断的に関連している．本来データベースでは，排他制御に関する処理は必然的に備わるが，分離することにより排他制御関連モジュールの再利用性が向上すると考えた．

PhoneDataBase

CPDataBase

setup()

setup()
public void setup(){public void setup(){FileSystem.getInstance().save();

FileSystem.getInstance().save();}}

図 8 データ永続性に関する処理
DataBase
do_it()CPDataBase

PhoneDataBase

setup()

setup()

public void setup(){public void setup(){dbs.waitDB();dbs.waitDB();d.set();

d.set();

dbs.notifyDB();

dbs.notifyDB();}}

図 6 排他制御に関する処理

3.2

アスペクト指向よる設計と実現抽出したコンサーンにより，設定処理に関するアスペク
トを規定し，ソフトウェアを設計，実現する．アスペク
ト指向により分離したデータベースアスペクト，および設定メニューリストアスペクト，データ永続性アスペク
ト，排他制御アスペクトを図 9 に示す．

     Setup

SetupSTM

SetupState

SetupActionFileSystem

インスタンス生成コンサーン
インスタンス生成に関する処理は，設定システムがもつ状態遷移機械と横断的に関連している (図 7 参照)．設定項目を設定，およびリセット，読み込む場合のインスタンス生成をする処理が，設定システムの状態遷移機械と横断的に関連している．インスタンス生成に関する処理が散在しているので，コンサーンとして抽出した．

DBSystem<<interface>>
CompositeData

SetupAction
do_it()

Data

DataBase

Stand_byDispDecideMenu

ButtonSoundDecideMenu

do_it()

do_it()CPDataBase

public void do_it(){public void do_it(){

DBSystem dbs = DBSystem.getInstance();

DBSystem dbs = DBSystem.getInstance();}}&(' )(*

図 7 インスタンス生成に関する処理

データ永続性コンサーン
データ永続性に関する処理は，データベースシステムと横断的に関連している (図 8 参照)．データ永続性に関する処理では，設定された項目が携帯電話の電源を切っても消えずに残るようファイルに保存する．設定項目の設定，およびリセット後のデータを保存する処理が，データベースシステムと横断的に関連している．設定項目を更新した後にファイルシステムに保存する処理が散在しているので，コンサーンとして抽出した．

PVLock図9PhoneDataBase

MailDataBase

IntDataStringData

BooleanData
"!$#%

アスペクト指向により設計した設定システムのクラス図

4 考察
本研究で設計した設定システムを実現し，柔軟性について考察する．本節では，オブジェクト指向，およびアスペクト指向により実現した設定システム各々を比較し，柔軟性について議論する．

4.1

データベースシステムの変更における柔軟性の考察

オブジェクト指向，およびアスペクト指向により実現した設定システムの構造を比較し，データベースシステ
ムの変更における柔軟性について考察する．設定システ
ムは，設定メニューリストの状態遷移機械とデータベースシステムにより構成される．オブジェクト指向開発では，設定，インスタンス生成に関する処理が散在しており，データベースシステムを分離することが困難である(図 10 参照)．一方，アスペクト指向開発では，散在する処理が局所化できており，変更が容易である (図 11 参照)．アスペクト指向により，横断的な処理をモジュール分割したことで，データベースシステムの変更における柔軟性が向上した．

他制御に関する処理をモジュール分割できるので，保存および呼び出すメソッドをジョインポイントと指定するだけでよい (図 12 参照)．排他制御に関する処理をモジュールとして分離したことで，ファイルシステムで排他制御を行う際に再利用することができた．
class CPDataBase{
setup(String name , int i){
IntData d = (IntData)searchData(name)class FileSystem{save(String file , byte v , int position){
RandomAccessFile rafout =new RandomAccessFile(ROOT_PATH + file,"rm");db.set(i);rafout.writeByte(v);}}}}public aspect PVLockAspect{
pointcut PVLockPoint() :call(void set(..))||call(* get(..))||call(void writeByte(..))||call(* readByte(..));
before() : PVLockPoint(){PVLock.wait(thisJoinPoint);}
after() : PVLockPoint(){PVLock.notify(thisJoinPoint);}

SetupAction
do_it()

Stand_byDispDecideMenu

ButtonSoundDecideMenu

do_it()

do_it()

do_it(){

do_it(){DBSystem dbs = DBSystem.getInstance();

DBSystem dbs = DBSystem.getInstance();

cd.setup("Stand_byDisp", iMAGE_PATH+
fileNames[i]);cd.setup("ButtonSound", true);}}

図 10 オブジェクト指向コードにおけるデー
タベースアクセスコード

class Stand_byDispState{trans(CPInputDeviceEvent e){class ButtonSoundState{trans(CPInputDeviceEvent e){

do_it(String param,String data);

do_it(String param,String data);

}

}

}

5 おわりに
本研究では，アスペクト指向により携帯電話における設定システムを設計，実現した．ソフトウェアの追加，変更における柔軟性をオブジェクト指向，およびアスペクト指向により実現した設定システムを比較し考察した．
アスペクト指向によりコンサーンを抽出し分離することで，設定システムの柔軟性が向上することを確認した．
本研究で実現した携帯電話制御ソフトウェアの構造を他の組込みソフトウェアに適用し，有用性について検証することを今後の課題とする．

}

public void CustomizeAspect {DBSystem dbs;
pointcut CustomizePoint(String param,String data):call(void Stand_byDispDecideMenu.do_it(String,String)&&args(param,data))||call(void ButtonSoundDecideMenu.do_it(String,String)&&args(param,data));

before(String param,String data):CustomizePoint(param,data){
dbs = DBSystem.getInstance();
CPData cd = (CPData)dbs.get_CPData();
cd.setup(param,data);
}
}

図 11

4.2

図 12 ファイルシステムに排他制御の処理を追加する際のアスペクト間記述

カスタマイズコンサーンに関するアスペクト間記述

排他制御に関する処理における再利用性の考察

ファイルシステムでデータを保存する際に排他制御を行う例をもとに，排他制御に関する処理の再利用性について考察する．データベース内の情報更新時には，排他制御を行う必要がある．ファイルシステムで保存および呼び出す際にも排他制御を行いたい場合，オブジェクト指向では，データベースの情報更新時と同様の処理を記述する必要がある．アスペクト指向により実現すると，排謝辞
本研究を進めるにあたり，二年間御指導いただいた野呂昌満教授，有益な助言をいただいた熊崎敦司先生，大学院の後藤修平さん，石見知也さん，小久保佳将さん，八木晴信さんに深く感謝いたします．

参考文献[1] AspectJ http://eclipse.org.aspectj/[2] Erich Gamma，Richard Helm，Ralph Johnson，John Vlissides : Design Patterns Elements ofReusable Object-Oriented Software，AddisonWesley，p. 395(1995).
[3] Robert J.Muller : Database Design for Smarties:Using Uml for Data Modeling， (1999).
[4] COMMUCATIONS of the ACM, Vol.44, No.10,p.168 (2001)