Ftxa クラス図
目的は以下の通り。
2.3. THE FTP MODEL With the above definitions in mind, the following model (shown in Figure 1) may be diagrammed for an FTP service. ------------- |/---------\| || User || -------- ||Interface|<--->| User | |\----^----/| -------- ---------- | | | |/------\| FTP Commands |/----V----\| ||Server|<---------------->| User || || PI || FTP Replies || PI || |\--^---/| |\----^----/| | | | | | | -------- |/--V---\| Data |/----V----\| -------- | File |<--->|Server|<---------------->| User |<--->| File | |System| || DTP || Connection || DTP || |System| -------- |\------/| |\---------/| -------- ---------- ------------- Server-FTP USER-FTP
それぞれの部分についてクラス化する方向でよさそう。
継承、サブクラスはあまり好きじゃないので、役割とインターフェイスを中心に考えていく。
コマンドライン入力の例とその結果
入力 (Linux bash) ftxa --protocol=ftp --upload /path/to/file (Windows) ftxa /PROTOCOL ftp /UPLOAD C:\path\to\file ↓FTP によるアップロード処理↓ 結果 (Linux 系) /path/to/file にファイルがアップロードされる。 (Windows) C:\path\to\file にファイルがアップロードされる。
CUI の仕様とファイルシステムのパスが違うことが分かる。
これを分解して、次のようにクラスを配置する。
class Ftxa(object): """プログラム上での操作インターフェイス。""" def __init__(): """今のところ何もしない。""" pass def setProtocol(type): """使用するプロトコルを指定する。 Keyword arguments: type 使用するプロトコル FtxaProtocol オブジェクト、もしくは FtxaProtocol オブジェクトを生成するための引数。 """ pass def setLocalFileSystem(type): """ローカルのファイルシステムを指定する。 Keyword arguments: type 使用するプロトコル FtxaFileSystem オブジェクト、もしくは FtxaFileSystem オブジェクトを生成するための引数。 """ pass def setRemoteFileSystem(type): """リモートのファイルシステムを指定する。 Keyword arguments: type 使用するプロトコル FtxaFileSystem オブジェクト、もしくは FtxaFileSystem オブジェクトを生成するための引数。 """ pass def setInterface(type): """CUI を設定する。 Keyword arguments: type 使用するプロトコル FtxaInterface オブジェクト、もしくは FtxaInterface オブジェクトを生成するための引数。 """ pass class FtxaProtocol(type): """プロトコルを抽象化したインターフェイス。 FtxaFTP や FtxaWebDAV などの実装がある。 FtxaProtocol("ftp") もしくは FtxaProtocol.factory("ftp") で生成する。 """ pass
時間がなくなったのでここまで。
__metaclass__ 、 __new__ のまとめが必要だな。