部品の階層構造:tcl/tk


tcl/tk では、ドット . を頂点とする木構造を使って、部品の階層構造を表現します。これは、UNIX ファイルシステムが、ルート / を頂点とする「絶対」パスによって表現されるのと同様です。ここで .frame.no とあるのは、ルートウィンドウ . の傘下にフレーム frame があり、その傘下にボタン no があることを意味します。UNIX 流に表現すると /frame/no という感じです。
Python/Tkinter では、同様の木構造を、親子関係だけを示す「相対」パスによって表現します。ここで no=Button(frame,...) とあるのは、親フレーム frame の傘下にボタン no があることを意味します。このとき、frame がどの傘下にあるかは、他で定義されてあるものとします。つまり、一度に祖先まで遡る指定は不要です。
tcl/tk と同等のコードを Python/Tkinter で記述するときには、語順の違いに違和感を抱くかもしれません。しかし、初めて英語に触れた頃を思い出してください。主語の後に動詞が来ることに戸惑っていたのが、やがて慣れてくると、他にも目が行き届くようになります。自動車の免許を取り立ての頃は、ハンドルにしがみつく不格好な姿勢だったのが、やがて回りの風景にも目を配れるだけの余裕が出てきます。
たとえば、要求仕様の変更に際して、部品の階層構造に及ぼす影響を考えてください。ある傘下の部分木を、まるごと他の傘下に納めたいときには、「絶対」パスと「相対」パスのどちらが望ましいでしょうか。あるいは、リファクタリングを実践する際にも、特定のパスに依存しない、汎用的な機能を抽出するときには、どちらのパスの指定方法が有利でしょうか。


Previous|1/∞|Next