講稿分布式計(jì)算_第1頁(yè)
講稿分布式計(jì)算_第2頁(yè)
講稿分布式計(jì)算_第3頁(yè)
講稿分布式計(jì)算_第4頁(yè)
講稿分布式計(jì)算_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Thinking in C+ Class Design Baoyongjun 2004-10-12How to Use C+ Design Class1. Details about Class Interface2.Design Class1.Interface參數(shù)(指針,引用,常量,普通變量)int Bank:set_account(Account a);? int Bank:set_account(Account &a);? int Bank:set_account(const Account a);? int Bank:set_account(const Account & a);?

2、int Bank:set_account( Account *pa);?Interface返回值(指針,引用,常量,普通變量) void Bank:get_account(Account a);? void Bank:get_account( Account *pa);? Account Bank: get_account();? Account & Bank: get_account();? Account * Bank: get_account();? const Account & Bank:get_account();?Interface虛函數(shù)(非虛函數(shù),純虛函數(shù)) 類需要被繼承嗎?(

3、NONO) Yes 有多態(tài)性嗎?(NO-NO) Yes父類需要實(shí)例化嗎? Interface虛函數(shù)(非虛函數(shù),純虛函數(shù)) 我掌握虛函數(shù)了嗎?Interface虛函數(shù)(非虛函數(shù),純虛函數(shù)) 我真正掌握了虛函數(shù)嗎(多態(tài))? 內(nèi)在原因:動(dòng)態(tài)綁定this指針 Virtual void A:func(); Void A:func(); Virtual A:func()=0 虛函數(shù)vs非vs純虛,what s the difference? 繼承接口(overwrite) 或 接口和實(shí)現(xiàn)Interface虛函數(shù)(非虛函數(shù))class APublic: A(int n):i(n) void print1()

4、cout“A:i”iendl; Void print2() vprint(); Virutal void vprint() cout“A:i”iendl;Private: int i;class B:public APublic: B(int n):A(0)i=n; void print1()cout“B:i”iendl; Virutal void vprint() cout“B:i”iprint1(); p-pirnt2(); p-vprint();Interface構(gòu)造函數(shù) 無(wú)參的構(gòu)造函數(shù)(缺省的構(gòu)造函數(shù)就是.需要嗎?)單參數(shù)的構(gòu)造函數(shù)(有哪些副作用,隱式類型轉(zhuǎn)換. string strN

5、ame=“baoyongjun”;調(diào)用了哪些函數(shù)? string strName; strName=“baoyongjun”; ?拷貝構(gòu)造函數(shù)(怎么聲明)Interface拷貝構(gòu)造函數(shù) A:A(A a); A:A(A &a); A:A(const A &a); 哪一個(gè)是正確的?Interface析構(gòu)函數(shù)需要嗎?你有資源分配嗎?成員函數(shù)負(fù)責(zé)釋放分配的資源嗎?NO加入析構(gòu)函數(shù).勿忘虛析構(gòu)函數(shù)Class A;Class B:public APrivate : char *m_pch;A *p=new B;Delete p;/whoese destructor? A .Lead to memory l

6、eakOthers內(nèi)聯(lián)(時(shí)間效率,空間每一個(gè)obj中均包含函數(shù)體實(shí)現(xiàn). 空間換時(shí)間)公有,私有,保護(hù),公有繼承(is-a-kind of),私有繼(implemented with)2.Class設(shè)計(jì)過(guò)程中明確自己的設(shè)計(jì)目標(biāo)我要做什么, 僅僅根據(jù)規(guī)則和習(xí)慣是不夠的.對(duì)于不同的設(shè)計(jì)方案的取舍,要有自己的思考.今天我以閆老師布置的網(wǎng)絡(luò)通信程序?yàn)槔? 和大家交流一下我在這方面的一些想法.ClassTask:一個(gè)客戶端,一個(gè)服務(wù)器端.支持TCP/UDP.平臺(tái)是Linux.語(yǔ)言C+.Class實(shí)現(xiàn)起來(lái)可以很快,以服務(wù)器端為例.Int main()If(TCP) s=socket();Bind(s);Li

7、sten(s);sClient=Accept(s,);recv(sClient,data);send(s,data);if(UDP)Class上面的代碼不能另人滿意從C+的觀點(diǎn)看,上面的實(shí)現(xiàn)存在著問(wèn)題.Class它不是C+程序,而是C程序.用了cout,cin)不表示他是CPP的.代碼有很多的冗余. 對(duì)于TCP和UDP是用了大量的重復(fù)代碼.沒(méi)有很好的擴(kuò)展性.(windows,多客戶端,使用不同的socket I/O 模型,傳送文件).滿足這些需求,你要重寫這些main函數(shù).如果這些需求是逐個(gè)過(guò)來(lái)的,工作量可想而知.Class可維護(hù)性不佳.用這種方式編程,代碼增長(zhǎng)到一定量級(jí)后,程序的稍許變化,會(huì)

8、帶來(lái)大量的bug.Class目標(biāo).有了這些想法后,我為我的程序制定了如下目標(biāo).目標(biāo):reusable,extensible,readable,lightly packet.Class手段:封裝.1.封裝socket網(wǎng)絡(luò)編程接口 (socket API).2.封裝socket I/O 模型3.封裝通信協(xié)議.(TCP /UDP).Class我希望通過(guò)好的封裝能夠使我的程序做少量改動(dòng)就能運(yùn)行于windows,就能支持windows/linux 下的Select模型,windows下的基于窗口消息的異步事件選擇模型/基于事件(event)的異步事件選擇模型 甚至完成端口模型(如果可能).就能支持TCP

9、/UDP. 注:這邊我思考的平臺(tái)是windows.Class設(shè)想的幾個(gè)類.支持TCP和UDP通信Communicator municator municator封裝socket編程接口MSocketMSocketServ封裝IO模型NWIOModelSelectModelWindowsMsgModelWindowsEventModelClassMServSocketMSocketCommunicator muniator municatorClassClassNWIOModelSelectModelMSocketClassMSocket類如何同時(shí)支持TCP/UDP以send為例MSocket:

10、send() municator-send() municator 指 /向Communicator類,有Communicator完成實(shí)際的/操作,分析類圖1.實(shí)際上是bridege模式,將接口和實(shí)/現(xiàn)分離ClassNWIOModel如何封裝IO模型提取各種模型的共同點(diǎn)如下,一個(gè)模型的工作流程While(1) 注冊(cè)感興趣的網(wǎng)絡(luò)事件/可讀,可寫 等待事件 取事件 處理事件 ClassNWIOModel的接口Class NWIOModel virtual regist(MSocket *p,int event);Virtual has_sig_event();Virtual get_event(M

11、Socket *p,int &event);Class用上述類寫的Main 函數(shù) MServSocket servSock;servSock.create(MSocket:TCP);/UDPservSock.bind();servSock.listen();NWModel*pModel=new SelectModel;/other modelwhile(1)MSocket *pSock=NULL,*pSockClient=NULL;for(every client socket)pModel-regist(NWIOModel:R_ACCEPT,&servSock);pModel-regist(NWIOModel:R_READ,pSockClient),pModel-regist(NWIOModel:R_WRITE,pSockClient);int iEvent=-1;bool bRet=true;if(pModel-has_sig_event()while(pModel-get_event(pSock,iEven

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論