官术网_书友最值得收藏!

  • 從零開始學C++
  • 古超等編著
  • 3207字
  • 2018-12-27 13:03:02

1.3 程序設計方法

面向過程的程序設計和面向對象的程序設計是在軟件開發過程中兩種不同的程序設計方法,面向過程的程序設計是按照事物正常的發展順序進行開發的,如:先輸入一個數據,然后對數據進行處理,最后獲得結果,程序運行時是一步步進行的。面向對象的程序設計方法是人類20世紀80年代提出的一種概念,主張把系統分為幾個相互獨立而又聯系的對象集合,它可以直接描述對象之間的相互關系。下面將詳細介紹這兩種不同的程序設計方法。

1.3.1 面向過程的程序設計

程序是由計算機語言組成的一組操作序列,在針對同一個問題或功能設計程序時,如果設計的程序有不同的操作序列,那么這就體現了設計程序方法的不同。

運用面向過程的程序設計方法解決問題時主要是按照事情的發展步驟進行的,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用,就像一連串的事件按照一定順序發生,前面的事件是后面事件的前提,后面發生的事件是前面發生的事件的基礎。例如下面以一個人早上起來需要做的事情為例:

(1)起床

(2)穿衣

(3)洗臉刷牙

(4)吃早餐

(5)去學校

這5個步驟就是按照事情的發展順序一步步完成的,在編寫程序的時候只要把它們對應的功能編寫成各自的函數,然后執行程序的時候按照順序進行調用就可以了。

面向過程其實是最為實際的一種思考方式,就算是面向對象的方法也是含有面向過程的思想??梢哉f面向過程是一種基礎的方法,它考慮的是實際的實現。一般的面向過程是從上往下步步求精,所以面向過程的方法是基于結構化的,當一個程序的規模不是很大時,面向過程的程序設計方法會很好地體現出它的優勢,下面來看一個具體的例子。

【實例1-2】面向過程思想。

有一個存放日期型數據的文件data.txt,文件中保存的日期型文件的值湊起來如果是閏年就保存起來,并按照從大到小進行排序。

總體來說解決這個問題可以分為三個部分:

(1)將程序從文件中讀取出的數據存放到該類型數據的數組中;

(2)判斷這些數據哪些是閏年,并對數據進行處理;

(3)將處理完成后的數據按照題目要求進行輸出。

在實際進行編寫程序時通常將數據處理的部分分成兩個階段:第一個階段是判斷從輸入數組中讀取到的數據是否是閏年然后保存到一個數組中;第二個階段是對閏年的年月日進行排序,使保存的數據按照從大到小的順序進行排列。

針對這個問題編寫成的算法如下所示:

(1)輸入(從文本文件中讀取數據放入數組一中);

(2)處理數據(將數組一中的數據進行處理然后放到數組二中);

(3)輸出數據(將數組二中的數據輸出到顯示器或文件上)。其中,處理數據的部分又可以分為兩個階段:

? 過濾數據,判斷日期文件中的數據是否是閏年。

? 對過濾的數據進行排序,按照題目要求從大到小進行排列。

可以將上面的算法畫成流程圖,如圖1.1所示。

圖1.1 程序結構邏輯圖

在實際編寫算法的過程中,算法描述一般是從抽象到具體的,這樣會使算法的描述更加清晰、更加詳細。

將一些復雜的過程按照功能進行劃分,變成幾個簡單的功能從而達到解決問題的目的,這種思想就是面向過程型的思想,過程化的程序設計是以一系列過程的劃分和組織來觀察、思考、分析和解決問題的。面向過程的方法進行設計程序時應注意設計出的函數要保證每個模塊都具有良好的獨立性,即要設計出內聚性強、外聯性少的程序。

? 內聚性:即要使每個模塊的功能設計單一,這也符合模塊化程序設計的思想,模塊化功能越單一,代碼就越容易維護。

? 外聯性:外聯性是指程序塊之間的聯系復雜度,聯系的越少越好,這樣每個程序塊的功能受到的影響越小,模塊的獨立性就越強。而且修改模塊時,對其他模塊的影響也就越小,有利于代碼的維護和修改。

1.3.2 面向對象的程序設計

面向對象的程序設計思想是當前軟件開發的主流程序設計思想,從它興起一直到今天占據著越來越重要的位置。面向對象的概念和應用已超越了程序設計和軟件開發,擴展到了其他的領域,如數據庫系統、交互式界面、應用結構、應用平臺、分布式系統、網絡管理結構、CAD技術、人工智能等領域。

所謂面向對象的程序設計,就是把面向對象的思想應用到軟件工程中,并指導開發維護軟件。

面向對象思想設計程序從本質上來說也是基于面向過程的思想的,只是把程序中的某些數據關系給提取了出來,然后組織成為一個類,在以后的使用中便可以進行重復使用了。C++語言中的類機制可以使程序開發人員更好地工作。

從計算機編程的模型上來說對程序訪問的權限進行了嚴格的限制。這種模型是圍繞著程序中的數據和程序中定義的與對象有關的接口來進行組織的。相對于面向過程的程序設計思想來說,面向對象的程序設計有其自己的特點。

1.抽象

面向對象最基本的思想就是抽象,通過對一類相同事物的抽象來表示事物的復雜特性。程序開發人員可以運用抽象的思想管理復雜的程序。

面向對象分析中的抽象主要分為兩類:一類是數據抽象,將一類問題的實體對象抽象成由數據項和函數構成的類,數據項標識對象的屬性,函數用于定義對象的行為,這個整體將作為問題空間真實對象的抽象模型;另一類是過程抽象,將復雜對象所提供的某項功能抽象為各組成對象之間的相互作用,以消息傳遞及對象的消息處理方式加以描述。具體化是與抽象化相對的概念,通過抽象化,抓住問題的主要方面加以描述,在大框架已經明了的前提下逐步對描述加以精化,添加一系列細節使模型逐步豐富,最終達到精確描述問題空間對象屬性和行為的目的。

2.封裝

封裝是運用面向對象思想分析問題空間對象和軟件系統模塊的重要手段,通過封裝方法將對象的屬性和方法緊密地結合在一起。封裝可以被理解成一種用于保護作用的保護袋,用來防止代碼和數據被保護袋外部所定義的其他代碼隨意訪問,并對保護袋內部代碼和數據的訪問通過一個定義的接口來控制。封裝代碼的好處是實現了代碼的隱蔽性,任何人通過程序提供的接口都可以調用代碼而且不需要考慮方法實現細節,同時不用擔心處理該方法調用產生的異常。

在定義一個類時,需要定義構成該類的代碼與數據。類所定義的對象叫類的實例。操作數據的代碼叫做成員方法,在成員方法中使用類里面的成員變量。類的成員變量可以定義為私有類型、保護類型和公有類型的。每種類型定義的變量在調用時訪問的權限是有差別的,這樣很好地保護了類里面的成員變量,防止被外部方法隨意調用、更改。

3.繼承

繼承是指一個對象從另一個對象中獲得屬性的過程。它支持按層次分類的概念。例如,東北虎是老虎的一種,老虎又是哺乳動物的一種,哺乳動物又是動物的一種。如果不使用繼承,就需要對每個對象明確地定義各自的全部特征。通過運用繼承的概念,只需要為該對象定義一個屬于其自身的特性,然后從父類中繼承它的通用屬性即可。因此,可以把一個對象理解成一類擁有相同特征的事物的一個實例。一個子類將繼承它在類層次中的每個祖先的所有屬性。

繼承與封裝可以互相作用。如果一個給定的類封裝了某些屬性,它的所有的子類將會得到相同的父類的特征,新的子類繼承其所有祖先的所有屬性,子類和系統中的其他代碼不會產生無法預料的交互作用。

4.多態

多態是指一個方法只能有一個名稱,但可以有許多形態,也就是程序中可以定義多個同名的方法,用“一個接口,多個方法”來描述,可以通過方法的參數和類型引用。多態性使得能夠利用同一類(基類)的指針來引用不同類的對象,以及根據所引用對象的不同,以不同的方式執行相同的操作。

在利用面向對象的思想進行編程時,各個對象之間的關系是相互獨立的,是一種和諧的共存關系,而不是你命令我、我強迫你的關系。程序中需要使用什么樣的功能就調用什么樣的接口。程序的運行是對象通過調用抽象數據類型來表達和實現的,抽象數據類型是通過對象來實現實例化的。

一些對象可能早就在系統中建立了,它們是獨立運行的。程序運行時,解決問題的實體是對象,運行時是對象的世界,因此我們可以將程序理解為:

程序=對象+對象+…+對象

總之,現實世界是由許多對象組成的,我們要運用面向對象的方法和思維分析、設計、編程,這也是運用面向對象的方法進行編程的重點。

主站蜘蛛池模板: 元朗区| 晴隆县| 浙江省| 霍邱县| 偏关县| 三穗县| 佛山市| 鹤庆县| 开鲁县| 桃江县| 万荣县| 云阳县| 镇雄县| 延庆县| 娄烦县| 巫溪县| 安阳县| 宁明县| 广宁县| 金堂县| 梁山县| 嵊州市| 甘南县| 滦南县| 阿拉善右旗| 淳化县| 桓台县| 防城港市| 钦州市| 惠来县| 木里| 临澧县| 精河县| 茶陵县| 沁源县| 武山县| 恩平市| 承德市| 康乐县| 黑河市| 绥江县|