目錄

第一章 程式語言導論

1-1 程式語言基本概念

一、定義

圖靈機(Turing Machine)

二、程式語言的分類

()第一代程式語言-機器語言(machine language)

()第二代程式語言-組合語言(assembly language)

()第三代程式語言-高階語言(high-level language)

()第四代程式語言-超高階語言(very high level language)

()第五代程式語言-自然語言(nature language)

三、為何要學習程式語言

四、電腦的應用領域及相關的程式語言

()科學應用

()商業應用

()人工智慧

()系統程式

()超高階語言

()特殊目的語言(問題導向語言)

1-2 高階程式語言

一、高階語言的優點

()學習容易,學習時間較短

()生產力較高,對於人力及管理的需求較少

()與機器無關

()程式的除錯較容易

()編寫較大的應用程式時,不至因瑣碎的程式細節而影響設計的進行

()高階語言的結構本身就具有卓越的文件說明能力

二、高階語言的實作

()編譯程式(Compiler):程式編譯器

編譯器的六大階段

語彙分析(Lexical Analysis):詞彙分析 / 詞法分析

語法分析(Syntax Analysis)

語意分析(Semantic Analysis)

中間碼產生

指定述句的翻譯

程式編譯器

編譯(Compiler)

組譯(Assembling)

編譯器的步驟

程式編譯器的過程

語法錯誤(Syntax Error)

語意錯誤(Semantic Error):邏輯錯誤(Logic error)

目的碼(object code)

預先處理(Preprocess)

※C語言前置處理器

靜態連結(Static Linking)

動態連結(Dynamic Linking)

()直譯程式(Interpreter)

編譯程式與直譯程式的差異

編譯程式與直譯程式的優缺點

()不純的直譯(impure interpretation)

高階語言的實作

各種語言從原始碼程式譯成可執行程式的過程

編輯程式、連結程式、載入程式、偵錯程式的功能

高階語言與組合語言的優缺點

高階語言與低階語言的差異

左值(l-value)和右值(r-value)

程式碼最佳化的作法

三、高階語言的類型

指令式程式設計(Imperative programming)

程序式程式設計(Procedural programming):程序化程式設計

宣告式程式設計(Declarative programming)

物件導向程式語言(Object-Oriented language)

函數式程式語言(Functional languages)

事件驅動化程式語言(Event-driven languages)

※Logic languages

※Script languages

具有OO性質的語言

動態程式語言(Dynamic programming language)

1-3 程式語言的評估與設計的考慮

一、程式語言的評估

()評估標準:程式語言四大評核指標

()影響程式語言評估標準的因素

二、影響語言設計的因素

()計算機架構(Computer Architecture)

()程式設計方法論(Programming Methodologies)

三、程式語言的開發

在軟體開發流程中把安全性納入,通常採用的流程

系統測試

系統效能評估(benchmarks)

弱點偵測(vulnerability detection)

警訊分析(alert analysis)

資訊鑑識(Information Forensics):數位鑑識(Digital Forensics)

跨站請求偽造(Cross-site Request Forgery, CSRF):跨網站的偽造要求

1-4 語言的特性

一、Fortran(Formula Translation, 1954)

()定義

()Fortran 90的重要特性

二、COBOL(COmmon Business Oriented Language, 1959)

()定義

三、ALGOL 60(ALGOrithmic Language, 1960)

()定義

四、ALGOLW(1966)

()定義

五、ALGOL 68(1968)

()定義

六、APL(A Programming Language, 1960左右)

()定義

七、LISP(List Processor, 1960年左右)

()定義

八、SNOBOL(String Oriented Symbolic Language, 1962)

()定義

九、BASIC(Beginner’s All-purpose Symbolic Instruction Code, 1964)

()定義

()優點

()缺點

十、P/Ll(Programming Language/1, 1965)

()定義

十一、SIMULA 67(SIMULATION, 1967)

()定義

十二、Prolog(Programming in Logic, 1972)

()定義

十三、C(Common language, 1972)

()定義

十四、Pascal(為紀念法國數學家Blaise Pascal而命名, 1973)

()定義

十五、CLU(CLUSTER, 1973~1979)

()定義

十六、Ada(紀念Ada Augusta Byron女士, 1980)

()定義

()Ada 95的重要特性(1992~1995)

十七、Smalltalk(1980)

()定義

十八、Modula-2(1985)

()定義

十九、Perl(1987)

()定義

()應用範圍

二十、Oberon(1988)

()定義

二十一、C++(1984~1990)

()定義

二十二、Python(1989)

()定義

()功能

()應用

二十三、Eiffel(1992)

二十四、PHP(1995)

()定義

()應用範圍

二十五、Ruby(1995)

()定義

可延伸標記式語言(eXtensible Markup Language, XML)

※RSS(Really Simple Syndication)

※CSS(Cascading Style Sheets)

※DOM(Document Object Model)文件物件模型

※SOAP(Simple Object Access Protocol)

 

第二章 程式語言的語法和語意

2-1 語法元素

一、字元集(Character Set)

()種類

()對照順序(collating sequence)

二、空白(Blank)

()Fortran

()SNOBOL

三、識別字(Identifier)

()定義

()組成通則

()在不同的語言中,識別字的差異

()識別字可包含特殊字元者

()識別字的長度限制

()區分英文字母的大小寫

※Case Sensitive

四、關鍵字(Keyword)與保留字(Reserved Word)

()關鍵字(Keyword)

()保留字(Reserved Word)

()程式語言中定義保留字的優缺點

在程式語言中,設定while為保留字,編譯器處理那些指令會比較簡單?

關鍵字與保留字的比較

符號表(Symdol Table)

五、運算符號(Operator)

六、註解(Comment)與雜訊字(Noise Word)

()註解的形式

()雜訊字

七、界線(Delimiters)

()定義

()使用界線符號的好處

八、運算式(Expression)

()運算式的表示法可分為五種

()運算式的表示法有兩類

九、敘述(Statement)

()定義

()語法格式種類

()組成結構

十、整體的程式-副程式結構有四類

()分開的副程式

()不分開的副程式

()資料描述與可執行程式分開

()巢狀的副程式宣告

2-2 語法的正規定義

一、語言的分類

()遞迴可枚舉的語言(recursive enumerable language)type 0文法

()與上下文有關的語言(context-sensitive language)type 1文法

()與上下文無關的語言(context-free language)type 2文法

()正規的語言(regular language)type 3文法

二、文法的定義

()形式文法

()形式文法的範例

三、文法的類型

()type-0:無限制的文法(Unrestricted Grammar)或短語結構文法

()type-1與上下文有關的文法(Context-Sensitive Grammar, CSG)

()type-2:與上下文無關的文法(Context-Free Grammar, CFG)

()type-3正規的文法(Regular Grammar)

諾姆·荷姆斯基(Noam Chomosky)的四種語法類型的主要特點

四、程式語言的語法

()與上下文無關的文法

()程式語言的語法可以用三種工具來描述

五、BNF(Backus Nauer Form)

()定義

()BNF(Extended BNF)的符號

()產生規則的格式

()產生規則的合併

()遞迴產生規則

()推導過程

()剖析樹(parse tree)

※Left-most derivation sequenceright-most derivation sequenc:左推導(leftmost derivation) / 最右推導(rightmost derivation) / 左演繹(leftmost derivation)

六、模稜兩可(不明確)文法(Ambiguous Grammar)

()定義

()不明確文法的問題

()去除運算式文法的不明確性

()一個較完整的運算式文法包括以下特性

寫出一個二進位數字的BNF文法

移位減少解析器(shift-reduce parser)

※LR parser

※FIRST函數及FOLLOW函數

判斷LL(1)文法

※LL(1)文法分析表(LL(1) parse table)

具體語法樹(concrete syntax tree)

七、懸置ELSE問題(Dangling ELSE Problem)

()定義

()解決懸置ELSE問題

八、語法圖

九、轉移圖

2-3 自動化分析程式

一、預測式語法分析程式(Predictive parser)

二、LR分析程式(LR parser)

2-4 語意的描述

一、靜態語意(Static Semantics)

()說明

()分析工作

()屬性文法(attribute grammar)

二、動態語意(Dynamic Semantics)

()解釋型語意(Interpretive Semantics):操作型語意(Operational Semantics)

()公理型語意(Axiomatic Semantics)

()符號型語意(Denotational Semantics)

2-5 正規表達式(regular expression)

一、規則1

二、規則2

三、規則3

四、規則4

五、正則表達式的範例

 

第三章 變數

3-1 變數的屬性

一、定義

變數(variable)和資料型別(data type)有何不同?

二、變數名稱(Name)

三、位址(Address)

()定義

()別名(Aliases)

四、型態(Type)

()列舉式資料型態(enumerated data type)

※Null character

五、值(Value)

六、生命期(Lifetime)

七、領域(Scope)

3-2 繫結觀念

一、定義

()繫結(Binding)

()繫結時間(Binding Time)

二、繫結可能發生在以下各個時期

()語言定義時期(Language Definition):程式語言設計時的Binding

()語言實作時期(Language Implementation):程式語言製作時的Binding

()語言編譯時期(Compile Time):在組合(或編譯)時的Binding

()載入時期(Load Time)

()連結時期(Link Time)

()執行時期(Run Time)

三、屬性值繫結至變數

()靜態繫結(Static Binding):早期繫結(early binding)

()動態繫結(Dynamic Binding):晚期繫結(Late Binding)

※早期繫結和晚期繫結的比較

多型(Polymorphism)與重載(Overload)的繫結時機

※C++Java動態繫結的比較

四、型態繫結(Type Binding) / 變數型態的繫結

()變數宣告:靜態型態繫結(Static Type Binding)

()動態型態繫結(Dynamic Type Binding)

()型態推論(Type Inference)

五、儲存體繫結(Storage Binding)與生命期(Lifetime)

()定義

()生命期:變數的可用界限(extent)

()儲存體繫結(Storage Binding):記憶體配置的繫結

記憶體配置(storage allocation)

六、處理區域變數的方法

()保留法(Retention)

()清除法(Deletion)

3-3 型態檢查

一、型態檢查的方式

()靜態型態檢查

()動態型態檢查

二、型態檢查的對象

()檢查具有某種關係的兩變數的型態是否相容(compatible)

()檢查陳列的註標是否超出宣告的範圍

三、型態檢查處理方式

()採取錯誤處理方式

()進行型態得強制轉換

四、型態繫結與型態檢查

()動態型態繫結的語言皆進行動態型態檢查

()靜態型態繫結的語言皆採用靜態型態檢查

五、等效型態(Type Equivalence) / 資料類型相容性(Type compatibility)

()定義

()目的

()等效型態的檢查方法

3-4 型態轉換(Type Cast)

一、強型態語言(Strongly Typed Language)需滿足的要求

強型態語言(Strongly Typed Language)

弱型態語言(Weakly Typed Languages)

二、強型態的重要性

()偵測出變數誤用

()執行時偵測出儲存值的型態是否正確

三、程式語言的歸類

()Ada

()PASCAL

()Modula-2

()FORTRAN 77

()CC++

()ML

()Miranda

※C程式語言不是一個強勢型態程式語言

靜態型態(static typed)語言與動態型態(dynamic typed)語言的優缺點

類別化程式語言(Typed programming language)

動態類別化(Dynamic typing)

3-5 領域(Scope)

一、基本定義

()變數的領域

()可見的變數(visible variable)

()非局部變數(Non-local variable)

()自由變數(free variable)

()領域法則(scoping rules)

※C語言五個儲存類別

※C語言所提供變數的儲存類別(Storage Classes)

※Pascal語言及C語言變數宣告的領域範圍

※區域變數、全域變數與靜態變數的比較

※區域變數與全域變數的比較

二、程式語言的領域法則

()靜態領域法(Static Scoping)

()動態領域法(Dynamic Scoping) / 動態範圍(Dynamic Scope)

三、區塊結構(Block Structure)

()定義

()舉例

3-6 參用環境(Reference Environments)

一、定義

二、靜態領域

三、動態領域

3-7 具名常數(Named Constants)

一、意義

二、使用具名常數的好處

()可以增加程式的可讀性及可靠性

()可以提高程式的維護性

三、具名常數的分類

()值為常數且靜態繫結

()值為常數運算式且靜態繫結

()值為運算式且動態繫結

※const的用法

3-8 變數的初始化(initialization)

一、意義與特性

()初始化

()發生時間

()產生方式

二、初始化的方式

()由特定的指令完成

()在變數宣告時完成

三、並非所有語言都能進行變數的初始化

 

第四章 運算式和指定敘述

4-1 算術運算式(Arithmetic Expressions)

一、組成

()說明

()種類

二、算術運算的實作

()提取運算元

()執行指定的運算

三、運算子的計算次序

()運算子的優先順序(operator precedence)

※C++的遞增及遞減運算子

()結合性(associativity)

()括號(parentheses)

四、運算元的計算次序

()運算元的計算次序

()邊際效應(或稱副作用)

()函數出現在運算式

()邊際效應的解決方法

五、條件運算式(conditional expression)

()定義

()範例

4-2 超荷運算子(Overloaded Operators)

一、定義

二、各種超荷運算子

三、運算子超荷產生的問題

()產生的問題

()範例

四、解決運算子超荷產生的問題

()做法

()範例

五、使用者自行定義的超荷運算子

4-3 運算式中的型態轉換(Type Conversion)

一、強制轉換(Coercion):內隱式型態轉換(implicit type conversion)

()定義

()發生時機

()降低程式可靠性

二、外顯式型態轉換(Explicit Type Conversion)

※C++語言隱性型態轉換(Implicit type conversion)

※C++語言顯示型態轉換(Explicit type conversion)

4-4 關係運算式與布林運算式

一、關係運算式(Relational Expression)

()意義與特性

()一些常用語言的關係運算子

==!-><>=<=

()關係運算子的優先順序都比算術運算子低

二、布林運算式(Boolean Expression)

()意義與特性

()布林運算子

()一些常用語言的布林運算子

()布林運算子的優先順序通常都低於其他的運算子

()C語言以數值代替布林值,0代表 false,非0代表 true

()PASCAL語言中,布林運算子的優先順序皆高於關係運算子

4-5 捷徑計算(Short-Circuit Evaluation)

一、定義

()定義

()範例

完全計算(complete circuit evaluation)

二、程式語言的捷徑計算功能主要是針對布林運算式而言

()CModula-2

()PASCAL

()Ada

捷徑運算的缺點

捷徑運算與非捷徑運算的比較

4-6 指定敘述(Assignment Statements)

一、簡單的指定敘述

()通用語法格式

()其他語法格式

()左值(l-value)與右值(r-value)

二、多重目的地(Multiple Targets)指定

()可同時將運算的結果指定給多個變數

()可同時將某一個資料搬移(拷貝)至多個欄位

三、條件式指定(Conditional Assignment)

四、條件目的地(Conditional Target)指定

五、複合指定運算子(Compound Assignment Operators)

六、單元指定運算子(Unary Assignment Operators)

()CC++

()出現位置

七、以指定敘述為運算元

()將指定敘述當成運算式中的一部分

()缺點

()以指定敘述為運算元時可以完成多重目的地的指定

4-7 運算式的表示法

一、運算式轉換為各種表示法的步驟

()先標出各運算子的計算次序

()轉換為一棵二元樹

()應用各表示法的追蹤規則來追蹤此二元樹

二、各種程式語言的運算式表示法

 

第五章 控制結構

5-1 複合敘述(Compound Statements)

一、複合敘述的特性

()說明

二、各語言的複合敘述

()說明

5-2 選擇敘述(Selection Statements)

一、二元選擇(Two-way Selection)IF敘述

()設計的考慮因素

()FORTRANIF敘述

()ALGOL 60IF敘述

()ALGOL 68IF敘述有兩種格式

()PASCALIF敘述

()CC++IF敘述

()Modula-2IF敘述

()AdaIF敘述

二、多元選擇(Multiple Selections)CASE敘述

()ALGOL-WCASE敘述

()PASCALCASE敘述

()CC++switch敘述

()AdaCASE敘述

5-3 重複敘述(Iterative Statements)

一、計數控制迴圈(Counter-Controlled Loops)

()此種迴圈的敘述中包括

()FORTRAN IVDO迴圈

()FORTRAN 77DO迴圈

()PASCALFOR敘述

()ALGOL 60FOR敘述

()AdaFOR敘述

()C語言的for敘述

二、邏輯控制迴圈(Logically Controlled Loop)

()特性

()PASCAL的邏輯控制迴圈

()Modula-2的邏輯控制迴圈

()C的邏輯控制迴圈

()Ada的邏輯控制迴圈

()COBOLPERFORM敘述

三、使用者設定的迴圈控制機制(User-Located Loop Controlled Mechanisms)

()特性

()Modula-2

()Ada

()C

()FORTRAN 90

四、使用者定義的反覆控制(User-Defined Iteration Control)

()說明

()C語言的for敘述可用來模擬使用者定義的反覆敘述

5-4 無條件跳躍(Unconditional Branching)

一、GOTO敘述的爭議

()GOTO敘述的優點

()GOTO敘述的缺點

()GOTO敘述的使用現況

二、與GOTO配合的標號(Label)

三、PASCALGOTO敘述的限制

()標號的限制

()GOTO目的地的限制

四、FORTRANGOTO敘述

5-5 警衛命令(Guarded Commands)

一、警衛命令的發展

()動機

()影響

二、警衛命令的分類

()選擇結構

()迴圈結構

5-6 結構化程式設計(Structured Programming)

一、程式設計方法

()由上而下程式設計法(top-down propramming)

()由下而上程式設計法(bottom-up programming)

()模組化程式設計法(modular programming)

二、結構化程式設計概念

()意義

()特性

()優點

()缺點

()理論

三、將非結構化程式轉換為結構化程式

()判斷一個流程圖是否為一個結構化程式的方法

()將非結構化程式轉換為結構化程式的方法

程式流程圖(Program Flow Chart)

 

第六章 資料型態

6-1 基本資料型態

一、定義與特性

()資料型態(data type)

()基本資料型態(primitive data type)

()幾乎所有的程式語言都有提供一組基本資料型態

二、數值型態(Numeric Types)

()整數(integer)

()浮點數(floating-point)

()十進位數(decimal)

三、布林型態(Boolean Type)

四、字元型態(Character Type)

()定義

()CC++

6-2 字串型態(String Types)

一、設計的考慮

()字串是否為一基本資料型態,或僅為字元陣列 (character array)

()字串是否真有靜態或動態長度?

二、各語言的設計策略

()以字元陣列儲存字串資料

()定義字串為基本資料型態

三、各語言對於字串的運算

()PASCAL

()Ada

()CC++

()PL/1

()FORTRAN 77FORTRAN 90

()BASIC

()SNOBOL4

四、字串長度在設計上的選擇

()靜態長度字串(static length string)

()有限動態長度字串(limited dynamic length string)

()動態長度字串(dynamic length string)

※JavaC C++等語言對字串長度設計的方式各採取那種方式或混和?

五、字串型態的實作

()靜態字串(static strings)

()有限動態字串(limited dynamic strings)

()動態字串(dynamic strings)

6-3 使用者定義的有序型態

一、有序型態(Ordinal Types)

()可能值的範圍可以對應到一組正整數

()種類

二、列舉型態(Enumeration Types)

()定義

()設計的考慮

()單一列舉型態的符號常數

()超荷符號常數(overloaded literals)

()列舉型態主要的優點

三、子區間型態(Subrange Types)

()定義

()PASCALModula-2Ada

()使用者已定義過的有序型態也可以建立子區間型態

()子區間型態的範圍檢查

四、使用者定義的有序型態的實作

()對應方式

()範圍檢查

6-4 陣列型態(Array Types)

一、定義

二、設計的考慮

()合法的註標型態為何?

()註標的範圍(range)何時繫結?

()陣列配置何時發生?

()可以允許多少個註標?即多少維次(dimensions)

()當配置陣列記憶體時可否進行值的初始化?

()允許何種的切片(slices)(如果有的話)

三、陣列註標(IndexSubscript)

()註標的表示法

()註標型態

四、註標的繫結與陣列的分類

()註標的繫結

()陣列的分類

五、陣列註標的個數

六、陣列的初始化(Array Initialization)

()FORTRAN77

()CC++

()Ada

()COBOL

()PASCALModula-2皆不允許陣列的初始化

七、陣列的運算(Array Operations)

()多數的語言

()Ada

()PL/1

()FORTRAN 90

()APL

八、切片(Slices)

九、陣列型態的實作

()實作概念

()一維陣列的實作

()二維陣列的實作

()三維陣列的實作

()多維陣列的實作

鋸齒狀陣列(jagged array)

C++陣列與Java陣列的比較

6-5 記錄型態(Record Types)

一、定義

二、記錄結構

()說明

()記錄結構的定義方式有二種

三、記錄欄位的引用

()引用方式

()引用的簡化

四、記錄的運算

五、記錄型態的實作

()記錄型態的描述子

()記錄的儲存體結構

()動態繫結的記錄

6-6 聯合型態(Union Types)

一、定義

二、設計的考慮

()是否要做型態檢查?必須注意的是此種型態檢查一定是動態的

()聯合是否隱藏在記錄中?

三、FORTRAN的聯合型態

()利用EQUIVALENCE敘述讓兩個或多個變數共用同一塊記憶體

()對於EQUIVALENCE的對象,系統不做型態檢查

四、ALGOL 68的聯合型態

五、PASCAL的聯合型態

()首先將可判別的聯合整合在記錄中,稱為可變記錄(variant record)

()可變記錄的使用通常要根據判別子的值才能決定可存取哪些有效欄位

()PASCAL的可變記錄存在兩種的不安全性

()Modula-2 中可變記錄的用法與所存在的不安全性皆與 PASCAL 相同

六、Ada的聯合型態

()說明

()改進的做法

七、CC++的聯合型態

()只提供自由的聯合型態(沒有判別子)

()單獨存在,沒有隱藏在記錄(結構)

()對於欄位的引用不做檢查

※CC++union上的差異

八、聯合型態的實作

()說明

()舉例

聯合型態(Union Types)的優缺點

6-7 集合型態(Set Types)

一、定義

()組成方式

()集合的基底型態(base type)

二、PASCAL的集合型態

()最早提供集合型態的程式語言

()集合型態的定義格式

()集合是以中括號來括住基底型態的元素

()用子區間表示

()集合的運算子及其功能

三、Modula-2的集合型態

四、集合型態的實作

()集合通常在記憶體中是以位元字串來儲存

()位元字串的表達方式除了可節省記憶體空間,更可提供非常高效率的運算

()PASCALModula-2

6-8 指標型態(Pointer Types)

一、指標的特性

()定義

()指標的主要用處

()存取方式

()產生的問題

懸置指標種類及解決方式

記憶體洩漏(memory leakage)

垃圾回收器:記憶體洩漏解決方式

指標的宣告

指標陣列

二、PL/1的指標

三、ALGOL 68的指標

四、PASCAL的指標

()配置和歸還記憶體

()懸置指標和懸置個體

五、Ada的指標

六、CC++的指標

()說明

()指標的宣告和使用

()指標的算術運算

()指標與陣列

()函數指標:函式指標

指標的宣告

指向陣列的指標

二維陣列的指標

陣列相關的計算

()C++的參考型態(reference type)

七、指標型態的實作

()指標的表達法

()懸置指標問題(dangling pointer problem)的解決方法

6-9 記憶體布局(Memory Layout)

一、記憶體布局(Memory Layout)

()文字區段(Text segment)

()初始化資料區段(Initialized data segment)

()未初始化資料區段(Uninitialized data segment)

()堆疊區段(Stack Segment)

()堆積區段(Heap Segment)

()未對應或保留區(Unmapped or reserved segment)

()範例一

()範例二

 

第七章 副程式

7-1 程式的定義

一、副程式結構

()副程式標頭

()副程式宣告部分

()敘述主體

7-2 參數傳遞方法(Parameter-Passing Methods)

一、參數傳遞的語意模型(Semantic Models)

()in mode

()out mode

()in out mode

二、傳值呼叫(Pass By Value, Call By Value)

()定義

()特性

()優點

()缺點

()範例

※C語言的pass-by-value

三、傳結果呼叫(Pass By Result, Call By Result)

()定義

()優點

()缺點

()範例一

()範例二

四、傳值兼傳結果呼叫(Pass By Value-Result, Call By Value-Result)

()定義

()步驟

()優點

()缺點

()範例

※pass-by-value-result vs. pass-by-reference

五、傳位址呼叫(Pass By Reference, Call By Reference, Call By Address)

()定義

()作法

()優點

()缺點

()範例

※C語言的pass-by-pointer

※C語言傳遞陣列到function

※C++語言的pass-by-reference

※C語言與C++語言參數傳遞的比較

傳值呼叫、傳指標呼叫與傳參考呼叫的差異處

陣列與指標的比較

六、傳名稱呼叫(Pass By Name, Call By Name)

()定義

()作法

()優點

()缺點

()實際參數的格式將影響call by name的語意模型

()範例

七、傳本文呼叫(Call By Text)

()定義

()步驟

()應用

()範例

八、各語言參數傳遞法的比較

()PASCAL

()Ada

九、各種參數傳遞法的實作

()call by valuecall by result、以及call by reference

()call by name

十、參數的型態檢查

()實際參數與形式參數間的型態檢查

()參數的型態以及個數都不做檢查

()ANSI C中有兩種做法

()避免型態檢查

7-3 比較複雜的參數

一、以多維陣列為參數

()C語言

()PASCAL語言

()Ada語言

二、以副程式名稱為參數

()可以讓被呼叫的副程式具有更大的使用彈性

()一致性檢查(consistency checking)

()被傳送的副程式在執行時非局部變數的參用環境

※shallow bindingdeep bindingad hoc binding的差別與優缺點

7-4 副程式的類型

※六種常見的副程式呼叫方式

一、單純呼叫-返回副程式(Simple Call-Return Subprogram)

()定義

()副程式在其控制結構中滿足以下五項限制

二、遞迴副程式(Recursive Subprogram)

()定義

()種類

大量的使用recursive call可能造成什麼問題?

三、例外處理程式(Exception Handler)

()定義

()範例

四、並行常式(Coroutine),或稱互動程序

()定義

()範例

五、排程副程式(Scheduled Subprogram)

()定義

()常見的副程式排程

()範例

六、並行副程式(Concurrent Subprogram)

7-5 超荷副程式(Overloaded Subprograms)

一、定義

二、Ada的超荷副程式的種類

()系統內建的超荷副程式

()使用者定義的超荷副程式

三、C++亦提供類似功能的超荷副程式

四、說明

7-6 通用性副程式(Generic Subprograms)

一、定義與特性

()樣板(template)

()優點

()多型性

二、Ada的通用性副程式

()透過實例化敘述來產生特定的副程式

()透過通用性副程式達到同樣的效果

三、C++語言的通用性副程式

()格式

()採內隱方式進行實例化(instantiate implicitly),而非經由實例化敘述

()使用樣板函數可避免巨集的缺點

※template樣版的使用方式

樣版類別定義使用型別參數及非型別參數

類別樣版使用預設值

類別樣版使用繼承

7-7 存取非局部環境

一、副程式通訊的方法

()非局部變數

()共用區(common block)

()外部宣告或外部模組(external modules)

二、非局部變數的定義可用static scopingdynamic scoping來決定

三、Common Block

()定義

()範例

四、外部模組

五、外部宣告

7-8 使用者定義的超荷運算子

()AdaC++皆允許使用者自行定義超荷運算子

※重載運算子

7-9 遞迴程式(recursive procedure)

遞迴(recursive)

遞迴的種類

支援遞迴與不支援遞迴的程式設計語言,最主要的不同何在?

遞迴的(recursive)設計方式與反覆迴圈的(looping/iterative)的設計方式的比較

遞迴程式與非遞迴程式的比較

※遞迴函式與迴圈函式的比較

河內塔(Tower of Hanoi)

二分搜尋法範例:非遞迴

二分搜尋法範例:遞迴

7-10 時間複雜度

7-11 程式執行結果

※IEEE 754

7-12 程式實作

 

第八章 實作副程式

8-1 實作副程式的基本觀念

一、副程式活動(Activation)

()定義

()活動

二、副程式活動的配置

()劃分為兩部分

()遞迴呼叫

8-2 實作FORTRAN77的副程式

一、FORTRAN的副程式

二、實作方式

8-3 實作ALGOL-like語言的副程式

一、特點

二、活動記錄的結構

()說明

()範例

三、實作沒有遞迴且沒有非區域性參考(Nonlocal Reference)的副程式

()說明

()範例

四、實作遞迴副程式

五、實作非區域性參考的機制

()存取非區域性變數的步驟

()實作靜態領域法(static scoping)的方法

()靜態鏈法

()顯示法(display method)

六、區段結構(Block Structure)的實作

()活動記錄內容

()說明

()C語言的區段的實作

8-4 實作動態領域法

一、非區域性參考

()深存取(deep access)

()淺存取(shallow access)

二、語意模型的比較

()解決被當做參數傳送的副程式的非局部參考環境時

()實作副程式時

8-5 實作以副程式名稱為參數的副程式

一、在靜態領域的實作方法

()靜態鏈法(static chain method)

()顯示法(display method)

二、在動態領域的實作方法

8-6 程式實作

字元與數字轉換

字元與數字轉換

亂數

 

第九章 資料抽象化

9-1 抽象化(abstraction)的概念

一、定義

二、程式語言中的抽象化

()程序抽象化(process abstraction)

()資料抽象化(data abstraction)

9-2 抽象資料型態(Abstract Data Types)

一、抽象資料型態(Abstract data type)

()資料抽象化(Data Abstraction)

()抽象資料型態(Abstract Data Type, ADT)

二、內建的抽象資料型態

()所有內建的資料型態都是抽象資料型態

()以浮點數(floating-point)型態為例

三、使用者定義的抽象資料型態

()一個使用者定義的抽象資料型態必須提供兩個特性

()一個抽象資料型態(abstract data type)必須滿足兩個條件

四、抽象資料型態設計上的考慮

()封裝(Encapsulation)

()資訊隱藏(Information Hiding):資料隱藏(Data hiding)

五、各語言中定義抽象資料型態的語言結構

※Java C++Abstract Data Type的不同點

9-3 SIMULA67的類別(class)

一、類別(class)

二、在包藏(encapsulation)方面的設計

三、在資訊隱藏(information hiding)方面的設計

9-4 Modula-2的抽象資料型態

一、說明

二、在包藏(encapsulation)方面的設計

三、在資訊隱藏(information hiding)方面的設計

四、範例

五、Client modules對於匯入實體(imported entities)有兩種引用方式

9-5 Ada的抽象資料型態

一、封裝(packages)

二、在包藏(encapsulation)方面的設計

()一個packag可分成兩部分

()specification packagebody package

三、在資訊隱藏(information hiding)方面的設計

()Adapackage

()specification package

()private part的資料型態

9-6 C++的抽象資料型態

一、C++類別的定義

二、資訊隱藏的設計

()private區域

()protected區域

()public區域

9-7 通用性抽象資料型態(Generic Abstract Data Type)

一、說明

二、原有STACK package的限制

()只能儲存integer型態的元素

()最多只能有100個元素

三、Generic package可以消除這兩項限制

()Adageneric unit亦可用來定義通用性封裝

()STACK package中的限制因素予以參數化

四、C++語言樣板類別

()函數樣板(Function Template)範例

()類別樣板(Class Template)範例

※AdapackageModule-2module有何異同之處?

資料抽象型態(abstract data types)參數化(parameterized)的功能

五、資料抽象化(data abstraction)

()定義

()功能

()資料抽象化所扮演的角色及重要性

()資料抽象型態參數化功能

 

第十章 對稱與並行副程式

10-1 簡介

一、副程式應遵守的規則

()入口點(entry point)

()執行期間

()控制權

二、對稱(Symmetric)和並行(Concurrent)副程式的控制語意不遵守這些規則

()對稱性控制

()並行性控制

三、並行的種類

()表面的並行(quasi-concurrenc)

()實體的並行(physical concurrency)

()邏輯的並行(logical concurrency)

10-2 並行常式(Coroutines)

一、Coroutine的處理過程

()說明

二、Coroutine的執行方式

()無迴圈

()有迴圈

共同程序與一般副程式的差異

三、SIMULA 67的並行常式

()生產者消費者問題(producer-consumer problem)

()範例(JAVA)

10-3 並行性(Concurrency)

一、定義

()說明

()執行緒(thread)

二、功能

()有方法描述程式碼

()啟動執行

()互斥使用(mutually exclusive)

()同步(synchronization)

()指定優先順序

()延遲時間

※ConcurrencyParallelism的差異

三、互斥使用

※Dead lock

四、兩種同步的方式

()合作型同步(cooperation synchronization)

()競爭型同步(competition synchronization)

※Critical Section Design必須滿足的三個性質

五、競爭型同步

()旗號(semaphore)

()監督器(monitor)

()訊息傳遞(message passing)

六、旗號(Semaphore)

()臨界區域(critical region)

()Semaphores的觀念

()Semaphore的運作方式

()Semaphore的弱點

七、監督器(Monitor)

()SemaphoreMonitor的比較

()Monitor的特性

()Concurrent Pascalmonitor

八、訊息傳遞(Message Passing)

()Monitormassage passing的比較

()訊息傳遞的運作方式

()Ada83的訊息傳遞模型

()Ada95的並行性

九、PL/1的並行性

 

第十一章 例外處理

11-1 例外處理的基本概念

一、例外(Exception)

()硬體引起的例外

()軟體引發的例外

二、例外處理程式(Exception Handler)

三、例外處理的考慮因素

()例外與處理程式的繫結(exception to handler binding)

()持續性(continuation)

四、例外處理程式的種類

()系統內建的處理程式(built-in handlers)

()使用者定義的處理程式(user-defined handlers)

例外處理的種類

五、提供例外處理的語言

異常處理對程式的影響:優點

異常處理考慮的議題

11-2 PL/1的例外處理 here

一、PL/1是第一個提出例外處理的程式語言

二、PL/1提供的例外

三、例外處理程式

()系統內建

()使用者自行定義

()優先權

四、例外與處理程式的繫結=>動態繫結(Dynamic Binding)

()說明

()舉例

五、持續性的處理

()系統內建的例外處理程式執行結束後

()使用者定義的例外處理程式在執行結束後

六、範例

七、使用者定義的例外(User-Defined Exception)

八、PL/1例外處理的問題

11-3 Ada的例外處理

一、Ada的例外

()系統內建的例外

()例外發生的方式

二、例外處理程式

()四種程式單元

()例外處理程式的通用格式

()格式

三、例外的處理方式

()在副程式中發生例外時

()在區段(block)

()在封裝(package)

()在任務(task)

四、Ada的例外說明

五、使用者定義的例外

六、例外的抑制(Suppress)

11-4 C++的例外處理

一、格式

()說明

()範例一

()範例二

()範例三

二、參數

()說明

()範例

三、無法處理的例外

()說明

()範例

四、再度將例外丟出

()說明

()範例

五、宣告函數中可引發的例外型態

()說明

()範例

※基礎類別與衍生類別的異常處理

使用者自訂例外

try-catchif-else例外處理的優缺點

C++Javatry-catchfinally設計的異同與其理由

六、範例

 

第十二章 函數型程式語言

12-1 函數型程式設計(Functional Programming)

一、數學函數(Mathematical Functions)

※DrScheme軟體

※Steel Bank Common Lisp軟體

二、高階函數(Higher-Order Function)

()定義

()常見的方法

三、命令式語言的特徵

()主要運算

()命令導向式

()程式與資料的控制

()運算式的計算

四、純粹的函數型語言(Purely Functional Languages)的特徵

()資料處理

()基本構成單位

()迴圈與函數

()參考的透明性

五、函數型程式語言的發展

()實作

()擴充

六、函數型程式語言的基本功能

()提供一組基本函數(primitive functions)

()提供一組建構出複雜函數的方法

()提供一種函數應用的運算

()提供一種或一些可以表示資料的結構

七、函數型語言的主要優缺點

()優點

()缺點

12-2 第一個函數型程式語言(LISP)

一、LISP的發展

()說明

()AI的發展源起於三個領域

()定義

()主要方言(Dialect)

二、資料型態與結構

()原子(atom)

()串列(list)

()陣列(array)

()變數

()函數呼叫採劍橋波蘭式表示法,如下格式

()符號運算式(symbolic expression)簡稱為S-expression

三、基本運算

()算術運算

()QUOTE函數

()變數值的指定

()串列選擇函數

()串列建構函數

()述詞函數(predicate functions)

四、函數的組合

()一個函數的輸出做為另一個函數的輸入

()CARCDR組合的縮寫方式如下

五、控制結構

()條件運算式(COND)

()迴圈(loop)

六、使用者自行定義函數

()DEFUN函數

()LAMBDA表示法(lambda notation)

()DEF(DEFINE)函數

七、以函數為引數

()APPLY函數

()EVAL函數

()MAPCAR函數

八、巨集(macro)

()巨集定義格式

()巨集呼叫格式

九、以函數為引數的問題(Funarg problem)

12-3 Scheme語言

一、Scheme的發展與特性

()Scheme的發展

()Scheme的主要特徵

()Scheme的函數

二、基本函數

()識別字

()運算式

()算術運算

()QUOTECARCDRCONS LIST 等函數的用法與 LISP 完全相同

()述詞函數

()Scheme的輸出函數

三、建構函數的函數

()LAMBDA表示法

()DEFINE函數

※call/cc

四、控制結構

()IF函數

()COND函數

五、領域規則(scoping rule)

()靜態領域法

()識別字

()LET函數

六、定義高階函數(higher-order functions)

()函數組合(function composition)

()MAP函數

()通約(reduce)

()建立程式碼的函數

七、Scheme中命令式語言的特徵

()變數的使用

()邊際效應(side effect)

12-4 COMMON LISP

一、發展特性

二、領域規則

三、語言的特徵

()資料型態和資料結構

()輸入/輸出運算

()封裝型式

()命令式語言特徵

四、控制結構

()IFCOND函數皆可定義條件運算式(參閱12-3)

()PROGGO函數的配合可定義重複迴圈(參閱12-2)

()DOLISTDOTIMES可提供使用者定義之反複敘述(參閱5-3節之四)

()PROG1PROG2 PROGN 等函數可建立順序結構

12-5 ML語言

一、發展特性

二、MLLISPScheme的差異

()說明

()強型態的語言(strongly typed language)

()可提供例外處理的功能

()具有模組的特性

具有模組的特性,可以實作抽象資料型態。

()提供串列和串列運算

三、使用者為值(value)定義的名稱(name)

四、函數的定義

五、捷徑計算

12-6 Miranda語言

一、發展特性

二、函數的定義

三、串列

四、值的宣告與名稱的繫結

五、串列包容(list comprehension)

六、惰性求值法(lazy evaluation)

()利用惰性求值的特性,可供使用者定義許多無窮的資料結構

()利用無窮串列可以計算遞迴函數的特定值

 

第十三章 邏輯程式語言

13-1 邏輯程式設計概念

一、定義

使用SWI-Prolog軟體

二、宣告型語意(Declarative Semantics)

()概念

()宣告型語意比命令式語言的語意簡單

三、非程序性語言(Non-procedural Language)

()定義

()邏輯程式語言是一種非程序性語言

四、邏輯程式語言(logic programming languages)

13-2 PROLOG程式的簡介

一、程式的組成

二、項(term)

()可以是常數變數結構

()常數(constant)

()變數(variable)

()結構(structure)

三、事實子句

()定義

()範例

四、規則子句

()定義

()格式

()範例

五、問題子句

()定義

()格式

()範例

()不具名變數

()具名變數

六、邏輯型程式語言特性

()以某種符號邏輯的形式來描述程式

()邏輯推論過程去產生結果

()宣告型語意

七、應用

()說明

()實例

邏輯程式語言與一般程序語言的比較

13-3 PROLOG推論程序

一、直譯程式(interpreter)

二、推論程序

()步驟一

()步驟二

()步驟三

()步驟四

13-4 PROLOG的運算式

一、算術運算

()算術運算子

()算術運算式的格式

二、關係運算式

()進行數值比較的關係運算

()進行項(term)的比較關係運算

三、一致化運算(unification)和等值運算(equality)

()一致化運算的格式

()否定運算子not的格式

()等值運算與不等值運算的格式

13-5 串列(Lists)

一、串列表示法

()串列種類

()非空串列

二、串列的運算

()求串列的最後元素

()成員關係(membership)檢查某個體是否為串列的元素

()刪除串列中某一元素的所有值

()聯集(union)運算

()串列的串接(concatenate)

()反轉串列(reverse of list)

13-6 PROLOG的排序(Sorting)

一、插入排序(Insertion Sort)

二、快速排序(Quick Sort)

13-7 Cut的使用

一、Cut的功能與用法

()說明

()範例

二、Cut的應用

()說明

()產生與測試(generate and test)的程式設計策略

 

第十四章 個體導向程式語言

14-1 個體導向程式設計(OOP)

一、個體導向程式設計(Object-Oriented Programming)概念

()OOP包含了三個基本特性:物件導向式程式語言三大特色

()程式設計方式的比較

()OOP所提供的功能

()執行效率上的缺點

※以物件的三種特性模擬並寫出真實的一輛紅色、四門、3000 cc、休旅車

多型(Polymorphism)的種類

二、個體導向語言(object-oriented language)

()個體(objects)或稱物件

()類別(classes)

()訊息(messages)

多載(Overloading):超荷 / 靜態多型

多載(Overloading)與多型(Polymorphism)的比較:

覆載(Override):覆寫(overriding) / 虛擬函式 / 動態多型

泛型(Genericity):通用性

14-2 Smalltalk語言

一、Smalltalk簡介

二、Smalltalk的運算式

三、Smalltalkmethods

四、區段及控制結構

五、Smalltalk的類別(class)

14-3 C++語言

一、C++C的關係

()關係

二、與個體導向無關的新特性

()註解

()在區塊中宣告

()範圍修飾運算子(scope qualifier operator)

()預設參數值(default parameter)

()cout輸出與cin輸入

()傳位址呼叫(call by reference)

()行內函數(inline function)

()超荷函數(overloaded function)Overloading Functions

()動態配置與釋除(dynamic allocation and deallocation)

智慧指標(Smart Pointer)

三、C++的個體導向功能

()類別的定義

建構函數與解構函數的用途

建構順序(Order of Construction)

解構順序(Order of destruction)

()衍生類別(derived class)

()虛擬函數(virtual function)與多型(polymorphism)

繼承(inheritance)

※C++繼承的種類

※C++的多重繼承和Javainterfaces的比較

多重繼承(Multiple Inheritance)的問題

鑽石問題(Diamond Problem):菱形繼承問題 \ 重複繼承

※單一繼承與多重繼承的差異

單一繼承與多重繼承的優缺點

動態配置記憶體(Dynamical Memory Allocation)的優缺點

抽象類別(abstract class)

※Type Casting

※is-a關係與has-a關係的比較

※C++與純物件導向語言的差異

※C++語言的優缺點

※C++程式執行結果

※C++語言實作

※字串分割

※字元和字串的輸出入相關函數

※常用的字串處理函數

※標準字串轉換函數

※標準字元檢查函數

※Copy Constructor

14-4 Ada’95OOP

一、說明

二、類別

()說明

()範列

()提供建構元(constructor)和解構元(destructor)的副程式

三、繼承

()說明

()類別階層

()Ada 95的類別只提供單一繼承的功能,並不支援多重繼承

()子程式庫封裝(child library package)

()Ada 95提供子程式庫封裝的優點

四、動態繫結

()說明

()類別涵蓋式型態也可以用來定義多型的指標(ploymorphic pointers)

()純抽象基底型態

 

第十五章 網路程式語言-JAVA

15-1 JAVA語言簡介

※JavaC++ (C)的差異

15-2 JAVA的特性

一、簡單(Simple)

二、個體導向(Object-Oriented)

()說明

()單一繼承(single inheritance)

三、直譯式語言(Interpreted Language)

四、跨平台

五、多線執行(Multithreaded Execution)

六、垃圾收集(Garbage Collection)

七、強固性(Robust)

八、安全性(Security)

15-3 JAVA程式的分類及發展步驟

一、JAVA程式的分類

()Application

()Applet

二、JAVA程式的發展步驟

()簡單的Java Application

()簡單的Java Applet

15-4 JAVA的類別

一、類別宣告的語法

()宣告

()ClassModifiers

()範例

二、變數與方法

()類別中所宣告的變數和方法

()說明

()範例

使用類別方法的好處

※static宣告

15-5 介面

一、定義

二、實作

()interfac語法單元的格式

()範例1

()範例2

※Java的介面與類別之間的關係

※Java的類別與介面的比較

※Java的類別(Class)、抽象類別(Abstract Class)與介面(Interface)的比較

※Java如何使用介面解決單一繼承的缺點?

15-6 編譯單元與Package

一、編譯單元

二、Package

三、使用Package中的某些類別

()範例1

()範例2

15-7 類別的實作

一、變數的宣告

()宣告變數的語法如下

()Java的變數型態

()Java多維陣列

※Java的參考變數

比較C++Java的參考變數(reference variable)其不同之處

※implicit(內隱式) deallocation vs. explicit(外顯式) deallocation

二、建構元(Constructor)

()定義

()語法

()thissuper

三、方法(Method)的定義

()定義方法的語法如下

() Java 語言中方法特性

簽名(Signature)

四、可見範圍

五、參數傳遞的方法

()說明

()範例

15-8 運算式

一、註解

二、運算式

15-9 流程控制

一、if敘述

二、switch敘述

三、for敘述

四、while敘述與do-while敘述

五、跳躍敘述-breakcontinuereturn敘述

()breakcontinue

()return

15-10 例外處理(Exception Handling)

一、何謂例外處理

()增加程式的強固性(robust)

()增加程式的可讀性

()提高程式的可維護性

()傳統寫法

()利用例外處理架構的寫法

二、為何需要例外處理

三、例外物件

四、例外處理的語法

()語法一

()語法二

()例外處理的順序

()流程圖

()範例

五、catch區塊順序

()說明

()FileNoFoundException

()錯誤的寫法

()正確的寫法

六、例外類別

()JAVA語言所提供的主要例外類別如下圖所示

()產生例外的方法

常見的RuntimeException的子類別(subclass)名稱

RuntimeException類型的常見異常

內建例外

方法中宣告throws

使用者自訂例外

※C++Java例外處理機制的優缺點

※C++Java例外處理的比較

15-11 多線執行(Multithread Execution)

行程(Process)

※fork函數

一、Thread觀念

執行緒安全(thread safe)

多元處理(Multiprocessing):多行程 / 多處理器處理 / 多重處理

二、單執行緒與多執行緒

()單執行緒(Single thread)

()多執行緒(multithread)

三、使用Thread類別

()說明

()Thread類別中常用到的方法如下

四、製作Multithread功能

()繼承Thread類別

()實作Runnable介面

※start( )以及run( )的差異

15-12 同步(Synchronization)

一、為何要同步

二、競爭型同步機制

()第一種語法

()第二種語法

三、合作型同步機制

()waitnotify方法

()範例

※C#語言特性

※AJAX(Asynchronous JavaScript and XML)

15-13 泛型(Generic)

15-14 JAVA實作

一、Javaequals==比較

()==

()equals

二、DecimalFormat(小數格式)

※Javathissuper的差異

※Java執行結果

15-15 網路程式

一、JavaScript

※JSON(JavaScript Object Notation)

二、應用程式(Application, App)

()定義

()功能

()優點

()執行平台

()發行平台

()費用

()APP造訪網頁會遇上兩項重大的問題

()如何由電腦系統來解決或是預防限定平台與相容性的問題?

※APP的開發模式

 

第十六章 程序性語言

※C語言

typedef

※陣列的宣告

※C程式執行結果

※C語言實作

 

第十七章 Python語言

下載、安裝與操作Python

註釋(Comments)

字串格式化

※%-formatting格式化

※str.format( )格式化

※f-string格式化

※print( )函數的參數

算數運算子

比較運算子

類別(Class)

繼承(Inheritance)

標準函式庫

※if __name__ == '__main__'

※input( )函式

※range( )函數

單星號參數與雙星號參數

※if判斷式

迴圈

※Python的資料型態

陣列

建立陣列的方式

例外處理

※Pythonbreakcontinuepass的區別

※with基本語法

※Multithreading

※multiprocessing

※JavaPython的比較

Pandas

深度學習(deep learning)

※NP-Complete Problem

雲端Hadoop平台

※Dynamic Programming

※CPU快取(CPU Cache)

 

 

 

第十八章 其他議題

 

 

arrow
arrow
    全站熱搜

    jacksaleok 發表在 痞客邦 留言(0) 人氣()