概述
軟體實現(Software Implementation)不等同於純粹的編程,它是“編程、內部測試、代碼審查、調試改錯、最佳化”的綜合表述。軟體實現是人員最多、時間最長、工作量最大的開發階段。
軟體設計思路和方法的一般過程,包括設計軟體的功能及實現的算法和方法,軟體的總體結構設計和模組設計,編程和調試,程式聯調和測試以及編寫、提交程式。
軟體編碼是指把軟體設計轉換成計算機可以接受的程式,即寫成以某一程式設計語言表示的“源程式清單”。充分了解軟體開發語言、工具的特性和編程風格,有助於開發工具的選擇以及保證軟體產品的開發質量。
當前軟體開發中,除在專用場合外,已經很少使用20世紀80年代的高級語言了,取而代之的是面向對象的開發語言,而且面向對象的開發語言和開發環境大都合為一體,大大提高了開發的速度。
程式設計語言的分類
程式設計語言種類很多,可從不同的角度對其進行分類。
1)以語言層次可分為面向機器的語言和面向問題的語言。
(1)面向機器的語言。依賴於具體的機器硬體結構,其語句和計算機的硬體操作相對應,包括機器語言和彙編語言。機器語言由二進制的0、1代碼指令系統構成,它是計算機唯一可以直接識別和執行的語言。其指令系統因機器而異,不同機器具有不同的機器語言,這類語言難學難記。彙編語言是符號化的機器語言,語句符號與機器指令直接對應,雖然其易讀性、易理解性相對機器語言已經有了很大的改善.但依然編寫出的程式難讀、難維護、易出錯、通用性差,因此,一般不套用於上層套用軟體開發。面向機器的語言具有可直接訪問系統接口、程式運行效率高等優點,可在某些特殊領域或需要的環境中使用。
(2)面向問題的語言。面向問題的語言也稱為高級語言,這類語言脫離了具體機器的硬體環境的限制,直接面向所要解決的套用問題。高級語言使用的概念和符號與自然語言比較相近,便於掌握和理解,並具有通用性強、編程效率高、代碼可閱讀性強、易於修改和維護等特點,因而在現代軟體開發過程中被廣泛使用。
2)以語言適用性可分為通用語言和專用語言
(1)通用語言。可以面向所有編程問題,不受專業和領域的限制,BASIC、FORTRAN、ALGOL、C、Pascal等,均屬這類語言。
(2)專用語言。專用語言是為了某種特殊套用而設計的具有獨特語法形式的語言。它局限於某些特殊的套用領域,套用範圍比較窄。如APL—Array Processing Language是為數組和向量運算設計的簡潔而功能很強的語言,卻幾乎不提供結構化的控制結構和數據類型。
3)以語言面向分為面向過程的語言和面向對象的語言。
(1)面向過程的語言。面向過程的語言即傳統的結構化程式設計語言,該類語言強調程式設計算法和數據結構,基本思想可概括為程式等於數據結構加上算法,如C語言等。
(2)面向對象的語言。面向對象的語言是目前最為流行的一類高級語言。它引入了現實生活中對象的觀念,提供了封裝、繼承、多態、訊息等機制。這類語言有Small Talk、C++、Java和C#等。
4)高級語言的常見分類
(1)從套用特點分,高級語言又可分為通用語言、現代語言和專用語言三類。
①通用語言。它們的特點是出現早、套用廣泛。有大量軟體庫,為最廣泛的人所熟悉和接受。屬於這類語言的有BASIC、FORTRAN、COBOL和ALGOL等。這些語言創始於20世紀50年代或20世紀60年代,部分性能已老化。
②現代語言。現代語言也稱為結構化語言。其特點是直接提供結構化的控制結構,具有很強的過程能力和數據結構能力。ALGOL是最早的結構化語言,同時它又是基礎語言,由它派生出來的Pascal、C以及Ada等語言已套用在非常廣泛的領域中。
③專用語言。專用語言是指為某種特殊套用而設計的獨特語言。
(2)從語言的內在特點分.高級語言還可分為系統實現語言、靜態高級語言、塊結構高級語言和動態高級語言四類。
①系統實現語言。系統實現語言從彙編語言發展改進而來,可提供控制語句和變數類型檢驗等功能,但是同時也容許程式設計師直接對硬體進行操作。C語言就是著名的系統實現語言。
②靜態高級語言。可給程式設計師提供控制語句和變數說明的機制,但是程式設計師不能直接控制由編譯程式生成的機器操作。其特點是靜態地分配存儲。這種存儲分配方法雖方便了編譯程式的設計和實現,但對使用這類語言的程式設計師施加了較多限制。因為這類語言是第一批出現的高級語言.所以使用非常廣泛.其中FORTRAN和COBOL仍然在某些領域使用。
③塊結構高級語言。其特點是提供有限形式的動態存儲分配,存儲管理系統支持程式運行,每當進入或退出程式塊時。存儲管理系統分配存儲或釋放存儲。程式塊是程式中界限分明的區域,每當進入一個程式塊時就中斷程式執行,以便分配存儲,如Pascal和ALGOL等。
④動態高級語言。其特點是動態地完成所有存儲管理,即執行個別語句可能引起分配存儲或釋放存儲。一般地說,這類語言的結構和靜態的或塊結構的高級語言的結構不同,實際上這類語言中任何兩種語言的結構彼此間很少類似。這類語言一般是為特殊套用而設計的,不屬於通用語言。
特性及其選擇依據
選擇了一種程式設計語言後,就影響到對概要設計和詳細設計的實現。語言的特性對於軟體的測試與維護也有一定的影響,支持結構化構造的語言有利於減少程式環路的複雜性,使程式易測試、易維護。程式設計語言一般具有下面三個特性。
1)工程特性。從軟體工程的觀點、程式設計語言的特性著重考慮軟體開發項目的需要,因為對程式編碼有如下要求:可移植性、開發工具的可利用性、軟體的可復用性、可維護性。
2)技術特性。語言的技術特性會對軟體工程的其餘階段有一定的影響,因此要根據項目的特點選擇相應的語言。
3)心理特性。語言的心理特性指影響程式設計師心理的語言性能,其在語言的表現上包括以下幾個方面:歧義性、簡潔性、局部性和順序性、傳統性。
為開發一個特定項目選擇程式設計語言時,必須從技術特性、工程特性和心理特性幾方面考慮。在選擇語言時,要從問題需求人手,確定它的要求是什麼,以及這些要求的相對重要性,針對這種需求,需要什麼特性的程式設計語言來實現。由於一種語言不可能同時滿足各種需求,所以要求進行權衡,比較各種可用語言的適用程度,最後選擇最適用的語言。不過,在實際開發中,除考慮需求外,往往還要考慮客戶的環境。
選擇語言時,可以從以下幾個方面考慮:
(1)項目的套用領域
項目的套用領域主要包括:
1)科學工程計算,需要大量的標準庫函式,以便處理複雜的數值計算。
2)數據處理與資料庫套用。
3)實時處理。實時處理軟體一般對實時性能的要求很高,可供選擇的語言有彙編語言、C語言等。
4)系統軟體。系統軟體很多時候都需要同計算機的硬體打交道,因此在編寫作業系統、編譯系統等系統軟體時,可選用彙編語言、C語言等。
5)人工智慧。
(2)軟體開發的方法
有時程式語言的選擇依賴於開發的方法,採用4GL語言適合用快速原型模型來開發。如果是面向對象方法,就必須採用面向對象的語言編程。近年來,推出了許多面向對象的語言,如C#、Java等。
(3)軟體開發的環境
良好的開發環境不但能有效提高軟體生產率,同時能減少錯誤,有效提高軟體質量。近幾年推出了許多可視化的軟體集成開發環境,特別是Microsoft公司的c#以及Sun公司的Java等,提供了強有力的調試工具,這些工具可以幫助開發人員快速形成高質量的軟體。
(4)算法和數據結構的複雜性
科學工程計算、實時處理和人工智慧領域中的問題算法較複雜,而數據處理與資料庫套用以及系統軟體領域內的問題,數據結構化比較複雜,因此選擇語言時可考慮是否有完成複雜算法的能力,或者有構造複雜數據結構的能力。
(5)軟體開發人員的知識
軟體開發人員已有的知識和經驗對選擇程式語言也有很大的影響。新的語言雖然有吸引力,也會提供較多的功能和質量控制方法,但軟體開發人員若熟悉某種語言,而且有類似項目的開發經驗,一般情況下他們願意選擇曾經成功開發過項目的語言。為了能更好地適應項目的程式設計,開發人員應該經常學習新的程式設計語言,掌握新技術。
程式設計風格
建立程式設計規範。有助於編寫正確、高效、可維護、通用易讀的程式,使程式結構最佳化、清晰易讀,並且與設計相一致。
程式設計風格是在長期的編程實踐中形成的一套獨特的習慣做法和方式。優良的程式設計風格可以減少編程錯誤,提高可讀性和維護效率。多人合作編寫一個很大的程式時,相互協調配合更需要強調一致的編程風格。結構化實現的程式設計風格包括5個方面:源程式文檔化、數據說明、語句構造、輸入輸出和效率。面向對象編程風格既包括傳統的程式設計風格準則,也包括為適應面向對象方法所特有的概念(如繼承性等)而遵循的新準則。
1.好程式的標準
對於好程式的標準,20世紀40年代及20世紀50年代的觀點和現在差別很大。當時的計算機記憶體很小、速度慢,將程式的長度和執行速度看得很重要,甚至放在了首要的位置,需要千方百計地縮短程式長度並減少存儲空間,否則記憶體不夠,程式無法運行。
隨著硬體技術及速度的提高、價格的下降.計算機的處理速度和記憶體容量已經不再是制約軟體開發的瓶頸。好程式的標準也發生了根本性變化,對於好程式的標準,不同人的看法不盡相同。公認的好程式具有如下特性:功能齊全,能夠達到用戶的使用要求;性能及可靠性高,運行安全高效,各項指標優良;結構簡單、容易理解和使用;易於維護、修改和擴展升級;界面易於操作,使用便捷;移植性及兼容性好;可重用性強,有利於軟體更新。
2.程式設計規範及風格
規範是規定編程時應該遵守規則和書寫的格式等方面的描述。程式易於閱讀是程式設計規範的主要要求,可通過養成良好的程式設計風格解決可閱讀性差的問題。公認的、良好的程式設計風格可減少編程的錯誤,縮短閱讀程式時間,從而提高軟體的開發效率和提高軟體的開發質量。