UMLとはフローチャートの簡単にいえばクラス版です。
クラスを作るとき、オブジェクトを作るときにどうしよっかなーってのを絵で表すものです。
ABはホビー用言語なのであまり考えることはないですが、UMLの『クラス図』は読めるようになっておくと
他の人のプログを移植するときに役立つかもしれません。

とりあえずここでは簡単なクラスを作ってそれをクラス図で表わしてみます。

今回は「指定したフォルダからファイルを探して、それぞれ指定したフォルダ以下に拡張子ごとに別のフォルダ振り分ける」処理を考えます。
ここで作業する人を考えます。
1人目は指定したフォルダからファイルを探す人。
2人目は指定したフォルダ以下にそれぞれ拡張子ごとに別のフォルダ振り分ける人。

1人目はフォルダを指定する動作と、ファイルを見つける動作が必要です。
2人目はフォルダを指定する動作と、ファイルを受け取り振り分ける動作が必要です。

2人はフォルダを指定する動作が共通ですのでこれは親クラスにします。


Declare Function MakeSureDirectoryPathExists Lib"imagehlp" (dir As *Byte) As Long

Class Kyotu
Protected
path[MAX_PATH] As Byte
Public
Sub SetDir(apath As *Byte)
lstrcpy(path, apath)
If path[lstrlen(path)-1] <> Asc("\") Then
lstrcat(path, "\")
End If
End Sub
End Class

Class Sagasu
Inherits Kyotu
Private
hF As HANDLE
wfd As WIN32_FIND_DATA
Public
Function GetFile(apath As *Byte) As Long
GetFile = FALSE
If path[0] = 0 Then Exit Function
Do
If hF = NULL Then
Dim findpath[MAX_PATH] As Byte
wsprintf(findpath, "%s*.*", path)
hF = FindFirstFile(findpath, wfd)
If hF = INVALID_HANDLE_VALUE Then
hF = NULL
Exit Function
End If
Else
If FindNextFile(hF, wfd) = FALSE Then
FindClose(hF)
hF = NULL
Exit Function
End If
End If
Loop While wfd.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY
lstrcpy(apath, path)
lstrcat(apath, wfd.cFileName)
GetFile = TRUE
End Function

Sub ~Sagasu()
If hF <> NULL Then FindClose(hF)
End Sub
End Class

Class Wakeru
Inherits Kyotu
Public

Function DivFile(apath As *Byte) As Long
Dim file[MAX_PATH] As Byte
Dim kaku[MAX_PATH] As Byte
Dim cpath[MAX_PATH] As Byte
DivFile = FALSE
If path[0] = 0 Then Exit Function
_splitpath(apath, 0, 0, file, kaku)
wsprintf(cpath, "%s%s\", path, kaku)
MakeSureDirectoryPathExists(cpath)
wsprintf(cpath, "%s%s\%s%s", path, kaku, file, kaku)
If CopyFile(apath, cpath, TRUE) = FALSE Then
Dim no As Long
Do
wsprintf(cpath, "%s%s\%s (%d)%s", path, kaku, file, no, kaku)
no = no+1
Loop While CopyFile(apath, cpath, TRUE) = FALSE
End If
DivFile = TRUE
End Function
End Class

'テスト
#N88BASIC
Dim s As Sagasu, w As Wakeru
Dim path[333] As Byte
s.SetDir("input")
w.SetDir("output")
While s.GetFile(path)
Print MakeStr(path);"をコピー"
w.DivFile(path)
Wend
Print "おわり"

こいつをクラス図にするとつぎのようになります。

枠の中に上から
  • クラス名
  • 変数
  • 関数
を書くだけです。
矢印は継承を表します。
コンポジションのときは矢印が◆になります。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2010年06月07日 19:32
添付ファイル