陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司 第六章 領域與範圍 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司.

Slides:



Advertisements
Similar presentations
工職數學 第四冊 第一章 導 數 1 - 1 函數的極限與連續 1 - 2 導數及其基本性質 1 - 3 微分公式 1 - 4 高階導函數.
Advertisements

大綱 1. 三角函數的導函數. 2. 反三角函數的導函數. 3. 對數函數的導函數. 4. 指數函數的導函數.
第一單元 建立java 程式.
第七章 副程式.
陳維魁 博士 儒林圖書公司 第七章 參數的傳遞 陳維魁 博士 儒林圖書公司.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
計算機概論 第三章 程式語言 陳維魁/陳邦治 旗標出版社.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
Chapter 5 遞迴 資料結構導論 - C語言實作.
主題五 CPU Learning Lab.
Chapter 5 迴圈.
陳維魁 博士 儒林圖書公司 第六章 領域與範圍 陳維魁 博士 儒林圖書公司.
第八章 符号表 符号表的作用: 一致性检查和作用域分析; 辅助代码生成..
第十一章 結構.
簡易C++除錯技巧 長庚大學機械系
陳維魁 博士 儒林圖書公司 第七章 參數的傳遞 陳維魁 博士 儒林圖書公司.
列舉(enum).
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
使用VHDL設計—4位元位移器 通訊一甲 B 楊穎穆.
在NS-2上模擬多個FTP連線,觀察頻寬的變化
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
Merge Partners’ programs by Matlab
Pointers Data Structure 補充單元 2019/1/1.
第二章 SPSS的使用 2.1 啟動SPSS系統 2.2 結束SPSS系統 2.3 資料分析之相關檔案 2.4 如何使用SPSS軟體.
Java 程式設計 講師:FrankLin.
資電學院 計算機概論 F7810 第三章 程式語言 陳邦治編著 旗標出版社.
Chap3 Linked List 鏈結串列.
第一章 直角坐標系 1-1 數系的發展.
Topic Introduction—RMI
第一單元 建立java 程式.
PLC-GPPW軟體使用教學 授課教師:張祖烈
資料結構 優點 缺點 1 陣列 (Array) 沒有額外變量 (例head, next,...) 運作/操作較簡單 更新資料時,若要保持順序,需要移動較大量資料 靜態結構Static (宣告時已決定了陣列元素多少,不能在程式執行期間增減元素) 2 隊列Queue (FIFO) 容易更新 加入enqueue:
第一章 直角坐標系 1-3 函數圖形.
第 19 章 XML記憶體執行模式.
|07 函數.
輸入&輸出 函數 P20~P21.
第十章 指標.
CH1 我的第一個App與變數宣告.
陳維魁 博士 儒林圖書公司 第三章 變數與繫結 陳維魁 博士 儒林圖書公司.
GUI Title and GUI Status
挑戰C++程式語言 ──第8章 進一步談字元與字串
陳維魁 博士 儒林圖書公司 陳維魁 博士 儒林圖書公司.
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
引用檔案.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
Pthread.
Introduction to the C Programming Language
陣列與結構.
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
實習八 函式指標.
期末報告第一題 通訊四甲 B 湯智瑋.
第一章 直角坐標系 1-3 函數及其圖形.
查表法&電腦IO Port二進制轉七段顯示器
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
三 顺序结构程序设计 厦大附中信息技术.
作業系統實習課(二) -Scheduler-Related System Calls-
Programming & Language Telling the computer what to do
Chapter 6 函數.
Introduction to the C Programming Language
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Array(陣列) Anny
SQLite資料庫 靜宜大學資管系 楊子青.
Chapter 4 Multi-Threads (多執行緒).
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
陳維魁 博士 儒林圖書公司 第六章 領域與範圍 陳維魁 博士 儒林圖書公司.
陳維魁 博士 儒林圖書公司 第八章 例外處理 陳維魁 博士 儒林圖書公司.
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Presentation transcript:

陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司 第六章 領域與範圍 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司

大綱 基本概念 可見性 靜態領域法與動態領域法 領域的間隙 區域性資料及其處理方法 活動記錄 顯示堆疊 動態領域法的實作 精選習題

基本概念 資料控制的意義 參用環境(referencing environment) 程式執行到一個區塊時,對當時資料存取的管制及資料流向的控制即稱為資料控制 參用環境(referencing environment) 當呼叫程式呼叫副程式時會產生一個參用環境

基本概念 參用環境建立的過程 將實際參數(actual parameter)的資訊傳給型式參數(formal parameter) 副程式建立區域變數 當程式流程轉移給副程式時,首先會先參用自己的區域環境,若區域環境處找不到變數的定義,再到呼叫程式處引用非區域變數 假如副程式又呼叫了另一個副程式,此時將產生另一個參用環境 由副程式返回呼叫程式時,參用環境將回復成原來狀況 呼叫程式執行時無法引用副程式內的區域變數

可見性 (visibility) 某段程式可參用的變數對該程式而言即為可見(visible),反之即為不可見 program visibility; var x : integer; procedure A (p : integer); begin ... end; procedure B (q : integer); begin ... end; procedure C (r : integer); begin ... end; begin ... end. 根據左側程式可得以下的區塊圖: 對主程式而言x是可見;p,q,r非可見 對副程式A而言x,p為可見,而q,r非可見 對副程式B而言x,q為可見,而p,r非可見 對副程式C而言x,r為可見,而p,q非可見

領域與範圍 領域(scope) (空間) 範圍(extend) (生命週期) 對程式設計師來說,“領域”其實就是指一段空間 代表一段程式本文 範圍(extend) (生命週期) 代表在某段時間內,變數會與儲存其值的儲存體做繫結的動作 對程式設計師來說,“領域”其實就是指一段空間 一個變數的“領域”其實是指這個變數在這段程式內是可被引用的(reference)

靜態領域法與動態領域法 靜態領域法 在區塊中未定義的變數,根據程式的結構,在程式中包含其區塊的上一層區塊處尋找此變數是否在此區塊內定義 若找到變數的宣告則變數即是在此區塊內定義 若未找到則繼續往外層尋找直到變數第一次宣告處為止 若搜尋完整個程式仍未找到變數之宣告,則該變數即為未定義之變數

靜態領域法與動態領域法 動態領域法 又稱為流動繫結法(fluid binding) 變數的型態會在目前的區塊中尋找;尋找的順序為“副程式被呼叫的反順序”

實際範例一 就右側採用靜態領域法的程式中,指出每個區塊中所有界定的變數及其性質

實際範例二 請列出列號6,9,13,16,程式執行時,所能使用的變數名稱及其資料型態, 以「變數名稱:資料型態」表示 1.PROCEDURE A; 2.VAR X, Y, Z : INTEGER; 3. 4. PROCEDURE B; 5. VAR W, X, Y : REAL; 6. 7. PROCEDURE C; 8. VAR V, W : INTEGER; 9. 10. END {C} 11. 12. END {B} 13. 14. PROCEDURE D; 15. VAR X, Z : CHAR; 16. 17. END {D} 18. 19.END {A}

實際範例三 右側的程式 (1) 採取靜態領域,副程式A所列印的x之值為何? (2) 採取動態領域,副程式A所列印的x之值為何? program MAIN; var x:integer; procedure A; begin writeln('x=',x) end; {of procedure A} procedure B; Var x: integer; begin x:=10; A end; {of procedure B} begin {of main} x:=5; B end.

領域的間隙 定義 採用靜態領域法的情況下,不正常的否定先前變數的宣告即稱為領域的間隙(hole in scope)

領域的間隙範例 program hole_in_scope; var x:real; procedure A; begin x:=x × x ; write(x) end; procedure B; var x:integer; begin A end; begin B end. 在副程式B中,變數x宣告為整數,而在B中呼叫了副程式A,但在主程式中變數x宣告為實數,由靜態領域法可知此時x須使用的型態為實數。此種不正常的否定先前變數宣告的現象即稱之為領域的間隙

區域性資料 某個區域內所能引用的資料即稱為區域性資料 區域性資料僅適用某個區域內

區域性資料處理方法 保留法(retention) 當副程式結束其執行動作時,會將副程式內區域變數的值保留;當副程式再次被呼叫時會沿用該保留的值做為程式執行之依據 如,Fortran、C、C++、Java及Cobol 採用靜態儲存區配置法(static storage allocation),也就是在編譯時將記憶體的空間配置給區域變數使用

區域性資料處理方法 清除法(deletion) 當副程式結束其執行動作時,會將副程式內區域變數的值清除,因此每次呼叫該副程式時其區域變數的初值是固定的 如,Pascal、Ada、Lisp、APL、C、C++、Java與SNOBOL 採用動態儲存區配法(dynamic storage allocation),也就是在執行時將記憶體的空間配置給區域變數使用

範例 試就右側之程式段分別以清除法及保留法各別說明執行結果為何? procedure B; var P:integer=5; begin write(P); P:=P+5; write(P); end;{B} procedure A; begin …. B; …. B; end;{A}

活動記錄 活動記錄(activation record)主要是用在副程式呼叫時 每次作副程式呼叫時就會產生一個相對應的活動記錄,其內記錄了副程式在執行的過程中所有可能參用的資訊 活動記錄的內容 靜態鏈、動態鏈、返回位址、型式參數、區域變數、算術運算暫存值、參數傳遞暫存值、函數傳回值及符號資料 符號的資料主要是記錄此區段所宣告的副程式的名稱及標記(label) 靜態鏈(static link)是指活動記錄的一個欄位,副程式的靜態鏈會指向包含其區塊的活動記錄 動態鏈(dynamic link)也是活動記錄的一個欄位,副程式的動態鏈會指向呼叫它的副程式的活動記錄

活動記錄範例 執行時程式段被呼叫的先後順序為: DemoR  S  P  Q program Demo ; procedure P; begin ... procedure Q; begin ... end;{of Q} ... Q; end;{of P} procedure R; begin ... procedure S; begin ... P; end;{of S} ... S; end;{of R} begin R; end.{of demo} 執行時程式段被呼叫的先後順序為: DemoR  S  P  Q

顯示堆疊 顯示(display)堆疊是在採用靜態領域法時,尋找變數在何處定義的方法 顯示的內容是由許多指標組成,這些指標指向目前區塊的活動記錄及包含目前區段之所有區段的活動記錄

顯示堆疊範例 procedure main; procedure A; procedure B; …. end B; end A; procedure C; procedure D; … end D; procedure E; … end E; end C; end main; Main C  D  E

動態領域法的實作 動態領域法的實作方式有二種 深存取(deep access) 淺存取(shallow access)

精選習題 假設區塊結構中的靜態巢狀樹如下所示:則 (a)在B的程式段中 (b)在F的程式段中 可以呼叫那些程式單元?

精選習題 一個變數(variable),觀念上可分為以下六個成份:變數名稱(name),所佔空間地址,此空間可儲存資料的型態(type)此空間所儲存的值(value),其領域(scope),及其生命期間(life time)。 (1)試解釋在C的程序執行時,在什麼狀況下同一個次程序的同一個變數名稱會代表不同的空間地址;而在什麼狀況下,不同的變數名稱會代表同空間地址。 (2)試簡述以下語言變數的生命週期(其佔有的空間,何時開始存在,何時停止存在)。Pascal local variables,C的static variables,Pascal的pointer variable所指的空間。

精選習題 Pascal語言與C語言對於變數宣告的領域法(scope)各有那幾種可能?