1.2 程序設計方法
程序設計(Programming)是指設計、編制、調試程序的方法和過程。按照結構性質,有結構化程序設計與非結構化程序設計之分。前者是指具有結構性的程序設計方法與過程。它具有由基本結構構成復雜結構的層次性,后者反之。按照用戶的要求,有過程式程序設計與非過程式程序設計之分。前者是指使用過程式程序設計語言的程序設計,后者指非過程式程序設計語言的程序設計。下面簡單介紹兩種程序設計方法:結構化程序設計和面向對象程序設計。
1.2.1 結構化程序設計
在程序設計方法的歷史上,最早提出的方法是結構化程序設計,其核心是將程序模塊化。早在1968年,Dijskstra就提到了結構化程序設計,之后引起了業內關于GOTO語句的討論。經過不斷地改進,結構化程序設計日臻完善。
提示:結構化程序設計方法主要使用順序、選擇、循環三種基本結構,形成具有復雜層次的結構化程序,此外,該方法要求嚴格控制GOTO語句的使用。
簡單地說,結構化程序設計方法的注意特征如下:
● 采用“自頂而下,逐步求精”的設計思想。自頂而下是指從問題的總體目標開始,逐步求精是指層層分解和細化。
● “獨立功能,單出、入口”的模塊僅用三種(順序、分支、循環)基本控制結構的編碼原則。“獨立功能,單出、入口”的模塊結構減少了模塊的相互聯系,使模塊可作為插件或積木使用,降低程序的復雜性,提高了程序的可靠性。如圖1-1所示,為一個典型的采用結構化程序設計的程序結構圖。

圖1-1 結構化程序設計
結構化程序相比于非結構化程序有較好的可靠性、易驗證性和可修改性;結構化設計方法的設計思想清晰,符合人們處理問題的習慣,易學易用、模塊層次分明,便于分工開發和調試,且程序可讀性強,其設計語言有Ada、BASIC等語言。
1.2.2 面向對象程序設計
20世紀70年代中后期,由于結構化程序設計在進行大型項目設計時存在缺陷,于是面向對象程序設計方法(Object Oriented Programming,OOP)被提出,并逐步代替了傳統的結構化程序設計方法,成為最重要的方法之一。
面向對象認為世界是由各種對象組成的,任何事物都是對象,復雜的對象可由較簡單的對象以某種方式組成。由于面向對象的這種思想符合人們認識世界的觀念,因此,面向對象程序設計一提出,就得到了廣泛的支持,至今已應用在各個領域。
面向對象程序設計方法是以“對象”為中心進行分析和設計的,使這些對象形成了解決目標問題的基本構件,即解決從“做什么”到“怎么做”的問題。其解決過程從總體上說是采用自低向上的方法,先將問題空間劃分為一系列對象的集合,再將對象集合進行分類抽象,一些具有相同屬性行為的對象被抽象為一個類,類還可抽象分為子類、超類(超類是子類的抽象)。采用繼承來建立這些類之間的聯系,形成結構層次。
提示:采用面向對象程序設計方法(即OOP)來進行程序設計,其本質上就是不斷設計新的類和創建對象的過程。
如圖1-2所示,為一個類和對象的關系示意圖。

圖1-2 類和對象的關系示意圖
與傳統的結構化程序設計方法相比,面向對象程序設計方法具有許多優點:
● 采用對象為中心的設計方式,再現了人類認識事物的思維方式和解決問題的工作方式。
● 以對象為唯一的語義模型,整個軟件任務是通過各對象(類)之間相互傳遞消息的手段協同完成的,能盡量逼真地模擬客觀世界及其事物。
● 由于對象和類實現了模塊化,類繼承實現了抽象對象,以及任一對象的內部狀態和功能的實現的細節對外都是不可見的,因此很好地實現了信息隱藏。由此建立在類及其繼承性基礎上的重用能力可應付復雜的大型的軟件開發。
面向對象方法使得軟件具有良好的體系結構、便于軟件構件化、軟件復用和良好的擴展性和維護性,抽象程度高,具有較高的生產效率。目前,面向對象程序設計語言主要有Java、C++等語言。
1.2.3 程序設計方法比較
通過1.2.1節和1.2.2節讀者可以知道,目前流行的程序設計方法有很多,但真正具有廣泛意義的是結構化程序設計、面向對象程序設計,以及20世紀90年代后逐漸發展起來的基于構件的程序設計方法。這些方法各有自己的特點,面向對象技術和構件技術是目前程序設計領域的熱點。但是,結構化程序設計方法對面向對象程序設計中每個小模塊(即成員函數)的設計也起到關鍵作用,兩者各有特點。
● 結構化設計方法的設計思想清晰,易學易用,模塊層次分明,便于分工開發和調試,編寫出來的程序可讀性強。
● 面向對象設計方法具有自下而上的特性,允許開發者從問題的局部開始,在開發過程中逐步加深對系統的理解。
由于面向對象程序設計是一種自下而上的程序設計方法,其不像過程式設計那樣一開始就要用主函數概括出整個程序,面向對象設計往往從問題的一部分著手,一點一點地構建出整個程序。面向對象設計以數據為中心,以類作為表現數據的工具,是劃分程序的基本單位。而函數在面向對象設計中成為類的接口。
從理論上來說,對于設計階段的輸出,無論采用哪一種風格的設計方法,都可以用任何一種程序設計語言來編碼實現,但實際上對于具體的任務和設計風格,總可以在眾多的編程語言中挑選出一種最適合的,使用它能夠在程序運行效率、開發效率、軟件可維護性等方面達到令人滿意的折中目標。