| MAP | PageMixer ドキュメント > 設計ノート > 具体的な基底クラス |
本節では、
Token クラスが、
HTML タグの具体的な特徴に、
強く結びついたクラスとして設計された理由に関して説明します。
本ドキュメントでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
| 表記 | 完全名 |
|---|---|
| Filter | jp.ne.dti.lares.foozy.pagemixer.mixer.Filter |
| Symbol | jp.ne.dti.lares.foozy.pagemixer.Symbol |
| Token | jp.ne.dti.lares.foozy.pagemixer.Token |
オブジェクト指向設計では、 基底クラスは、 派生クラス固有なメソッド等を持たない、 抽象的且つ一般的なものとして設計されます。
例えば、
javax.swing.JComponent と
その基底クラスである java.awt.Container、
あるいは java.awt.Component のいずれも、
javax.swing.JScrollBar 固有の
getUnitIncrement(int) メソッドを持ちません。
上記のような考え方により、 基底クラスは変更に対する堅牢性や再利用性を得ることが出来ます。
当初、
PageMixer フレームワークでは、
Token クラスを一般的なクラスとして定義していました。
当時の Token は、
getName() および isNamedAs(Symbol)
しか持っていませんでした。
しかし、この事は以下の要因となります。
instanceof 起動の増加
ほとんど全ての Filter
(実際には *Watcher ですが)が、
与えられた Token が開始/終了タグであるのか否か、
あるいは指定された属性なのか否かを知る必要があるため、
instanceof 起動およびキャストは高くつきます。
そのため、性能上の面から、
HTML タグ Token 固有の性質に依存する以下のような確認メソッドを、
Token クラスにおいて定義するのは自然なことです。
isStart()
isEnd()
isEmpty()
findAttribute(Symbol name)
findAttributes(Symbol name)
getAttributes()
| MAP | PageMixer ドキュメント > 設計ノート > 具体的な基底クラス |