程序設(shè)計語言概念

出版時間:2011-1  出版社:清華大學(xué)出版社  作者:Robert W.Sebesta  頁數(shù):563  譯者:徐明星,鄔曉鈞  
Tag標(biāo)簽:無  

前言

程序設(shè)計語言是計算機教學(xué)的基礎(chǔ)課程。大部分的高等院校程序設(shè)計語言教材旨在講解語法形式,講解如何寫出讓編譯器接受的語句,以及這些語句是如何被編譯器理解的。學(xué)生很容易將程序設(shè)計語言當(dāng)作一門特殊的外語來學(xué)習(xí),將編程當(dāng)作是句型練習(xí),編程過程就是語言翻譯的過程一即將頭腦中的“內(nèi)部言語”翻譯成符合某種程序設(shè)計語言語法的語句。當(dāng)面對以練習(xí)語法為主要目的習(xí)題時,這樣的翻譯過程容易完成,而當(dāng)面對復(fù)雜的綜合性習(xí)題或者要編程實現(xiàn)算法時,學(xué)生往往就會覺得難以下手。導(dǎo)致這種情況的根本原因是學(xué)生的思維沒有上升到計算機解題的思維。程序設(shè)計語言是一種人造語言,它與漢語、英語、法語等自然語言存在著很大的不同。程序設(shè)計語言是在一定的設(shè)計思想指導(dǎo)下,權(quán)衡多種因素,精心為計算機定義的。程序設(shè)計語言的語法和語義只是外在的表現(xiàn),程序設(shè)計語言的本質(zhì)是解決應(yīng)用領(lǐng)域問題的方法與工具。語言既是思維的表達(dá),也是思維的工具。如果局限于程序設(shè)計語言定義的語法和語義,不能運用語言工具來輔助自己的思維,必然會限制用程序設(shè)計語言來解決實際問題的能力。本書并不是介紹某一種具體的程序設(shè)計語言所蘊涵的計算機解題原理,而是直接解釋說明一般性原理,并介紹這些原理在不同程序設(shè)計語言中的實現(xiàn),比較不同語言實現(xiàn)的優(yōu)劣。這是一種從本質(zhì)到現(xiàn)象的論述方式,它使讀者更關(guān)注于程序設(shè)計語言原理本身,為今后深入理解和掌握具體的程序設(shè)計語言,選擇更合適的程序設(shè)計語言來解決具體問題,乃至于創(chuàng)造實現(xiàn)新的程序設(shè)計語言都打下扎實的基礎(chǔ)。

內(nèi)容概要

  《世界著名計算機教材精選:程序設(shè)計語言概念(第9版)》從為什么學(xué)習(xí)程序設(shè)計語言入手,深入細(xì)致地講解了命令式語言的主要結(jié)構(gòu)及其設(shè)計與實現(xiàn),內(nèi)容涉及變量、數(shù)據(jù)類型、表達(dá)式和賦值語句、控制語句、子程序、數(shù)據(jù)抽象機制、支持面向?qū)ο蟪绦蛟O(shè)計(繼承和動態(tài)方法綁定)、并發(fā)和異常處理等方面。最后兩章介紹了函數(shù)式程序設(shè)計語言和邏輯程序設(shè)計語言?!  妒澜缰嬎銠C教材精選:程序設(shè)計語言概念(第9版)》內(nèi)容豐富,剖析透徹,被美國和加拿大多所高等院校采用作為教材?!妒澜缰嬎銠C教材精選:程序設(shè)計語言概念(第9版)》既可用做高等院校計算機及相關(guān)專業(yè)本科生程序設(shè)計語言課程的教材和參考書,也可供程序設(shè)計人員參考。

作者簡介

作者:(美國)塞巴斯塔(Robert W.Sebesta) 譯者:徐明星 鄔曉鈞

書籍目錄

第1章 預(yù)備知識1.1 學(xué)習(xí)程序設(shè)計語言原理的原因1.2 程序設(shè)計領(lǐng)域1.2.1 科學(xué)應(yīng)用1.2.2 商務(wù)應(yīng)用1.2.3 人工智能1.2.4 系統(tǒng)程序設(shè)計1.2.5 網(wǎng)絡(luò)軟件1.3 語言評價標(biāo)準(zhǔn)1.3.1 可讀性1.3.2 可寫性1.3.3 可靠性1.3.4 代價1.4 影響語言設(shè)計的因素1.4.1 計算機體系結(jié)構(gòu)1.4.2 程序設(shè)計方法學(xué)1.5 程序設(shè)計語言的分類1.6 語言設(shè)計中的權(quán)衡1.7 實現(xiàn)方法1.7.1 編譯1.7.2 完全解釋1.7.3 混合實現(xiàn)系統(tǒng)1.7.4 預(yù)處理器1.8 編程環(huán)境小結(jié)復(fù)習(xí)題習(xí)題第2章 主要程序設(shè)計語言的發(fā)展2.1 Zuse的Plankalkul語言2.1.1 歷史背景2.1.2 語言概述2.2 最少硬件的程序設(shè)計:偽代碼2.2.1 Short Code語言2.2.2 Speedcoding系統(tǒng)2.2.3 UNIVAC“編譯系統(tǒng)”2.2.4.相關(guān)工作2.3 IBM704.計算機與Fortran語言2.3.1 歷史背景2.3.2 設(shè)計過程2.3.3 Fortran I概述2.3.4 Fortran II2.3.5 Fortran IV、77、90、95和20032.3.6 評價2.4 函數(shù)式程序設(shè)計:LISP語言2.4.1 人工智能的起源和表處理2.4.2 LISP語言的設(shè)計過程2.4.3 語言概述2.4.4 評價2.4.5 LISP的兩種后代語言2.4.6 相關(guān)語言2.5 邁向成熟的第一步:ALGOL602.5.1 歷史背景2.5.2 早期設(shè)計過程2.5.3 ALGOL58概述2.5.4 對ALGOL58報告的響應(yīng)2.5.5 ALGOL60的設(shè)計過程2.5.6 ALGOL60概述2.5.7 評價2.6 商務(wù)記錄計算機化:COBOL語言2.6.1 歷史背景2.6.2 FLOW-MATIC語言2.6.3 COBOL語言的設(shè)計過程2.6.4 評價2.7 分時處理的開始:BASIC語言2.7.1 設(shè)計過程2.7.2 語言概述2.7.3 評價2.8 滿足所有人的需要:PL/I2.8.1 歷史背景2.8.2 設(shè)計過程2.8.3 語言概述2.8.4 評價2.9 兩種早期的動態(tài)語言:APL和SNOBOL2.9.1 APL語言的起源與特點2.9.2 SNOBOL語言的起源與特點2.10 數(shù)據(jù)抽象的開始SIMULA672.10.1 設(shè)計過程2.10.2 語言概述2.11 正交設(shè)計:ALGOL682.11.1 設(shè)計過程2.11.2 語言概述2.11.3 評價2.12 ALGOL系列語言的早期后代語言2.12.1 為簡單性而設(shè)計:Pascal語言2.12.2 可移植的系統(tǒng)語言:C語言2.13 基于邏輯的程序設(shè)計:Prolog語言2.13.1 設(shè)計過程2.13.2 語言概述2.13.3 評價2.14 歷史上規(guī)模最大的設(shè)計工作:Ada語言2.14.1 歷史背景2.14.2 設(shè)計過程2.14.3 語言概述2.14.4 評價2.14.5 Ada952.15 面向?qū)ο蟮某绦蛟O(shè)計:Smalltalk2.15.1 設(shè)計過程2.15.2 語言概述2.15.3 評價2.16 結(jié)合命令式和面向?qū)ο蟮奶匦裕篊++2.16.1 設(shè)計過程2.16.2 語言概述2.16.3 評價2.16.4 一種相關(guān)語言:Eiffe2.16.5 另一種相關(guān)語言:Delphi2.17 基于命令式的面向?qū)ο笳Z言:Java2.17.1 設(shè)計過程2.17.2 語言概述2.17.3 評價2.18 腳本語言2.18.1 Perl的起源與特點2.18.2 JavaScript的起源與特點2.18.3 PHP的起源與特點2.18.4 Python的起源與特點2.18.5 Ruby的起源與特點2.18.6 Lua的起源與特點2.19 一種新千年的基于C的語言:C#2.19.1 設(shè)計過程2.19.2 語言概述2.19.3 評價2.20 標(biāo)記與程序設(shè)計混合的語言2.20.1 XSLT2.20.2.ISP小結(jié)文獻(xiàn)注釋復(fù)習(xí)題習(xí)題程序設(shè)計練習(xí)訪談:用戶設(shè)計與語言設(shè)計第3章 描述語法和語義3.1 概述3.2 描述語法的普遍問題3.2.1 語言識別器3.2.2 語言生成器3.3 描述語法的形式化方法3.3.1 巴科斯.諾爾范式和上下文無關(guān)文法3.3.2 擴展的BNF3.3.3 文法與識別器3.4 屬性文法3.4.1 靜態(tài)語義3.4.2 基本概念3.4.3 屬性文法定義3.4.4 本質(zhì)屬性3.4.5 屬性文法的例子3.4.6 計算屬性值3.4.7 評價3.5 描述程序的意義動態(tài)語義3.5.1 操作語義3.5.2 指稱語義3.5.3 公理語義小結(jié)文獻(xiàn)注釋復(fù)習(xí)題習(xí)題第4章 詞法分析和語法分析4.1 概述4.2 詞法分析4.3 語法分析問題4.3.1 語法分析概述4.3.2 自項向下的語法分析器4.3.3 自底向上的語法分析器4.3.4 語法分析的復(fù)雜度4.4 遞歸下降的語法分析4.4.1 遞歸下降的語法分析過程4.4.2 LL文法類4.5 自底向上的語法分析4.5.1 自底向上語法分析器的分析問題4.5.2 移進(jìn)-歸約算法4.5.3 LR語法分析器小結(jié)復(fù)習(xí)題習(xí)題程序設(shè)計練習(xí)第5章 名字、綁定和作用域5.1 引言5.2 名字5.2.1 設(shè)計問題5.2.2 名字形式5.2.3 特殊字5.3 變量5.3.1 名字5.3.2 地址5.3.3 類型5.3.4 數(shù)值5.4 綁定的概念5.4.1 屬性與變量綁定5.4.2 綁定類型5.4.3 存儲綁定和生存期5.5 作用域5.5.1 靜態(tài)作用域5.5.2 塊5.5.3 聲明的次序5.5.4 全局作用域5.5.5 靜態(tài)作用域評估5.5.6 動態(tài)作用域5.5.7 動態(tài)作用域評估5.6 作用域和生存期5.7 引用環(huán)境5.8 命名常量小結(jié)復(fù)習(xí)題問題集編程題訪談:腳本語言以及其他靈活解決方案的例子第6章 數(shù)據(jù)類型6.1 引言6.2 基本數(shù)據(jù)類型6.2.1 數(shù)值類型6.2.2 布爾類型6.2.3 字符類型6.3 字符串類型6.3.1 設(shè)計問題6.3.2 字符串及其操作6.3.3 字符串長度的設(shè)計選項6.3.4 評估6.3.5 字符串類型的實現(xiàn)6.4 用戶定義的序數(shù)類型6.4.1 枚舉類型6.4.2 子界類型6.4.3 用戶定義的有序類型的實現(xiàn)6.5 數(shù)組類型6.5.1 設(shè)計問題6.5.2 數(shù)組和索引6.5.3 下標(biāo)的綁定和數(shù)組的種類6.5.4 數(shù)組初始化6.5.5 數(shù)組操作6.5.6 矩形數(shù)組和不規(guī)則數(shù)組6.5.7 切片6.5.8 評估6.5.9 數(shù)組類型的實現(xiàn)6.6 關(guān)聯(lián)數(shù)組6.6.1 結(jié)構(gòu)和操作6.6.2 關(guān)聯(lián)數(shù)組的實現(xiàn)6.7 記錄類型6.7.1 記錄的定義6.7.2 紀(jì)錄域引用6.7.3 記錄操作6.7.4 評估6.7.5 錄類型的實現(xiàn)6.8 聯(lián)合類型6.8.1 設(shè)計問題6.8.2 判別式聯(lián)合與自由聯(lián)合6.8.3 Ada的聯(lián)合類型6.8.4 評估6.8.5 聯(lián)合類型的實現(xiàn)6.9 指針和引用類型6.9.1 設(shè)計問題6.9.2 指針操作6.9.3 指針的相關(guān)問題6.9.4 Ada語言中的指針6.9.5 C和C++中的指針6.9.6 引用類型……第7章 表達(dá)式與賦值語句第8章 語句輯控制結(jié)構(gòu)第9章 子程序第10章 實現(xiàn)子程序第11章 抽象數(shù)據(jù)類型與封裝結(jié)構(gòu)第12章 面向?qū)ο蟪绦蛟O(shè)計的支持第13章 描述語法和語義第14章 異常處理和事件數(shù)理第15章 函數(shù)式程序設(shè)計語言第16章 邏輯程序設(shè)計語言參考文獻(xiàn)

章節(jié)摘錄

插圖:增加表達(dá)思想的能力。一般認(rèn)為,人們思考問題的深度受到他們思考時所使用語言的表達(dá)能力的影響。那些對自然語言理解膚淺的人,思維復(fù)雜度也有限,特別是在抽象的深度上。換言之,人們難以將口頭或書面無法表達(dá)的東西概念化。程序員在開發(fā)軟件的過程中同樣受到這一限制。他們開發(fā)軟件所用的語言對他們所用的控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)和抽象層次也造成限制,從而也同樣限制了他們能夠構(gòu)造的算法形式。了解更多的程序設(shè)計語言的特性能夠在軟件開發(fā)時減少這些限制。程序員學(xué)會新的語言結(jié)構(gòu)后,能夠提升軟件開發(fā)時思維過程的層次??赡苡腥苏J(rèn)為,了解其他語言的功能對一個被要求使用不具有這一功能的語言進(jìn)行開發(fā)的程序員沒有幫助。然而這種看法并不成立,因為通常來說語言的結(jié)構(gòu)能夠被不直接支持這些結(jié)構(gòu)的其他語言模擬出來。例如,一個了解Perl語言(Wall等,2000)中關(guān)聯(lián)數(shù)組的結(jié)構(gòu)和用法的C語言程序員,可能會用C語言設(shè)計出模擬關(guān)聯(lián)數(shù)組的結(jié)構(gòu)。換句話說,對程序設(shè)計語言概念的學(xué)習(xí)能夠使程序員對重要的語言特性與結(jié)構(gòu)有充分的理解,鼓勵程序員去使用它們,甚至在所用的語言不直接支持這種特性或結(jié)構(gòu)的情況下。擴充選擇合適語言的背景知識。許多專業(yè)的程序員沒有受過多少正規(guī)的計算機科學(xué)教育,而是通過自學(xué)或單位內(nèi)部培訓(xùn)。這類培訓(xùn)通常只教授與公司當(dāng)前項目直接相關(guān)的一兩種語言。其他許多程序員在很久以前受過正規(guī)的培訓(xùn),他們那時所學(xué)的語言已經(jīng)不再使用,現(xiàn)在程序設(shè)計語言中許多特性當(dāng)時知道的人并不多。

編輯推薦

《程序設(shè)計語言概念(第9版)》:世界著名計算機教材精選

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    程序設(shè)計語言概念 PDF格式下載


用戶評論 (總計8條)

 
 

  •   很棒,質(zhì)量不錯,感覺很好。
  •   書的質(zhì)量很不錯,內(nèi)容么。。由于是課本,也沒什么好與不好的
  •   這是我在圖書館找到的,哎……不能在上面畫畫寫寫,干脆買吧!!
  •   程序設(shè)計者必讀,幫你深層次的了解編程語言
  •       作為一個程序員,一般只有精通一門程序設(shè)計語言就可以勝任當(dāng)前的工作了。當(dāng)往往進(jìn)入一個新的項目,或者重新選擇一份工作,或者自己發(fā)現(xiàn)當(dāng)前的所使用的程序語言對于有些問題的解決,用著不是那么方便,這個時候我們就傾向于去尋求一種合適的語言。比如,我最近在工作過程中,發(fā)現(xiàn)當(dāng)前項目其實缺少很多工具,我們開發(fā)主要用的是C++,一個個對于C++不能說的上精通,但各種語法與庫也了然于胸,用C++去寫一些工具的時候就發(fā)現(xiàn)細(xì)枝末節(jié)太多、太煩人,數(shù)據(jù)庫、XML文件解析、字串處理雖說都有庫支持,但總感覺用著不那么順手,速度也沒那么快,還不如找一個腳本語言快速開發(fā)一個,Python正和我意。
        
        程序語言之間有很多共同之處,往往當(dāng)你精通一門之后,學(xué)習(xí)其它語言就觸類旁通了。需要做的事情就是熟悉它的語法,如果能看懂相應(yīng)的BNF(巴克斯——勞爾范式)那就更好了,遇到模棱兩可的語法問題,多去查查就好了。語義一般都大同小異,當(dāng)你知道了程序言的各種機制的實現(xiàn)之后,對其語義的理解就更加深刻了。《程序設(shè)計語言原理》這邊書相當(dāng)于程序語言各種機制的總結(jié),同時對于我們?nèi)W(xué)習(xí)新語言也指出一條清晰的思路,對現(xiàn)在正在用的語言也有更加深刻的認(rèn)識了。
      
        程序語言的分類:
      
       * 命令式語言:使用最多的,如:C/C++/Java/VB/Pascal等所有主流語言。主要是因為馮諾依曼計算機模型(處理器負(fù)責(zé)計算,內(nèi)存負(fù)責(zé)存儲中間結(jié)果)。
       * 面向?qū)ο笳Z言:基于數(shù)據(jù)抽象的封裝,提出類、對象、繼承、動態(tài)綁定等概念,用來模擬問題領(lǐng)域出現(xiàn)的事物。C++/Java最好的例子了。
       * 函數(shù)式語言:這種類型的語言是基于阿隆佐·邱器(Alozo Church,阿蘭·圖靈的師傅)提出的lamda演算,語言中一切皆函數(shù)。Lisp就是典型的函數(shù)式語言。
       * 邏輯語言:基于謂詞演算,可以進(jìn)行邏輯推理的語言,如:Prolog(這種類型的語言至今還沒用過,只是聽說過大名~~)
      
      
        命令式語言的學(xué)習(xí)思路:
      
       1. 名字、變量、綁定
      
       * 名字是否大小寫敏感?那些是關(guān)鍵字?那些是保留字?
       * 變量六個基本屬性:名字、地址、類型、值、生存期(時間)、作用域(空間)
       * 變量類型檢查?強類型嗎?
       * 變量的作用域如何?靜態(tài)作用域、快、動態(tài)作用域?
       * 變量的生存期如何?精通變量、棧動態(tài)變量、顯示堆動態(tài)變量、隱式堆動態(tài)變量(垃圾回收)?
      
       2. 數(shù)據(jù)類型
      
       * 基本類型:數(shù)值類型(整數(shù)、浮點數(shù)、復(fù)數(shù)、小數(shù))、布爾類型、字符類型
       * 字符串類型
       * 序數(shù)類型:枚舉、子范圍類型
       * 數(shù)組類型
       * 關(guān)聯(lián)數(shù)組
       * 記錄類型
       * 聯(lián)合類型
       * 指針類型
       * 引用類型
      
       3. 表達(dá)式與賦值語句
      
       * 算術(shù)表達(dá)式
       * 關(guān)系表達(dá)式
       * 布爾表達(dá)式
       * 操作符號的優(yōu)先級、結(jié)合性
       * 操作符號的重載
       * 賦值語句:簡單賦值、條件目標(biāo)、符合復(fù)合賦值操作符、列表賦值、混合模式賦值
      
       4. 控制結(jié)構(gòu)
      
       * 選擇語句:雙向選擇語句(if... else ...)、多向選擇語句(switch .. case ..)
       * 循環(huán)語句:計數(shù)器循環(huán)(for ...)、邏輯控制循環(huán)(while)、用戶定位的控制循環(huán)(break、continue)
       * 無條件跳轉(zhuǎn)(goto)
      
       5. 子程序(過程抽象)
      
       * 過程
       * 函數(shù)
       * 參數(shù)傳遞語義模式:輸入形、輸出型、輸入輸出型
       * 參數(shù)傳遞實現(xiàn)模式:按值傳遞、按結(jié)果傳遞、按值與結(jié)果傳遞、按引用傳遞
       * 參數(shù)的類型檢查
       * 局部引用環(huán)境:局部變量、嵌套子程序
       * 重載子程序
       * 通用子程序(如:C++函數(shù)模板)
      
       6. 面向?qū)ο蟮某绦蛟O(shè)計(數(shù)據(jù)抽象)
      
       * 抽象數(shù)據(jù)類型
       * 繼承
       * 動態(tài)綁定
      
      
        以上大概列舉了一個語言的所有特性,有些語言支持、有些語言不支持。語法不盡相同,但語義一般都是相同的。只要按著上面列舉的順序,確定好某一種語言的語法形式,我相信你我都會很容易學(xué)會一門新的語言。上述的僅僅是學(xué)會了一門程序設(shè)計語言,為了解決實際問題其實我們還面臨著無盡的長路,問題的模式和相應(yīng)的程序語言庫等都需要慢慢去熟悉和學(xué)習(xí)。
      
        所以我認(rèn)為,精通一門語言并不代表著你會用那種語言寫一些不算糟糕的程序,還意味著必須知道常見的問題模式及其對應(yīng)的程序庫,并且爛熟于心,遇到問題時候很自然地就會用到它。當(dāng)然每種語言還有它獨有的一些技巧和使用注意事項,對這些也要必須有所了解。千萬不要自稱:“我精通xxx語言”,其實我們只是“會”用它寫一些程序而已,所謂的精通者必定對這門語言有著極其深刻的理解和認(rèn)識、甚至編譯器效率,各種細(xì)微之處也了然于胸。(以上僅為個人觀點)
      
  •     在讀,不求甚解
      只因為很多內(nèi)容不能在自己的腦海中形成自己的體系,一些基本功有所欠缺所致
      讀到中間部分了,對于程序設(shè)計語言的歷史,一些程序語言的特點及一些常見結(jié)構(gòu)的形成原因有所了解,比如字符串,知道為什么會有字符串這個數(shù)據(jù)類型,在不同的語言中對于這個數(shù)據(jù)類型的實現(xiàn)有什么區(qū)別,他們是基于什么樣的考慮從而得到最后這樣的實現(xiàn)的。
      可能會在讀完后先放放,過段時間再溫習(xí),也許那時會有更多的體會。
      
      
  •     我有個“壞習(xí)慣”:碰到我買到的書都要評論,呵呵。
      
      《概念》我也買了,不過買的是第 5 版的英文版。這本書我比較欣賞的是她介紹語言發(fā)展的部分《Evolution of the Major Programming Languages》(即:《主流程序設(shè)計語言的演化》),從我之前聽都沒聽過的 Zuse Plankalkal 到現(xiàn)在的主流語言,即有我熟知的匯編、C/C++、Basic,也有我淺聞的 Fortran、Eiffel、Ada、Pascal、LISP、Shcema 等,等于是把我零散的概念全部串接在了一切。
      
      對于一些熟知的編程概念,像什么“數(shù)組”、“變量”、“作用域”、“結(jié)構(gòu)”、“類”、“對象”之類的,書中都有闡述其原理及其新舊實現(xiàn)方法。當(dāng)然,這些實現(xiàn)方法只是“概念”,如果要學(xué)習(xí)實際的實現(xiàn)方法,這本書顯然不怎么適合。
      
      正如“Reasons for Studying Concepts of Programming Languages”(即“學(xué)習(xí)程序設(shè)計語言概念的理由”)一章中說的那樣,學(xué)習(xí)這些,可以更好地學(xué)習(xí)一門新的編程語言,更好地理解現(xiàn)有的編程概念。至少對于我,這些是成立的。
      
      有點不爽的是,我買回去的時候發(fā)現(xiàn)有一頁是被撕毀欄的(但還可拼接起來)……雖然可以更換,可一算算車費幾乎都可以再買一本了,只好怏怏地用膠布貼起來了事了。算是我讀這本書的一段小插曲,呵呵
      
      順便說一句,經(jīng)典的書都好貴啊……
  •   語言均是用于溝通。程序語言用以與計算機溝通,不同的語言有不同的語法和類庫,不同的語言有各自不同的領(lǐng)域。
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7