抽象編程

抽象編程

抽象編程是通過抽象的方法來減少編程工作量或有效地減輕編程難度稱為抽象編程

將問題通過功能分解,各個擊破的編程方法(過程化編程) 是一種以行為抽象為主的抽象編程

將問題通過實體分析,分層分類地實現抽象數據類型,從而進行簡單套用編程(基於對象編程)是一種以數據抽象為主的抽象編程

這種抽象編程,通過數據類型復用,方便編程,方便維護和擴展,其效果比過程化編程更好程式語言中沒有許多具體的數據類型

要解決實際問題,很大部分工作是要建立數據模式與實際問題的對應,也就是建立抽象數據類型的過程對象化編程就是基於分層分類的抽象數據類型之具體編程,它能更好地實現數據結構和算法,便是將N.Wirth的程式公式:

程式=算法+數據結構具體化為:

程式=算法+抽象數據類型

基本介紹

  • 中文名:抽象編程
  • 外文名: Abstract Programming 
  • 包含:行為抽象和數據抽象
  • 領域:計算機語言
  • 套用:數據編輯
分類,行為抽象,數據抽象,編程質量,可讀性,安全性,可維護性,程式維護,程式擴展,

分類

抽象編程( Abstract Programming ) 抽象分行為抽象和數據抽象兩種.

行為抽象

通俗地說便是將一個行為序列歸併 (抽象)為一個行為的過程
.例如:
將 "取碗筷、盛飯、盛菜,扒一口飯、夾一筷菜、再扒一口飯、再夾一筷菜" 的若干重複,然後放下碗筷的過程歸併為吃飯。

數據抽象

通俗地說,就是將事物歸類,或者說,將事物看成是一定型號、規格的數據,然後將性質接近的數據歸納(抽象)為一類.
例如:將圓、三角形、長方形歸為形狀類.
數據結構一系列性質相同的數據, 組織成一定的邏輯結構, 並帶有自身的一系列操作
例如:
整型向量不同整型值是一系列性質相同的數據;其數據集合存放在向量中,便是組織成線性存儲結構;向量自身有創建、複製、擴建、增刪、修改等操作,外加排序、查找等算法可以調用.
所以,整型向量在語言中是一種具體的數據結構。

編程質量

(Programming Quality )

可讀性

通過使用更好的編程方法可以從本質上改進可讀性通過使用定義良好的算法和語句控制結構,可以局部改進算法的可理解性通過學習和使用優秀程式設計師的編碼習慣,採用一貫的編碼風格,可以增強可讀性。
注意:
高級程式設計師與初學者對可讀性的把握分寸是不同的易編程性:
只是對採用好的編程方法或更高級語言而言,抽象程度越大,越易編程對象化編程在抽象數據類型的創建上做了大量的工作,因而贏得了應用程式編寫的方便與快捷比如數組,無法整體複製,無法擴容,但是向量則可以。

安全性

編程在算法設計上是挖空心思的勞動過程,而在運用語言對之描述上應該瀟灑自在:容易表達,不容易出錯,運行上更安全。
好的編程方法能夠幫助程式設計師實現瀟灑編程抽象數據類型中可以將大量安全代碼嵌入其中,從而使套用編程瀟灑自在實現抽象數據類型的過程本身也是使用其他抽象數據類型的套用編程,同樣也充滿著瀟灑與自在
void f(char* s)
{
string s1,s2=s; //第一種
s1=s;
char* st=new char[strlen(s)+1]; //第二種
strcpy(st,s); char a[40]; //第三種
strncpy(a,s,sizeof(a));
a[sizeof(a)-1]=‘\0’;
}

可維護性

指局部修改不影響系統全局的總體性能,而系統產生的問題通常可以通過局部維護(修改或更換部件) 來解決。
模組化編程使程式可拆裝,可局部修改,而不影響整體性能與工作,因而可維護性強,過程化編程是將過程模組化,具有一定的可維護性;
對象化編程是將數據類型也模組化,從而導致更方便的維護性能可擴充性:指系統擴展時,只增加擴展代碼,而對原系統的正常運作只作很少的修改甚至不修改功能擴展的影響:
過程化編程,會涉及多處擴展代碼與原系統不和諧所帶來的修改對象化編程,如果是抽象數據類型的功能擴展,則不會影響原系統的正常運行,而只是支持應用程式中增加的一些擴展代碼而已;
如果是應用程式功能擴展,那是使用抽象數據類型的抽象代碼擴展,其修改量比之低級代碼要少效率

程式維護

( Program Maintenance )
維護要求:
數個數m,
m若改為根據當前小孩的序號與m的和來確定個數m,則在進行數個數前,先要進行表達式計算,
這一切,都是在Josephus類中暗中完成的,所以只要修改Josephus類的getWinner 無須修改應用程式,便可維護好系統.

程式擴展

( Program Extension ) 既要求直接數m個數,最後所獲得的1個勝利者,也要求按維護要求的數法所獲得的勝利者此時,便要保留原來的求勝利者的成員函式,再設計實現一個成員函式,作為功能擴展再在原系統中增加調用該成員函式的語句由於小孩轉圈的結構沒有變,所以該擴展要求就不涉及鍊表修改。

相關詞條

熱門詞條

聯絡我們