人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

傳道解惑 軟件開發(fā)技術(shù)名詞解密

傳道解惑 軟件開發(fā)技術(shù)名詞解密

更新時間:2022-07-14 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

序:去年為了總結(jié)自己所學(xué)習(xí)/接觸過的技術(shù),也順便為初學(xué)者少走彎路指明一些方向,可惜后來諸事纏身未能繼續(xù),十分遺憾,現(xiàn)放到自己的BLOG上來鼓勵自己將此繼續(xù)下去。

    "Win32編程”

  很不幸,我從開始學(xué)習(xí)編程到理解這個名詞中間隔了很長的時間(上個世紀(jì)的學(xué)習(xí)環(huán)境可見一斑)。很長時間里我都不明白32是指什么,我用過Dos,Win31,win95,win97...但好像沒用過名為Win32的操作系統(tǒng)啊?很久以后我才知道,32在這里并不是指操作系統(tǒng)的版本號,而是指32位。微軟操作系統(tǒng)在win31及其以前都是DOS系統(tǒng),windows只是在dos下運行的一個大程序而已。在其后win95則稍有改變,windows除了DOS核心以外也真正成為了操作系統(tǒng)的一部分,提供著各類操作系統(tǒng)提供的服務(wù)。應(yīng)該說,在win95之后的windows(新近的64位win系統(tǒng)以前)都可以稱之為win32系統(tǒng)平臺(95/98實際上是16與32位混合)。所以在這樣的平臺上,直接或間接使用系統(tǒng)提供的API編程,就稱之為Win32編程。對Visual Studio而言,Win32編程一般指SDK、MFC、ATL這幾類開發(fā)方法,其中ATL在國內(nèi)應(yīng)用不是很廣泛,一般應(yīng)用于以COM組件為架構(gòu)的中大型軟件產(chǎn)品。

  "SDK" :Software Development Kit,常譯為軟件開發(fā)(工具)包

  在Win32編程領(lǐng)域一般指與MFC這類框架編程相區(qū)別的,直接調(diào)用Windows提供的API的開發(fā)方式,與字面原意有一些區(qū)別。另外一個經(jīng)常見到的說法就是某軟件(硬件)帶有自己的一套SDK,這里其實一般是指一套API庫函數(shù)或者類庫,供上一層的開發(fā)者調(diào)用。又譬如常說的DX的SDK,其實是微軟開發(fā)的一套COM組件,供上層開發(fā)者使用。總之,供程序員使用的比較完備的代碼庫,就可以稱之為SDK;

  “MFC”: Microsoft Fundation classes 微軟基礎(chǔ)類庫

  大家都知道,使用SDK編程方式往往有很多每次都重復(fù)的固定不變的一些代碼,為了提高編程的效率,減少上千個API帶給開發(fā)人員巨大的精神壓力,微軟開發(fā)出了這么一個類庫,注意,這個類庫與操作系統(tǒng)本身無任何關(guān)系,它只是對API進行了一個面向?qū)ο蟮姆庋b,當(dāng)然,還給出了一系列編程的框架。使用SDK的方法,使用Visual Studio,通過調(diào)用Windows API,MFC你也可以做得出來。MFC把一些固定不變的代碼已經(jīng)寫好了,只在編譯時候鏈上,所以我們的代碼里看不到WinMain(),而事實上整個程序的運行,和SDK的方式無任何區(qū)別,初學(xué)者請記住這一點。另,補充一點個人感想,MFC的初衷,帶給開發(fā)人員更多的便利,我覺得并不太成功。學(xué)習(xí)MFC所費的力氣和最終的所得,并不太成正比。

  "API":Application Programming Interface,應(yīng)用程序接口

  這個詞的出現(xiàn)頻率很高,從某種意義上來說,也可以看作是SDK的一個子集。這也是做給程序員的程序,不過一般指用導(dǎo)出函數(shù)的方式提供服務(wù)的函數(shù)庫,不包括類庫和組件。

  “GDI”:Graphic Device Interface,圖形設(shè)備接口

  這個是Win32程序下最常用的顯示方式,與DirectX、OpenGL處于同一級。在DOS要顯示一些東東可不是容易的事,最簡單的是調(diào)用一些C的圖形庫函數(shù)來實現(xiàn)顯示,不過一般也就是些畫線,填色,輸出幾個文字,效果很弱(所以DOS程序界面一般都不怎么樣,且實現(xiàn)起來不是一般的復(fù)雜),要復(fù)雜一點的動畫/圖片顯示什么的,經(jīng)常要用到的就是硬件中斷,調(diào)用一些顯卡自身的子程序(固化在顯卡內(nèi)的)來做。因為每一個顯卡都不同,所以DOS的游戲兼容常常由于顯卡的差異而很糟糕。到Windows下大家就幸福多了,Windows將硬件這一層屏蔽起來,用一個表格(Device Context)來代表一個顯示,我們要做的就是在這個表格上填好相關(guān)參數(shù),然后畫上我們想畫的東東,然后操作系統(tǒng)會依照這個表格(DC),把相應(yīng)的顯示內(nèi)容(一般是一塊顯示內(nèi)存)傳送到指定顯卡的指定的顯存,再由顯卡傳給顯示屏。我們不再需要與不同的顯卡打交通,這是一個十分偉大的勝利!GDI中最常用的是雙緩存技術(shù),就是說你可以在內(nèi)存中創(chuàng)建(也就是復(fù)制)一個DC,只不過在這個DC中顯示的不再被傳送到顯示器上。有什么用呢?因為它的各參數(shù)是與當(dāng)前屏幕DC一致的(COPY嘛 ,當(dāng)然是這個結(jié)果),所以它的顯示內(nèi)容可以完整無失真地傳送到屏幕DC上。我們通常在內(nèi)存DC上畫圖,譬如畫一圓,再畫一條直線,畫完后一次性地傳送到屏幕DC上,這樣對用戶來說屏幕只刷新了一次,可以解決你畫一點內(nèi)容屏幕即刷新一次導(dǎo)致的閃爍問題。當(dāng)然,雙緩沖甚至多緩沖還有很多別的用處,那就要靠自己揣摩了。

  "DirectX"

  通常簡稱為DX(讀音:低叉)這是個很吸引人眼球的名詞,讀起來就很上口:)。Windows為我們作了許多屏蔽底層硬件的工作,其中DX是最知名的技術(shù)之一。操作系統(tǒng)要與各類硬件打交道,特別是多媒體相關(guān)的,譬如顯卡、聲卡、手柄輸入、多媒體流的網(wǎng)絡(luò)傳輸?shù)鹊龋@些事情如果都自己來弄的話,那就太要命了(這些一般都涉及系統(tǒng)底層,自己也很難做出來)。而DX則正是這么一套操作系統(tǒng)提供的隔離多媒體硬件與程序員的間質(zhì),DX自身一般并不實現(xiàn)處理的能力,它是一個標(biāo)準(zhǔn),要求硬件來滿足,好比DX提供一個函數(shù)名,硬件來實現(xiàn)函數(shù)內(nèi)容一樣。通過它我們可以非常簡單而快速地調(diào)用硬件提供的各類服務(wù)。它主要包括DirectDraw(通過直接訪問顯示硬件來提供快速的圖象處理能力),DirectSound(提供了軟硬件的低延遲聲音混頻和回放,以及直接訪問音頻設(shè)備的能力),DirectPlay (它明確的提供了通用環(huán)境連接能力來簡化你應(yīng)用程序之間的通訊服務(wù)),Direct3D(DirectDraw的3D版),DirectInput(簡化你的應(yīng)用程序訪問鼠標(biāo)、鍵盤和操縱桿設(shè)備的能力),DX5.0之后又增加了一些(如DirectShow),不再詳述。DX一個重要的特點就是你可以通過它直接訪問硬件而無需知道硬件的具體細(xì)節(jié)。譬如DirectDraw,就能夠越過內(nèi)存而直接訪問顯存,這樣的速度將比GDI快很多,不在一個數(shù)量級上。補充一點:DX是以組件的方式提供的,而不是通常的導(dǎo)出API的形式。DX SDK的最新版本是9.0

  "COM”:component object model,組件對象模型,一般簡稱組件。

  這是微軟為了解決代碼重用的一個重要機制。重用代碼的最簡單辦法是源代碼重用,把寫好的函數(shù)和類加到自己當(dāng)前的代碼中,編譯即可。簡單是簡單,敝病卻顯然的多。另一個常用的方法是單獨做成模塊,以DLL的形式分發(fā),DLL導(dǎo)出函數(shù)或者類,客戶程序用動態(tài)/靜態(tài)鏈接的方法將其加載,這顯然比前一種源代碼的方法好一些,難度也不大,最為常用。但DLL也有一些不足,最根本的,它不是二進制兼容,DLL版本升級一次就需要與客戶程序代碼重鏈接一次,有些時候這幾乎是不可能的任務(wù)。為了更好地讓編程像“搭積木”一樣簡單,讓模塊可以完美地配合,完美地替換,COM產(chǎn)生了。COM不是類庫,不是代碼,不是操作系統(tǒng)的服務(wù),而是一套編程模型,理論上來說,它與語言無關(guān),與操作系統(tǒng)無關(guān),unix下同樣可以做COM。COM是一種程序結(jié)構(gòu)模型標(biāo)準(zhǔn),你做的DLL或EXE在結(jié)構(gòu)上滿足這么一個標(biāo)準(zhǔn),那這個DLL或EXE就是一個組件,它將在該平臺上成為二進制兼容。COM主要利用了注冊表來登記本模塊的信息。客戶程序調(diào)用時首先查注冊表,找到所需組件的位置(這實現(xiàn)了位置透明),然后就用Loadlibrary把它加載進來,這和普通調(diào)用沒有本質(zhì)區(qū)別,區(qū)別在于由于組件特殊的實現(xiàn)方法使得整個過程中用戶程序都不知道組件的位置,組件的類的實例化過程,如何銷毀,不能直接訪問組件的任何實現(xiàn)細(xì)節(jié),用戶只與組件的幾個public接口打交道。這將實現(xiàn)真正的模塊之間的獨立。對用戶程序而言,對于目標(biāo)組件的認(rèn)識,除了接口,一無所知。在接口不變的情況下,組件可任 意替換而客戶程序不作任何改動,無需編譯,僅這一點,在中大型程序的模塊集成的過程中就將節(jié)約相當(dāng)多的時間。 "STL":Standard Template Library,標(biāo)準(zhǔn)模板庫

  這是最早由Alexander Stepanov和Meng Lee(蠻像中國人的名字)完成,于1994年提交給ANSI/ISO 標(biāo)準(zhǔn)C++委員會并通過而成為標(biāo)準(zhǔn)C++的一部分。望文生義即可知這是一個代碼庫標(biāo)準(zhǔn),不是語法標(biāo)準(zhǔn)。簡單地說,STL是以C++中的模板語法為基礎(chǔ)建立起來的一套包含基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)和算法的代碼庫。STL的特點是實現(xiàn)了“類型參數(shù)化”,即STL的代碼中可處理任意自定義類型的對象,如果不使用模板技術(shù)的話,這是一件相當(dāng)困難的事。也因為這個原因,在最新的java及C#語法中均加入了對模板語法的支持,可見其重要性。另外一個有關(guān)STL重要的話題是GP(Generic Programming),泛型。這是與面向?qū)ο笙嗖⒘械牧硗獾囊粋編程模型,它以模板為基礎(chǔ),弱化了實體類型的差異,簡化了編程時問題抽象的模型,提供了更好的封裝性和彈性,對于繁雜的面向?qū)ο缶幊毯翢o疑問是一種解脫,至少是精神上的。GP并不是用來取代面向?qū)ο蟮模亲鳛橐粋有益的補充體,是面向?qū)ο蠛芎玫暮献骰锇椤#牵惺亲罱鼛啄贶浖軜?gòu)的一個研究熱點,但國內(nèi)真正的應(yīng)用似乎并不多見,這項技術(shù)本身還基本處于研究前沿。<>一書對C++中的GP應(yīng)用有很好的詮釋,而這本書對腦細(xì)胞的殺傷力之大,也是其它C++書藉望塵莫及的。想知道C++的代碼技巧可以做到怎樣的出神入化嗎?不妨看看這本書。

  "ATL":Active Template Library,活動模板庫

  這在VC編程下應(yīng)該算是比較高級的話題了,它集COM和模板技術(shù)于一身,帶來了極方便的組件編寫方法和極高的學(xué)習(xí)門檻。可以說,進入ATL領(lǐng)域就算是進入了中級以上的編程領(lǐng)域。ATL是為組件而生,它的目的是為了讓程序員更方便地編寫組件(純用C++寫一個最簡單的組件實現(xiàn)一個“Hello World”對初學(xué)者來說都是要命的),同時它使用模板技術(shù)來類似于MFC一樣建立了一個開發(fā)COM的框架代碼庫(模板庫),使用該框架及模板庫可以相對方便地進行組件開發(fā)。ATL中的一個特點就是你自己的類將成為ATL代碼庫中某些類的父類,這是一件很有趣的事(這也是模板技術(shù)的一個特點)。

  "HANDLE": 句柄

  這是一個中文翻譯很古怪的字,對初學(xué)者來說是百思不得其解的東東。這其實等價于void*(順便提一下,初學(xué)者往往對VC代碼中各種古怪的符號、類型標(biāo)記/宏等百思不得其解,其實它們大多來自基本類型的#define或者typedef,請將光標(biāo)移到這些符號上(譬如HANDLE),然后按下F12,編譯器自會把你帶到它的聲明處,反復(fù)使用幾次,你終會見到它的原貌,然后長吁一口氣:原來不過如此而已。沒用過的初學(xué)者請牢記:F12)。很多初學(xué)者總想知道一個HANDLE代表一個什么對象,我的建議是不要去理解為某對象,而就是理解為訪問某一個對象的入口,事實上HANDLE大多數(shù)時候是一個整數(shù)索引(標(biāo)志該對象在操作系統(tǒng)的某表中的位置,就好像一個數(shù)組的下標(biāo)一樣),Windows系統(tǒng)核心中主要是幾張大表,這樣一個整數(shù)索引就是標(biāo)記目標(biāo)在這個表中的位置,供操作系統(tǒng)訪問時查詢用。偶而它的確是指向某對象的指針,有時它還攜帶一些額外輔助信息。總之,我們不要去直接訪問它,把訪問HANDLE的任務(wù)交給操作系統(tǒng)好了,除非你還嫌寫程序不累:)。

  "DLL": Dynamic Link Library 動態(tài)鏈接庫

  DLL的一個特點就是可以動態(tài)加載(顧名思義),即在主程序(我更喜歡稱為客戶程序)需要該模塊時才由操作系統(tǒng)加載到內(nèi)存。畢竟一個大型應(yīng)用程序我們經(jīng)常使用到的功能并不多,這樣一些不常用的功能模塊(DLL)在程序運行時一般將不被載入,可極大節(jié)省內(nèi)存開銷。DLL同時也是目前最常用的分發(fā)模塊的方法,便于彼此協(xié)作。程序中對DLL的調(diào)用主要有兩種方法:1 針對使用DEF文件導(dǎo)出函數(shù)的DLL,使用API函數(shù)LoadLibrary(“DLLModuleName" )加載,然后使用GetProcAddress()得到函數(shù)指針,進而調(diào)用 2 直接將類、函數(shù)等導(dǎo)出,客戶程序使用同一份頭文件聲明,加入對應(yīng)的lib鏈接庫,即可在客戶程序中直接使用DLL中的類或函數(shù),無需LoadLibrary。

  "Process": 進程

  進程是一個動態(tài)的概念,包括從進程的創(chuàng)建申請,PCB(Process Control Block進程控制塊,一般操作系統(tǒng)實現(xiàn)為一個表格(struct))的創(chuàng)建,地址空間的內(nèi)存分配,模塊代碼載入并執(zhí)行,執(zhí)行完以后進行撤銷,整個過程被稱為"進程"。在Win32下,一個進程有4G的邏輯空間。但我們也常把它作為靜態(tài)概念來使用,在Win32下,一個EXE的執(zhí)行就是一個進程(如果它內(nèi)部又開了新進程,另當(dāng)別論)。

  "Thread": 線程

  為了更有效的提高CPU的利用率,更好地實現(xiàn)多任務(wù)并發(fā),微軟將進程進行進一步分割,實現(xiàn)了CPU任務(wù)調(diào)度的新對像:線程。一個進程擁有至少一個線程。我們在實現(xiàn)多任務(wù)并發(fā)的時候通常是建立一個新線程(建立線程的系統(tǒng)開銷要小于進程),線程以我們自己的一個函數(shù)作為入口,函數(shù)執(zhí)行完畢自動撤銷(當(dāng)然你也可以在執(zhí)行過程中強制結(jié)束該線程)。順便提一下,在UNIX下并沒有線程這個概念,想來是因為UNIX主要是以多進程的并發(fā)服務(wù)為主(所以它更適合于做服務(wù)器),系統(tǒng)運行時通常已經(jīng)有了太多的進程,所以沒有必要再對進程進行細(xì)化,因為這樣做甚至?xí)档拖到y(tǒng)效率(CPU調(diào)度不過來),當(dāng)然,這是我個人的猜想:)

[1] [2] [3]  下一頁

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 慈溪市| 西乡县| 嘉祥县| 辽中县| 龙泉市| 红桥区| 汶川县| 鸡东县| 宜昌市| 砀山县| 沅陵县| 临朐县| 蒲城县| 麟游县| 米易县| 南通市| 贵州省| 罗城| 台南市| 神农架林区| 扎赉特旗| 涞水县| 澎湖县| 奉化市| 武城县| 抚顺县| 桦南县| 诸城市| 嘉峪关市| 黔江区| 乌拉特后旗| 汕头市| 宁夏| 德格县| 响水县| 梁河县| 新营市| 榕江县| 洛阳市| 新巴尔虎右旗| 永安市|