「UMLって何?」の編集履歴(バックアップ)一覧はこちら

UMLって何?」(2010/06/07 (月) 19:32:20) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

UMLとはフローチャートの簡単にいえばクラス版です。 クラスを作るとき、オブジェクトを作るときにどうしよっかなーってのを絵で表すものです。 ABはホビー用言語なのであまり考えることはないですが、UMLの『クラス図』は読めるようになっておくと 他の人のプログを移植するときに役立つかもしれません。 とりあえずここでは簡単なクラスを作ってそれをクラス図で表わしてみます。 今回は「指定したフォルダからファイルを探して、それぞれ指定したフォルダ以下に拡張子ごとに別のフォルダ振り分ける」処理を考えます。 ここで作業する人を考えます。 1人目は指定したフォルダからファイルを探す人。 2人目は指定したフォルダ以下にそれぞれ拡張子ごとに別のフォルダ振り分ける人。 1人目はフォルダを指定する動作と、ファイルを見つける動作が必要です。 2人目はフォルダを指定する動作と、ファイルを受け取り振り分ける動作が必要です。 2人はフォルダを指定する動作が共通ですのでこれは親クラスにします。 #asciiart(blockquote){ 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 "おわり" } こいつをクラス図にするとつぎのようになります。 #image(a1.jpg)
UMLとはフローチャートの簡単にいえばクラス版です。 クラスを作るとき、オブジェクトを作るときにどうしよっかなーってのを絵で表すものです。 ABはホビー用言語なのであまり考えることはないですが、UMLの『クラス図』は読めるようになっておくと 他の人のプログを移植するときに役立つかもしれません。 とりあえずここでは簡単なクラスを作ってそれをクラス図で表わしてみます。 今回は「指定したフォルダからファイルを探して、それぞれ指定したフォルダ以下に拡張子ごとに別のフォルダ振り分ける」処理を考えます。 ここで作業する人を考えます。 1人目は指定したフォルダからファイルを探す人。 2人目は指定したフォルダ以下にそれぞれ拡張子ごとに別のフォルダ振り分ける人。 1人目はフォルダを指定する動作と、ファイルを見つける動作が必要です。 2人目はフォルダを指定する動作と、ファイルを受け取り振り分ける動作が必要です。 2人はフォルダを指定する動作が共通ですのでこれは親クラスにします。 #asciiart(blockquote){ 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 "おわり" } こいつをクラス図にするとつぎのようになります。 #image(a1.jpg) 枠の中に上から -クラス名 -変数 -関数 を書くだけです。 矢印は継承を表します。 コンポジションのときは矢印が◆になります。

表示オプション

横に並べて表示:
変化行の前後のみ表示: