Monday, December 10, 2012
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:
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玩家可以在戰鬥中隨時重新挑戰怪物更高分數、不同打法,
那該如何儲存腳色能力?
Tuesday, December 4, 2012
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 的DllCLR
using namespace System: //使用.Net Framework的DLLConsole::Write(L"ASD");
int^ 、String^
可追蹤的Handle: (C++/CLI 環境下)
儲存位址,並且當堆積(Heap)做記憶體空間重整,移動其所參考的物件時,記憶體回收機制會自動更新儲存的位址。
CLR陣列跟C++陣列不同。
array
也可
array
C++
nullptr 常用於把指標指定成null。(指定成0,其不夠直觀)
int* pNumber(nullptr);
Friday, November 16, 2012
C++ & MFC Practice
MFC 應用程式
建立應用程式類別
1.繼承CWinApp2.直接使用CFrameWnd 類別產生視窗
專案設定:
MFC的使用 : 使用MFC靜態程式庫字元集:使用多位元組字元集
#include
class MyApp: public CWinApp
{
public :
BOOL InitInstance()
{
CFrameWnd *Frame = new CFrameWnd();
m_pMainWnd = Frame;
Frame->Create(NULL,"Hello MFC");
Frame->ShowWindow(SW_SHOW);
return true;
}
};
MyApp a_app; //Build Application
---------------------------------------------------------------------------------------
VC++ Window API
WindowAPI
| |
WinMain() WindowProc
程式起始 訊息
WNDCLASSEX: 定義視窗。
ZeroMemory:設定應用程式位址。
決定視窗所有屬性。
處理視窗訊息。WindlwProc
Ready to initialize DirectX 3D.
#include
#include
LRESULT CALLBACK WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrvInstance,LPSTR lpCmdLine,int nCmdShow)
{
HWND hWnd;
WNDCLASSEX wc;
ZeroMemory(&wc,sizeof(WNDCLASSEX));
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.lpszClassName = L"WindowClass1";
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
RegisterClassEx(&wc);
RECT wr = {0,0,500,400};
AdjustWindowRect(&wr,WS_OVERLAPPEDWINDOW,false);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hIcon = LoadIcon(0,IDI_APPLICATION);
hWnd = CreateWindowEx(NULL,
L"WindowClass1",
L"Our First Windowed Program",
WS_OVERLAPPEDWINDOW,
300,300,
wr.right - wr.left,
wr.bottom - wr.top,
NULL,NULL,
hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
HDC hDC;
PAINTSTRUCT PaintSt;
RECT aRect;
hDC = BeginPaint(hWnd,&PaintSt);
GetClientRect(hWnd,&aRect);
DrawText(hDC,L"First Window SDK Programing With D3D",
-1,&aRect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hWnd,&PaintSt);
return 0;
case WM_LBUTTONDOWN:
break;
case WM_LBUTTONUP:
break;
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}break;
}
return DefWindowProc(hWnd,message,wParam,lParam);
}
-----------------------------------------------------------------------------------------------------------------------
Design Pattern & Software development
Inversion of Control
創立一個Interface 讓高階模組和低階模組可以共同存取溝通所需要的值。
Test Drive Development
Visual studio 2012 用法:
http://channel9.msdn.com/Events/TechEd/Europe/2012/DEV214
Sunday, November 11, 2012
OOA&D and sofeware development-Note
A.Unit Test:
Test Drive Development,TDD:1.先了解User Case、User Stroy,其結果。2.Unit Test 不包含邏輯。3.測試成功在實作程式碼。4.程式測試其結果而不是Developer做測試。5.Code Refactroing。B.(Inversion of Control,IoC)
1."降低類別或模組間的耦合度"。2.Dependency Injection。3.Game Development: Reference Manager。
4. Low Coupling。
Memory Leak:
C/C++並沒有Garbage Collection,手動釋放資源 Null、移除參照。
C#、Java也可能會發生。
1.宣告指標變數時一律給予初值。2當delete某指標後,其務必將其內容設為NULL。
Subscribe to:
Posts (Atom)