溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

功件與面向功件編程

發(fā)布時間:2020-07-24 08:08:40 來源:網絡 閱讀:274 作者:鄒君安 欄目:網絡安全

      自從計算機出現(xiàn)以來,計算機硬件和軟件的發(fā)展軌跡完全不同,計算機硬件的發(fā)展可以用波瀾壯闊來形容,從電子管、晶體管發(fā)展到集成電路、大規(guī)模集成電路,CPU從單核發(fā)展到多核,顯示器從電子屏發(fā)展到液晶屏,硬件技術和產品不斷更新?lián)Q代,硬件生產力不斷出現(xiàn)飛躍式發(fā)展;而計算機軟件卻一直以一種緩慢的速度發(fā)展,雖然編程語言從二機制、匯編語言發(fā)展到了高級語言,各種軟件技術和框架不斷涌現(xiàn),但軟件產品生產力的提升非常緩慢。回頭看近二十年計算機硬件生產力和軟件生產力的發(fā)展速度,我們會發(fā)現(xiàn),軟件生產力的發(fā)展速度,遠遠低于硬件生產力的發(fā)展速度。

      分析這種巨大反差的根本原因,可以發(fā)現(xiàn),計算機硬件的發(fā)展是站著工業(yè)化生產這個巨人的肩膀上的,而計算機軟件仍然處于低水平的手工業(yè)生產階段。不是嗎?一個軟件產品需求出來,需要建立一個團隊負責軟件需求、設計、開發(fā)、測試、安裝部署等軟件產品生產周期的各個階段,需要程序員一行行手工編寫代碼去實現(xiàn)軟件產品功能,下一個軟件產品的開發(fā),重復上述過程,無一例外,社會化的分工與協(xié)作、標準化、模塊化、快速迭代與大規(guī)模生產等工業(yè)化概念,在軟件產品的生產過程中很難見到,現(xiàn)在的開發(fā)團隊、組織、公司,恰如古代的手工作坊。所以,目前的軟件開發(fā)還處于手工業(yè)生產階段。

      軟件的未來和發(fā)展趨勢就在于軟件生產的工業(yè)化。有人說軟件太復雜了,各種依賴包、版本控制、協(xié)議和編程語言不同等一系列問題,導致想要實現(xiàn)類似硬件的工業(yè)化生產幾乎不可能。但是,這種軟件的復雜性又來自哪里呢?對于全世界的軟件開發(fā)人員來說,從來沒有一個統(tǒng)一的規(guī)范來約束其開發(fā)過程,文件名稱、方法名稱、參數(shù)變量等等隨便定義,數(shù)據存儲與返回值沒有約束,這樣開發(fā)出來的軟件很難重用和互聯(lián)互通。各種編程語言有各自的編碼規(guī)范,而這些編碼規(guī)范在哪個軟件產品中起作用,要看開發(fā)團隊或開發(fā)人員的自覺。所以,軟件的復雜性在于沒有一個工業(yè)化規(guī)范來約束軟件產品的開發(fā)和生產。

      那么,軟件工業(yè)化實現(xiàn)起來真的很難嗎?我們摒棄軟件復雜性的說法,看看如何用功件和面向功件編程,實現(xiàn)軟件工業(yè)化生產。

      在闡述功件之前,我們先澄清一下功件和目前軟件開發(fā)中的組件(構件)的區(qū)別。

      首先看一個軟件產品中的組件,如下圖:

功件與面向功件編程

      從上圖可以看到,雖然“軟件1”中組件可以實現(xiàn)軟件產品中的部分功能,但上圖中的灰色區(qū)域,卻需要軟件開發(fā)人員一行行編寫代碼、文件配置等操作作為粘合劑,將這些組件粘合在一起才能生產出一個軟件產品。開發(fā)下一個產品“軟件2”呢,和“軟件1”的開發(fā)沒有區(qū)別,如下圖:

功件與面向功件編程

      假如開發(fā)一個“軟件3”,其包含了“軟件1”和“軟件2”中的部分組件,會是什么情況?看下圖:

功件與面向功件編程

      從上圖可以看出,即使前兩個產品中的部分組件可以直接應用到“軟件3”中,但是灰色區(qū)域部分的工作是必不可少的。


      下面,我們看看“軟件1”的理想構成是什么樣子的,看下圖:

功件與面向功件編程

      從上圖可以看到,“軟件1”由3個功件構成,沒有灰色區(qū)域;假如開發(fā)另外一個產品“軟件2”:

功件與面向功件編程

      從上圖可以看出,“軟件2”中的功件X不需要重新開發(fā),這會節(jié)省很大一部分工作量。同樣,假如開發(fā)產品“軟件3”,包含了“軟件1”和“軟件2”中的部分功件,會是什么情況?看下圖:

功件與面向功件編程

      從上圖可以看到,只要將“軟件1”和“軟件2”中的功件進行組合,就可以組成“軟件3”,沒有灰色區(qū)域,即可以在不需要開發(fā)人員一行行編寫代碼、文件配置的情況下,完成了“軟件3”的生產。假如,“軟件1”和“軟件2”由不同的團隊來實現(xiàn),就更加能夠體現(xiàn)出功件技術相對于傳統(tǒng)組件(構件)技術的優(yōu)勢。

      下面看看什么是功件和面向功件編程:功件,簡稱Func,全稱為軟件功能件,即軟件功能模塊;面向功件編程,簡稱FOP,即Func Oriented Programming,其以“功件規(guī)范”為規(guī)約進行軟件產品的開發(fā)。在這里,拋開技術實現(xiàn)細節(jié),從業(yè)務整體角度來看待一個軟件產品,這個軟件產品包含哪些功能模塊,這些功能模塊就可以定義為功件,也就是說,僅這些功能模塊組合一起,就能生成這個軟件產品。

      下面以Jamobo2項目為例來說明如何用功件技術開發(fā)一個軟件產品:

功件與面向功件編程

      從上圖可以看到,Jamobo2軟件項目的整個文件結構,根據“功件規(guī)范”要求,所有功件均位于f目錄下,而每個功件在一個軟件項目中,僅有一個,功件由一個功件主文件和一個功件主目錄組成。上述Jamobo2項目中有以下幾個功件,其中底層功件有:Authorization(授權)、Setup(安裝)、User(用戶)、X(公共類),顯示層功件有:AlertPage(提示頁)、SetupPage(安裝頁)、UserPage(用戶頁)、XPage(首頁)。由這些功件組成,可以看到Jamobo2這個Web項目或者這個軟件產品包含“安裝、首頁、用戶、授權、提示頁”這幾個主要功能。其內部具體實現(xiàn)細節(jié)不再贅述,請訪問Functree。

      根據上述內容,可以總結以下幾個面向功件編程的優(yōu)點:
      1. 開發(fā)周期短,因為不需要編寫一行行代碼作為粘合劑,也不需要很多的配置文件。
      2. 功件位于一個目錄(空間)下,這樣能夠讓開發(fā)者很快把握軟件項目的功能模塊組成,降低軟件產品升級、維護的復雜度。
      3. 當開發(fā)一個新項目的時候,完全可以直接把其他項目的功件直接搬過來使用,可能僅僅需要進行一些小小的改造或不需要任何改造,即可應用到新項目中。
      4. 這樣簡單的、規(guī)范的功件樹結構,會使得自動化開發(fā)、測試、部署、運維的難度大大降低,從而可以更容易的開發(fā)出一些自動化工具來輔助整個軟件產品生命周期的各個階段,進一步提高開發(fā)效率和縮短工期。
      5. 功件的開發(fā),將開發(fā)人員從橫向(地域)、縱向(時間)兩個方面解放出來,從而使得不同地域、不同時間點、擅長不同專業(yè)領域的人員能夠配合起來,實現(xiàn)社會化的分工與協(xié)作。

      在面向功件編程過程中,需要注意以下幾個問題:
      1. 按照“功件規(guī)范”開發(fā)功件,會導致開發(fā)人員的開發(fā)自由度降低,這是標準化、工業(yè)化、模塊化生產軟件產品的必要條件。
      2. 某些軟件框架不能用了,或者需要進行改造才能符合“功件規(guī)范”要求,不可避免出現(xiàn)重新造輪子的疑問和爭論。
      3. 在一個軟件項目中,功件之間應盡量減少繼承關系,功件盡量做到功能和數(shù)據的自包含,減少對其他功件的依賴,這樣可能導致軟件產品的尺寸增大。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI