<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kenmingの鮮思維 &#187; 軟體實作與編程技術</title>
	<atom:link href="http://www.kenming.idv.tw/category/software-design-and-thinking/soft-implement-and-coding/feed" rel="self" type="application/rss+xml" />
	<link>http://www.kenming.idv.tw</link>
	<description>不用牽掛過去，不必擔心未來，踏實於現在，就與過去和未來同在！</description>
	<lastBuildDate>Wed, 08 Feb 2012 10:24:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>利用 LINQ 實現期指Tick檔彙整為K棒</title>
		<link>http://www.kenming.idv.tw/use_linq_to_group_future_tick_file_to_k-stick</link>
		<comments>http://www.kenming.idv.tw/use_linq_to_group_future_tick_file_to_k-stick#comments</comments>
		<pubDate>Tue, 05 Jul 2011 13:39:46 +0000</pubDate>
		<dc:creator>Kenming Wang</dc:creator>
				<category><![CDATA[程式交易]]></category>
		<category><![CDATA[軟體實作與編程技術]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[實作]]></category>
		<category><![CDATA[期貨]]></category>

		<guid isPermaLink="false">http://www.kenming.idv.tw/?p=2301</guid>
		<description><![CDATA[參考這一篇：「How to group a time series by interval (OHLC bars) with LINQ」。 我這裡使用 C#.NET 實作，並作了一些小小的修正，使之確實可以執行，並可從期交所所下載的原始 Tick 資料檔，經由前置的解壓縮、轉換為 Tick 物件型態，再透過該實作邏輯，就可以將 Tick 物件依所指定的時間週期 (time-interval)，群組為所謂的「分K棒」(其實，正確的稱呼應該為 OHCK Bar)。 這裡也不禁對 LINQ 實作技術感到讚嘆！ 它讓中間層 (middleware)的物件結構與資料來源 (data-sources)的存取，變得更為簡單太多了，所以也使得 Tick 轉K棒 的轉換邏輯，可以利用相當簡潔的語法 (類 SQL 語法)，而達成該功能的實現。 底下的程式碼並未包含前述所提包括解壓縮、轉換為 Tick 物件等邏輯，只從一群已有 Tick 資料的 Collection 集合 (型態為 IEnumerable)，依據所指定的 Interval 時間間隔，轉換為 K棒 (含開、高、收、低、量)的實作邏輯。 Tick 與 OHLC-Bar(K棒) 物件結構為： public class [...]
延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/cshar-note_txtfile_in_zip_to_memory_list_collection' rel='bookmark' title='[C# 實作筆記] 將 Zip壓縮檔內的文字檔轉至記憶體內的List集合'>[C# 實作筆記] 將 Zip壓縮檔內的文字檔轉至記憶體內的List集合</a></li>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-04' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討-完結 (4)'>程式碼與 UML 類別_循序圖 的關係探討-完結 (4)</a></li>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-03' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討 (3)'>程式碼與 UML 類別_循序圖 的關係探討 (3)</a></li>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-02' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討 (2)'>程式碼與 UML 類別_循序圖 的關係探討 (2)</a></li>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-01' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討 (1)'>程式碼與 UML 類別_循序圖 的關係探討 (1)</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>參考這一篇：「<a href="http://stackoverflow.com/questions/5820397/how-to-group-a-time-series-by-interval-ohlc-bars-with-linq" target="_blank">How to group a time series by interval (OHLC bars) with LINQ</a>」。</p>
<p>我這裡使用 C#.NET 實作，並作了一些小小的修正，使之確實可以執行，並可從<a href="http://www.taifex.com.tw/chinese/home.asp" target="_blank">期交所</a>所下載的原始 Tick 資料檔，經由前置的解壓縮、轉換為 Tick 物件型態，再透過該實作邏輯，就可以將 Tick 物件依所指定的時間週期 (time-interval)，群組為所謂的「分K棒」(其實，正確的稱呼應該為 OHCK Bar)。</p>
<p>這裡也不禁對 LINQ 實作技術感到讚嘆！ 它讓中間層 (middleware)的物件結構與資料來源 (data-sources)的存取，變得更為簡單太多了，所以也使得 Tick 轉K棒 的轉換邏輯，可以利用相當簡潔的語法 (類 SQL 語法)，而達成該功能的實現。</p>
<p>底下的程式碼並未包含前述所提包括解壓縮、轉換為 Tick 物件等邏輯，只從一群已有 Tick 資料的 Collection 集合 (型態為 IEnumerable)，依據所指定的 Interval 時間間隔，轉換為 K棒 (含開、高、收、低、量)的實作邏輯。</p>
<p>Tick 與 OHLC-Bar(K棒) 物件結構為：</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Tick
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> Symbol <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>　　　　　<span style="color: #008080; font-style: italic;">//商品代號        </span>
        <span style="color: #0600FF; font-weight: bold;">public</span> DateTime Timestamp <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>　 <span style="color: #008080; font-style: italic;">//成交日期時間</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">decimal</span> Price <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>　　　　　<span style="color: #008080; font-style: italic;">//成交價格</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">uint</span> volume <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>　　　　　  <span style="color: #008080; font-style: italic;">//成交量</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> OHLCBar
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> Symbol <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>　　<span style="color: #008080; font-style: italic;">//商品代號</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">decimal</span> OPEN <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span>set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>　　<span style="color: #008080; font-style: italic;">//開盤價</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">decimal</span> CLOSE <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>　  <span style="color: #008080; font-style: italic;">//收盤價</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">decimal</span> HIGH <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>　　<span style="color: #008080; font-style: italic;">//最高價</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">decimal</span> LOW <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>　　 <span style="color: #008080; font-style: italic;">//最低價</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">uint</span> VOLUME <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>　　 <span style="color: #008080; font-style: italic;">//成交量</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> DateTime BeginTime <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>　<span style="color: #008080; font-style: italic;">//開始時間</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> TimeSpan Interval <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>　　 <span style="color: #008080; font-style: italic;">//時間區間</span>
    <span style="color: #008000;">&#125;</span></pre></div></div>

<p><span id="more-2301"></span><br />
將 Ticks 集合當成參數傳進該 method (generate_OHLCBar)，處理後再傳回 OHLCBar 集合。</p>
<p>底下最精華的部分在於程式碼 21~29 行，這在傳統 SQL 語法是無法這樣寫出來的 (GroupBy 的欄位為變數)，真的可以仔細玩味之該實作的技巧。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">&nbsp;
       <span style="color: #008080; font-style: italic;">/** 將 Tick 資料依 Interval 時間間隔組成為 OHLC Bar.
         * &lt;param name=&quot;ticks&quot;&gt;Ticks 型態的集合&lt;/param&gt;            
         */</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> IEnumerable<span style="color: #008000;">&lt;</span>OHLCBar<span style="color: #008000;">&gt;</span> generate_OHLCBar<span style="color: #008000;">&#40;</span>IEnumerable<span style="color: #008000;">&lt;</span>Tick<span style="color: #008000;">&gt;</span> ticks<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #6666cc; font-weight: bold;">long</span> barSizeInTicks <span style="color: #008000;">=</span> <span style="color: #FF0000;">5</span><span style="color: #008000;">;</span> 　　　　　　　　　　　　　　<span style="color: #008080; font-style: italic;">//5 secs.</span>
            TimeSpan natural_time <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> TimeSpan<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">8</span>,<span style="color: #FF0000;">45</span>,<span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>　　   <span style="color: #008080; font-style: italic;">//台指期開盤時間</span>
&nbsp;
            var query <span style="color: #008000;">=</span>
                <span style="color: #0600FF; font-weight: bold;">from</span> tick <span style="color: #0600FF; font-weight: bold;">in</span> ticks
                <span style="color: #008080; font-style: italic;">//取得 TimeBar 的起始索引值, index 值必須為整數</span>
                let barIndexForDay <span style="color: #008000;">=</span> 
                     Convert<span style="color: #008000;">.</span><span style="color: #0000FF;">ToInt32</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>tick<span style="color: #008000;">.</span><span style="color: #0000FF;">Timestamp</span><span style="color: #008000;">.</span><span style="color: #0000FF;">TimeOfDay</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Subtract</span><span style="color: #008000;">&#40;</span>natural_time<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">TotalSeconds</span> <span style="color: #008000;">/</span> barSizeInTicks<span style="color: #008000;">&#41;</span>
&nbsp;
                <span style="color: #008080; font-style: italic;">// Calculate the begin-time of the bar associated with a tick.</span>
                <span style="color: #008080; font-style: italic;">// For example, turn 2011/04/28 14:23.45 </span>
                <span style="color: #008080; font-style: italic;">// into 2011/04/28 14:20.00, assuming 5 min bars.</span>
&nbsp;
                let barBeginDateTime <span style="color: #008000;">=</span> 
                      tick<span style="color: #008000;">.</span><span style="color: #0000FF;">Timestamp</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Date</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>natural_time<span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">AddSeconds</span><span style="color: #008000;">&#40;</span>barIndexForDay <span style="color: #008000;">*</span> barSizeInTicks<span style="color: #008000;">&#41;</span>
&nbsp;
                <span style="color: #008080; font-style: italic;">// Produce raw tick-data for each bar by grouping.</span>
                group tick by <span style="color: #008000;">new</span> <span style="color: #008000;">&#123;</span> barBeginDateTime, tick<span style="color: #008000;">.</span><span style="color: #0000FF;">Symbol</span> <span style="color: #008000;">&#125;</span> into tickGroup
                orderby tickGroup<span style="color: #008000;">.</span><span style="color: #0000FF;">Key</span><span style="color: #008000;">.</span><span style="color: #0000FF;">barBeginDateTime</span>
&nbsp;
                <span style="color: #008080; font-style: italic;">// Order prices for a group chronologically.</span>
                let orderedPrices <span style="color: #008000;">=</span> tickGroup<span style="color: #008000;">.</span><span style="color: #0000FF;">OrderBy</span><span style="color: #008000;">&#40;</span>t <span style="color: #008000;">=&gt;</span> t<span style="color: #008000;">.</span><span style="color: #0000FF;">Timestamp</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0600FF; font-weight: bold;">Select</span><span style="color: #008000;">&#40;</span>t <span style="color: #008000;">=&gt;</span> t<span style="color: #008000;">.</span><span style="color: #0000FF;">Price</span><span style="color: #008000;">&#41;</span>
&nbsp;
                <span style="color: #0600FF; font-weight: bold;">select</span> <span style="color: #008000;">new</span> OHLCBar<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    Symbol <span style="color: #008000;">=</span> tickGroup<span style="color: #008000;">.</span><span style="color: #0000FF;">Key</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Symbol</span>,
                    OPEN <span style="color: #008000;">=</span> orderedPrices<span style="color: #008000;">.</span><span style="color: #0000FF;">First</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,
                    CLOSE <span style="color: #008000;">=</span> orderedPrices<span style="color: #008000;">.</span><span style="color: #0000FF;">Last</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,
                    HIGH <span style="color: #008000;">=</span> orderedPrices<span style="color: #008000;">.</span><span style="color: #0000FF;">Max</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,
                    LOW <span style="color: #008000;">=</span> orderedPrices<span style="color: #008000;">.</span><span style="color: #0000FF;">Min</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,
                    BeginTime <span style="color: #008000;">=</span> tickGroup<span style="color: #008000;">.</span><span style="color: #0000FF;">Key</span><span style="color: #008000;">.</span><span style="color: #0000FF;">barBeginDateTime</span>,
                    VOLUME<span style="color: #008000;">=</span> Convert<span style="color: #008000;">.</span><span style="color: #0000FF;">ToUInt32</span><span style="color: #008000;">&#40;</span>tickGroup<span style="color: #008000;">.</span><span style="color: #0000FF;">Sum</span><span style="color: #008000;">&#40;</span>t <span style="color: #008000;">=&gt;</span> t<span style="color: #008000;">.</span><span style="color: #0000FF;">volume</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">return</span> query<span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/cshar-note_txtfile_in_zip_to_memory_list_collection' rel='bookmark' title='[C# 實作筆記] 將 Zip壓縮檔內的文字檔轉至記憶體內的List集合'>[C# 實作筆記] 將 Zip壓縮檔內的文字檔轉至記憶體內的List集合</a></li>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-04' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討-完結 (4)'>程式碼與 UML 類別_循序圖 的關係探討-完結 (4)</a></li>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-03' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討 (3)'>程式碼與 UML 類別_循序圖 的關係探討 (3)</a></li>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-02' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討 (2)'>程式碼與 UML 類別_循序圖 的關係探討 (2)</a></li>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-01' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討 (1)'>程式碼與 UML 類別_循序圖 的關係探討 (1)</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.kenming.idv.tw/use_linq_to_group_future_tick_file_to_k-stick/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[C# 實作筆記] 將 Zip壓縮檔內的文字檔轉至記憶體內的List集合</title>
		<link>http://www.kenming.idv.tw/cshar-note_txtfile_in_zip_to_memory_list_collection</link>
		<comments>http://www.kenming.idv.tw/cshar-note_txtfile_in_zip_to_memory_list_collection#comments</comments>
		<pubDate>Thu, 02 Jun 2011 03:05:28 +0000</pubDate>
		<dc:creator>Kenming Wang</dc:creator>
				<category><![CDATA[軟體實作與編程技術]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[備忘]]></category>
		<category><![CDATA[實作]]></category>

		<guid isPermaLink="false">http://www.kenming.idv.tw/?p=2226</guid>
		<description><![CDATA[目標： 在 C#.NET 程式內處理 *.zip 壓縮檔 (內含文字檔)的解壓縮 (decompress)。 將解壓縮後的文字檔讀進記憶體內 (memory)，並將每行 (per-line)的字串 (string)儲存至 List 集合 (collection)，以俾方便處理。 主要做法： 因官方未提供處理解壓縮 .zip 壓縮格式機制，所以需下載 3rd party 的類別庫 (class library)。這裡以 SharpZipLib ( formerly NZipLib) 類別庫來處理解壓縮。 利用 SharpZipLib 內的 ZipInputStream 開啟 .zip 壓縮檔。 string fname = @&#34;C:\Download\TxtData.zip&#34;; ZipInputStream zipStream = new ZipInputStream&#40;File.Open&#40;fname, FileMode.Open&#41;&#41;; ZipInputStream 會依據所指定的緩衝區大小，依序將已解壓縮的文字檔內容讀至「位元組陣列 (Byte array)」；同時再利用已新增的 MemoryStream (記憶體串流)物件讀進 Byte array。 MemoryStream [...]
延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-04' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討-完結 (4)'>程式碼與 UML 類別_循序圖 的關係探討-完結 (4)</a></li>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-02' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討 (2)'>程式碼與 UML 類別_循序圖 的關係探討 (2)</a></li>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-01' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討 (1)'>程式碼與 UML 類別_循序圖 的關係探討 (1)</a></li>
<li><a href='http://www.kenming.idv.tw/about-excel-dde-tick-change-event-process' rel='bookmark' title='關於 Excel DDE Tick 資料變更事件的處理'>關於 Excel DDE Tick 資料變更事件的處理</a></li>
<li><a href='http://www.kenming.idv.tw/vdb_c_el_e_ambaf_by_net_if_a_e_a_ndba_va' rel='bookmark' title='VDB 理論與實作 by .NET (１) — 虛擬DB、Value  與 Business 物件的關係'>VDB 理論與實作 by .NET (１) — 虛擬DB、Value  與 Business 物件的關係</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<ol><strong>目標：</strong></p>
<li>在 C#.NET 程式內處理 *.zip 壓縮檔 (內含文字檔)的解壓縮 (decompress)。</li>
<li>將解壓縮後的文字檔讀進記憶體內 (memory)，並將每行 (per-line)的字串 (string)儲存至 List 集合 (collection)，以俾方便處理。</li>
</ol>
<ol><strong>主要做法：</strong></p>
<li>因官方未提供處理解壓縮  .zip 壓縮格式機制，所以需下載 3rd party 的類別庫 (class library)。這裡以 <a target="_blank" href="http://www.icsharpcode.net/OpenSource/SharpZipLib/">SharpZipLib</a> ( formerly NZipLib) 類別庫來處理解壓縮。</li>
<li>利用 SharpZipLib 內的 ZipInputStream 開啟 .zip 壓縮檔。

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">string</span> fname <span style="color: #008000;">=</span> <span style="color: #666666;">@&quot;C:\Download\TxtData.zip&quot;</span><span style="color: #008000;">;</span>
ZipInputStream zipStream <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ZipInputStream<span style="color: #008000;">&#40;</span>File<span style="color: #008000;">.</span><span style="color: #0000FF;">Open</span><span style="color: #008000;">&#40;</span>fname, FileMode<span style="color: #008000;">.</span><span style="color: #0000FF;">Open</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

</li>
<li>ZipInputStream 會依據所指定的緩衝區大小，依序將已解壓縮的文字檔內容讀至「位元組陣列 (Byte array)」；同時再利用已新增的 MemoryStream (記憶體串流)物件讀進 Byte array。

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">                MemoryStream memStream <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> MemoryStream<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #6666cc; font-weight: bold;">int</span> bufferSize <span style="color: #008000;">=</span> <span style="color: #FF0000;">2048</span><span style="color: #008000;">;</span>     <span style="color: #008080; font-style: italic;">//指定的緩衝區大小</span>
                <span style="color: #6666cc; font-weight: bold;">int</span> readCount <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>           <span style="color: #008080; font-style: italic;">//回傳已讀取的位元組數目</span>
                <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> buffer <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span>bufferSize<span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
&nbsp;
                readCount <span style="color: #008000;">=</span> zipStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Read</span><span style="color: #008000;">&#40;</span>buffer, <span style="color: #FF0000;">0</span>, bufferSize<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>   
                <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span>readCount <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    memStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Write</span><span style="color: #008000;">&#40;</span>buffer, <span style="color: #FF0000;">0</span>, readCount<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    readCount <span style="color: #008000;">=</span> zipStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Read</span><span style="color: #008000;">&#40;</span>buffer, <span style="color: #FF0000;">0</span>, bufferSize<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span></pre></div></div>

</li>
<p><span id="more-2226"></span></p>
<li>由於 MemoryStream 並未提供有效的方法 (method)來解析原文字檔內的每一行字串，所以再將其包裹至 (wrap)已新增的 StreamReader 物件。

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">StreamReader reader <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StreamReader<span style="color: #008000;">&#40;</span>memStream, <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Encoding</span><span style="color: #008000;">.</span><span style="color: #0600FF; font-weight: bold;">Default</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

</li>
<li>利用 StreamReader 的 ReadLine() 方法，讀進每一行的字串 (string)，並循序加入 List 集合 (collection)內。

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">                memStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Seek</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span>, SeekOrigin<span style="color: #008000;">.</span><span style="color: #0000FF;">Begin</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>     <span style="color: #008080; font-style: italic;">// reset file pointer               </span>
                List<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&gt;</span> list <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #6666cc; font-weight: bold;">string</span> str<span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>str <span style="color: #008000;">=</span> reader<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadLine</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
                    list<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

</li>
<li>完成！ 而後即可利用如 LINQ (Language-Integrated Query)存取並篩選 List 集合內的字串資料。</li>
</ol>
<p><strong>完整的程式碼片段 (code-snippet)：</strong></p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">       <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> decompress<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #6666cc; font-weight: bold;">string</span> fname <span style="color: #008000;">=</span> <span style="color: #666666;">@&quot;C:\Download\TxtData.zip&quot;</span><span style="color: #008000;">;</span>
            ZipInputStream zipStream <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ZipInputStream<span style="color: #008000;">&#40;</span>File<span style="color: #008000;">.</span><span style="color: #0000FF;">Open</span><span style="color: #008000;">&#40;</span>fname, FileMode<span style="color: #008000;">.</span><span style="color: #0000FF;">Open</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            ZipEntry entry <span style="color: #008000;">=</span> zipStream<span style="color: #008000;">.</span><span style="color: #0000FF;">GetNextEntry</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span>entry <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>entry<span style="color: #008000;">.</span><span style="color: #0000FF;">IsFile</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                     <span style="color: #0600FF; font-weight: bold;">continue</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span>
&nbsp;
                MemoryStream memStream <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> MemoryStream<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #6666cc; font-weight: bold;">int</span> bufferSize <span style="color: #008000;">=</span> <span style="color: #FF0000;">2048</span><span style="color: #008000;">;</span>     <span style="color: #008080; font-style: italic;">//指定的緩衝區大小</span>
                <span style="color: #6666cc; font-weight: bold;">int</span> readCount <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>           <span style="color: #008080; font-style: italic;">//回傳已讀取的位元組數目</span>
                <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> buffer <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span>bufferSize<span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
&nbsp;
                readCount <span style="color: #008000;">=</span> zipStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Read</span><span style="color: #008000;">&#40;</span>buffer, <span style="color: #FF0000;">0</span>, bufferSize<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>   
                <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span>readCount <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    memStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Write</span><span style="color: #008000;">&#40;</span>buffer, <span style="color: #FF0000;">0</span>, readCount<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    readCount <span style="color: #008000;">=</span> zipStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Read</span><span style="color: #008000;">&#40;</span>buffer, <span style="color: #FF0000;">0</span>, bufferSize<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span>
&nbsp;
                <span style="color: #008080; font-style: italic;">//需指定預設的編碼，否則讀進資料可能會亂碼    </span>
                StreamReader reader <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StreamReader<span style="color: #008000;">&#40;</span>memStream, <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Encoding</span><span style="color: #008000;">.</span><span style="color: #0600FF; font-weight: bold;">Default</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                memStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Seek</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span>, SeekOrigin<span style="color: #008000;">.</span><span style="color: #0000FF;">Begin</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>   <span style="color: #008080; font-style: italic;">// reset file pointer</span>
&nbsp;
                List<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&gt;</span> list <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #6666cc; font-weight: bold;">string</span> str<span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>str <span style="color: #008000;">=</span> reader<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadLine</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
                    list<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>         
&nbsp;
                <span style="color: #008080; font-style: italic;">//release resource</span>
                reader<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>                
                reader<span style="color: #008000;">.</span><span style="color: #0000FF;">Dispose</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                memStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                memStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Dispose</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                entry <span style="color: #008000;">=</span> zipStream<span style="color: #008000;">.</span><span style="color: #0000FF;">GetNextEntry</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span> 
                zipStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                zipStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Dispose</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span></pre></div></div>

<p>延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-04' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討-完結 (4)'>程式碼與 UML 類別_循序圖 的關係探討-完結 (4)</a></li>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-02' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討 (2)'>程式碼與 UML 類別_循序圖 的關係探討 (2)</a></li>
<li><a href='http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-01' rel='bookmark' title='程式碼與 UML 類別_循序圖 的關係探討 (1)'>程式碼與 UML 類別_循序圖 的關係探討 (1)</a></li>
<li><a href='http://www.kenming.idv.tw/about-excel-dde-tick-change-event-process' rel='bookmark' title='關於 Excel DDE Tick 資料變更事件的處理'>關於 Excel DDE Tick 資料變更事件的處理</a></li>
<li><a href='http://www.kenming.idv.tw/vdb_c_el_e_ambaf_by_net_if_a_e_a_ndba_va' rel='bookmark' title='VDB 理論與實作 by .NET (１) — 虛擬DB、Value  與 Business 物件的關係'>VDB 理論與實作 by .NET (１) — 虛擬DB、Value  與 Business 物件的關係</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.kenming.idv.tw/cshar-note_txtfile_in_zip_to_memory_list_collection/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>[烏龜訂購系統開發與實作-10]－從 EA 工具建立資料模型，並產出 DDL SQL敘述</title>
		<link>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_10</link>
		<comments>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_10#comments</comments>
		<pubDate>Fri, 27 May 2011 07:35:31 +0000</pubDate>
		<dc:creator>Kenming Wang</dc:creator>
				<category><![CDATA[軟體實作與編程技術]]></category>
		<category><![CDATA[軟體設計與分析]]></category>
		<category><![CDATA[學習筆記]]></category>
		<category><![CDATA[案例研討]]></category>
		<category><![CDATA[烏龜]]></category>
		<category><![CDATA[系統開發]]></category>

		<guid isPermaLink="false">http://www.kenming.idv.tw/?p=2199</guid>
		<description><![CDATA[下列步驟主要目地在於建立資料庫的資料表格，並實現由中間層控制物件連結至資料庫，以達成實際存取資料的目地。 十、從 EA 工具建立資料模型，並產出 DDL SQL敘述 透過 EA 建立資料模型 (Data Model)的原因，在於 EA 具備了視覺化的資料塑模機制。且透過其轉換 (transform)功能，可以產出支援多達十數種資料庫的 DDL (Data Definition Language) SQL敘述。 當然也可以使用如 eclipse 插件 (plugin)的資料庫管理工具，來規劃與建立資料表格。 在 [Logical View] 套件內，新增子套件 (sub-package)名為「Data Model」。 在該套件內新增一設計圖名為「Order Model」，設計圖類型為「Data Modeling」。 打開設計圖，從工具箱 (toolbox)中將「Table」圖形元件拖曳至設計圖內。本例會使用到兩個表格，其表格名稱與資料欄位參考如下： CREATE TABLE ORDER &#40; id INTEGER AUTO_INCREMENT, item_no VARCHAR&#40;3&#41; NOT NULL, order_date DATE, PRIMARY KEY &#40;id&#41; &#41; CREATE TABLE Item &#40; [...]
延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_09' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－09'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－09</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_08' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－08'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－08</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_07' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－07'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－07</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_06' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_05' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<h4>下列步驟主要目地在於建立資料庫的資料表格，並實現由中間層控制物件連結至資料庫，以達成實際存取資料的目地。</h4>
<h4>十、從 EA 工具建立資料模型，並產出 DDL SQL敘述</h4>
<ul>
<li>透過 EA 建立資料模型 (Data Model)的原因，在於 EA 具備了視覺化的資料塑模機制。且透過其轉換 (transform)功能，可以產出支援多達十數種資料庫的 DDL (Data Definition Language) SQL敘述。</li>
<li>當然也可以使用如 eclipse 插件 (plugin)的資料庫管理工具，來規劃與建立資料表格。</li>
</ul>
<ol>
<li>在 [Logical View] 套件內，新增子套件 (sub-package)名為「Data Model」。</li>
<li>在該套件內新增一設計圖名為「Order Model」，設計圖類型為「Data Modeling」。</li>
<li>打開設計圖，從工具箱 (toolbox)中將「Table」圖形元件拖曳至設計圖內。本例會使用到兩個表格，其表格名稱與資料欄位參考如下：

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #993333; font-weight: bold;">ORDER</span>
<span style="color: #66cc66;">&#40;</span>
	id <span style="color: #993333; font-weight: bold;">INTEGER</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span><span style="color: #66cc66;">,</span>
	item_no <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
	order_date <span style="color: #993333; font-weight: bold;">DATE</span><span style="color: #66cc66;">,</span>
	<span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> Item
<span style="color: #66cc66;">&#40;</span>
	id <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
	name <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">24</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
	price <span style="color: #993333; font-weight: bold;">INTEGER</span><span style="color: #66cc66;">,</span>
	<span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span></pre></div></div>

</li>
<p><span id="more-2199"></span></p>
<li>在 Table 的屬性 (property)視窗內，填入「Name」、「Alias」、「Database」等資訊。在本例中，可以選擇支援標準 SQL 語法 (ANSI-SQL)的 MySql 資料庫。
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-16.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-16.png" alt="圖 16、設計資料表格屬性、指定轉換資料庫版本" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 16、設計資料表格屬性、指定轉換資料庫版本</font></p>
</li>
<li>切換至 [Table Detail] 標籤，點擊 [Columns/Attributes]，在出現的 Columns 視窗內，新增 column 與設定相關的屬性。
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-18.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-18.png" alt=" 圖 17、新增 Column，設定相關屬性" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖） 圖 17、新增 Column，設定相關屬性</font></p>
</li>
<li>產出 DDL (Data Definition Language) SQL 敘述檔 (純文字檔)。<br />
點選 [Project Browser] →  [Data Model] 套件，右鍵選擇 [Code Engineering] →  [Generate DDL...]，在出現的對話框內，指定所產出 DDL 檔案的目錄與檔名，以及勾選相關的資料庫設定項目，按下 [Gererate]。</p>
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-18.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-18.png" alt=" 圖 18、產出 DDL SQL 敘述檔" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖） 圖 18、產出 DDL SQL 敘述檔</font></p>
</li>
</ol>
<p>延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_09' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－09'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－09</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_08' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－08'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－08</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_07' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－07'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－07</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_06' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_05' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_10/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－09</title>
		<link>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_09</link>
		<comments>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_09#comments</comments>
		<pubDate>Mon, 25 Apr 2011 00:26:16 +0000</pubDate>
		<dc:creator>Kenming Wang</dc:creator>
				<category><![CDATA[軟體實作與編程技術]]></category>
		<category><![CDATA[軟體設計與分析]]></category>
		<category><![CDATA[學習筆記]]></category>
		<category><![CDATA[案例研討]]></category>
		<category><![CDATA[烏龜]]></category>
		<category><![CDATA[系統開發]]></category>

		<guid isPermaLink="false">http://www.kenming.idv.tw/?p=2135</guid>
		<description><![CDATA[九、撰寫控制類別的功能測試程式碼框架 ＊＊ 至本實作步驟可以先把 EA Model 檔與 Eclipse Java 專案存檔。將整個專案目錄備份至 /Stage-1_1 目錄下，視為第一個開發階段的版本。 ＊＊ 　o 下載 Java 專案與 Model 檔－Stage1_1.rar 在 eclipse 環境下要撰寫測試程式碼是非常簡單的一件事，原因是 eclipse 已內建了 JUnit 測試框架 (JUnit Test Framework)，作為一位程式撰寫人員，最起碼要為每一個控制性的功能(服務)類別撰寫功能測試程式碼 (functional test code)，可以說是軟體品質的最基本保障，也是應該要具備的責任與良心了。 在 Eclipse 內的 [Project Explorer]，選擇 「訂購烏龜_Control.java」，按下滑鼠右鍵，選擇 [New] → [Other…]，然後在 Wizard 對話框內，選擇 [Java] → [JUnit] → [JUnit Test Case] ，然後點擊 【Next】，在出現的對話框內，填入以下資訊： 點選 「New JUnit 4 [...]
延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_08' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－08'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－08</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_07' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－07'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－07</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_06' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_05' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_04' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<h4>九、撰寫控制類別的功能測試程式碼框架</h4>
<p>＊＊ 至本實作步驟可以先把 EA Model 檔與 Eclipse Java 專案存檔。將整個專案目錄備份至 /Stage-1_1 目錄下，視為第一個開發階段的版本。 ＊＊<br />
　o <font color="red"><strong>下載 Java 專案與 Model 檔</strong></font>－<a href="http://files.hsdc.idv.tw/soft_imgs/烏龜訂購系統_Stage1_1.rar">Stage1_1.rar</a></p>
<p>在 eclipse 環境下要撰寫測試程式碼是非常簡單的一件事，原因是 eclipse 已內建了 JUnit 測試框架 (JUnit Test Framework)，作為一位程式撰寫人員，最起碼要為每一個控制性的功能(服務)類別<strong>撰寫功能測試程式碼 (functional test code)，可以說是軟體品質的最基本保障，也是應該要具備的責任與良心了</strong>。</p>
<ol>
<li>在 Eclipse 內的 [Project Explorer]，選擇 「訂購烏龜_Control.java」，按下滑鼠右鍵，選擇 [New] → [Other…]，然後在 Wizard 對話框內，選擇 [Java] → [JUnit] → [JUnit Test Case] ，然後點擊 【Next】，在出現的對話框內，填入以下資訊：
<ul>
<li>點選 「New JUnit 4 Test」。 (新版本的測試框架可以根據 Java 5.0 以上版本的新特徵特性來建構；更簡單、易於使用，以及更敏捷的初始化與清理等工作)</li>
<li>Package： com.order.test  (端看開發人員的習慣，這裡是採用將測試程式碼均放置於原始程式碼所在位置的子目錄下)</li>
<li>Name：訂購烏龜_Control_Test (測試類別命名的建議為 原類別名稱 + _Test)</li>
<li>勾選 setUp() method (讓測試類別可進行初始化的工作)。</li>
</ul>
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-13.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-13.png" alt="圖 13、新增 JUnit 測試程式碼的對話框" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 13、新增 JUnit 測試程式碼的對話框</font></p>
</li>
<p><span id="more-2135"></span></p>
<li>點擊 【Next】，在出現「選擇測試的 method」對話框時，點選該控制類別所宣告的 method。一般而言，功能測試的重心會在於測試功能性類別所揭露出的企業邏輯 (business logic)，這些企業邏輯的演算核心均會被封裝 (encapsulate)在功能性類別所宣告的 method 內。
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-14.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-14.png" alt="圖 14、針對類別選擇要測試的方法" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 14、針對類別選擇要測試的方法</font></p>
</li>
<li>編輯所產出測試程式碼的內容。<br />
<font size=-1>訂購烏龜_Control_Test.java：</font></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.order.control.test</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">static</span> org.<span style="color: #006633;">junit</span>.<span style="color: #000000; font-weight: bold;">Assert</span>.<span style="color: #339933;">*;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.junit.Before</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.junit.Test</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.order.control.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.order.dto.*</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> 訂購烏龜_Control_Test <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> 訂購烏龜_Control control<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> VO_結帳資訊 mOrder<span style="color: #339933;">;</span> 
&nbsp;
	@Before
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
		control <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> 訂購烏龜_Control<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@Test
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> testList烏龜清單<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		ArrayList<span style="color: #339933;">&lt;</span>VO_烏龜資訊<span style="color: #339933;">&gt;</span> expected<span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		ArrayList<span style="color: #339933;">&lt;</span>VO_烏龜資訊<span style="color: #339933;">&gt;</span> result <span style="color: #339933;">=</span> control.<span style="color: #006633;">list</span>烏龜清單<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertNull<span style="color: #009900;">&#40;</span>result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@Test
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> test結帳<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		VO_訂購確認資訊 expected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		mOrder <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> VO_結帳資訊<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		VO_訂購確認資訊 result <span style="color: #339933;">=</span> control.結帳<span style="color: #009900;">&#40;</span>mOrder<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertNull<span style="color: #009900;">&#40;</span>result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@Test
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> testSaveOrder<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">//將 mOrder(結帳資訊) 寫入至 Database.</span>
		<span style="color: #000066; font-weight: bold;">boolean</span> result <span style="color: #339933;">=</span> control.<span style="color: #006633;">SaveOrder</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertFalse<span style="color: #009900;">&#40;</span>result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<ul>
<li>目前所撰寫的測試程式碼仍偏向是框架 (skeleton)性質的，不過已先加入欲測試的控制類別，以及為其初始化。目前就是先讓其可以通過 JUnit 的測試即可。</li>
</ul>
</li>
<li>執行 JUnit 測試。
<p>在 [Package Explorer] 內，點選待測試的控制測試類別，本例為「訂購烏龜_Control_Test.java」。在 eclipse 的工具列 (toolbar)中，選擇 [RUN] (綠色右箭頭符號圖示) → [Run As] → [JUnit Test]，執行後即可顯示測試的結果。 (若所有方法均測試通過，即顯示綠棒；若其中一個方法測試失敗，則顯示紅棒。)</p>
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-15.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-15.png" alt="圖 15、在 Eclipse 內執行 JUnit 測試" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 15、在 Eclipse 內執行 JUnit 測試</font></p>
</li>
</ol>
<p>延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_08' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－08'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－08</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_07' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－07'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－07</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_06' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_05' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_04' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_09/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－08</title>
		<link>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_08</link>
		<comments>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_08#comments</comments>
		<pubDate>Mon, 11 Apr 2011 08:01:27 +0000</pubDate>
		<dc:creator>Kenming Wang</dc:creator>
				<category><![CDATA[軟體實作與編程技術]]></category>
		<category><![CDATA[軟體設計與分析]]></category>
		<category><![CDATA[學習筆記]]></category>
		<category><![CDATA[案例研討]]></category>
		<category><![CDATA[烏龜]]></category>
		<category><![CDATA[系統開發]]></category>

		<guid isPermaLink="false">http://www.kenming.idv.tw/?p=2109</guid>
		<description><![CDATA[八、新增 Java Model 專案，撰寫控制類別程式碼 　 1. 新增 Java Model 專案： (1) 將 Eclipse 切至「Java Perspective」。 (2) 新增「Java Project」專案，專案名稱為「烏龜Model」。 （點擊圖片鏈接看原圖）圖 12、在 Eclipse 下新增 Java 專案 2. 撰寫控制 (control)類別與資料傳遞 (data transfer)類別的程式碼框架 (skeleton) 訂購烏龜_Control.java： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package com.order.control; &#160; import java.util.*; import [...]
延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_07' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－07'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－07</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_06' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_05' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_04' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_03' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<h4>八、新增 Java Model 專案，撰寫控制類別程式碼</h4>
<p>　</p>
<h5>1.	新增 Java Model 專案：</h5>
<ul>
(1)	將 Eclipse 切至「Java Perspective」。<br />
(2)	新增「Java Project」專案，專案名稱為「烏龜Model」。</ul>
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-12.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-12.png" alt="圖 12、在 Eclipse 下新增 Java 專案" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 12、在 Eclipse 下新增 Java 專案</font></p>
<h5>2.	撰寫控制 (control)類別與資料傳遞 (data transfer)類別的程式碼框架 (skeleton)</h5>
<p><font size=-1>訂購烏龜_Control.java：</font></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.order.control</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.order.dto.*</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> 訂購烏龜_Control <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> ArrayList<span style="color: #339933;">&lt;</span>VO_烏龜資訊<span style="color: #339933;">&gt;</span> list烏龜清單<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> VO_訂購確認資訊 結帳<span style="color: #009900;">&#40;</span>VO_結帳資訊 m_結帳<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> SaveOrder<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><span id="more-2109"></span><br />
<font size=-1>VO_烏龜資訊.java</font></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.order.dto</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> VO_烏龜資訊 <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> id<span style="color: #339933;">;</span>	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setId<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">id</span> <span style="color: #339933;">=</span> id<span style="color: #339933;">;</span>	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getName<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> name<span style="color: #339933;">;</span>	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setName<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> name<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">name</span> <span style="color: #339933;">=</span> name<span style="color: #339933;">;</span>	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getPrice<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> price<span style="color: #339933;">;</span>	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setPrice<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> price<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">price</span> <span style="color: #339933;">=</span> price<span style="color: #339933;">;</span>	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> id<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> name<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> price<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><font size=-1>VO_結帳資訊.java：</font></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.order.dto</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> VO_結帳資訊 <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> id<span style="color: #339933;">;</span>	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setId<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">id</span> <span style="color: #339933;">=</span> id<span style="color: #339933;">;</span>	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> get數量<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> 數量<span style="color: #339933;">;</span>	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> set數量<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> 數量<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.數量 <span style="color: #339933;">=</span> 數量<span style="color: #339933;">;</span>	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> id<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> 數量<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><font size=-1>VO_訂購確認資訊.java：</font></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.order.dto</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> VO_訂購確認資訊 <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> VO_烏龜資訊 getV烏龜<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> v烏龜<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setV烏龜<span style="color: #009900;">&#40;</span>VO_烏龜資訊 v烏龜<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">v</span>烏龜 <span style="color: #339933;">=</span> v烏龜<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> get總價<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> 總價<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> set總價<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> 總價<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.總價 <span style="color: #339933;">=</span> 總價<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">private</span> VO_烏龜資訊 v烏龜<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> 總價<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h5>筆記重點</h5>
<ul>
<li>控制類別的類別與方法 (class and method)名稱均是源自於上圖 4 於 EA 中所設計的 UML 控制類別。</li>
<li>訂購烏龜_Control.java 所宣告的三個公用方法 (public method)即是反映「訂購烏龜」使用案例內的動作步驟，參與者 (未來透過 JSP 實作)與系統 (本控制類別)之間的互動共有三次。</li>
<li>目前僅定義程式碼的框架 (skeleton)，故私有方法 (private method)省略，且回傳值僅回傳空值 (null)即可 (事實上，這可以視團隊開發節奏與寫碼熟悉度而加深細節)。</li>
<li>控制性的類別被歸類於「com.order.control」；而資料傳遞 (data transfer)類別則被歸類於「com.order.dto」。</li>
<li>以目前 Java 世界的主流，仍以資料物件 (data object)作為物件之間互動的參數傳遞與回傳值型態。相較於 .NET 作法，則以 DataSet (本質為 XML)為參數與回傳值的資料傳遞。</li>
<li>命名為 VO_ 開頭的物件 (如 VO_結帳資訊.java)即為資料物件。這類物件僅單純只有 「getter、setter」的取值方法，所以也被稱為「值物件 (value object)」。這些資料型物件就被歸類置於「com.order.dto」套件 (package)內。</li>
<li>切記！ VO 物件不等同於企業物件 (business object)－著重在企業邏輯的運算，或資料庫內的表格 (從邏輯分析而言應稱為 Entity，實體)－著重在領域概念 (domain concept)的資料結構。它僅是做為方便物件之間 (尤為在不同 tier 的傳遞，如 JSP → Control Object。)傳遞的參數與回傳值而已。</li>
<li>一般 VO 物件的設計規劃，並不需要特別嚴謹 (甚至是抱著快速且隨便的態度)。以本例而言，所設計的三種 VO 物件 (VO_烏龜資訊, VO_結帳資訊, VO_確認訂購資訊)，僅是在滿足表單與控制類別之間的資料傳遞而已。</li>
<li>至於資料庫的表格設計，一般稱之為 E-R (Entity-Relationship)設計，因會考量到共用性需求，所以會嚴謹許多。在未來的系統設計整合階段，VO 物件需經過轉換程序，透過 O-R Mapping 機制 (如 Hibernate)，寫入至資料庫 (反之亦然)。</li>
</ul>
<p>延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_07' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－07'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－07</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_06' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_05' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_04' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_03' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_08/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－07</title>
		<link>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_07</link>
		<comments>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_07#comments</comments>
		<pubDate>Wed, 30 Mar 2011 15:33:51 +0000</pubDate>
		<dc:creator>Kenming Wang</dc:creator>
				<category><![CDATA[軟體實作與編程技術]]></category>
		<category><![CDATA[軟體設計與分析]]></category>
		<category><![CDATA[學習筆記]]></category>
		<category><![CDATA[案例研討]]></category>
		<category><![CDATA[烏龜]]></category>
		<category><![CDATA[系統開發]]></category>

		<guid isPermaLink="false">http://www.kenming.idv.tw/?p=2078</guid>
		<description><![CDATA[七、Java 開發環境平台與建置 　 1. 下載與安裝所需 Java 開發工具 下載 JDK, Elipse IDE, Web Container, Portable Database： Java JDK v1.6 http://www.oracle.com/technetwork/java/javase/downloads/index.html Eclipse IDE for Java EE Developers v3.6 (Helios) http://www.eclipse.org/downloads/ Apache Tomcat 6.0 http://tomcat.apache.org/download-60.cgi Apache Derby (Pure Java DB) v.10 以上版本 http://db.apache.org/derby/ Tomcat 的角色如同在 Visual Studio .NET IDE 的 IIS，均是充當在 Web 專案開發下的 Web Container 機制。 VS.NET 幾乎無可選擇地，均是採用 [...]
延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_06' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_05' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_04' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_03' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_02' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－02'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－02</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<h4>七、Java 開發環境平台與建置</h4>
<p>　</p>
<h5>1.	下載與安裝所需 Java 開發工具</h5>
<ul>
<li>下載 JDK, Elipse IDE, Web Container, Portable Database：
<ul>
<li>Java JDK v1.6<br />
<a target="_blank" href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">http://www.oracle.com/technetwork/java/javase/downloads/index.html</a></li>
<li>Eclipse IDE for Java EE Developers v3.6 (Helios)<br />
<a target="_blank" href="http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a></li>
<li>Apache Tomcat 6.0<br />
<a target="_blank" href="http://tomcat.apache.org/download-60.cgi">http://tomcat.apache.org/download-60.cgi</a></li>
<li>Apache Derby (Pure Java DB) v.10 以上版本<br />
<a target="_blank" href="http://db.apache.org/derby/">http://db.apache.org/derby/</a></li>
</ul>
</li>
<ul>
<li>Tomcat 的角色如同在 Visual Studio .NET IDE 的 IIS，均是充當在 Web 專案開發下的 Web Container 機制。</li>
<li>VS.NET 幾乎無可選擇地，均是採用 IIS 作為 Web Container；而 Java Eclipse IDE，則可以選擇多種類型的 Web Container。本實作案例，以採用最普遍的 Tomcat 作為 Eclipse IDE 的主要 Web Container。</li>
<li>除了 Web Container，當然也需要有開發 (兼測試)用的資料庫。相較於 VS.NET 採用自家 SQL Express 作為開發用的資料庫，Java Eclipse 則從以往所常用的 hsqldb，如今更多開發人員推薦的是更為開放、輕巧的 apache derby、可被內嵌於 eclipse 的輕量級 (lightweight)資料庫系統，且亦可以利用 eclipse DTP (Data Tools Platform) 輕易地操作存取 derby 資料庫。本實作案例，即採用 apache derby 作為開發與測試用的資料庫系統。</li>
</ul>
<p><span id="more-2078"></span></p>
<h5>2.	設置 Tomcat 成為 Eclipse 開發環境內的 Web Container：</h5>
<ul>
<li>詳細安裝說明，可參考：<br />
<a href="http://www.zulutown.com/blog/2009/01/18/setup-tomcat6-on-eclipse/">http://www.zulutown.com/blog/2009/01/18/setup-tomcat6-on-eclipse/</a></li>
<li>Eclipse 選單 [Window] → [Preferences] → [Server] → [Runtime Environments]，【Add…】按鍵選擇 「Apache Tomcat 6.0」並設置其 Runtime 環境 (一般預設即可)。</li>
<li>在 Eclipse Server Panel 內，右鍵選擇 [New] → [Server]，在出現的對話框選擇 「Tomcat v6.0 Server」，一般照預設設定即可，然後按下【Finish】完成 Eclipse Web Container 設置。</li>
</ul>
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-07.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-07.png" alt="圖 7、新增 Tomcat 6 為 Eclipse Web Container" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 7、新增 Tomcat 6 為 Eclipse Web Container</font></p>
<h5>3.	確認已安裝 WTP (Web Tool Platform) plugin of Eclipse：</h5>
<ul>
<li>詳細安裝設定，可參考：<a href=" http://www.vogella.de/articles/EclipseWTP/article.html"> http://www.vogella.de/articles/EclipseWTP/article.html</a></li>
<li>可透過 Eclipse Update Manager, 確認下述類別內的套件已安裝：<br />
「Web, XML, and Java EE Development」套件內所有子套件 (除了「PHP Development」套件)。</li>
</ul>
<h5>4.	安裝 DTP (Data Tools Platform) plugin of Eclipse (資料庫管理工具)：</h5>
<ul>
<li>透過 Eclipse Update Manager, 確認下述類別內的套件已安裝 (預設未安裝)：<br />
「Database Development」→「Data Tools Platform Enablement Extender SDK」。</li>
</ul>
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-08.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-08.png" alt="圖 8、安裝 eclipse DTP plugin" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 8、安裝 eclipse DTP plugin</font></p>
<h5>5.	安裝 Derby plugin of Eclipse：</h5>
<ul>
<li>詳細安裝與相關設定，可參考：<br />
<a href="http://db.apache.org/derby/integrate/plugin_howto.html">http://db.apache.org/derby/integrate/plugin_howto.html</a></li>
</ul>
<ol>
<li>從 <a href="http://db.apache.org/derby/derby_downloads.html">http://db.apache.org/derby/derby_downloads.html</a> 下載：<br />
derby_core_plugin 與 derby_ui_plugin 兩個插件。 (以本例所下載的版本為：<br />
derby_core_plugin_10.7.1.zip,  derby_ui_doc_plugin_1.1.2.zip)</li>
<li>將上述兩個 .zip 壓縮檔解壓縮，並放置於 %ECLIPSE_HOME%/plugins 目錄下。注意，因壓縮檔的檔案均放置於 /plugins 目錄下，所以應該是解壓縮至 %ECLIPSE_HOME%；總之，在 %ECLIPSE_HOME%/plugins 目錄下，當解壓縮後，會新增如下三個子目錄 (視所下載的版本)：<br />
org.apache.derby.core_10.7.1,  org.apache.derby.ui_1.1.2,  org.apache.derby.plugin.doc_1.1.2</li>
<li>重新啟動 Eclipse。在爾後任何所創建的 Java 專案，點擊專案名稱後，按下右鍵後應會出現 [Apache Derby] → [Add Apache Derby nature]，選擇後即可加入 Derby函式庫 (Libraries)。
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-09.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-09.png" alt="圖 9、在專案中新增 Derby Library" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 9、在專案中新增 Derby Library</font></p>
</li>
<li>新增 Derby 函式庫後，再點擊專案名稱，按下右鍵，在所出現的本文選單內，即會出現 Apache Derby 的管理選項，包括 啟動 (Start)、停止 (Stop)「Derby Network Server」。
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-10.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-10.png" alt="圖 10、Apache Derby Network Server 啟動選項" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 10、Apache Derby Network Server 啟動選項</font></p>
</li>
<li>啟動 Derby Network Server，在 eclipse [Console] view 中，會顯示相關的啟動訊息。例如：<br />
「Apache Derby 網路伺服器 - 192.168.1.168 - (1040133) 已啟動，並且準備接受連接埠 1527 上的連線」。</p>
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-11.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-11.png" alt="圖 11、Console 會顯示 Derby 啟動的相關訊息" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 11、Console 會顯示 Derby 啟動的相關訊息</font></p>
</li>
</ol>
<p>延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_06' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_05' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_04' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_03' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_02' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－02'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－02</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_07/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－06</title>
		<link>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_06</link>
		<comments>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_06#comments</comments>
		<pubDate>Thu, 24 Mar 2011 09:33:20 +0000</pubDate>
		<dc:creator>Kenming Wang</dc:creator>
				<category><![CDATA[軟體實作與編程技術]]></category>
		<category><![CDATA[軟體設計與分析]]></category>
		<category><![CDATA[學習筆記]]></category>
		<category><![CDATA[案例研討]]></category>
		<category><![CDATA[烏龜]]></category>
		<category><![CDATA[系統開發]]></category>

		<guid isPermaLink="false">http://www.kenming.idv.tw/?p=2028</guid>
		<description><![CDATA[六、利用循序圖表達系統內部物件的互動 對每一個要實現的使用案例，開發人員可以利用一到多張的循序圖 (包括正常劇本、例外處理與擴展性的劇本)，表達未來程式碼在系統執行期間 (Run‐time)的物件互動情形。 在循序圖內，大致列出主要參與的物件角色 (較偏 開發人員 所設計的物件，而非系統面的物件)。 請注意，循序圖內主要表達的是物件之間的互動，所以在如 EA 工具中，將位於 「Project Browser」視窗內所拖曳至畫面內的 UML 圖形元素時，需要設定為「物件 ( instance)」，而非用連結 (link)。參考如下圖 5所示。 （點擊圖片鏈接看原圖）圖 5、循序圖內的元素主要為物件 循序圖內的物件配置，主要分成兩大類： 利用棒形人偶圖示所表達的參與者。包括 UI 表單畫面、資料庫系統、外部系統，均以該圖示表達。 位於中層間開發人員所設計的物件，包括 控制、邊界 (boundary)、領域 (domain)、資料、工具 (utility)或系統服務等類型。一般均使用長方形的 UML 物件圖表示。 為了方便觀察物件之間的訊息互動傳遞，可以在循序圖的最左側中，新增一個“註釋 (Note)”，然後把該使用案例的主要文字敘述“貼 (Paste)”在 Note 內容內。 （點擊圖片鏈接看原圖）圖 6、在循序圖內規劃主要參與的物件與其之間互動的訊息 觀察上圖 6，有些訊息名稱前面加上 “//” 即代表註解 (comment)的意思，代表的是與該物件的互動，並沒有一個特定的方法 (或 API)可供呼叫。 例如與 RDB 的連結，它僅能透過 SQL 敘述的呼叫，所以用如 “//SELECT SQL” 與 “//INSERT [...]
延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_05' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_04' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_03' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_02' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－02'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－02</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_01' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－01 (4/25 新增原始碼下載)'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－01 (4/25 新增原始碼下載)</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<h4>六、利用循序圖表達系統內部物件的互動</h4>
<p>對每一個要實現的使用案例，開發人員可以利用一到多張的循序圖 (包括正常劇本、例外處理與擴展性的劇本)，表達未來程式碼在系統執行期間  (Run‐time)的物件互動情形。</p>
<ol>
<li>在循序圖內，大致列出主要參與的物件角色 (較偏 開發人員 所設計的物件，而非系統面的物件)。<br />
請注意，循序圖內主要表達的是物件之間的互動，所以在如 EA 工具中，將位於 「Project Browser」視窗內所拖曳至畫面內的 UML 圖形元素時，需要設定為「物件 ( instance)」，而非用連結 (link)。參考如下圖 5所示。</p>
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-05.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-05.png" alt="圖 5、循序圖內的元素主要為物件" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 5、循序圖內的元素主要為物件</font></p>
</li>
<p><span id="more-2028"></span></p>
<li>循序圖內的物件配置，主要分成兩大類：
<ul>
<li>利用棒形人偶圖示所表達的參與者。包括 UI 表單畫面、資料庫系統、外部系統，均以該圖示表達。</li>
<li>位於中層間開發人員所設計的物件，包括 控制、邊界 (boundary)、領域 (domain)、資料、工具 (utility)或系統服務等類型。一般均使用長方形的 UML 物件圖表示。</li>
</ul>
<p>為了方便觀察物件之間的訊息互動傳遞，可以在循序圖的最左側中，新增一個“註釋 (Note)”，然後把該使用案例的主要文字敘述“貼 (Paste)”在 Note 內容內。</li>
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-06.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-06.png" alt="圖 6、在循序圖內規劃主要參與的物件與其之間互動的訊息" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 6、在循序圖內規劃主要參與的物件與其之間互動的訊息</font></p>
<li>觀察上圖 6，有些訊息名稱前面加上 “//” 即代表註解 (comment)的意思，代表的是與該物件的互動，並沒有一個特定的方法 (或 API)可供呼叫。
<p>例如與 RDB 的連結，它僅能透過 SQL 敘述的呼叫，所以用如 “//SELECT SQL” 與 “//INSERT SQL” 等來代表控制物件與資料庫的互動意涵。</li>
</ol>
<ul>
<li>請注意！ 循序圖不是要表達的精細。重點是在為了完成某個功能 (從使用案例敘述的分析而來)時，值得<strong>所關注的參與物件</strong>，以及這些<strong>物件之間的訊息傳遞</strong>。</li>
<li>已經有一些 UML 工具，可以透過程式碼的靜態掃瞄，而能模擬在系統在動態期間，所產生的物件與之間的訊息傳遞互動，並反轉 (reverse)為 UML 循序圖以供開發人員檢視物件的動態相依與訊息追蹤，相當實用。
<p>可以參考 HSDc. Sequence-generator plugin for EA：<br />
<a href="http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-04">http://www.kenming.idv.tw/source-code_with_uml_class_seq_diagram_relationship-04</a>
</li>
</ul>
<p>延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_05' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_04' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_03' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_02' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－02'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－02</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_01' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－01 (4/25 新增原始碼下載)'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－01 (4/25 新增原始碼下載)</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_06/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－05</title>
		<link>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_05</link>
		<comments>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_05#comments</comments>
		<pubDate>Tue, 22 Mar 2011 01:18:37 +0000</pubDate>
		<dc:creator>Kenming Wang</dc:creator>
				<category><![CDATA[軟體實作與編程技術]]></category>
		<category><![CDATA[軟體設計與分析]]></category>
		<category><![CDATA[學習筆記]]></category>
		<category><![CDATA[案例研討]]></category>
		<category><![CDATA[烏龜]]></category>
		<category><![CDATA[系統開發]]></category>

		<guid isPermaLink="false">http://www.kenming.idv.tw/?p=2015</guid>
		<description><![CDATA[四、表達使用案例與實作的實現關係 (Use Case Realization) （點擊圖片鏈接看原圖）圖 3、表達使用案例與實作的實現關係 若以物件導向的觀念實現使用案例，則系統內部的設計當以物件互動的合作 (collaboration)，如 UML 循序圖 (sequence diagram)、溝通 (communication)圖等來表達。其作用為突顯該使用案例的功能，由 1 到 多個物件 (一般指位於中間層, middleware 內的物件)，在系統執行期間 (run-time)，透過訊息 (message)的傳遞，來達成功能的實現。 五、為每一個使用案例，設計並配置一個功能性的控制類別 （點擊圖片鏈接看原圖）圖 4、為每一個使用案例配置控制類別 控制類別在本例係使用 pure Java 撰寫。被部署 (deploy)於中間層 (middle-tier)，擔任 MVC 架構中控制者 (controller)的角色。 控制類別的命名建議： 「使用案例名稱」+「_Control」。 以「訂購烏龜」使用案例為例，其控制類別的命名為「訂購烏龜_Control」。 控制類別內的操作 (operation)、在 Java 語言則稱為方法 (method)，為來自於使用案例敘述的動作步驟說明。 在「訂購烏龜」UC 的動作步驟分析中，得以發掘出 "訂購烏龜_Control" 類別與參與者 (actor, 在本例為客戶)的互動次數共有三個：「列出烏龜清單()」、「結帳()」、「SaveOrder()」。 至於「計算訂購金額()」則為該物件內的私有方法 (private method)，並不需要讓外界物件來操使用。 每一次的互動，即為系統的"代理人"，也就是控制類別會提供讓參與者來呼叫 (call)的方法；另外也可以透過觀察在設計循序圖時，參與者與控制物件互動的過程中，其訊息 (message)的互動傳遞情形，再由其定義出控制類別的"方法"、"參數"、"回傳值"等。 (一般而言，這兩種方法會在設計過程中交替運用，並沒有絕對的先後關係。) 若為了要能確實將在 [...]
延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_04' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_03' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_02' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－02'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－02</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_01' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－01 (4/25 新增原始碼下載)'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－01 (4/25 新增原始碼下載)</a></li>
<li><a href='http://www.kenming.idv.tw/site-dialog_add_software-design-online-tutorials_block' rel='bookmark' title='[建站日誌] 新增「軟體設計線上教材區」'>[建站日誌] 新增「軟體設計線上教材區」</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<h4>四、表達使用案例與實作的實現關係 (Use Case Realization)</h4>
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-03.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-03.png" alt="圖 3、表達使用案例與實作的實現關係" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 3、表達使用案例與實作的實現關係</font>
</p>
<ul>
<li>若以物件導向的觀念實現使用案例，則系統內部的設計當以物件互動的合作 (collaboration)，如 UML 循序圖 (sequence diagram)、溝通 (communication)圖等來表達。其作用為突顯該使用案例的功能，由 1 到 多個物件 (一般指位於中間層, middleware 內的物件)，在系統執行期間 (run-time)，透過訊息 (message)的傳遞，來達成功能的實現。</li>
</ul>
<p><span id="more-2015"></span></p>
<h4>五、為每一個使用案例，設計並配置一個功能性的控制類別</h4>
<p align="center">
<a href="http://files.hsdc.idv.tw/soft_imgs/case-study_turtle_by_uml_and_java-04.png" target="_blank"><img src="http://files.hsdc.idv.tw/soft_imgs/thumb_case-study_turtle_by_uml_and_java-04.png" alt="圖 4、為每一個使用案例配置控制類別" /></a><br />
<font color="red" size="-1">（點擊圖片鏈接看原圖）圖 4、為每一個使用案例配置控制類別</font></p>
<ul>
<li>控制類別在本例係使用 pure Java 撰寫。被部署 (deploy)於中間層 (middle-tier)，擔任 MVC 架構中控制者 (controller)的角色。</li>
<li>控制類別的命名建議： 「使用案例名稱」+「_Control」。 </li>
<li>以「訂購烏龜」使用案例為例，其控制類別的命名為「訂購烏龜_Control」。</li>
<li>控制類別內的操作 (operation)、在 Java 語言則稱為方法 (method)，為來自於使用案例敘述的動作步驟說明。</li>
<li>在「訂購烏龜」UC 的動作步驟分析中，得以發掘出 "訂購烏龜_Control" 類別與參與者 (actor, 在本例為客戶)的互動次數共有三個：「列出烏龜清單()」、「結帳()」、「SaveOrder()」。</li>
<li>至於「計算訂購金額()」則為該物件內的私有方法 (private method)，並不需要讓外界物件來操使用。</li>
<li>每一次的互動，即為系統的"代理人"，也就是控制類別會提供讓參與者來呼叫 (call)的方法；另外也可以透過觀察在設計循序圖時，參與者與控制物件互動的過程中，其訊息 (message)的互動傳遞情形，再由其定義出控制類別的"方法"、"參數"、"回傳值"等。<br />
(一般而言，這兩種方法會在設計過程中交替運用，並沒有絕對的先後關係。)</li>
<li>若為了要能確實將在 UML 表達的設計類別，與實作的程式碼同步，則同時需要設定控制類別未來要"code-gen"的程式語言，以及控制類別所在的命名空間 (name space)。<br />
在本例中，控制類別要"code-gen"為 [Java]， 命名空間 (name space) 則置於「com.order.control」package 內。</li>
<li>在 EA 的工具中，還需要指定"code-gen"時的 "name space" 根目錄為"com"。設定方式為在 [Project Browser] 視窗中，滑鼠右鍵點擊 [Logical View] → "com"，選擇 [Code Engineering] → [Set as Namespace Root]。</li>
<li>UML 類別與程式碼的直接對應，並期望藉由工具能達成一致性的同步關係，稱為軟體的正反向工程 (software forward/reverse engineering)。</li>
<li>建議中小型且開發人數不多的專案，不要為維護正反向工程 (保持一致性關係)耗費太多精力與時間。寧願將 UML 的設計圖，包括類別與循序圖，比較偏向是草稿式 (draft)的作法 (如此才能專注發揮腦力激盪的設計工作)。<br />
而相關於精確性的細節 (例如類別的參數、回傳值等資料型態)，則直接落實於程式碼的實作即可。</li>
<li>在本例中，只利用 EA 工具所設計的控制類別，只包括類別名稱與操作方法名稱。至於參數與回傳值等資料型態等，則直接在程式碼內實作即可。</li>
</ul>
<p>延伸閱讀：<ul>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_04' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－04</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_03' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－03</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_02' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－02'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－02</a></li>
<li><a href='http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_01' rel='bookmark' title='[案例研討] 烏龜訂購系統開發與實作 by UML and Java－01 (4/25 新增原始碼下載)'>[案例研討] 烏龜訂購系統開發與實作 by UML and Java－01 (4/25 新增原始碼下載)</a></li>
<li><a href='http://www.kenming.idv.tw/site-dialog_add_software-design-online-tutorials_block' rel='bookmark' title='[建站日誌] 新增「軟體設計線上教材區」'>[建站日誌] 新增「軟體設計線上教材區」</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.kenming.idv.tw/case-study_turtle_order_system_develop_and_implement_by_um-and-java_05/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

