Python.use(better, Tkinter=”GoF”) # Composite #1

記事一覧 Python.use(better, Tkinter=”GoF")《Python3.1》
# Python で学ぶ デザインパターンの世界

Composite

《著》森こねこ・小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
α版♪1993/11/25 ● β版♪1995/11/22 ● 第1版♪2003/05/23 ● 第2版♪2006/10/28

概要

Tkinter/Python によるオブジェクト指向プログラミングへの扉を開きます。
※ Tcl/Tk で作成した例題を、Python3.1 で再構成しました。

事例:コードの解説

■ Composite::Component
## ---------------------------------------- Composite::Component
class Component(object):

抽象クラス Component では、共通するプロトコルを規定します。

    def __init__(self, item):
        self.item = item

メソッド __init__ では、ツリーを構成する各ノードが保持する項目 self.item を初期設定します。

    ## ----------------------------------------
    def add_(self, component): pass
    def remove_(self): pass

これらの抽象メソッドは、共通するプロトコルを規定するもので、子孫クラスで具体的な処理を記述します。

■ Composite::Leaf:単一オブジェクト
## ---------------------------------------- Composite::Leaf
class Leaf(Component):

具象クラス Leaf では、単一のノードを構成して、末端に位置する各ノード(葉)を実現します。

    def __repr__(self):
        return "#%r"%self.item

メソッド __repr__ は、組み込み関数 repr に呼応して、オブジェクトに固有の文字列表現を規定します。

■ Composite::Composite:複合オブジェクト
## ---------------------------------------- Composite::Composite
class Composite(Component):

具象クラス Composite では、複数のノードによって構成され、中間に位置する各ノード(枝)を実現します。

    def __init__(self, item):
        super().__init__(item)
        self.children = []

メソッド __init__ では、その傘下にある複数のノードを管理する self.children を初期設定します。

    def __repr__(self):
        return "%s(#%s: [%s])"%(
            self.__class__.__name__,
            self.item,
            ",".join(["%s"%e for e in self.children]),
            )

メソッド __repr__ は、組み込み関数 repr に呼応して、オブジェクトに固有の文字列表現を規定します。

  • インスタンスが属するクラスの名前に続いて、
  • その傘下にある各ノード self.children が保持する項目 e をカンマ「,」で区切りながら列挙します。
    ## ----------------------------------------
    def add_(self, component):
        self.children.append(component)

メソッド add_ は、指定されたノード component を、その傘下に追加します。

TOP


関連記事

Last updated♪2009/10/30