Python 弾丸ツアー #DP: ツリー ... step 1: アプリケーションを起動する

OOPデザインパターンリファクタリング

Python.use(better); Python 弾丸ツアー #DP: Tkinter/Python
>>> ツリー(階層構造)
step 1: アプリケーションを起動する
《Python3.1|Jython2.5|IronPython2.6》

《著》小粒ちゃん@湘南組《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/23 ● 第4版♪2010/03/08

step 1: Composite を導入する

■ アプリケーションを起動する
from tkinter import *

## ----------------------------------------
def tips():
    root = Tk()
    root.title("Step1: Composite")
    root.config(padx=12, pady=4)

    path = "Python-3.0/Mac/Tools"
    tips = TIPS(root, path)
    tips.createNodes()
    print(tips.tree)

    root.mainloop()

 ̄アプリケーションを起動すると、フォルダー path を頂点とするツリー(フォルダー/ファイルの階層構造)を表示します。

■ ウィンドウを生成する
from tkinter import *

 ̄まず、モジュール Tkinter を取り込む必要があります。

    root = Tk()
    #
    # ここに必要な処理を記述する
    #
    root.mainloop()

 ̄クラス呼び出し Tk() によって、ウィンドウ root が生成されます。メソッド mainloop によって、イベント処理が可能になります。そこで、この間に必要な処理を記述します。

■ ツリーを生成する
    tips = TIPS(root, path)

 ̄クラス呼び出し TIPS() によって生成したツリー tips は、親ウィンドウ root に配置されます。ツリー tips は、フォルダー path を頂点とするフォルダー/ファイルの階層構造を表現します。

    tips.createNodes()

 ̄メソッド createNodes によって、path を頂点とするツリーを構築します。□

■ Composite::Component
from os import listdir
from os.path import join, isdir

## ---------------------------------------- Composite::Component
class Component(object):
    def __init__(self, item):
        self.item = item

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

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

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

 ̄メソッド __init__ では、ツリーを構成する各ノードが保持する項目 self.item を初期設定します。ここでは、項目として、任意のファイルやフォルダーが含まれます。

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

 ̄これらの抽象メソッドは、共通するプロトコルを規定するもので、子孫クラスで具体的な処理を記述します。そのため、メソッド本体は空 pass になっています。

《補足》Python では、抽象メソッドを規定する冗長な構文(Java における abstract など)は不要です。また、例外 NotImplementedError を導入すると、プログラマーの喚起を促せます。□<<

TOP
》作業中です《