800 likes | 1.08k Views
資電學院 計算機概論 F7810. 第三章 程式語言. 陳邦治編著 旗標出版社. 本章重點. 程式語言是由一組系統化的符號所構成之集合 使用程式語言的目的則是利用這些符號來表達某種機器解決特定問題的步驟 程式語言設計的目標則是為了達到簡潔 (simplicity) 的要求 學習程式語言的主要目的 可增進對程式語言的瞭解 可改進設計程式之架構 增進程式執行之效率 可選擇適用的語言 較易學習與設計新的語言. 程式語言的分類 近代常見程式語言簡介 物件導向程式語言 高階語言處理器 程式語言的資料型態 變數的定義. 繫結 完全計算與捷徑計算
E N D
資電學院計算機概論F7810 第三章 程式語言 陳邦治編著 旗標出版社
本章重點 • 程式語言是由一組系統化的符號所構成之集合 • 使用程式語言的目的則是利用這些符號來表達某種機器解決特定問題的步驟 • 程式語言設計的目標則是為了達到簡潔(simplicity)的要求 • 學習程式語言的主要目的 • 可增進對程式語言的瞭解 • 可改進設計程式之架構 • 增進程式執行之效率 • 可選擇適用的語言 • 較易學習與設計新的語言
程式語言的分類 近代常見程式語言簡介 物件導向程式語言 高階語言處理器 程式語言的資料型態 變數的定義 繫結 完全計算與捷徑計算 變數引用規則 程式設計基本觀念 程式設計基本結構 副程式與參數傳遞的處理方式 大綱 3 3
程式語言的分類 • 程式語言依照出現的先後次序共可分成五代 • 機器語言(machine language) • 組合語言(assembly language) • 高階語言(high level language) • 極高階語言 • 自然語言(nature language)
機器語言 • 機器語言的指令與資料均由二進碼所組成,因此利用機器語言所寫成的程式段不需經由語言處理器的處理便可直接在機器上執行 • 機器語言最難學習,不易使用 • 機器相關性(machine dependence)高
組合語言 • 組合語言的指令稱為助憶碼(mnemonic code) • 機器指令(machine operation) • 虛擬指令(pseudo operation) • 利用組合語言所寫成的程式段必需經由組譯程式(assembler)的處理才可在機器上執行 • 機器語言與組合語言合稱為低階語言 • 若將組合語言與機器語言做一比較,組合語言的可讀性較佳,較容易學習,但是程式執行的效率則較差
高階語言 • 高階語言又稱為程序導向語言(procedure oriented language) • 利用高階語言寫成的程式碼必須經過編譯程式(compiler)或直譯程式(interpreter)處理過後方可執行 • 如Pascal、C、C++、Basic,Fortran與Cobol
極高階語言 • 極高階語言又稱為問題導向語言(problem oriented language) • 如SQL (structured query language)
自然語言 • 自然語言又稱為知識庫語言(knowledge based language) • 語法十分接近人類日常生活所用的語言,如英文、日文或中文
近代程式語言簡介 • Fortran • Cobol • Basic • Pascal • C/C++ • Java • Lisp 及Prolog
Fortran • Fortran (FORmula TRANslator language)是IBM的John Backus在1950年代中期所開發 • 第一個高階語言 • 主要是針對科學計算而設計 • 具固定格式(當時Fortran規定程式必須從第七行開始寫起) • 首創了輸出入格式化(I/O format)的觀念 • 允許「隱含性變數」(implicit variable),如變數的第一個字元為I,J,K,L,M,N時該變數可不經宣告即內定為整數型態
Cobol • Cobol(COmmon Business Oriental Language)發展於1960~1970年代 • 由美國防部贊助開發完成 • 主要用於商業資料處理 • 語法傾向自然語言 • 首創以雜訊字(noise word)觀念來編寫程式碼
Basic • Basic語言(Beginner‘s All-purpose Symbolic Instruction Code)在1960年代中期發展 • 當適合初學者使用的語言 • 語法結構簡單,操作也相當容易 • 交談式(interactive)的語言 • 利用直譯器(interpreter)來處理程式
Pascal • 1975年一個以數學家Blaise Pascal之名命名的程式語言Pascal誕生 • 採區塊結構(block structure)來寫作程式 • 首創集合(set)資料型態供程式設計師使用 • 最大的優勢是具備嚴謹的語法結構,讓使用者不容易犯錯,非常適合教學用途
C語言 • C語言是由貝爾實驗室於1970年代所發展出來 • 採區塊結構,具高可攜性,因此適合發展系統程式 • 利用C語言撰寫的程式相同字元的大小寫(如A及a)會被視為是不同的符號
C++語言 • C++是C語言的物件導向版程式開發工具 • C++ 語言是由 Bjarne Stroustrup 在貝爾實驗室中設計而得 • C++ 語言設計的主要目標是希望能實現物件導向程式設計的理想
Java • Java語言是由Sun Microsystems沿襲了C語言的語法並加入許多新的程式結構元素發展而成的物件導向程式語言 • Java語言為提昇程式的安全性,取消 • 指標(pointer)資料型態 • 多重繼承(multiple inheritance) • 運算子覆載(operator overloading)等功能 • Java語言允許其程式段能夠透過網路系統到另一個機器平台上執行
物件導向程式語言 • 物件導向程式語言(Object Oriented Programming Language;OOPL)是由「抽象資料型態」(abstract data type)與「資料抽象化」(data abstraction)的觀念發展而來 • 「抽象資料型態」是指資料型態可區分為實作(implementation)及使用者介面(user interface)二部分 • 而「資料抽象化」則是指將資料型態區分為實作與使用者介面的動作即稱為資料抽象化
物件導向程式語言三大特徵 • 資訊隱藏或稱為封裝(encapsulation) • 繼承(inheritance)能力 • 多面性(polymorphism)
封裝 • 封裝主要的目的就是期望能將不希望給外界知道的資訊,隱藏起來也就是達到「資訊隱藏」(information hidden)的目的 • 通常在寫作程式時可以利用將變數宣告為不同等級便可達到「資訊隱藏」的效果
繼承 • 繼承是指程式語言可利用已建立好的類別(class)來產生新的類別,依此方式產生的新類別將可繼承所有原來類別的特性並可依需要新增或刪除特定的功能 • 「繼承」是類別要完成擴充目的的基本要件 • C++ 語言允許 1對1,1對多,多對1的繼承方式 • JAVA語言僅允許允許1對1的繼承方式 • 若程式語言具備「繼承」能力則程式的可重用性將較高,較易擴充且較易維護
多面性 • 多面性代表具相同名稱的函式,但卻具有不同的功能 • 如C++語言允許右方程式段之寫法 • 右方程式段中有四個print函式,雖然函式的名稱都是print,但是因為參數的型態不同,因此會被視為是四個不同的函式
高階語言的處理器 • 高階語言的處理器主要的作用即是將利用高階語言寫成的程式段翻譯成機器可處理的碼 • 主要可分成編譯器(compiler)及直譯器(interpreter)二類 • 編譯器(也可稱為編譯程式)會對原始程式碼中的每一條敘述,按照先後順序均做一次之處理,並產生對應的目的碼 • 直譯器(也可稱為直譯程式)會對原始程式碼中的敘述,按照執行的先後順序做處理,並直接產生程式執行結果
程式語言的資料型態 • 資料型態是指一群個體(object)以及作用在這群個體上的運算 • 常見的資料型態分類方式是將資料型態分為基本資料型態(elementary data type)及結構性資料型態 (structured data type)二種
基本資料型態 (1/3) • 基本資料型態是指不可再切割為更小單位的型態類別 • 如數值、字元(character)、布林值(boolean value)、列舉式資料型態(enumerated data type)及指標資料型態 (pointer data type)
基本資料型態(2/3) • 數值一般可分為整數與浮點數二種 • 浮點數代表具有小數位數之數值 • 字元會佔用一個位元組(byte)的記憶體空間 • 布林值有「真」(true)與「假」(false)二種 • 通常程式語言不允許布林值與數值混合使用 • 但C/C++語言卻允許布林值與數值混合使用,在C/C++語言中只要數值非0便會被視為「真」,若數值為0則視為是「假」 • BASIC語言以「-1」代表布林值「真」,「假」則為「0」。
基本資料型態(3/3) • 列舉式資料型態是指將需要的資料一一定義與列舉出來 • 假設旗標公司編輯部有5位主編,分別是Alice,Bob,Dick,Mark與Peter,C語言將此份資料定義成一列舉式資料型態之語法如下: enum Editor {Alice, Bob, Dick, Mark, Peter}; • 指標可以是記憶體位址或nil • 因為指標可以隨意存取記憶體空間中之內容,所以指標型態的彈性很大,但會使得程式的可靠度不佳、存取速度較慢及可能造成懸置引用(dangling reference)的問題 • Java語言並未提供指標型態供程式設計師使用
C語言指標的用法 • C語言使用「*」做為指標變數的「取值運算子」,「&」做為一般變數的「取址運算子」。 • 範例如下: int a,*b;
C語言的指標與陣列型態 • C語言的指標與陣列型態經常會被比較 • C語言的陣列的起始位址有二種不同的表示法,分別是: • 陣列名稱 • 陣列的第一個元素之位址 • 範例 int xxx[168]; xxx為陣列名稱,C語言陣列元素規定由0開始編號,所以本題陣列元素的編號由0~167,共168個元素。代表陣列的起始位址的表示法有以下二種:xxx及&xxx[0]
結構性資料型態 • 常見的結構性資料型態 • 字串(string) • 由字元(character)組成。例如,”book”、”computer”、”internet”均為字串 • 記錄(record) • 記錄是由固定數目,但型態可以不同的元素所組成 • 聯合(union)資料型態 • 同一個變數佔用的記憶體空間,在不同執行時間可由不同型態的值存放
結構性資料型態(cont.) • 常見的結構性資料型態 • 陣列(array) • 陣列由名稱、維度(dimension)、索引(index)及元素型態陣列等元件組成。陣列的主要有二項限制: • 元素必須存放在連續的記憶體空間。 • 元素的型態必須完全相同 • 集合(set): • 集合可表示沒有順序關係的資料,若程式語言提供集合資料型態則應提供聯集、交集及差集運算。 • 檔案(file): • 檔案是由相關的記錄所組成
變數的實例 • 以C語言為例 int X = 5; • 變數的「名稱」為X • 「屬性」為int (即整數) • 「值」為5 (就C語言而言,此處的用法為變數「初值設定」,C語言允許在宣告變數時一併設定初值) • 對程式設計師而言,一般來說「引用」是比較模糊的一種概念,因為比較沒有具體的東西可代表;就C語言而言,變數的儲存區空間的配置有二種可能性:執行前配置或執行時配置。本範例中變數X所配置的空間有可能是執行前配置或執行時配置,必須視變數所在程式中的位置才可確定儲存區空間何時配置
程式設計基本觀念 • 流程圖 • 結構化程式設計 • 程式語言的運算子
流程圖 • 發展程式時可利用流程圖(flow chart)來做為分析的工具 • 流程圖主要的作用便是將計算方法轉換為圖形化的方式來表達 • 採用流程圖的主要優點 • 可讀性較高 • 容易維護 • 容易除錯
結構化程式設計 • 結構化程式設計是指從事程式設計的過程中,依照程式的邏輯特性將程式細分成幾個較小的問題,再將這些較小的問題同樣依照程式的邏輯特性再往下細分成更小的問題,依此類推直到很容易編寫程式的單元時為止 • 當採用結構化程式設計法來設計程式時,應當儘量避免使用goto命令,以避免破壞程式的可讀性及結構性
結構化程式設計 (cont.) • 主要優點 • 程式可分工完成 • 容易除錯 • 可讀性較高 • 較容易維護 • 主要缺點 • 經由結構化程式設計原則產生的程式碼通常會較大 • 程式執行時間較久
程式語言的運算子 • 高階語言常用的運算子(operator)有三類,分別是算術、關係及邏輯運算子 • 這三類運算子的關係如下表所示:
程式語言的運算子 (cont.) • 程式語言對運算子定義運算優先順序的主要目的是希望程式能有唯一的執行結果,若運算子之運算優先順序未定義則可能使得程式執行結果不唯一
程式設計的三大結構 • 結構化程式設計的基本結構有 • 循序結構(sequential structure) • 選擇結構(selection structure) • 反覆結構(iteration structure)
循序結構 • 循序執行的程式段即為循序結構
重要範例 – 二個變數值交換問題 • 重要結論:若要將二個變數的值交換,最少應增加一個額外變數
選擇結構 • 選擇結構可分為 • 單路選擇結構 • 雙路選擇結構 • 多重選擇結構
單路選擇結構 • 單路選擇結構(single path selection structure) • 條件成立時有對應的敘述應被處理,但是當條件不成立時則沒有對應的敘述應被處理,因此稱為單路選擇結構 • 高階程式語言提供的單路選擇結構,語法如下: if (條件) then {條件成立時應執行的敘述}
雙路選擇結構 • 雙路選擇結構(double path selection structure) • 條件成立時有相對應的敘述必須被處理,而且當條件不成立時也有相對應的敘述要處理,因此稱為雙路選擇結構 • 高階程式語言提供的雙路選擇結構,語法如下: if (條件) then 「條件成立時應執行的敘述」 else 「條件不成立時應執行的敘述」