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.

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