本報告使用的 UML 表示法包括使用案例圖(use case diagrams)、類別圖 (class diagrams)、循序圖(sequence diagrams),使用各圖形的目的與描述方 式說明於下:
(1) 使用案例圖
在權限管理模組描述中,透過使用案例圖描述權限管理模組的功能和 所參與的使用者,以說明使用者與權限管理模組間的關係。使用案例圖是 說明行為者(actor)與使用案例間的關係。行為者是使用者在系統中所扮演 的角色,可以是一個人,也可以是一個需要這個系統提供資訊的一個外部 系統;使用案例表示一個系統所提供之功能或行為,它說明了此系統的外 部需求,以及此系統所提供的功能。因此,在畫出使用案例圖前,需要確 定系統的行為者及使用案例所要表現的功能。
本報告根據數位典藏系統中權限管理模組各功能的使用方式,將權限 管理模組分為四個使用案例:使用者帳號管理、使用者群組管理、功能模 組管理、身分與權限檢查。除了身分與權限檢查外,其它三個子模組功能 彼此獨立,並且都使用身分與權限檢查,以檢查使用者是否有權限使用子 模組內的功能。在行為者的部份,會使用到權限管理模組的行為者可歸類 為:系統管理者、一般使用者(如:一般大眾、典藏資料管理者等)、其它 模組(如:後設資料管理模組、代碼管理模組等)。系統管理者負責維護使 用者的資料與權限,會使用到權限管理模組中的所有子模組;一般使用者 與其它模組僅使用身分與權限檢查進行數位典藏系統的登入與權限的檢 查。依照權限管理模組的行為者與使用案例的關係可以畫出使用案例圖,
如圖 1 所示。
系統管理者
功能模組管理 使用者群組管理 使用者帳號管理
身分與權限檢查
一般使用者
數位典藏權限管理模組
<<uses>> <<uses>> <<uses>>
其它模組
圖 1 權限管理模組使用案例圖 (2) 類別圖
類別圖用來描述權限管理模組的靜態結構,以及在類別之間的靜態關 係,主要目的在表示權限管理模組結構如何建立,而不是它的行為過程。
由於一般的 UML 圖形表示法沒有完全支援 Web application 的表示,因此 參考 Web Application Extension [2]來畫出權限管理模組的類別圖。以下 以權限管理模組中功能模組管理為例,說明畫出類別圖的過程。
權限管理模組是以網站為基礎的方式建構,所有的功能均由一到多個 JavaServer Pages (JSP)所組成。JSP 是一種網頁語言,與一般的 HTML 網 頁語言相比,JSP 還包含了可以執行的 Java 程式,可以動態的產生網頁,
較 HTML 語言更有彈性。用 JSP 寫的程式也常簡稱為 JSP,權限管理模組類 別圖即是以 JSP 程式為主體來描述其間的關係。
使用類別圖來描述權限管理模組各子模組時,著重在三個方面:(a)類 別的內容,(b)JSP 程式與所使用的元件之間的關係,(c)子模組中各 JSP 程式之間的關係。依序說明如下。
(a) 類別的內容。一個類別的內容包含類別名稱(name)、屬性(attribute)、
操作方法(method)。屬性是一個類別所定義的變數(variable)與物件 (object),操作方法是一個類別可執行的功能。將組成權限管理模組功 能的每一個 JSP 程式視為一個類別,以程式名稱當作類別名稱,程式內 所宣告的變數與使用的 Java 物件當作類別的屬性,Java 物件所執行的
函式(function)當作類別的操作方法,再根據 UML 所制定的類別圖表示 法將各 JSP 程式的內容畫出來。以功能模組管理為例,構成此子模組的 其中一個 JSP 程式:Fun_ListForm.jsp(功能資料查詢)的類別內容如圖 2 所示。圖中三格由上而下分別為類別名稱、屬性、操作方法。屬性或 操作方法前若有'**'註記者,表示在相同子模組的其它 JSP 程式中也 有,加入此註記的目的,是為了標示多個 JSP 程式中的共同部分。此外,
類別名稱、屬性與操作方法後的括弧內容是用來說明其用途。
PageResultSet.getRowCount(取得總筆數)() : int PageResultSet.getPageCount(取得總頁數)() : int
PageResultSet.getShowPage(取得目前所在頁數)() : int PageResultSet.next(將指標位置向下移)() : bool
PageResultSet.getString(取得row中指定column的資料)() : string
**StrUtil.getStringEnc(轉換字串編碼格式)()
**StrUtil.HiddenNull(若為 null 字串則不顯示出來)()
PageStatement.executeQuery(執行 SQL command查詢 敘述)()
**request.getParameter(取得指定欄位的參數)() st : Statement
rs : ResultSet rsp : PageResultSet str : StrUtil
stmtp : PageStatement
strSQL(用來執行SQL指令的字串) : string RecordCount(存放資料查詢筆數) : int ShowPage(顯示的頁數) : int
PageSize(每頁顯示的筆數) : int
PageGroupSize(每頁最多可顯示的頁數(區段大小)) : int ShowPageGroup(目前所在頁數的區段) : int
PageGroupFirst(目前所在頁數區段的第一頁) : int PageGroupLast(目前所在頁數區段的最後一頁) : int RowCount(取得查詢筆數) : int
PageCount(計算總頁數) : int
Function_Name(欲處理的功能名稱) : string Fun_ListForm.jsp(功能資料查詢)
圖 2 Fun_ListForm.jsp 中屬性及操作方法的內容
在權限管理模組中,有一些 JSP 程式,如:User_AddForm.jsp(使 用 者 資 料 新 增 ) 、 Group_AddForm.jsp( 使 用 者 群 組 資 料 新 增 ) 、 Fun_AddForm.jsp(功能資料新增)是由 HTML 語法所寫成,並沒有宣告 JSP 的變數與使用 Java 物件,因此在畫這類的 JSP 程式時,會用 HTML 的表單欄當作它的屬性,並在說明其用途的括弧中加上'HTML'做為說 明。以 Fun_AddForm.jsp 為例,其內容如圖 3 所示。
:
**Fun_Name(HTML 功能名稱)
:
**Fun_Stmt(HTML 功能描述) Fun_AddForm.jsp(新增功能資料) 援 Web application 表示法,因此需要自行定義 stereotype 來說明 JSP 程式與所使用的元件之間的關係[2],stereotype 是擴展 UML 的一種語 彙。因為[2]有 include 的定義但沒有 import 的定義,所以除了參考[2]
對於 include 的定義,還需自行定義 import。本報告所使用到的 stereotype 有<<import>>與<<include>>,其意義如表 1 所示。
表 1 import、include 關係在權限管理模組中的意義與語法
Stereotype 意義 語法
<<import>> 匯入指定的 package(及其 class),
以使用其中的 class。
<%@ page import="…"%>
<<include>> include 分為靜態與動態兩種。靜態 include 是將檔案內容納入為程式 的一部份。權限管理模組中,動態 include 會傳入參數以執行。
靜態 include 使用
<%@ include file="…" %>
動態 include 使用
<jsp:include page="…" … />
圖 4 顯示一個 JSP 程式 include 一個檔案與 import 一個 class 的 畫法。以類別圖說明 JSP 程式 import 哪些 class 與 include 哪些檔案 時,圖上的 class 還會標明是屬於哪一個 package。為了舉例說明,我 們用圖 5 表示 Fun_ListForm.jsp 與所使用元件關係的部份圖形。
File Name JSP
Class Name JSP
<<include>>
<<import>>
圖 4 include 與 import 的圖示法
CheckAuth.jsp edu.sinica.i
is.cscl.util.
*
PageStatement PageResultSet
<<include>>
<<import>> <<import>>
Fun_ListForm.jsp(功能資料查詢)
圖 5 Fun_ListForm.jsp 與所使用元件關係的部份圖形
(c) 子模組中各 JSP 程式之間的關係。在權限管理模組中,模組功能是由一 到多個 JSP 程式組成,彼此間的關係(像是 link、redirect、submit) 無法以一般的 UML 圖形來表達,因此自行定義 stereotype:<<link>>、
<<redirect>> 、 <<submit>> 來 說 明 類 別 間 的 關 聯 。 <<link>> 、
<<redirect>>、<<submit>>其意義如表 2 所示。
表 2 link、redirect、submit 在權限管理模組中的意義 Stereotype 意義
<<link>> 一個 JSP 程式利用 HTML 的 anchor 元素或 JavaScript 的 Location 物件指定欲瀏覽的 JSP 程式的方式。
<<redirect>> 使用 response 物件的 sendRedirect 函式改變所瀏覽的網頁。
<<submit>> 將表單(form)資料的傳送至指定的 JSP 程式。
JSP JSP
JSP JSP
JSP JSP
<<link>>
<<redirect>>
<<submit>>
圖 6 link、redirect、submit 的表示法
圖 6 顯示兩個 JSP 程式間有 link、redirect、submit 關係時的畫 法。根據圖 2 至圖 6 的內容,畫出的完整的功能模組管理類別圖,如圖 7 所示。
:
**Fun_Name(HTML 功能名稱)
:
**Fun_Stmt(HTML 功能描述) Fun_AddForm .jsp(新增功能資料)
PageResultSet.getRowCount(取得總筆數)() : int PageResultSet.getPageCount(取得總頁數)() : int PageResultSet.getShowPage(取得目前所在頁數)() : int PageResultSet.next(將指標位置向下移)() : bool
PageResultSet.getString(取得row中指定column的資料)() : string
**StrUtil.getStringEnc(轉換字串編碼格式)()
**StrUtil.HiddenNull(若為 null 字串則不顯示出來)() PageStatement.executeQuery(執行 SQL command查詢 敘述)()
**request.getParameter(取得指定欄位的參數)() st : Statement
rs : ResultSet rsp : PageResultSet str : StrUtil stmtp : PageStatement
strSQL(用來執行SQL指令的字串) : string RecordCount(存放資料查詢筆數) : int ShowPage(顯示的頁數) : int PageSize(每頁顯示的筆數) : int
PageGroupSize(每頁最多可顯示的頁數(區段大小)) : int ShowPageGroup(目前所在頁數的區段) : int
PageGroupFirst(目前所在頁數區段的第一頁) : int PageGroupLast(目前所在頁數區段的最後一頁) : int RowCount(取得查詢筆數) : int
PageCount(計算總頁數) : int
Function_Name(欲處理的功能名稱) : string Fun_ListForm.jsp(功能資料查詢)
**StrUtil.getStringEnc(轉換字串編碼格式)()
**StrUtil.HiddenNull(若為 null 字串則不顯示出來)()
**Statement.executeQuery(執行SQL指令)() Statement.executeUpdate(執行SQL指令)() ResultSet.next(將指標位置向下移)() ResultSet.getInt(將輸入的值轉成整數)() : int ResultSet.close()
**request.getParameter(取得指定欄位的參數)() str : StrUtil
SQL_CMD : Statement rs : ResultSet
**Fun_Name(要處理的功能名稱) : string
**Fun_Stmt(要處理的功能敘述) : string FIDx(function ID) : string
:
FUN_MOD(SQL指令 update功能資料) : string
:
FUN_DEL2(SQL指令 delete function_group) : string
:
FUN_DEL1(SQL指令 delete function_info) : string
:
Fun_check(SQL指令 select指定的功能名稱) : string
:
strSQL(SQL指令 執行查詢) : string
:
Fun_I(SQL指令 新增功能資料) : string FID(欲新增功能的id) : string
、 、
Fun_DB .jsp(新增 刪除 修改功能資料庫處理)
**StrUtil.HiddenNull(若為 null 字串則不顯示出來)()
**Statement.executeQuery(執行SQL指令)()
**request.getParameter(取得指定欄位的參數)() st : Statement
rs : ResultSet rsp : PageResultSet str : StrUtil
SQL_CMD : Statement rs_sql : ResultSet
strSQL(只宣告沒作用) : string exSQL(只宣告沒作用) : string
FUNCTION_id(所選擇的功能其id) : string SQL_Stmt(用來執行SQL指令的字串) : string
Fun_ModifyForm .jsp(修改功能資料) 1
1 <<submit>> 1
<<submit>>
StrUtil PageResultSet
REARPG.JSP
FRONTPG.JSP
<<import>> <<import>> <<import>> <<import>> <<import>>
<<include>> <<include>>
<<include>>
會描述使用者在執行功能時所引發的一連串訊息傳遞過程。循序圖的目的