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