【转帖】计算机编程语言
計算機編程語言
https://www.cnblogs.com/Kevin-Yang/p/11221332.html 最近博客園的文章 周天還沒時間仔細看。 等工作日時仔細看一下。?
?
?
用于表達數字計算機的一組詳細指令的各種語言。 當這些指令處于稱為機器語言的計算機制造商特定數字形式時,在用相應匯編語言表達的簡單替換過程之后,或者在從某些“更高級別”語言翻譯之后,可以直接執行這些指令。 雖然有許多計算機語言,但相對較少被廣泛使用。
機器和匯編語言是“低級別的”,要求程序員明確管理計算機的所有數據存儲和操作的特殊功能。 相比之下,高級語言可以防止程序員擔心這些注意事項,并提供程序員更容易編寫和讀取的符號。
語言類型
<!-- Low Level Language -->
機器語言和匯編語言(Machine and assembly languages)
<!-- High Level Language -->
算法語言(Algorithmic languages)
FORTRAN
ALGOL
LISP
C
面向商業的語言(Business-oriented languages)
COBOL
SQL
面向教育的語言(Education-oriented languages)
BASIC
Pascal
Logo
Hypertalk
面向對象的語言(Object-oriented languages)
C++
Ada
Java
Visual Basic
聲明性語言(Declarative languages)
腳本語言(Scripting languages)
文檔格式化語言(Document formatting languages)
TeX
PostScript
SGML
萬維網顯示語言(World Wide Web display languages)
HTML
XML
Web scripting
元素編程語言(Elements Of Programming)
Control structures
Data structures
?
語言類型
機器語言和匯編語言(Machine and assembly languages)
機器語言由特定計算機可以直接執行的操作數字代碼組成。 代碼是0和1的字符串,或二進制數字(“位”),它們經常被轉換為十六進制(基數16)以供人類查看和修改。 機器語言指令通常使用一些位來表示操作,例如加法,一些用于表示操作數,或者可能用于表示下一條指令的位置。 機器語言難以讀寫,因為它不像傳統的數學符號或人類語言,并且其代碼因計算機而異。
匯編語言旨在輕松轉換為機器語言。 盡管可以通過名稱而不是通過其機器地址來引用數據塊,但是匯編語言不提供組織復雜信息的更復雜的方法。 與機器語言一樣,匯編語言需要詳細了解內部計算機體系結構。 當這些細節很重要時,如在編程計算機以與輸入/輸出設備(打印機,掃描儀,存儲設備等)交互時,它是有用的。
算法語言(Algorithmic languages)
算法語言旨在表達數學或符號計算。 它們可以用類似于數學的符號表示代數運算,并允許使用包含常用操作的子程序進行重用。 它們是第一種高級語言。
FORTRAN
第一個重要的算法語言是FORTRAN(公式轉換),由John Backus領導的IBM團隊于1957年設計。 它旨在用于實數的科學計算,并將它們的集合組織為一維或多維數組。 其控制結構包括條件IF語句,重復循環(所謂的DO循環)和允許非順序執行程序代碼的GOTO語句。 FORTRAN使得用于常見數學運算的子程序變得方便,并且構建了它們的庫。
FORTRAN還旨在轉化為高效的機器語言。 它立即成功并繼續發展。
ALGOL
ALGOL(算法語言)由美國和歐洲計算機科學家委員會在1958年至1960年期間設計,用于發布算法以及進行計算。 與LISP(在下一節中描述)一樣,ALGOL具有遞歸子程序 - 可以調用自身來解決問題的過ALGOL為描述編程語言Backus-Naur Form的結構提供了一種符號,Backus-Naur Form在某些變體中成為說明編程語言語法(語法)的標準工具。 ALGOL在歐洲廣泛使用,多年來它仍然是計算機算法發布的語言。 許多重要的語言,如Pascal和Ada(后面都有描述),都是它的后代。程,將其減少為同類的較小問題。 ALGOL引入了塊結構,其中程序由可能包含數據和指令的塊組成,并且具有與整個程序相同的結構。 塊結構成為用于構建小型組件的大型程序的強大工具。
LISP
LISP(列表處理)是由約翰麥卡錫在麻省理工學院(MIT)于1960年開發的,它建立在遞歸函數的數學理論之上(其函數出現在它自己的定義中)。 LISP程序是應用于數據的函數,而不是FORTRAN和ALGOL中的一系列程序步驟。 LISP使用一種非常簡單的表示法,其中操作及其操作數在括號列表中給出。例如,(+ a(* b c))代表a + b * c。雖然這看起來很尷尬,但這種符號適用于計算機。 LISP還使用列表結構來表示數據,并且由于程序和數據使用相同的結構,因此LISP程序很容易在其他程序上作為數據運行。
LISP成為人工智能(AI)編程的通用語言,部分原因是由于LISP和AI工作在麻省理工學院的合作,部分原因是能夠“學習”的AI程序可以用LISP編寫為自修改程序。 LISP通過眾多方言發展,例如Scheme和Common LISP。
C
C編程語言由AT&T公司的Dennis Ritchie和Brian Kernighan于1972年開發,用于編程計算機操作系統。它通過較小單元的組合構建數據和程序的能力與ALGOL相當。它使用緊湊的表示法,使程序員能夠使用數據地址及其值進行操作。這種能力在系統編程中很重要,C與匯編語言共享可以利用計算機內部架構的所有功能。 C及其后代C ++仍然是最常用的語言之一。
面向商業的語言(Business-oriented languages)
COBOL
COBOL(通用業務導向語言)自1959年成立以來一直被企業大量使用。計算機制造商和用戶委員會以及美國政府組織成立了CODASYL(數據系統和語言委員會),以開發和監督語言標準,以便確保其在不同系統中的可移植性。
COBOL在介紹時使用類似英語的符號小說。業務計算組織和操作大量數據,COBOL為這些任務引入了記錄數據結構。記錄將異構數據(例如姓名,ID號,年齡和地址)聚合到一個單元中。這與科學語言形成對比,在這種語言中,同質數組是常見的。記錄是將數據“分塊”成單個對象的重要示例,它們幾乎出現在所有現代語言中。?
SQL
SQL(結構化查詢語言)是一種用于指定數據庫組織(記錄集合)的語言。使用SQL組織的數據庫稱為關系數據庫,因為SQL提供了查詢數據庫以查找屬于給定關系的信息的功能。例如,查詢可能是“查找包含last_name Smith和city New York的所有記錄。”商業數據庫程序通常使用類似SQL的語言進行查詢。
面向教育的語言(Education-oriented languages)
BASIC
BASIC(初學者的通用符號指令代碼)是由John Kemeny和Thomas Kurtz于20世紀60年代中期在達特茅斯學院設計的。它旨在讓初學者,特別是非計算機科學專業的學生容易學習,并且在具有許多用戶的分時計算機上運行良好。它具有簡單的數據結構和符號,并且被解釋為:BASIC程序逐行翻譯并在翻譯時執行,這使得查找編程錯誤變得容易。
它的小巧和簡潔也使BASIC成為早期個人電腦的流行語言。它最近的形式采用了其他當代語言的許多數據和控制結構,這使得它更強大但對初學者來說不太方便。
Pascal
大約1970年,瑞士的Niklaus Wirth設計了Pascal來教授結構化編程,強調了在沒有GOTO語句的情況下有條理地使用條件和循環控制結構。 雖然Pascal在表示法中類似于ALGOL,但它提供了定義用于組織復雜信息的數據類型的能力,這是超出ALGOL以及FORTRAN和COBOL功能的功能。 用戶定義的數據類型允許程序員引入復雜數據的名稱,然后語言翻譯者可以在運行程序之前檢查其是否正確使用。
在20世紀70年代末和80年代,Pascal是最廣泛使用的編程指令語言之一。 它幾乎可以在所有計算機上使用,并且由于其熟悉性,清晰度和安全性,它被用于生產軟件和教育。
LOGO
標志起源于20世紀60年代后期,作為教育的簡化LISP方言; Seymour Papert和其他人在麻省理工學院用它來向學齡兒童傳授數學思維。它有一個比LISP更傳統的語法,并以“烏龜圖形”為特色,這是一種生成計算機圖形的簡單方法。 (這個名字來自一個早期項目,用于編寫一個類似烏龜的機器人。)海龜圖形使用了以身體為中心的指令,其中一個對象通過命令移動到屏幕上,例如“左90”和“前進”,指定相對的動作到目前的對象的位置和方向,而不是固定的框架。與遞歸例程一起,這種技術使得編寫復雜和有吸引力的模式變得容易。
Hypertalk
Hypertalk是由Bill Atkinson為Apple的Macintosh設計的“我們其他人的編程”。使用簡單的類似英語的語法,Hypertalk使任何人都可以快速將文本,圖形和音頻組合成“鏈接堆棧”,可以通過在程序提供的標準按鈕上單擊鼠標來導航。在20世紀80年代和90年代早期,Hypertalk在教育工作者中特別受歡迎,用于課堂多媒體演示。盡管Hypertalk具有面向對象語言的許多功能(在下一節中描述),但Apple并沒有為其他計算機平臺開發它并讓它萎靡不振;隨著蘋果公司在20世紀90年代的市場份額下降,一種新的跨平臺顯示多媒體的方式使得Hypertalk幾乎已經過時(參見萬維網顯示語言部分)。
面向對象的語言(Object-oriented languages)
面向對象的語言有助于管理大型程序的復雜性。對象打包數據及其上的操作,以便只有操作可公開訪問,并且隱藏數據結構的內部細節。通過允許程序員單獨考慮程序的每個部分,這種信息隱藏使大規模編程變得更容易。此外,對象可以從更一般的對象派生,“繼承”它們的能力。這樣的對象層次結構使得可以定義專用對象而不重復更一般的對象中的所有對象。
面向對象的編程始于Simula語言(1967),它為ALGOL添加了隱藏信息。另一個有影響力的面向對象語言是Smalltalk(1980),其中一個程序是一組通過彼此發送消息來交互的對象。
C ++
C ++語言由Bjarne Stroustrup在20世紀80年代中期在AT&T開發,通過在保留C程序效率的同時添加對象來擴展C語言。它一直是教育和工業編程最重要的語言之一。許多操作系統的大部分,例如Microsoft Corporation的Windows 98,都是用C ++編寫的。
Ada
阿達以奧古斯塔·阿達·金(Augusta Ada King)的名字命名,她是洛夫萊斯的伯爵夫人,曾是19世紀英國發明家查爾斯·巴貝奇的助手,有時被稱為第一位計算機程序員。阿達語是20世紀80年代初為美國國防部開發的大規模節目。它將類似Pascal的表示法與將操作和數據打包成獨立模塊的能力相結合。它的第一個形式Ada 83并不是完全面向對象的,但隨后的Ada 95提供了對象以及構造它們的層次結構的能力。雖然Ada不再被授權用于國防部的工作,但仍然是工程大型項目的有效語言。
Java
在20世紀90年代早期,Java由Sun Microsystems,Inc。設計,作為萬維網(WWW)的編程語言。雖然它在外觀上類似于C ++,但它完全是面向對象的。特別是,Java省去了較低級別的功能,包括操作數據地址的能力,這種功能在分布式系統的程序中既不可取也不實用。為了便于移植,Java程序由特定于每個計算機平臺的Java虛擬機翻譯,然后執行Java程序。除了通過Web“applet”向Internet添加交互功能之外,Java還被廣泛用于編寫小型便攜式設備,例如移動電話。
Visual Basic
Visual Basic是由Microsoft開發的,通過添加對象和“事件驅動”編程來擴展BASIC的功能:按鈕,菜單和圖形用戶界面(GUI)的其他元素。 Visual Basic也可以在其他Microsoft軟件中用于編寫小例程。
聲明性語言(Declarative languages)
聲明性語言,也稱為非過程或非常高級別,是編程語言,其中(理想情況下)程序指定要執行的操作而不是如何執行。在這些語言中,程序的規范與其實現之間的差異小于到目前為止所描述的過程語言。兩種常見的聲明性語言是邏輯和函數語言。
邏輯編程語言,其中PROLOG(邏輯編程)是最熟知的,將程序稱為一組邏輯關系(例如,祖父母是某人的父母的父母)。這些語言類似于SQL數據庫語言。程序由“推理引擎”執行,該推理引擎通過系統地搜索這些關系來回答查詢以做出將回答查詢的推斷。 PROLOG已廣泛用于自然語言處理和其他AI程序。
功能語言具有數學風格。通過將函數應用于參數來構造函數程序。功能語言,如LISP,ML和Haskell,被用作語言開發,自動數學定理證明器和一些商業項目中的研究工具。
?
腳本語言(Scripting languages)
腳本語言有時被稱為小語言。它們旨在解決相對較小的編程問題,這些問題不需要數據聲明的開銷和使大型程序易于管理所需的其他功能。腳本語言用于編寫操作系統實用程序,用于特殊用途的文件操作程序,并且因為它們易于學習,有時用于相當大的程序。
PERL(實用提取和報告語言)是在20世紀80年代后期開發的,最初用于UNIX操作系統。它旨在擁有早期腳本語言的所有功能。 PERL提供了許多方式來陳述常見操作,從而允許程序員采用任何方便的方式。在20世紀90年代,它成為一種系統編程工具,無論是小型實用程序還是大型原型程序。與下面討論的其他語言一起,它也變得流行于編程計算機Web“服務器”。
文檔格式化語言(Document formatting languages)
文檔格式化語言指定打印文本和圖形的組織。它們分為幾類:文本格式符號可以提供與文字處理程序相同的功能,頁面描述語言由打印設備解釋,最常見的是標記語言,用于描述文檔各部分的預期功能。
TeX
TeX是1977-86期間開發的,由斯坦福大學教授唐納德·克努特(Donald Knuth)用作文本格式化語言,以提高他書中數學符號的質量。文本格式化系統與WYSIWYG(“所見即所得”)字處理器不同,在文檔中嵌入純文本格式化命令,然后由語言處理器解釋這些命令以生成用于顯示或打印的格式化文檔。 TeX標記斜體文本,例如,{\ it it is iticicized},然后顯示為斜體。
TeX很大程度上取代了早期的文本格式語其強大而靈活的功能使專家能夠精確控制字體的選擇,表格的布局,數學符號以及文檔中圖形的包含。它通常在“宏”包的幫助下使用,這些包定義了用于常見操作的簡單命令,例如啟動新段落; LaTeX是一種廣泛使用的包。 TeX包含用于不同類型文檔的許多標準“樣式表”,并且這些可以由每個用戶進一步調整。還有一些相關的程序,如BibTeX,管理書目,并具有所有常見書目樣式的樣式表,以及具有各種字母的語言的TeX版本。
PostScript
PostScript是一種頁面描述語言,由Adobe Systems Incorporated在20世紀80年代早期在Xerox PARC(Palo Alto研究中心)的工作基礎上開發。這些語言描述的文件可以由個人計算機解釋,以在其屏幕上或通過打印機或排版設備中的微處理器顯示文檔。
例如,PostScript命令可以以各種字體和大小精確定位文本,繪制數學描述的圖像,并指定顏色或陰影。 PostScript使用后綴,也稱為反向波蘭表示法,其中操作名稱跟隨其參數。因此,“300 600 20 270弧形行程”意味著:在位置(300,600)處繪制(“行程”)270度弧,半徑為20。盡管PostScript可以由程序員讀取和寫入,但它通常由文本格式化程序,文字處理器或圖形顯示工具生成。
PostScript的成功歸功于其規范屬于公共領域,并且與高分辨率激光打印機非常匹配。它影響了打印字體的發展,制造商生產各種各樣的PostScript字體。
SGML
SGML(標準通用標記語言)是標記語言定義的國際標準;也就是說,它是一種元語言。標記由稱為標記的符號組成,這些標記指定文本的功能或如何顯示。 SGML強調描述性標記,其中標記可能是“<emphasis>”。這樣的標記表示文檔功能,它可以被解釋為計算機屏幕上的反向視頻,打字機下劃線或排版文本中的斜體。
SGML用于指定DTD(文檔類型定義)。 DTD通過指定文檔中必須出現的元素(例如,<Title>)來定義一種文檔,例如報表,并為文檔元素的使用提供規則,例如段落可能出現在表條目中但是表格可能不會出現在段落中。解析程序可以分析標記的文本以確定它是否符合DTD。另一個程序可以讀取標記以準備索引或將文檔翻譯成PostScript以進行打印。另一種可能會為視覺或聽覺障礙的讀者生成大型或音頻。
萬維網顯示語言(World Wide Web display languages)
HTML
萬維網是用于在計算機監視器上顯示通過因特網檢索的文本,圖形和音頻的系統。每個檢索單元稱為網頁,這些頁面通常包含允許檢索相關頁面的“鏈接”。 HTML(超文本標記語言)是用于編碼網頁的標記語言。它由Tim Berners-Lee于20世紀80年代在瑞士CERN核物理實驗室設計,由SGML DTD定義。 HTML標記標記指定文檔元素,例如標題,段落和表格。它們標記文檔以供計算機程序(稱為Web瀏覽器)顯示。瀏覽器解釋標簽,在布局中顯示標題,段落和表格,以適應屏幕大小和可用的字體。
HTML文檔還包含錨點,這些錨點是指定指向其他網頁的鏈接的標記。錨的形式為<A HREF= "http://www.britannica.com">Encyclop?diaBritannica</A>,其中引用的字符串是鏈接指向的URL(通用資源定位符)(Web“地址) “)及其后面的文本是Web瀏覽器中顯示的內容,下劃線表示它是指向另一個頁面的鏈接。顯示為單個頁面的內容也可以由多個URL形成,一些URL包含文本和其他圖形。
XML
HTML不允許定義新的文本元素;也就是說,它不可擴展。 XML(可擴展標記語言)是SGML的簡化形式,適用于在Web上發布的文檔。與SGML一樣,XML使用DTD來定義文檔類型以及它們中使用的標記的含義。 XML采用易于解析的約定,例如文檔實體由開始和結束標記標記,例如<BEGIN> ... </ BEGIN>。 XML提供比HTML更多種類的超文本鏈接,例如雙向鏈接和相對于文檔子部分的鏈接。
因為作者可以定義新標記,所以XML DTD還必須包含指示Web瀏覽器如何解釋它們的規則 - 如何顯示實體或如何生成諸如準備電子郵件之類的操作。
Web scripting
標記有HTML或XML的網頁主要是靜態文檔。 Web腳本可以在讀者使用它時向頁面添加信息,或者讓讀者輸入可以例如傳遞給在線業務的訂單部門的信息。 CGI(通用網關接口)提供了一種機制;它在讀者的Web瀏覽器和提供頁面的Web服務器之間傳輸請求和響應。服務器上的CGI組件包含稱為腳本的小程序,這些程序從瀏覽器系統獲取信息或提供用于顯示的信息。一個簡單的腳本可能會詢問讀者的姓名,確定讀者使用的系統的Internet地址,并打印問候語。腳本可以用任何編程語言編寫,但是,因為它們通常是簡單的文本處理例程,所以像PERL這樣的腳本語言是特別合適的。
JavaScript
另一種方法是使用為Web腳本設計的語言由瀏覽器執行。 JavaScript就是這樣一種語言,由Netscape Communications Corp.設計,可以與Netscape和微軟的瀏覽器一起使用。 JavaScript是一種簡單的語言,與Java完全不同。 JavaScript程序可以嵌入到具有HTML標記<script language =“JavaScript”>的網頁中。選擇頁面后,瀏覽器將執行該標記后面的JavaScript指令。為了加速動態(交互式)頁面的顯示,JavaScript通常與XML或其他語言結合使用,以便在服務器和客戶端瀏覽器之間交換信息。特別是,XMLHttpRequest命令啟用來自服務器的異步數據請求,而不需要服務器重新發送整個Web頁面。編程的這種方法或“哲學”稱為Ajax(異步JavaScript和XML)。
VB腳本是Visual Basic的子集。最初是為Microsoft Office程序套件開發的,后來也用于Web腳本。它的功能類似于JavaScript,它可以以相同的方式嵌入HTML中。
使用這種腳本語言進行Web編程的背后是組件編程的想法,其中程序是通過組合獨立的先前編寫的組件而無需任何進一步的語言處理來構造的。 JavaScript和VB Script程序被設計為可以附加到Web瀏覽器的組件,以控制它們顯示信息的方式。
元素編程語言(Elements Of Programming)
盡管存在符號差異,但當代計算機語言提供了許多相同的編程結構。這些包括基本控制結構和數據結構。前者提供表達算法的手段,后者提供組織信息的方法。
?
控制結構(Control structures)
用過程語言編寫的程序,最常見的類似于食譜,有成分列表和使用它們的逐步說明。幾乎每種程序語言中的三種基本控制結構是:
1.順序 - 混合液體成分,然后加入干燥的成分。
2.有條件 - 如果西紅柿是新鮮的,那么煨它們,但如果罐裝,跳過這一步。
迭代擊敗蛋清直到形成軟峰。
Sequence是默認的控制結構;說明一個接一個地執行。例如,它們可以執行一系列算術運算,將結果分配給變量,以找到二次方程ax2 + bx + c = 0的根。條件IF-THEN或IF-THEN-ELSE控制結構允許程序遵循替代執行路徑。迭代或循環為計算機提供了大部分功能。他們可以根據需要重復一系列步驟,適當重復非常簡單的步驟可以解決復雜的問題。
可以組合這些控制結構。序列可能包含幾個循環;循環可以包含嵌套在其中的循環,或者條件的兩個分支可以包含具有循環和更多條件的序列。在本文中使用的“偽代碼”中,“*”表示乘法,“←”用于為變量賦值。以下編程片段使用IF-THEN結構來查找二次方程的一個根,使用二次方程式:
?二次公式
二次公式假設a是非零并且判別式(平方根符號內的部分)不是負的(為了獲得實數根)。條件檢查這些假設:
- IF?a?= 0 THEN
- ROOT ← ?c/b
- ELSE
- DISCRIMINANT ←?b*b?? 4*a*c
- IF DISCRIMINANT ≥ 0 THEN
- ROOT ← (?b?+ SQUARE_ROOT(DISCRIMINANT))/2*a
- ENDIF
- ENDIF
上述片段中使用的SQUARE_ROOT函數是子程序(也稱為過程,子例程或函數)的示例。子程序就像是一次給出的醬汁配方,并作為許多其他食譜的一部分使用。子程序接受輸入(需要的數量)并產生結果(醬汁)。常用的子程序通常位于提供語言的集合或庫中。子程序可以在其定義中調用其他子程序,如以下程序所示(其中ABS是絕對值函數)。 SQUARE_ROOT是通過使用WHILE(不定)循環實現的,該循環產生實數的平方根的良好近似,除非x非常小或非常大。通過聲明其名稱,輸入數據類型和輸出來編寫子程序:
- FUNCTION SQUARE_ROOT(REAL?x) RETURNS REAL
- ROOT ← 1.0
- WHILE ABS(ROOT*ROOT ??x) ≥ 0.000001
- AND WHILE ROOT ← (x/ROOT + ROOT)/2
- RETURN ROOT
子程序可以將問題分解為更小,更易處理的子問題。 有時可以通過將問題減少到原始版本較小的子問題來解決問題。 在這種情況下,例程被稱為遞歸子程序,因為它通過重復調用自身來解決問題。 例如,數學中的階乘函數(n!= n?(n-1)?3?2?1,即前n個整數的乘積)可以編程為遞歸例程:
- FUNCTION FACTORIAL(INTEGER?n) RETURNS INTEGER
- IF?n?= 0 THEN RETURN 1
- ELSE RETURN?n?* FACTORIAL(n?1)
遞歸的優點在于它通常是對精確定義的簡單重述,避免了迭代解決方案的簿記細節。
在機器語言級別,循環和條件是用分支指令實現的,分支指令說“跳轉到”程序中的新點。高級語言中的“goto”語句表達相同的操作,但很少使用,因為它使人類難以遵循程序的“流程”。某些語言(如Java和Ada)不允許這樣做。
數據結構(Data structures)
控制結構組織算法,而數據結構組織信息。特別是,數據結構指定數據類型,因此可以對它們執行哪些操作,同時消除了程序員跟蹤存儲器地址的需要。簡單的數據結構包括整數,實數,布爾值(真/假),以及字符或字符串。通過組合一個或多個數據類型來形成復合數據結構。
最重要的復合數據結構是數組,同類數據集合,以及記錄,異構集合。數組可以表示數字向量,字符串列表或向量集合(數組數組或數學矩陣)。記錄可以存儲員工信息名稱,職稱和薪水。記錄數組(例如員工表)是元素的集合,每個元素都是異構的。相反,記錄可能包含一個矢量,即一個數組。
記錄組件或字段按名稱選擇;例如,E.SALARY可能代表記錄E的工資字段。數組元素由其位置或索引選擇; A [10]是數組A中位置10的元素。因此FOR循環(確定迭代)可以通過具有索引限制的數組(在下面的示例中為FIRST TO LAST)運行,以便對其元素求和:
- FOR?i?← FIRST TO LAST
- SUM ← SUM +?A[i]
數組和記錄具有固定的大小。 可以增長的結構是使用動態分配構建的,可根據需要提供新的存儲。 這些數據結構具有組件,每個組件包含數據和對其他組件的引用(以機器術語,它們的地址)。 這種自引用結構具有遞歸定義。 例如,bintree(二叉樹)要么是空的,要么包含帶有數據的根組件以及左右bintree“children”。這樣的bintree有效地實現了信息表。 對它們進行操作的子程序自然是遞歸的; 以下例程打印出bintree的所有元素(每個都是某個子樹的根):
- PROCEDURE TRAVERSE(ROOT: BINTREE)
- IF NOT(EMPTY(ROOT))
- TRAVERSE(ROOT.LEFT)
- PRINT ROOT.DATA
- TRAVERSE(ROOT.RIGHT)
- ENDIF
抽象數據類型(ADT)對于大規模編程很重要。他們將數據結構和操作打包在其上,隱藏內部細節。例如,ADT表為用戶提供插入和查找操作,同時保持底層結構(無論是數組,列表還是二叉樹)不可見。在面向對象語言中,類是ADT,對象是它們的實例。下面的面向對象的偽代碼示例假定存在ADT bintree和“超類”COMPARABLE,表征存在比較操作的數據(例如整數的“<”)。它定義了一個新的ADT,TABLE,它隱藏了它的數據表示并提供了適合于表的操作。此類根據COMPARABLE類的元素類型參數進行多態定義。它的任何實例都必須指定該類型,這里是一個帶有員工數據的類(COMPARABLE聲明意味著PERS_REC必須提供比較操作來對記錄進行排序)。實現細節被省略。
轉載于:https://www.cnblogs.com/jinanxiaolaohu/p/11222894.html
總結
以上是生活随笔為你收集整理的【转帖】计算机编程语言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初识Linux运维
- 下一篇: 8个精挑细选的适用App,全是黑科技,用