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 ドキュメント > 設計ノート > 具体的な基底クラス |