テキストエディタ実装技術 |
[ index | 前のドキュメント | 次のドキュメント | このドキュメントのソース ] |
■ テキストエディタ |
テキストエディタは、簡単に言うと、プレーンなテキスト情報を保持し、ユーザの指示により内容を表示、修正するプログラムである(図1参照)。 |
図1 テキストエディタ エディタ ┏━━━━━━┓ ┃┌────┐┃ 表示 ┃│テキスト│┃ ───→ ユーザ ┃│ データ │┃ ←─── ┃└────┘┃ 編集操作 ┗━━━━━━┛ |
図1のような構造はオブジェクト指向な設計と親和性が高い。テキストデータをメンバ変数に持ち、データを参照、変数するメソッドを持つオブジェクトと、ユーザの指示を解釈し、適切なメソッドを呼び出すオブジェクトを導入するとよい。前者をエディットエンジン、後者をUIオブジェクトと呼ぶ(図2参照)。 |
図2 エディタのクラス図 ┏━━━━━━━━━┓ ┏━━━━━━━━━━┓ ┃エディットエンジン┃ ┃ユーザインタフェース┃ ┠─────────┨ ┠──────────┨ 表示 ┃テキストデータ ┃←───→┃ ┃────→ ユーザ ┠─────────┨ ┠──────────┨←──── ┃ 参照メソッド ┃ ┃描画メソッド ┃編集操作 ┃ 編集メソッド ┃ ┃イベントハンドラ ┃ ┗━━━━━━━━━┛ ┗━━━━━━━━━━┛ |
ユーザの編集操作とはキーの押下やマウス、メニュー選択である。オブジェクト指向的なOSでそのような操作を行うと、イベントが発生し、プログラム内のイベントハンドラが呼ばれ、必要な処理が行われる。したがって、この部分のプログラムはOSに大きく依存することになる。一方エディットエンジンは純粋にテキストデータの操作を行うだけなので、(文字コードを何にするかという問題を除けば、)OSに依存しないので、普遍性が高いと言える。 |
図2の構造はMFCのドキュメント・ビューアーキテクチァーと本質的に同じである。MFCではデータを保持するクラス CDocument と、ユーザインタフェースのためのクラス CView があり、それぞれの派生クラスを定義・実装することがプログラミングとなる。したがって、エディットエンジンの機能を CDocument 派生クラスに実装すればいいのだが、機能を直接実装すると移植性が低下するので、CDocument 派生クラスがエディットエンジンを所有するのがよいと考える。 |
図3 MFC でのクラス図 ┏━━━━━━━━━┓ ┏━━━━━━━━━━┓ ┃ CDocument ┃ ┃ CView ┃ ┠─────────┨ ┠──────────┨ 表示 ┃ ●─┐ ┃←───→┃ ┃────→ ユーザ ┠──────┼──┨ ┠──────────┨←──── ┃ │ ┃ ┃描画メソッド ┃編集操作 ┃ │ ┃ ┃イベントハンドラ ┃ ┗━━━━━━┿━━┛ ┗━━━━━━━━━━┛ │ │ ↓ ┏━━━━━━━━━┓ ┃エディットエンジン┃ ┠─────────┨ ┃ テキストデータ ┃ ┠─────────┨ ┃ 参照メソッド ┃ ┃ 編集メソッド ┃ ┗━━━━━━━━━┛ |
[ index | 前のドキュメント | 次のドキュメント | このドキュメントのソース ] |