出版時間:2012-1-10 出版社:機械工業(yè)出版社華章公司 作者:Alexander Stepanov,Paul McJones 頁數(shù):296 譯者:裘宗燕
Tag標簽:無
前言
前言: 本書將演繹方法應用于程序設計,討論程序與保證它們能正確工作的抽象數(shù)學理論之間的聯(lián)系.書中把反映這些理論的規(guī)程(speci.cation),基于這些理論寫出的算法,以及描述算法性質的引理和定理一起呈現(xiàn)給讀者.這些算法在一種實際程序設計語言里的實現(xiàn)是本書的中心。雖然規(guī)程主要是供人閱讀,但它們也應該(或者說必須)嚴格地與非形式化的、供機器使用的代碼相結合,必須在通用的同時又是抽象而且精確的。 與在其他科學和工程領域里的情況一樣,適合作為程序設計的基礎的同樣是演繹方法。演繹方法能幫助我們將復雜系統(tǒng)分解為一些具有特定數(shù)學行為的組件,而這種分解又是設計高效、可靠、安全和經(jīng)濟的軟件的前提?! ”緯窍敕瞰I給那些希望更深入地理解程序設計的人們,無論他們是專職軟件開發(fā)人員,還是把程序設計看作其專業(yè)活動中一個重要組成部分的科學家或工程師。 本書編寫的基本想法是讓讀者從頭到尾完整閱讀。讀者只有通過閱讀代碼、證明引理、完成練習,才能真正理解書中的各方面材料。此外我們還建議了一些項目,其中有些是完全開放的。本書的內容很緊湊,認真的讀者最終會看到書中各部分之間的聯(lián)系,以及我們選擇這些材料的理由。發(fā)現(xiàn)本書在體系結構方面的原理應該是讀者的一個目標。 我們假定讀者已經(jīng)具有完成各種基本代數(shù)操作的能力。還假定讀者熟悉邏輯和集合論的基本術語,如普通本科生在離散數(shù)學課程中學習的內容。附錄A總結了書中使用的各種記法。如果在一些特定的算法里需要某些抽象代數(shù)的概念,書中會給出相應的定義。我們還假定讀者熟悉程序設計,理解計算機體系結構,理解最基本的算法和數(shù)據(jù)結構?! ∥覀冞x用C++,是因為它組合了強有力的抽象設施和基礎機器的正確表示。這里只用了該語言的一個小子集,需求被寫成程序里的結構化注釋。我們希望不熟悉C++的讀者也能閱讀本書。附錄B描述了書中使用的C++子集。在書中的任何地方,在需要區(qū)分數(shù)學記法和C++的地方,根據(jù)所用的字體、排版和上下文就能確定用的是哪種意義(是數(shù)學的還是C++的)。雖然書中的許多概念和程序與STL(C++標準模板庫)里的東西對應,但這里的一些設計決策是與STL不同的。書中還忽略了實際程序庫(如STL)必須考慮和處理的許多問題,如名字空間、可見性、inline指令等等。 第1章描述值、對象、類型、過程和概念。第2~5章描述各種代數(shù)結構(如半群、全序集)上的算法。第6~11章討論抽象內存上的算法。第12章討論包含對象成員的對象。跋給出了我們對本書中闡釋的工作途徑的反思。
內容概要
本書提供了有關編程的一種與眾不同的理解。其主旨是,實際的編程也應像其他科學和工程領域一樣基于堅實的數(shù)學基礎。本書展示了在實際編程語言(如C++)中實現(xiàn)的算法如何在最一般的數(shù)學背景中操作。例如,如何定義快速求冪算法,使之能使用任何可交換運算。使用抽象算法將能得到更高效、可靠、安全和經(jīng)濟的軟件。
這不是一本很容易讀的書,它也不是能提升你的編程技能的秘訣和技巧匯編。本書的價值是更根本性的,其終極目標是提升你對編程的洞察力。要想從中大獲裨益,你需要從頭到尾認真學習:閱讀代碼,證明引理,完成練習。到結束之時,你將看到如何把這里討論的演繹方法應用到你的程序中,保證你做出的軟件部件能一起工作,并表現(xiàn)出它們所應該表現(xiàn)的行為。
書中給出的算法和需求針對某些被操作的類型。有關這些描述的代碼(也可以通過Web得到)采用C++的一個小子集書寫,這樣做是為了讓所有有經(jīng)驗的程序員都能理解。這個小子集可以看做一種特殊語言,是由Sean
Parent和Bjarne Stroustrup一起設計的。
無論你是一位軟件開發(fā)者,還是其他以編程作為一項重要活動的專業(yè)人員,或者是一名在校的學生,你都會逐漸理解本書的經(jīng)驗豐富的作者多年來一直在教授和闡釋的道理:數(shù)學對于編程是絕好的東西,理論對于實際是絕好的東西。
作者簡介
Alexander Stepanov
于1967~1972年間在國立莫斯科大學學習數(shù)學,從1972年開始在蘇聯(lián),1977年移民后繼續(xù)在美國從事編程工作。他編寫過操作系統(tǒng)、編程工具、編譯器和各種程序庫。他在程序設計基礎方面的工作先后得到GE、Polytechnic、AT&T、惠普、SGI和Adobe的支持。1995年因C++標準模板庫的設計獲Dr.
Dobb, Journal的程序設計杰出貢獻獎。
Paul McJones
于1967~1971年間在加州大學伯克利分校學習工程數(shù)學。從1967年開始介入程序設計,涉足的領域包括操作系統(tǒng)、程序設計環(huán)境、事務處理系統(tǒng)以及企業(yè)和客戶應用系統(tǒng)等。他先后在加州大學、IBM、Xerox、Tandem、DEC和Adobe工作。1982年他與合作者一起因論文“The
Recovery Manager of the System R Database
Manager”獲得ACM程序設計系統(tǒng)和語言論文獎。
裘宗燕,北京大學數(shù)學學院信息科學系教授。長期從事計算機軟件理論,形式化方法,程序設計和程序設計語言等方面的教學和研究工作。譯著包括《程序設計實踐》、《從規(guī)范出發(fā)的程序設計》、《C++語言的設計和演化》、《C++程序設計語言》、《計算機程序的構造和解釋》、《程序設計語言——實踐之路》等,著作有《從問題到程序——程序設計與C語言引論》等。
書籍目錄
譯者序
前言
關于作者
第1章基礎
1.1理念范疇:實體,類別,類屬
1.2值
1.3對象
1.4過程
1.5規(guī)范類型
1.6規(guī)范過程
1.7概念
1.8總結
第2章 變換及其軌道
2.1變換
2.2軌道
2.3碰撞點
2.4軌道規(guī)模的度量
2.5動作
2.6總結
第3章 可結合運算
3.1可結合性
3.2計算乘冪
3.3程序變換
3.4處理特殊情況的過程
3.5參數(shù)化算法
3.6線性遞歸
3.7累積過程
3.8總結
第4章 線性序
4.1關系的分類
4.2全序和弱序
4.3按序選取
4.4自然全序
4.5派生過程組
4.6按序選取過程的擴展
4.7總結
第5章 有序代數(shù)結
5.1基本代數(shù)結構
5.2有序代數(shù)結構
5.3求余
5.4最大公因子
5.5廣義gcd
5.6Steingcd
5.7商
5.8負量的商和余數(shù)
5.9概念及其模型
5.10計算機整數(shù)類型
5.11結論
第6章 迭代器
6.1可讀性
6.2迭代器
6.3范圍
6.4可讀范圍
6.5遞增的范圍
6.6前向迭代器
6.7索引迭代器
6.8雙向迭代器
6.9隨機訪問迭代器
6.10總結
第7章坐標結構
7.1二叉坐標
7.2雙向二叉坐標
7.3坐標結構
7.4同構,等價和有序
7.5總結
第8章
后繼可變的坐標
8.1鏈接迭代器
8.2鏈接重整
8.3鏈接重整的應用
8.4鏈接的二叉坐標
8.5結論
第9章拷貝
9.1可寫性
9.2基于位置的拷貝
9.3基于謂詞的拷貝
9.4范圍的交換
9.5總結
第10章 重整
10.1置換
10.2重整
10.3 反轉算法
10.4 輪換算法
10.5 算法選擇
10.6 總結
第11章 劃分和歸并
11.1劃分
11.2平衡的歸約
11.3歸并
11.4總結
第12章 復合對象
12.1簡單復合對象
12.2動態(tài)序列
12.3基礎類型
12.4總結
跋
附錄A 數(shù)學表示
附錄B 程序設計語言
參考文獻
索引
章節(jié)摘錄
版權頁:插圖:
媒體關注與評論
“要是問一位機械、建筑或電子工程師,如果不依靠堅實的數(shù)學基礎,他們能走多遠。他們會告訴你‘走不了多遠’。而所謂的軟件工程師在實踐其技能時,卻常常對他們所做工作的數(shù)學基礎知之甚少,甚至一無所知。同時我們也很奇怪為什么軟件由于不能按時發(fā)布并充斥錯誤而聲名狼藉,而其他工程師卻能按時完成其橋梁、汽車、各種電子裝置等,而且缺陷很少。本書就是想糾正這種不平衡現(xiàn)象。我在Adobe的高級開發(fā)團隊的成員們,但凡參加了基于同樣材料的課程,都覺得付出的時間獲益匪淺。初看可能覺得這種高度技術性的文字只是為計算機科學家寫的,其實所有從事實際工作的軟件工程師都應該來讀?!薄 ?Martin Newell,Adobe 院士“本書包含一些我所見過的最美的代碼?!薄 ?Bjarne Stroustrup,C++ 設計者“我很高興看到Alex課程的內容。擔任Silicon Graphics的CTO時,我曾大力支持這一課程的開發(fā)和教授,現(xiàn)在這本書已經(jīng)能被所有程序員閱讀了?!薄 ?Forest Baskett,合伙人,New Enterprise Associates“Paul的耐心和在體系結構方面的經(jīng)驗幫助把Alex的數(shù)學方法組織成為一套高度結構化的大廈——功德無量!” —— Robert W. Taylor,Xerox PARC CSL和DEC系統(tǒng)研究中心創(chuàng)始人
編輯推薦
《編程原本》編輯推薦:追溯數(shù)學原理,探求編程的本質,STL之父Alexander Stepanov力作,C++之父Bjarne Stroustrup鼎力推薦,北大數(shù)學學院教授裘宗燕老師傾情獻譯。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載