Monday, July 1, 2013

測試的友善開發&敏捷設計

將所有程式分解為類別與方法的方式中,最好的分解方式常常也是最容易測試的方法,另一方面,假設程式彼此十分緊密,類別間有許多交互的方法呼叫,所有類別都有很多參數,這樣程式不只會難以理解,測試程式碼將會變的醜陋、難讀。

Wednesday, April 24, 2013

Design Patterns-Mediator pattern

用一個仲介物件來封裝一系列的物件互動。仲介者使用各物件不需要顯式相互參考,從而使其耦合鬆散,而且可以獨立地改變它們之間的互動。

Sunday, March 17, 2013

Unity3D_EditorWindow_Note

Unity 自訂Editor的視窗

  • 一旦他是Ediroe class,必須把Script放在專案資料夾Assets/Editor。
  • namespace在UnityEditor,因此必須using UnityEditor。

Saturday, March 9, 2013

C++_Smart Pointer_Naked Pointer_Note

當使用到 new這個關鍵字時,在C++則必須一定要做Delete的動作(Release),防止產生Memory leak。

Monday, February 25, 2013

C++_SelectionSort_DataStructure_Note

SelectionSort Steps:
假設有N筆資料,將他儲存至data陣列中。

1.從頭到尾選出最小的資料,然後將該筆資料輸出,再以一個足夠大的數,取代該筆資料。
2.重複上列動作直到所有N筆資料都被選出。

Friday, January 4, 2013

Books-Design Patterns

大話設計模式 (作者:程杰) :

這本主要是以C# 來編寫 GoF 的Design Patterns,是一本很不錯的工具書,不過在解釋 Object Oreient Desing (SOLID)六個原則內容上稍微薄弱了一點。

設計模式之禪(作者:秦小波):

這本主要是以Java來編寫GoF的Design Pattern,也是一本比較適合當工具書來用,解釋OOD的六大原則,是我看過最詳盡且好懂得,介紹GoF的範例所使用的故事這部分我反而覺得大話設計模式比較親切。

深入淺出設計模式(歐萊禮):

一樣是以Java來編寫,不過個人認為它算是學習用的書籍,如果完完全全的初學Design Pattern看這本觀念會學很快,我認為它不能夠成為工具書的原因:不好查閱。不過這本在末章有介紹到MVC(Model View Controller)的Pattern,不過MVC因該可以歸類成 Architect pattern。


個人認為:
完全得初學者可以看歐萊禮-深入淺出設計模式。
工具書選擇會是 大話設計模式(GoF的Pattern解釋比較親切)或設計模式之禪(OOD解釋比較好)。
最好還是3本都看過...

另一本

物件導向設計模式:可再利用物件導向軟體之要素(譯者:葉秉則)

如果C++很熟練的人可以看看....

Sunday, December 30, 2012

Design Patterns-Object Oriented Design

Oject Orient Design:提到SOLID(WIKI)

包含了6個原則,原則通常會隨著專案可能會違背這些原則,但這些原則可以幫助你在設計時所要考慮因素,為何要違背某一原則?是為了其他類別?在這專案下違背了影響層面很小?

Saturday, December 22, 2012

Desing Pattern–Overview

Design Pattern:

    如果發現處於某種情境下,面對著一群限制的問題,正影響著所欲達成的目標,然而,你能夠採用某個設計,克服這些限制並達到該目標,將你領向某個解決方案。
問題
情境
解決方案
模式是一種被證實過的設計經驗,可以避免某些常見的錯誤。
模式是共通詞彙,能夠讓我們和其他開發者之間,針對設計進行溝通。

Saturday, December 15, 2012

Design Patterns-Command Patterns

將一個請求封裝為物件,讓你可用不同的請求對客戶進行參數化。對請求排隊或記錄請求日誌,以及支援可取消的操作。

Wednesday, December 12, 2012

Windows Socket & C++ Basic UDP Socket

UDP Socket

1.之間不用建立連線

2.對客戶端來說建立socket後,直接把資料丟向Server

Monday, December 10, 2012

Windows Socket & C++ Basic TCP Socket

TCP server/Client Basic

TCP

TCP連線

重構-Code Refactoring-Vol.2

1.Replace Temp with Query

2.Introduce Explaining Variable

3.Split Temporary Variable

4.Remove Assignments to Parameters

5.Replace Method with Method Object

6.Substitute Algorithm

Design Patterns-Singleton Pattern& Thread

Singleton Patterns

保證一個類別僅有一個Instance,並提供一個全域訪問點。

1.該物件自行決定是否被Instance,而不是靠其他物件初始化。(將該物件的Constructor需告成Private)。

2.因建構子私有化,所以產生一個Method為公有化(物件為Publuc 、Static)。

Sunday, December 9, 2012

Windows Sockets & C++

網路程式-C/S、B/S

Client/Server:C/S

1.Client將需求傳遞給Server,再將Server回傳的結果已一定形式提供給使用者。
2.Server通常處於休眠狀態,直到客戶端對該伺服器發出連線請求,將其喚醒。

Browser/Server:B/S

1.客戶端執行瀏覽器,瀏覽器以超文字形式向Web伺服器提出存取資料庫請求。
2.Web瀏覽器是客戶端主要的軟體,系統功能實作的核心部分集中到伺服器上。

Friday, December 7, 2012

Component-based Development & XNA & Design Patterns

他強調把程式碼的功能性分開的軟體開發過程。

Component based Programming在遊戲引擎裡被廣泛得運用,如Unity3D:

ComponentUnity

Component Based Programming由三個主要構成:

System: 處理Render、Physics、Particle。

Entries:又稱為GameObject,出現在遊戲引擎畫面上的物件(游標、地板…等)。

Component:一個Entries可能會包含數個Componets,為這物件添加功能如Box Collider(物件碰撞網格)、Mesh Renderer(Render畫面)。

Thursday, December 6, 2012

Design Patterns-Memento Pattern

備忘錄模式-在這如果我想做一個遊戲,以RPG來說,在進入遊戲戰鬥時我可以讓玩家選擇重新開始這場戰鬥,就像FFXIII玩家可以在戰鬥中隨時重新挑戰怪物更高分數、不同打法,

那該如何儲存腳色能力?

Monday, December 3, 2012

重構-Code Refactoring Principles


Why Code Refactoring Work:

1.難以閱讀的程式,難以修改。
2.邏輯重複,難以修改。
3.添加行為時需要修改現有程式碼,難以修改。(同時違反Desing Patterns:Open Close Principle)
4.複雜條件邏輯程式,難以修改。



Indirection and Refactoring:

1.Enable sharing of logic

一個sunmethod在兩個不同的地點被呼叫,或是superclass中的method被subclasses共享。

2.To explain intention and implementation separately:

選擇每個Class和Method的名字,來解釋自己意圖的機會。Class或Method內部解釋和實現這意圖的做法。

3.To isolate change:

在兩個不同地點同時使用同一個物件,其中一個地點想改變物件行為,則產生"同時影響兩處"的風險。為此可做出一個subclass,並在需要修改處引用這個subclass,這樣就不必承擔這風險。


4.To encode conditional:

利用polymorphism,可以靈活彈性而清楚地表達條件邏輯。(Desing Patterns:strategy pattern)。

重構是為了"未來"而不是為了"當下"。


Don't Do Code Refactoring when Project is reach Deadline.

從重構過程贏的生產力只有在最後期限過後才能夠體現出來,所以當專案已近最後期限,避免重構。

Tuesday, November 20, 2012

C++&CLR&CLI&MFC


CLR 共通語言執行環境:

1.提供一個標準化且提供 Visual Basic、C#、C++多種高階語言撰寫之程式執行環境。
2.可以使用.Net Framework相關的DLL,CLR一定要裝.Net Framework。

3.寫出得Dll 可以直接被 Visual studio參考。

CLI共通語言規範:

1.CLR就是實作Microsoft的 CLI。
2.CLI 實質上是一個 Virtual machine,讓高階語言撰寫的應用程式,可以在不修改及重新編譯原來的原始程式碼之情形狀況下,於不同的系統環境中執行。

3.CLI 可以開發有關 CLR和MFC得技術。

MFC Microsoft Foundation Classes:

1.不需要安裝.Net Framework,換句話說不能使用 .Net Framework 的Dll

CLR

using namespace System: //使用.Net Framework的DLL
Console::Write(L"ASD");

int^ 、String^
可追蹤的Handle: (C++/CLI 環境下)
儲存位址,並且當堆積(Heap)做記憶體空間重整,移動其所參考的物件時,記憶體回收機制會自動更新儲存的位址。
CLR陣列跟C++陣列不同。
array^
也可
array^ 字串陣列,其元素是Handle 可追蹤。


C++


nullptr 常用於把指標指定成null。(指定成0,其不夠直觀)

int* pNumber(nullptr);