430 likes | 769 Views
第四章 Visual Prolog 概述. 1094410058 陳善濟. 內容大鋼. Visual Prolog 6 概述 Visual Prolog 6 基本特性 創建項目 建立項目 瀏覽項目 開發項目 調試項目. 4.1 Visual Prolog 6 概述. Visual Prolog 6 是最新一代的 Visual Prolog 邏輯程式設計語言,是 Visual Prolog 的 PDC 和 Turbo Prolog 的後繼產品。 Visual Prolog 6 的目標是支援企業級的強調問題求解的複雜知識的程式設計。
E N D
第四章 Visual Prolog概述 1094410058 陳善濟
內容大鋼 • Visual Prolog 6概述 • Visual Prolog 6基本特性 • 創建項目 • 建立項目 • 瀏覽項目 • 開發項目 • 調試項目
4.1 Visual Prolog 6 概述 • Visual Prolog 6是最新一代的Visual Prolog邏輯程式設計語言,是Visual Prolog的PDC和Turbo Prolog的後繼產品。 • Visual Prolog 6的目標是支援企業級的強調問題求解的複雜知識的程式設計。 • Visual Prolog 6的發布是PDC歷時3年開發的結果。
4.1 Visual Prolog 6 概述 經過持續不斷的努力和對用戶需求的深入考察,Visual Prolog已經增加了如下功能︰ • 一個獨特的對象系統 • 多線程機製 • Unicode支援 • 改進的DLL支援 • 改進的函數支援 • 改進的異常處理 • 其他更多功能等
4.1 Visual Prolog 6 概述 Visual Prolog是一個完備的程式設計環境,它提供如下設施︰ • 圖形開發環境 • 編譯器 • 連接器 • 調試器
4.1 Visual Prolog 6 概述 Visual Prolog特別適應於處理複雜的知識問題。PDC已經透過實例證明了這一點,它提供的一些成功的應用系統案例有︰ • 職員計畫 • 醫院預約登記 • 機場決策支援 • 航機決策支援 • 商店室內調度
4.2 Visual Prolog 6基本特性 • Visual Prolog 6是基於Prolog的強類型的面向對象程式設計語言。下面從語言特性、圖形化開發環境、編譯器、鏈接器、調試器等方面簡要予以介紹。
4.2.1 語言特性 Visual Prolog 6語言的主要特性︰ • 基於Horn子句的邏輯程式設計語言 • 完全面向對象 • 對象謂詞值(委派) • 強類型 • 代數數據類型 • 模式匹配與合一 • 受控的不確定性機製 • 完全集成的事實數據庫 • 自動的內存管理 • 支援與C/C++的直接聯接 • 支援對Win32 API函數的直接訪問
4.2.2 圖形化開發介面 Visual Prolog集成開發環境可以更方便快捷地建立、測試和修改Visual Prolog應用程式。它在開發大型項目時非常有用。 • 項目視窗中的模塊、包括檔案和資源的樹型架構,有助於將項目打包,從而給出了一個額外級別的抽象 • 文本編輯器可以方便地進行文本編輯,瀏覽那些聲明和實現。 • 對話框編輯器為設計對話框提供了標準控件 • 選單編輯器允許創建下拉式選單和彈出式選單 • 工具欄編輯器允許創建各種工具欄 • 圖形編輯器可以方便地創建、檢視和編輯圖示、指標和小位圖。 • 建造工具支援插入所需的程式包和包含指令 • 瀏覽工具支援查找特定的實體,go to definition和go to declaration
4.2.3 編譯器 Visual Prolog編譯器是一個功能強大且高效的編譯器,它可以用來︰ • 為產生可單獨執行的程式或DLL而創建目標檔案 • 解決聲明間的交叉引用 • 驗証謂詞模式 • 執行強類型檢查 • 在構造器中驗証事實初始化 • 進行謂詞分解
4.2.4 鏈接器 Visual Prolog擁有一個功能強大的鏈接器︰ • 產生EXE可執行檔案和DLL檔案 • 使用由最新的Microsoft Visual C編譯器產生的LIB檔案
4.2.5 調試器 Visual Prolog集成開發環境包含一個內建圖形化調試器︰ • 顯示常見的調試器視圖︰內存,堆棧,變量 • 顯示類和對象事實的值 • 進行單步跟進(Trace Into),單步越進(Step Over),等等 • 包括額外的調試步驟︰單步跳出,營運到Prolog代碼 • Fail和Exit可視化等
4.3 創建項目 在一個項目檔案中,我們將使用這個VDE來完成如下任務︰ • 創建項目︰即用VDE來創建一個項目。在項目創建期間,可以選擇該項目的一些重要特性,如該項目是產生一個可執行檔案還是產生一個DLL,是使用GUI還是只使用文本模式等。 • 建立項目︰即建立一個項目,在VDE中進行編譯和連接等。 • 瀏覽項目︰VDE和編譯器收集關於該項目的訊息,這些訊息以各種模式被用來進行實體的快速定位等。
4.3 創建項目 • 開發項目︰在項目的開發和維護期間,VDE被用來給項目添加源檔案和GUI實體、刪除源檔案和GUI實體,以及編輯源檔案和GUI實體。 • 調試項目︰VDE還被用來調試項目。在程式營運期間,調試器可用來跟蹤程式的執行,探索程式的狀態。 • 本章最後,我們將較為詳細地回顧一下上述這些事件。值得注意的是︰我們將首先創建一個項目,並將這個項目貫穿於全章。
4.3 創建項目 • 首先,我們創建一個項目。在選單中選擇Project -> New...,VDE將對此做出附應,出現一個包含項目各種特性的對話框,如圖所示。
4.3 創建項目 • 我們選擇項目名為tut01。項目名亦作為將要產生的目標檔案名。在此例中,目標檔案是一個exe檔案,故目標檔案名將是tut01.exe。選擇UI策略為GUI,即該程式是一個GUI程式,帶有圖形用戶界面。 • 基本目錄是一切項目的“基地”。為此,我們可以選擇一個方便的目錄位置。新項目將在基本目錄的一個次目錄中進行創建,按照缺省,這個次目錄名與項目名同名。
4.3 創建項目 • 按下OK按鈕,創建該項目。VDE將顯示出如下圖所示的情形。
4.3 創建項目 • 左面的視窗是項目視窗,它包含項目中有關實體的各種訊息。這個視窗現下尚不包含大量的訊息,但當我們編譯該項目時,各種訊息就會被添加進來。我們將會較詳細地分析在編譯該項目時這個視窗所包含的各種訊息。 • 底部是消息視窗,它將包含各種狀態訊息和進展訊息。
4.4 建立項目 • 在我們做任何修改之前,我們將建立該項目,即編譯和連接該項目。在建立(Build)選單中,可以找到建立、編譯和執行項目的選單命令。 • 如果選擇執行(Execute)命令,則該項目首先將會執行建立操作,這取決於執行程式的版本日期。因此,可以直接選擇執行命令(或直接按下F9鍵)。
4.4 建立項目 • 在消息視窗,VDE顯示哪些檔案被編譯,等等。 • 如果建立進程成功,就像此例一樣,所創建的程式被執行。本例現下的結果是只可以看見一個小的什麼也不做的GUI程式。值得注意的是,這個程式看起來有點像VDE本身。因為VDE實際上就是一個Visual Prolog程式,所以這一點並不是巧合。 • 在本章後面,我們還將看到,如果在程式建立過程中編譯器或連接器檢測到錯誤,將會發生什麼樣的情形。
4.5 瀏覽項目 • 我們將把目光轉到項目視窗中的項目樹,並對其稍加解釋。項目樹本身是以標準的視窗樹控件進行顯示的,讀者對此用法已經比較熟悉。在這裡,我們將集中精力在該樹的內容上。 • 項目樹的架構和內容如右圖所示。
4.5 瀏覽項目 • 圖中頂部節點代表項目,其餘節點是項目目錄。 • 緊下面是邏輯節點$(ProDir),它表示Visual Prolog的安裝目錄。這個目錄包含來自Visual Prolog系統的庫和庫代碼。 • 接下來的目錄是任務視窗TaskWindow,它是該項目目錄的一個次目錄。這個目錄包含產生任務視窗、選單、工具欄及關於(about)對話框等所需要的全部代碼。
4.5 瀏覽項目 最後,我們可以看到若干檔案。Visual Prolog使用以下約定︰ • *.ph檔案是程式包的頭檔案(package headers)。一個程式包是類和界面的一個集合,程式包常被當作一個積木塊使用。 • *.pack檔案是程式包。它們包含相應的.ph檔案的實現或定義。 • *.i檔案包含一種界面(interface)。 • *.cl檔案包含一個類聲明(class declaration)。 • *.pro檔案包含一個類實現(class implementation)。
4.5 瀏覽項目 • 如果摺疊起這個節點,重新展開任務視窗節點,可以看到如右圖所示的這樣一個目錄樹。
4.5 瀏覽項目 新出現的幾個類型的節點的含義如下︰ • *.dlg 檔案包含一個對話框(dialog); • *.win檔案包含一個視窗(window); • *.mnu檔案包含一個選單(menu); • *.cur檔案包含一個游標(cursor); • *.ico檔案包含一個圖示(icon)。 繼續考察後還可以發現︰ • *.tb檔案包含工具欄(toolbars); • *.bmp檔案包含位圖(bitmaps); • *.lib檔案包含庫(libraries)。
4.5 瀏覽項目 • 如果右擊一個節點,一個關聯選單將出現,選單中包含有對這個特定節點進行適當操作的有關命令。 • 如果雙擊一個節點,則相應的實體將調出對應的編輯器。所有源代碼檔案都將在文本編輯器中進行編輯,而視窗資源,如對話框和選單等將在圖形編輯器中進行編輯。後面我們將進一步考察圖形編輯器和文本編輯器。 • 某些實體在項目樹中出現兩次,這是因為它們既有一個聲明,又有一個定義或實現。
4.5 瀏覽項目 • 試著雙擊每一個run節點,可以看到,顯示run謂詞的聲明和定義的兩個編輯器分別被打開。 • VDE還有其他的工具,以瀏覽指定的實體,但這些工具在此將不進行討論。
4.6 開發項目 • 現在試著對該項目做一修改。因為我們仍然未考慮如何用Visual Prolog進行編程,所以我們將使這些改變盡量簡單一些。 • 我們開始故意引入一個錯誤,因而就可以看到錯誤視窗。 • 首先,我們在檔案tut01.pro中查找run謂詞子句。如果在項目樹中雙擊這兩個run節點的後面的那個節點,文本編輯器將被打開,一個插字符號正好位於該節點處,如下頁圖所示。
4.6 開發項目 • 試著插入一個fail,如下面的代碼所示(注意show後面的逗號)。 clauses run():- TaskWindow = taskWindow_class::new(), TaskWindow:show(), fail.
4.6 開發項目 • 我們試圖再次建立該項目,即直接按下F9鍵。系統將儲存和編譯該檔案,但由於我們引入了一個錯誤,所以錯誤視窗被打開,如下圖所示。
4.6 開發項目 • 我們將考慮錯誤訊息的實際含義。一旦雙擊錯誤消息,就會發現,編輯器再次獲得焦點,插字符號準確地指向我們剛剛插入的fail謂詞。 • 去掉fail謂詞,復原該代碼,再次建立該項目。 • 接著,我們將試圖在關於對話框中進行修改。這並不是一個很明智的改變,但它卻能說明一些問題。
4.6 開發項目 • 首先,我們將用對話框編輯器打開About對話框。為此,在項目樹中雙擊該對話框。我們必須雙擊的節點如右圖所示。
4.6 開發項目 • 一旦雙擊了這個節點,就會在對話框編輯器中看到該對話框和兩個工具欄,如右圖所示。
4.6 開發項目 • 現在我們給這個對話框添加一個按鈕。首先點擊控件工具欄上的“按鈕”,然後在AboutDialog對話框視窗中鄰近項目圖示的旁邊點擊一下該對話框。結果,一個視窗彈出來,如右圖所示。
4.6 開發項目 (後面步驟因實作與講義不一致,故跳過) 原因:可能是因為版本不同…
3.7 調試項目 • 開發環境包含一個調試器。有了調試器,我們就可以跟蹤程式的執行過程,檢查程式的狀態。 • 為了啟動調試器,在選單中選擇Debug->Run,或者按下F6鍵。如果該項目不是最新的,它將首先被建立,然後才開始調試任務。 • 注意,透過選擇選單Debug -> Stop Debugging (或者按下Shift-F6鍵),我們就可以在任何時間停止調試。
3.7 調試項目 • 調試開始時,VDE將首先裝入調試訊息,然後進入被調試的程式。程式的執行過程在目標goal執行之前一直處於停止狀態。為了表示這種情形,目標goal在一個編輯器視窗中被打開,藍色的箭頭指向該目標goal,如下頁圖所示。
3.7 調試項目 • 我們可以使用調試(Debug)選單命令來單步執行程式,如右圖所示。 • 選單命令Step Into︰將打開另一個編輯器和代碼mainExe::run,箭頭將指向這個代碼的入口。
3.7 調試項目 • 在視圖(View)選單中,我們可以打開各種調試器視窗,對此簡要作以下解釋。 • 營運堆棧(Run Stack)視窗,包含一個營運堆棧的描述。
3.7 調試項目 • 從原理上講,營運堆棧包含若干行,與已經進行了的調用相一致。然而,優化(即所謂的尾部調用優化)的結果導致可能已經去掉了一些條目。 • 營運堆棧不僅可以顯示調用關係,還可以顯示陷入點和回溯點的情況,這些情況將在後續章節裡進行更為詳細的敘述。
3.7 調試項目 • 局部變量(Local Variables)視窗︰包含局部變量,與營運堆棧視窗中的選擇相對應。 • 事實(Facts)視窗︰包含程式的全局狀態訊息,這個狀態存放在事實數據庫中。 • 斷點(Breakpoints)視窗︰顯示程式中當前的斷點。 • 其餘的調試視窗屬於低級調試,此處將不進行討論。