<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 工程和單個文件的關系 有一件很明顯的事情,當軟件項目變得很大的時候,僅僅使用一個文件來完成所有的內容是不現實的。以《魔獸世界》這款游戲為例,游戲中需要聲音、動畫、圖片這樣的素材,也需要地圖編輯、人工智能、光影渲染這些不同的模塊,在制作的時候,需要有不同的部門完成不同的工作,工作中所使用的文件和工具都不相同,不可能生成同一個文件。這時,就存在一個協調的問題。因此,對于大型的開發工具來說,它們不是以單個文件為單位進行處理的,而是以項目為單位。一個開發項目包含一個到幾個工程,每個工程都包含有大批的文件,有源代碼,有程序所使用的圖片音樂等資源,還有編譯時需要記錄的各種參數。每次編譯都要完全編譯整個工程(當然在優化狀態可以只考慮更新變動的部分)。 顯然工程對于類似《魔獸世界》這樣的大型項目的編寫是十分必要的,但在新手練習的小程序上,使用工程就像你只想在家給你的小狗搭個窩,卻拉來了整個中國長江三峽工程開發總公司,實在有點小題大做。而且,以后我們要編寫很多這樣的小程序,如果每一個都新建工程,那會生成多少垃圾文件啊!所以,我們需要一種只編譯單獨文件的方法。幸運的是,不論哪種開發工具,它們都提供了這樣的方法。雖然這種方法通常不會在菜單上直接出現,但它確實是常用和正確的方法。 ### 函數、API、類、控件、開發包與軟件復用 還有件事也很明顯,隨著工程項目的越來越浩大,每一次都從零開始編寫一個項目是不經濟也是不現實的。我們注意到,不論是程序還是源代碼,都有以下兩個特性。第一,它們都是人類智慧的成果,每一行源代碼都凝聚了程序員的聰明才智,花費了開發者的時間和金錢。第二:幾乎每一行源代碼本身都可以毫不費力的零成本的被復制到另一處,另一個代碼塊、另一個程序甚至另一個項目。基于這樣的特性我們認識到:如果能夠重復利用已經編寫過的程序和源代碼,尤其是那些在使用中已經被證明健壯而正確高效的程序,就能夠節約巨大的人力物力財力和時間。即使只能使用其中的一小部分,也是了不起的成就,這就叫做軟件復用。 軟件復用最重要的好處就是能夠讓程序員不再把有限的智慧放到早已解決過的問題,而是投身新的問題,也就是:**不要再重復發明輪子。**開放源代碼的一個重要理由就是為了軟件復用。軟件復用的一個行之有效的方法是使用函數。所謂函數,就是把一些具有固定功能的代碼段組合在一起,并給予一個名字。在需要這些功能的時候,只要在適當的地方填入函數的名字。在編程時使用函數而不是純粹手工打造,就像在蓋樓時使用磚塊而不是用粘土堆砌——已經是不小的進步了。蓋樓時使用的磚塊,既可以自己制造,也可以到市場上去購買。購買來的磚塊,雖然有某些差異,但總是遵循某些共同特性。這些磚塊雖然是一塊塊地使用,但總是一車車的大量購買。函數也一樣,市場上總是有專業公司提供函數出售,他們出售的函數按照功能聚集在一起,成為函數庫。雖然不同公司的函數庫可能具有相同的名字和功能,但內部是怎樣構成的卻不盡相同。 大部分現代編程語言,在規定了語言本身的語法和詞匯(當然其中也包括了函數的使用方法)的同時,還會規定一個函數庫。這個函數庫只規定了每個函數的名稱和用途。至于函數的具體實現方案,有的是由語言本身直接定義,有的是由實現該語言的編譯器的廠商提供。而使用這種語言的用戶,只要在需要的時候使用,而不用去管函數庫內部的問題,大大提高了效率。這個庫就叫做標準函數庫。通常,現成的函數庫都是經過了大量的實踐檢驗證明是高效而健壯的,要比自己徒手打造的函數好用的多。**所以在可能的情況下,要充分使用已有的函數庫,尤其是標準函數庫。**C語言之所以如此強大,原因之一就是它有一個強大完備的標準函數庫。Python同樣也是一門功能強大的語言,其擁有一個強大的標準庫,同時還有數不清的第三方庫!第三方庫的功能覆蓋科學計算、Web開發、數據庫接口、圖形系統多個領域。 軟件通常是運行在操作系統下的,從軟件復用的角度看,操作系統如果能提供某些通用的服務,程序就可以集中注意力做自己的事。這些服務包括文件讀寫、設備操作、網絡通訊、窗口繪制等等。否則,程序就會把大把的精力浪費在這些基礎工作上。幸運的是,幾乎所有的現代操作系統都提供了這樣的服務。這些服務以函數的形式出現,程序使用這些服務,就像使用函數一樣。這些函數形式的系統服務,就叫做應用程序接口API(Application Programing Interface)。遺憾的是,不同的操作系統,提供的API通常是不同的。使用某個操作系統的API編寫的程序,搬動到另一操作系統時,由于API不能相互對應,也就不能運行了。這就是編程要針對平臺的原因之一。 有些大型程序,比如Autodesk公司的AutoCAD,當你對它的某些功能不滿或是感到有改進的必要時,它提供了編程改變的可能,相對于第一次開發來說這就叫二次開發。二次開發時,原始程序所提供的那些服務也被稱為API。 使用磚塊蓋樓確實很方便,但如果能使用預制板,那就更方便了!比函數更高一級的可以復用的程序模塊叫做類,類的使用比函數復雜,但是它可以更廣泛的復用,是更高級的軟件復用形式。類,同樣可以聚集成類庫。能夠使用類的語言,就會規定標準類庫。C++比C更強大,更難學,原因之一就是因為,C++除了具有C 所有的函數庫之外,還有一個完整強大的標準類庫。在類庫當中,有一種很特殊的類,稱為控件(control)。控件在快速的窗口程序開發中特別有用,它可以實現拖放式的編程。舉例來說,想要編寫一個有一個按鈕的窗口程序,那么只要先創建一個窗口程序的工程,這個工程會自帶一個窗口控件,而且直接顯示在工作區里,然后再用鼠標把按鈕控件從控件板上拖到窗口里需要的位置,按鈕就擺放好了。至于按鈕對應的功能,就需要程序員來編程實現。將來編譯運行之后,程序的外觀就和設計的外觀一模一樣。控件極大的提高了編程效率,但因為它需要自動生成某些代碼,所以需要編輯環境的支持,支持控件的編輯環境總體來說比較少。控件的總和,就是控件庫。 所有這些,函數、API、類乃至控件,開發必備,就像旅行時必需攜帶的行李一樣,于是被統稱為開發包(SDK : Software Development Kit)。 有些開發包是編譯器自帶的,如標準庫等等,有些包是第三方廠商提供的。大部分開發包都需要集成開發環境(內帶編譯器)的支持,有的要編譯器提供內部實現,有的要編譯器給予連接,有的要編譯器生成代碼。不同的編譯器提供的方式不太相同,這就造成了編譯器之間的差異,有時甚至導致某個開發包不能在某款編譯器上使用。為了進一步提高程序員的工作效率,很多集成開發環境還發明了另一些方法,相當于直接用一間間的房子疊在一起做成居民樓,你幾乎只要刷刷外墻漆,就可以完成了,這被稱為應用程序框架。可惜,不同的廠商的方法根本不同,這進一步擴大了集成開發環境之間的差異。不管未來怎樣,至少現在,編程的規模變得越來越大,也越來越需要更多人的智慧。每個人的智慧都是有限的,不應該被浪費,充分使用每個人的智慧,才能取得最大的成功。軟件復用就是整合所有人智慧的方式之一。從你編程的第一天開始,請牢牢記住:**軟件復用**。要復用&復用&&再復用。 ### 函數、API、庫小結 相當于歷史典故、諺語俗話、文化背景的東西,就是各個編譯器和平臺上的接口和庫了。假設現在有個程序要讀寫文件,不要誤認為你需要親自寫個程序去控制硬盤的磁頭伸縮,或者是光驅的透鏡移動或者是U盤的地址定位,除非你是想做個Linux或者Windows那樣的操作系統。否則所有包括文件操作、網絡通訊、人機界面這些,都是由操作系統提供的現成模塊,只等著你來使用。這些模塊通常稱為應用程序接口(API - Application Programming Interface),不同的操作系統提供的API不一樣。在接口的基礎上,很多編譯器和程序員做了進一步的包裝形成了庫,你可以比直接使用接口更方便地使用這些庫而達到同樣的功能。 由于系統的不一致,編譯器的不同,所以在學庫之前,先要確定你所要工作的平臺和環境,還有應用方向。Windows下編游戲和Linux下做數據庫用的庫是大相徑庭的。然后就是同樣的一套步驟,找教材,做練習。這個教材通常就是官方文檔,Unix/Linux平臺有大量的文檔,分布于man頁和各種手冊上,Windows下最好最全的就是MSDN,其他平臺自行搜索。可以去找習題,但更好的方案是去找一個實際的小型應用,在使用中學習效果無與倫比。編寫一個QQ或者BT,絕對能讓你對網絡操作部分了如指掌。網絡上有很多開源項目,有興趣可以自己去找找。 學習庫和學習算法可以同時進行,在你完成這兩個階段的時候,你已經是一個合格甚至是優秀的程序員了。 優秀的文學作品有個共同的特征,他們雖然立足于不同的民族文化,但關心的卻是全人類共通的思想感情,體現著終極的人文關懷,我們都會為 *The Old Man and the Sea* 中的Santiago所感動不是么。**優秀的程序雖然應用方向不同以及平臺各異,但它們一定都完全符合計算機原理,并且用最合理的數學模型來展現。**如果你想成為合格的程序員,計算機組成原理和相關的數學知識是一定要補習的理論課。 除了看書和做題之外,還有一個內容不可缺少,就是閱讀別人的程序。沒有哪個作家不大量閱讀別人的作品,同樣你也可以從別人的代碼中吸取營養。代碼就是程序的全部,是真實的實現方法,一切都在代碼中,甚至有時長篇累牘的說明還不如幾行代碼清晰明白。今天的程序員是幸運的,開源運動的發展使得他們能夠無償而方便地得到世界上最優秀的并且是實際運作中的代碼,幾乎遍布任何應用領域。只要你有心,就可以找到任何想要的代碼。但讀代碼也是一件考驗你毅力的事,讀優秀的代碼更是一種享受。但請閱讀和你水平相當的代碼,差距太大將會是嚴重的身心打擊。你不會告訴我你C都還沒學就想精通Linux內核吧? 超凡的主題跌宕的情節——其實就是你的程序的應用方向。如果說前面都是練習的話,那現在就是你自主創新的時候了。很多人都只是在老板的安排下為了工資而被動做些既不喜歡又沒有價值的流水線產品,少數人才有機會做自己喜歡的東西。想想看, 3DMAX、WOW、Firefox、Nginx、Linux甚至Mac OS X都是多么知名的程序,也許有朝一日你的程序將會和它們一樣知名。不過我還是不得不給你潑冷水,這需要不懈的努力、敏銳的眼光和少量的運氣,只有極少數的程序員能做到這一點。不過,有夢想才能不斷前進,不是么?:-)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看