⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oobject102304.htm

📁 UML基础(好)
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<table width="760" height="65" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr> 
    <td height="65" class="content"><!-- #BeginEditable "3" -->
      <table width="85%" border="0" align="center">
        <tr> 
          <td class="content">
            <div class="Section1" style="LAYOUT-GRID:  18pt none">
              <table class="MsoTableGrid" style="WIDTH: 96%; BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" cellSpacing="0" cellPadding="0" width="96%" border="0">
                <tbody>
                  <tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes">
                    <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 84%; PADDING-TOP: 0cm" vAlign="top" width="84%">
                      <p class="MsoBodyTextFirstIndent"><font color="#000000" size="2"><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">使用案例</span><span lang="EN-US">(Use 
                      Cases) -- </span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">儘管這個名稱令人感到納悶</span><span lang="EN-US"> 
                      -- </span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">已經變成物件導向方法中最受歡迎的技術之<span class="GramE">一</span>。</span><span lang="EN-US" class="SpellE">Ivar</span><span lang="EN-US"> 
                      Jacobson </span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">提出這項技術並獲取廣泛的運用因而引人入勝,也在資訊技術及系統發展中取得核心的地位。由於近來每一位作者於物件導向設計方面都會談及使用案例</span><span lang="EN-US">(use 
                      cases)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">並引發討論。同時,它們也在統一模塑語言</span><span lang="EN-US">(UML)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">中扮演一個重要的角色。</span></font></p>
                      <p class="MsoBodyTextFirstIndent"><font color="#000000" size="2"><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">使用案例的價值來自以下幾點原因。首先,它們協助我們去發現需求;使用案例允許你透過將焦點集中在使用者需要去執行的工作上,以捕獲使用者的需求。使用案例能夠協助我們有系統的闡述系統,並且幫助我們驗證這個使用案例的確可以被建構在此系統中。它們也協助控制反覆式開發</span><span lang="EN-US">(iterative 
                      development)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">:在每一個發展階段重覆發生時,你可以進一步的建立使用案例需求的子集。</span></font></p>
                      <p class="MsoBodyTextFirstIndent"><font color="#000000" size="2"><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">儘管使用案例被廣泛的使用,然而仍有許多問題點無法被充分的理解。如其基本的定義</span><span lang="EN-US"> 
                      -- </span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">系統運作與使用者互動過程中,所產生一連串的活動</span><span lang="EN-US">(actions) 
                      <span class="GramE">–</span> </span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">看起來夠簡單了吧。但是你若立即開始嘗試去捕捉系統的使用案例時,你將跑進死胡同。我曾經看過一些專案在使用案例裡糾纏不清,促使發展過程進退維谷。所以這裡我就列舉一些我所看過誤用使用案例的案子,並且讓我們思考如何去避免這些錯誤。</span></font></p>
                      <h3 style="MARGIN-TOP: 9pt; TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><font color="#000000" size="2"><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">濫用功能分解</span><span lang="EN-US">(Abuse 
                      by Decomposition)</span></font></h3>
                      <p class="MsoBodyTextFirstIndent"><font color="#000000" size="2"><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">我見過數<span class="GramE">個</span>專案因為將太多的努力浪費在架構使用案例上而陷入困境,仿效</span><span lang="EN-US"> 
                      Jacobson </span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">的作法,在</span><span lang="EN-US">UML</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">規格裡於使用案例之間採用以下兩個關係:</span><b style="mso-bidi-font-weight: normal"><span lang="EN-US">uses</span></b><span lang="EN-US"> 
                      </span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">及</span> 
                      <b style="mso-bidi-font-weight: normal"><span lang="EN-US">extends</span></b><span class="MsoCommentReference"><b style="mso-bidi-font-weight: normal"><span lang="EN-US"><a style="mso-comment-reference: 朱子_1; mso-comment-date: 20010915T2144"></a><a language="JavaScript" class="msocomanchor" id="_anchor_1" onmouseover="msoCommentShow('_anchor_1','_com_1')" onmouseout="msoCommentHide('_com_1')" href="#_msocom_1" name="_msoanchor_1">[朱子1]</a><span style="mso-special-character: comment; display: none; mso-hide: all">&nbsp;</span></span></b></span><b style="mso-bidi-font-weight: normal"><span lang="EN-US">(</span></b><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">譯<span class="GramE">註</span></span><a title style="mso-endnote-id: edn1" href="#_edn1" name="_ednref1"><span class="MsoEndnoteReference" style="mso-special-character: footnote" lang="EN-US"><span lang="EN-US" style="font-family: Comic Sans MS; mso-fareast-font-family: 新細明體; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">[</span><span style="font-family: 新細明體; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ascii-font-family: Comic Sans MS; mso-hansi-font-family: Comic Sans MS; mso-ansi-language: EN-US; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">一</span><span lang="EN-US" style="font-family: Comic Sans MS; mso-fareast-font-family: 新細明體; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">]</span></span></a><span lang="EN-US">)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">。這可能是有用的,然而我將它們視為是一種困擾</span><span lang="EN-US"> 
                      <span class="GramE">–</span> </span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">特別是使用這類關係。在上述的案例裡,分析者採取相當粗糙的使用案例</span><span lang="EN-US">(use 
                      case)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">並且將它拆解成數個子使用案例</span><span lang="EN-US">(sub-use 
                      cases)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">。每一個子使用案例再進一步的被拆解,通常直到你將它們分解到<span class="GramE">單元式的使用</span>案例,類似原子的程度為止。</span></font></p>
                      <p class="MsoBodyTextFirstIndent"><font color="#000000" size="2"><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">這是一種功能分解</span><span lang="EN-US">(functional 
                      decomposition)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">,一種與物件導向開發相對立的設計風格。它導致了以下的幾種問題:首先是使用案例的結構直截了當地反映到程式碼時,造成系統的設計看起來就像這些經拆解的使用案例</span><span lang="EN-US">(use 
                      cases)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">一樣。一般的症狀是去找出行為富麗堂皇的控制項物件</span><span lang="EN-US">(controller 
                      objects)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">來操作沉默寡言的資料物件</span><span lang="EN-US">(data 
                      objects)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">,這種作法較之一個經封裝的資料結構而言,是相當瑣碎的工作。</span></font></p>
                      <p class="MsoBodyTextFirstIndent"><font color="#000000" size="2"><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">這樣的設計方式也喪失了找到更多有益的物件。系統重複的行為可能跨越不同的控制項,並且資料結構的知識</span><span lang="EN-US">(knowledge)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">也遍佈這些控制項。基本的問題在於功能的分解促使你思考一種行為,會依循其更高階</span><span lang="EN-US">(higher-level)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">行為的脈絡。採取這樣的方式,會造成你難以在另一個環境</span><span lang="EN-US">(context)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">中運用相同的系統行為,就算這兩種環境大部分是雷同的。若你考慮到要讓物件擁有的行為可以運作在不同的環境裡,就不能採用功能分解的方法。</span></font></p>
                      <p class="MsoBodyTextFirstIndent"><font color="#000000" size="2"><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">當然,並不需要像使用案例這般在意系統外部的結構</span><span lang="EN-US"><a style="mso-comment-reference: 朱子_2; mso-comment-date: 20010915T2144"></a><a language="JavaScript" class="msocomanchor" id="_anchor_2" onmouseover="msoCommentShow('_anchor_2','_com_2')" onmouseout="msoCommentHide('_com_2')" href="#_msocom_2" name="_msoanchor_2">[朱子2]</a><span style="mso-special-character: comment; display: none; mso-hide: all">&nbsp;</span></span><b style="mso-bidi-font-weight: normal"><span lang="EN-US">(</span></b><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">譯<span class="GramE">註</span></span><a title style="mso-endnote-id: edn2" href="#_edn2" name="_ednref2"><span class="MsoEndnoteReference" style="mso-special-character: footnote" lang="EN-US"><span lang="EN-US" style="font-family: Comic Sans MS; mso-fareast-font-family: 新細明體; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">[</span><span style="font-family: 新細明體; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ascii-font-family: Comic Sans MS; mso-hansi-font-family: Comic Sans MS; mso-ansi-language: EN-US; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">二</span><span lang="EN-US" style="font-family: Comic Sans MS; mso-fareast-font-family: 新細明體; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">]</span></span></a><span lang="EN-US">)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">,你只要牢記系統內部的結構就可以避免這個問題。無論如何,對於毫無物件導向開發經驗的開發者而言,這是個困難的概念,所以這些人也就極有可能<span class="GramE">採</span>功能分解的方式去建立系統。</span></font></p>
                      <p class="MsoBodyTextFirstIndent"><font color="#000000" size="2"><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">就算你不會注意到功能分解如何影響你內部的設計,大量地構築使用案例</span><span lang="EN-US">(a 
                      set of use cases)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">終將會陷入這種困擾,因為人們最後還是會花費大量的時間在它們身上。把每一個使用案例往下拆解成單元的步驟裡,對拆解成單元的使用案例進行參數化作業,使它們與更高層</span><span lang="EN-US">(higher-level)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">使用案例的功能保持一致,然而這些作業所佔用的時間最好能用在其他事物上。在開發階段初期是不需要去捕獲使用案例的每<span class="GramE">個</span>細節,你會想要在開發初期留意到具有高風險的部分,而大多數的細節會留待反覆式開發</span><span lang="EN-US">(iterative 
                      development)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">最後的階段才進行,那即是反覆式開發的整個重點。</span></font></p>
                      <p class="MsoBodyTextFirstIndent"><font color="#000000" size="2"><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">所以我會打消那些對物件</span><span lang="EN-US">(objects)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">不熟悉的情況下行使</span><span lang="EN-US"> 
                      use (</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">使用</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">關係的主意,同時把它當作是在設計及使用案例之間的一項警訊。「</span><span lang="EN-US">extends</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">」</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">延伸</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">關係似乎比較不會造成困擾,但是我依然不會有使用它去做出一件大事的舉動。我曾經看過即使沒有用到這些關係也能很<span class="GramE">有成效地運用</span>使用案例的專案,所以它們基本上並不具任何意義。</span></font></p>
                      <h3 style="MARGIN-TOP: 9pt; TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><font color="#000000" size="2"><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">濫用抽象化</span><span lang="EN-US">(Abuse 
                      by Abstraction)</span></font></h3>
                      <p class="MsoBodyTextFirstIndent"><font color="#000000" size="2"><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">論及物件就不離抽象化</span><span lang="EN-US">(abstraction)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">。就算是簡單的抽象化也會發現其效力無窮,它讓複雜的問題易於處理,這就是所謂良好的設計。所以作為一位設計者</span><span lang="EN-US">(designers)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">,我們運用抽象化,促進抽象化,歌詠抽象化。</span></font></p>
                      <p class="MsoBodyTextFirstIndent"><font color="#000000" size="2"><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">但是抽象化與使用案例擺在一起運用可能會導致困擾。我記得在一個專案裡與一位使用者交談,這位使用者坦白的說,雖然剛開始他能夠明瞭使用案例為何,然而他現在卻感到迷失在一大堆抽象的使用案例中。「當開發者對我解說它們</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">使用案例</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">時我認為我可以理解,但是到最後我卻不能夠記得這些說明內容。」使用案例主要的目的之一是與系統的使用者</span><span lang="EN-US"> 
                      <span class="GramE">–</span>- </span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">客戶</span><span lang="EN-US"> 
                      -- </span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">作溝通,抽象化的使用案例已經超越可被理解的程度,所以對任何人都毫無幫助。由於內部的結構不需要與外部的結構相同,所以在使用案例中缺乏抽象化並不會造成危害。我不曾發現在使用案例裡欠缺抽象化就會導致在其內部缺少抽象化,相反的,使用較少抽象的使用案例</span><span lang="EN-US">(abstract 
                      use cases)</span><span style="FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Comic Sans MS'; mso-hansi-font-family: 'Comic Sans MS'">對我們反而有所幫助,因為一個抽象內部的結構會對映到一個具體的使用案例</span><span lang="EN-US">(concrete 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -