4.1 実装環境と言語
システムの実装に使用した言語はJavaで, JavaT M2 SDK, Standard Edition バージョン
1.4.1 01を使用した. システム全体ではおよそ12000行あるが, 本論文で提案する日本語入
力Popieに必要なプログラムはおよそ5000行である.
4.2 クラス階層
システム全体のクラス図を4.1に示す. 本システムは大きく分けてオブジェクトのクラス 群,フローメニューのクラス群,アンドゥ・リドゥのクラス群,日本語処理のクラス群からな る. 本論文で紹介したPopieは主にフローメニューと日本語処理のクラス群からなり,文字 列の表示はオブジェクトのクラス群が担当している.
4.2.1 オブジェクトのクラス群
このクラス群はオブジェクトの表示や追加,削除, ファイルへのセーブやファイルからの ロードを担当するクラス群である.
“FlowMain”クラスはトップレベルのウィンドウで, “FlowPanel”クラスを持つ.
“Flow-Main”クラスは主に初期化やコマンドラインからの引数を解釈するクラスである.
“FlowPanel”クラスは“Page”クラスと“BackGround”クラスのリストを保持し,ページ の追加や削除などの操作を管理している.
“Page”クラスはオブジェクトのリストを保持し,オブジェクトの追加, 削除,描画等を管
理するクラスである. それぞれの“Page”クラスは“UndoRedo”クラスを保持し, このこ とでページ単位のアンドゥ・リドゥを可能にする. また“Page”クラスを継承した
“Back-Ground”クラスを1つ参照し,複数のページで同一のバックグラウンドを表示することがで
きる. “BackGround”クラスは“Page”クラスと同様にオブジェクトを保持し“Page”クラ スと同様に編集可能である.
表示されるオブジェクトは, 全て抽象クラス“Obj”を継承し, 回転やズーム,色の変更と いった操作を行えるインタフェースを持つ. “Obj”クラスを継承したクラスには“Circle”や
“Rectangle”, “Str”等がある. 本論文で紹介したシステムでは“Str”クラスを使用して文字 列の表示を行っている. また“Obj”クラスはそれぞれ“toString()”関数と“parse()”関数を 持っており,ファイルにセーブする際には“toString()”関数を用いて属性値等を文字列とし て出力し,逆にファイルからロードする際には“parse()”関数により文字列からオブジェク トを再構成することができる. 上記2つの関数のカスタマイズにより, CSVなどの一般的な
ファイル形式に保存することも可能である.
4.2.2 フローメニューのクラス群
“FlowMenu”クラスはフローメニューを実現するためのクラスで,状態の管理とオーナー
クラスである“FlowPanel”クラスとのやりとりのみを行う. フローメニューの描画やアク ションの操作等の実質的な処理は全て抽象クラス“State”の実装が行うようになっている.
抽象クラス“State”の実装にはいくつかのアダプタクラスがある. それぞれのアダプタク ラスはフローメニューのいくつかの状態において共通化できる描画や,ペンがメニュー上のど の領域に入っているかを特定するメソッドを持っている. フローメニューを表示したときの状 態である“DefaultState”クラスや, 編集のためのメニューを持った状態である“EditState”
クラスは“StateAdapter”クラスを継承している. 回転のための状態である“RotateState”
クラスやズームのための状態“ZoomState”クラスはジョグダイアル状のメニューであり,
“JogAdapter”クラスを継承する. この他に色を選択するための“ColorJogAdapter”クラス があり,色を決定するための状態がこれを継承する. また, Popieでの操作を処理する状態は
“PopieAdapter”クラスを継承する. Popieの初期状態である“PopieState”クラス, オクタ ントの8状態をまとめた“PopieRingState”クラス,母音や濁音,撥音、拗音などの選択を行 う状態“PopieOut”クラスである.
4.2.3 日本語処理のクラス群
Popieのそれぞれの状態は“StringStateManager”クラスに行った操作を“Keybord”クラ スのキーとして送信する. キーには子音の‘A’, ‘K’, ‘S’や,母音の‘a’, ‘i’, その他アンドゥ・
リドゥのためのキーや候補選択のキー等がある. 操作をキーとして扱うことで,操作するイ ンタフェースが変わったとしても実装の変更が容易に行える.
“StringStateManager”クラスは, 次々に来るキーの列を処理して, 文字列の状態である
“StringState”クラスの状態を変化させたり, “Cand”クラスにより候補を生成したりする.
“Cand”クラスは辞書クラス“Dictionary”の単語から候補を抽出し,候補やその読みを持っ
た“CandKey”クラスのリストを生成する. “Dictionary”クラスは単語や読み,および直前 に来る単語などの情報を持った“Word”クラスのハッシュを持つ. “Word”クラスのインス タンスはそれぞれの読みの先頭部分でハッシングしており, “Cand”クラスは欲しい単語の 読みを渡すことで, “Word”クラスのインスタンスのリストを取得できる.
“Str”クラスは“StringState”クラスを持っており“StringStateManager”によって変更さ れた文字列情報を画面に表示している. 文字列情報には未確定候補の文字やキャレットの位 置などがある.
4.2.4 アンドゥ・リドゥのクラス群
“UndoRedo”はアンドゥとリドゥを実現するためのクラスである. ユーザが行った操作は
全て“UndoRedo”クラスに抽象クラス“Command”の実装クラスとして登録される. “Com-mand”の実装クラスには“Rotate”や“Move”, “Typing”などがあり,これらは操作対象で
あるオブジェクトへの参照と操作を実行する直前と直後のオブジェクトの属性などを保持 する.
“UndoRedo”クラスに対して“undo()”もしくは“redo()”関数が呼ばれると, “UndoRedo”
クラスは現在の位置にあるコマンドに対して“undo()”もしくは“redo()”を実行する. この
とき“undo()”や“redo()”を実行したというコマンドも記録され,全ての操作履歴が保存さ
れるようになっているが, 一度アンドゥで操作を戻ってから別の操作をしたときには, 過去 に行った操作は再現されないような実装にした.
それぞれの“Str”クラスも“Page”クラスと同様に“UndoRedo”クラスを持ち,オブジェ クトの操作とは別に文字列の編集のアンドゥ,リドゥが行えるようなっている.
図4.1: システムのクラス図