A. 手機上這些文件是什麼意思,干什麼的
1, "BT"指下載目錄2,「e-book"指電子書3,MMS意思是彩信。
4,udx的英文全稱為Universal Data eXchange,翻譯成中文就是「通用數據交換」。 5,」cmsbrw「指:系統目錄 6,mobileDat指-移動數據暫存目錄7,realnews指--真實的新聞8,META-INF意思比較復雜,如下: 看完下面的帖子你就明白了
常常在網上看到有人詢問:如何把 java 程序編譯成 .exe 文件。通常回答只有兩種,一種是製作一個可執行的 JAR 文件包,然後就可以像.chm 文檔一樣雙擊運行了;而另一種是使用 JET 來進行 編譯。但是 JET 要用錢買的,而且據說 JET 也不是能把所有的 Java 程序都編譯成執行文件,性能也要打些折扣。所以,使用製作可執行 JAR 文件包的方法就是最佳選擇了,何況它還能保持 Java 的跨平台特性。
下面就來看看什麼是 JAR 文件包吧:
1. JAR 文件包
JAR 文件就是 Java Archive File,顧名思意,它的應用是與 Java 息息相關的,是 Java 的一種文檔格式。JAR 文件非常類似 ZIP 文件——准確的說,它就是 ZIP 文件,所以叫它文件包。JAR 文件與 ZIP 文件唯一的區別就是在 JAR 文件的內容中,包含了一個 META-INF/MANIFEST.MF 文件,這個文件是在生成 JAR 文件的時候自動創建的。舉個例子,如果我們具有如下目錄結構的一些文件:
==
`-- test
`-- Test.class
把它壓縮成 ZIP 文件 test.zip,則這個 ZIP 文件的內部目錄結構為:
test.zip
`-- test
`-- Test.class
如果我們使用 JDK 的 jar 命令把它打成 JAR 文件包 test.jar,則這個 JAR 文件的內部目錄結構為:
test.jar
|-- META-INF
| `-- MANIFEST.MF
`-- test
`--Test.class
2. 創建可執行的 JAR 文件包
製作一個可執行的 JAR 文件包來發布你的程序是 JAR 文件包最典型的用法。
Java 程序是由若干個 .class 文件組成的。這些 .class 文件必須根據它們所屬的包不同而分級分目錄存放;運行前需要把所有用到的包的根目錄指定給 CLASSPATH 環境變數或者 java 命令的 -cp 參數;運行時還要到控制台下去使用 java 命令來運行,如果需要直接雙擊運行必須寫 Windows 的批處理文件 (.bat) 或者 Linux 的 Shell 程序。因此,許多人說,Java 是一種方便開發者苦了用戶的程序設計語言。
其實不然,如果開發者能夠製作一個可執行的 JAR 文件包交給用戶,那麼用戶使用起來就方便了。在 Windows 下安裝 JRE (Java Runtime Environment) 的時候,安裝文件會將 .jar 文件映射給 javaw.exe 打開。那麼,對於一個可執行的 JAR 文件包,用戶只需要雙擊它就可以運行程序了,和閱讀 .chm 文檔一樣方便 (.chm 文檔默認是由 hh.exe 打開的)。那麼,現在的關鍵,就是如何來創建這個可執行的 JAR 文件包。
創建可執行的 JAR 文件包,需要使用帶 cvfm 參數的 jar 命令,同樣以上述 test 目錄為例,命令如下:
jar cvfm test.jar manifest.mf test
這里 test.jar 和 manifest.mf 兩個文件,分別是對應的參數 f 和 m,其重頭戲在 manifest.mf。因為要創建可執行的 JAR 文件包,光靠指定一個 manifest.mf 文件是不夠的,因為 MANIFEST 是 JAR 文件包的特徵,可執行的 JAR 文件包和不可執行的 JAR 文件包都包含 MANIFEST。關鍵在於可執行 JAR 文件包的 MANIFEST,其內容包含了 Main-Class 一項。這在 MANIFEST 中書寫格式如下:
Main-Class: 可執行主類全名(包含包名)
例如,假設上例中的 Test.class 是屬於 test 包的,而且是可執行的類 (定義了 public static void main(String[]) 方法),那麼這個 manifest.mf 可以編輯如下:
Main-Class: test.Test <回車>;
這個 manifest.mf 可以放在任何位置,也可以是其它的文件名,只需要有 Main-Class: test.Test 一行,且該行以一個回車符結束即可。創建了 manifest.mf 文件之後,我們的目錄結構變為:
==
|-- test
| `-- Test.class
`-- manifest.mf
這時候,需要到 test 目錄的上級目錄中去使用 jar 命令來創建 JAR 文件包。也就是在目錄樹中使用「==」表示的那個目錄中,使用如下命令:
jar cvfm test.jar manifest.mf test
之後在「==」目錄中創建了 test.jar,這個 test.jar 就是執行的 JAR 文件包。運行時只需要使用 java -jar test.jar 命令即可。
需要注意的是,創建的 JAR 文件包中需要包含完整的、與 Java 程序的包結構對應的目錄結構,就像上例一樣。而 Main-Class 指定的類,也必須是完整的、包含包路徑的類名,如上例的 test.Test;而且在沒有打成 JAR 文件包之前可以使用 java <類名>; 來運行這個類,即在上例中 java test.Test 是可以正確運行的 (當然要在 CLASSPATH 正確的情況下)。
3. jar 命令詳解
jar 是隨 JDK 安裝的,在 JDK 安裝目錄下的 bin 目錄中,Windows 下文件名為 jar.exe,Linux 下文件名為 jar。它的運行需要用到 JDK 安裝目錄下 lib 目錄中的 tools.jar 文件。不過我們除了安裝 JDK 什麼也不需要做,因為 SUN 已經幫我們做好了。我們甚至不需要將 tools.jar 放到 CLASSPATH 中。
使用不帶任何的 jar 命令我們可以看到 jar 命令的用法如下:
jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...
其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一個,它們分別表示:
-c 創建新的 JAR 文件包
-t 列出 JAR 文件包的內容列表
-x 展開 JAR 文件包的指定文件或者所有文件
-u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)
[vfm0M] 中的選項可以任選,也可以不選,它們是 jar 命令的選項參數
-v 生成詳細報告並列印到標准輸出
-f 指定 JAR 文件名,通常這個參數是必須的
-m 指定需要包含的 MANIFEST 清單文件
-0 只存儲,不壓縮,這樣產生的 JAR 文件包會比不用該參數產生的體積大,但速度更快
-M 不產生所有項的清單(MANIFEST〕文件,此參數會忽略 -m 參數
[jar-文件] 即需要生成、查看、更新或者解開的 JAR 文件包,它是 -f 參數的附屬參數
[manifest-文件] 即 MANIFEST 清單文件,它是 -m 參數的附屬參數
[-C 目錄] 表示轉到指定目錄下去執行這個 jar 命令的操作。它相當於先使用 cd 命令轉該目錄下再執行不帶 -C 參數的 jar 命令,它只能在創建和更新 JAR 文件包的時候可用。
文件名 ... 指定一個文件/目錄列表,這些文件/目錄就是要添加到 JAR 文件包中的文件/目錄。如果指定了目錄,那麼 jar 命令打包的時候會自動把該目錄中的所有文件和子目錄打入包中。
下面舉一些例子來說明 jar 命令的用法:
1) jar cf test.jar test
該命令沒有執行過程的顯示,執行結果是在當前目錄生成了 test.jar 文件。如果當前目錄已經存在 test.jar,那麼該文件將被覆蓋。
2) jar cvf test.jar test
該命令與上例中的結果相同,但是由於 v 參數的作用,顯示出了打包過程,如下:
標明清單(manifest)
增加:test/(讀入= 0) (寫出= 0)(存儲了 0%)
增加:test/Test.class(讀入= 7) (寫出= 6)(壓縮了 14%)
3) jar cvfM test.jar test
該命令與 2) 結果類似,但在生成的 test.jar 中沒有包含 META-INF/MANIFEST 文件,打包過程的信息也略有差別:
增加:test/(讀入= 0) (寫出= 0)(存儲了 0%)
增加:test/Test.class(讀入= 7) (寫出= 6)(壓縮了 14%)
4) jar cvfm test.jar manifest.mf test
運行結果與 2) 相似,顯示信息也相同,只是生成 JAR 包中的 META-INF/MANIFEST 內容不同,是包含了 manifest.mf 的內容
5) jar tf test.jar
在 test.jar 已經存在的情況下,可以查看 test.jar 中的內容,如對於 2) 和 3) 生成的 test.jar 分別應該此命令,結果如下;
對於 2)
META-INF/
META-INF/MANIFEST.MF
test/
test/Test.class
對於 3)
test/
test/Test.class
6) jar tvf test.jar
除顯示 5) 中顯示的內容外,還包括包內文件的詳細信息,如:
0 Wed Jun 19 15:39:06 GMT 2002 META-INF/
86 Wed Jun 19 15:39:06 GMT 2002 META-INF/MANIFEST.MF
0 Wed Jun 19 15:33:04 GMT 2002 test/
7 Wed Jun 19 15:33:04 GMT 2002 test/Test.class
7) jar xf test.jar
解開 test.jar 到當前目錄,不顯示任何信息,對於 2) 生成的 test.jar,解開後的目錄結構如下:
==
|-- META-INF
| `-- MANIFEST
`-- test
`--Test.class
8) jar xvf test.jar
運行結果與 7) 相同,對於解壓過程有詳細信息顯示,如:
創建:META-INF/
展開:META-INF/MANIFEST.MF
創建:test/
展開:test/Test.class
9) jar uf test.jar manifest.mf
在 test.jar 中添加了文件 manifest.mf,此使用 jar tf 來查看 test.jar 可以發現 test.jar 中比原來多了一個 manifest。這里順便提一下,如果使用 -m 參數並指定 manifest.mf 文件,那麼 manifest.mf 是作為清單文件 MANIFEST 來使用的,它的內容會被添加到 MANIFEST 中;但是,如果作為一般文件添加到 JAR 文件包中,它跟一般文件無異。
10) jar uvf test.jar manifest.mf
與 9) 結果相同,同時有詳細信息顯示,如:
增加:manifest.mf(讀入= 17) (寫出= 19)(壓縮了 -11%)
4. 關於 JAR 文件包的一些技巧
1) 使用 unzip 來解壓 JAR 文件
在介紹 JAR 文件的時候就已經說過了,JAR 文件實際上就是 ZIP 文件,所以可以使用常見的一些解壓 ZIP 文件的工具來解壓 JAR 文件,如 Windows 下的 WinZip、WinRAR 等和 Linux 下的 unzip 等。使用 WinZip 和 WinRAR 等來解壓是因為它們解壓比較直觀,方便。而使用 unzip,則是因為它解壓時可以使用 -d 參數指定目標目錄。
在解壓一個 JAR 文件的時候是不能使用 jar 的 -C 參數來指定解壓的目標的,因為 -C 參數只在創建或者更新包的時候可用。那麼需要將文件解壓到某個指定目錄下的時候就需要先將這具 JAR 文件拷貝到目標目錄下,再進行解壓,比較麻煩。如果使用 unzip,就不需要這么麻煩了,只需要指定一個 -d 參數即可。如:
unzip test.jar -d dest/
2) 使用 WinZip 或者 WinRAR 等工具創建 JAR 文件
上面提到 JAR 文件就是包含了 META-INF/MANIFEST 的 ZIP 文件,所以,只需要使用 WinZip、WinRAR 等工具創建所需要 ZIP 壓縮包,再往這個 ZIP 壓縮包中添加一個包含 MANIFEST 文件的 META-INF 目錄即可。對於使用 jar 命令的 -m 參數指定清單文件的情況,只需要將這個 MANIFEST 按需要修改即可。
3) 」META-INF「沒有具體意思,舉個例子你就懂了:使用 jar 命令創建 ZIP 文件
有些 Linux 下提供了 unzip 命令,但沒有 zip 命令,所以需要可以對 ZIP 文件進行解壓,即不能創建 ZIP 文件。如要創建一個 ZIP 文件,使用帶 -M 參數的 jar 命令即可,因為 -M 參數表示製作 JAR 包的時候不添加 MANIFEST 清單,那麼只需要在指定目標 JAR 文件的地方將 .jar 擴展名改為 .zip 擴展名,創建的就是一個不折不扣的 ZIP 文件了,如將上一節的第 3) 個例子略作改動:
jar cvfM test.zip test
B. v格式的文件用什麼打開
是pdfv,用福昕打開,是視頻的話就用迅雷播放器或者暴風影音打開
C. 手機里後綴是vf的是什麼文件
VFP 常用的文件擴展名及其關聯的文件類型
.app 生成的應用程序 .frx 報表
.exe 可執行程序 .frt 報表備注
.pjx 項目 .lbx 標簽
.pjt 項目備注 .lbt 標簽備注
.dbc 資料庫 .prg 程序
.dct 資料庫備注 .fxp 編譯後的程序
.dcx 資料庫索引 .err 編譯錯誤
.dbf 表 .mnx 菜單
.fpt 表備注 .mnt 菜單備注
.cdx 復合索引 .mpr 生成的菜單程序
.idx 單索引 .mpx 編譯後的菜單程序
.qpr 生成的查詢程序 .vcx 可視類庫
.qpx 編譯後的查詢程序 .vct 可視類庫備注
.scx 表單 .txt 文本
.sct 表單備注 .bak 備份文件
D. 視圖文件的擴展名是什麼
視圖文件的擴展名是.vue,查詢文件是.qpr。另外VF中各種文件的擴展名:
.pjx 項目
.pjt 項目備注
.dbc 資料庫
.frx 報表
.frt 報表備注
.lbx 標簽
.prg 程序
.dct 資料庫備注
.dcx 資料庫索引
.dbf 表
.fpt 表備注
.cdx 復合索引
.idx 單索引
.qpr 生成的查詢程序
.qpx 編譯後的查詢程序
.scx 表單
.sct 表單備注
.fxp 編譯後的程序
.mnx 菜單
.mpx 編譯後菜單程序
.vcx 可視類庫
(4)手機裡面vf是什麼文件擴展閱讀:
VF常用命令:
ACCEPT 把一個字元串賦給內存變數
APPEND 給資料庫文件追加記錄
APPEND FROM 從其它庫文件將記錄添加到資料庫文件中
AVERAGE 計算數值表達式的算術平均值
BROWSE 全屏幕顯示和編輯資料庫記錄
CALL 運行內存中的二進制文件
CANCEL 終止程序執行,返回圓點提示符
CASE 在多重選擇語句中,指定一個條件
CHANGE 對資料庫中的指定欄位和記錄進行編輯
CLEAR 清潔屏幕,將游標移動到屏幕左上角
CLEAR ALL 關閉所有打開的文件,釋放所有內存變數,選擇1號工作區
CLEAR FIELDS 清除用SET FIELDS TO命令建立的欄位名表
CLEAR GETS 從全屏幕READ中釋放任何當前GET語句的變數
CLEAR MEMORY 清除當前所有內存變數
CLEAR PROGRAM 清除程序緩沖區
CLEAR TYPEAHEAD 清除鍵盤緩沖區
CLOSE 關閉指定類型文件
CONTINUE 把記錄指針指到下一個滿足LOCATE命令給定條件的記錄,在LOCATE命令後出現。無LOCATE則出錯
COPY TO 將使用的資料庫文件復制另一個庫文件或文本文件
COPY FILE 復制任何類型的文件
COPY STRUCTURE EXTENED TO 當前庫文件的結構作為記錄,建立一個新的庫文件
COPY STRUCTURE TO 將正在使用的庫文件的結構復制到目的庫文件中
COUNT 計算給定范圍內指定記錄的個數
CREATE 定義一個新資料庫文件結構並將其登記到目錄中
CREATE FROM 根據庫結構文件建立一個新的庫文件
CREATE LABEL 建立並編輯一個標簽格式文件
E. vf是什麼
作為市場上最靈活和功能最強大的資料庫管理系統,Visual FoxPro擁有悠久而輝煌的發展歷史。它初創時是Fox Software公司的FoxBASE產品,「Fox」(這是國際編程界對它的稱呼)一種可靠、便捷和高效的程序員用的資料庫產品而名聞遐邇。 世界上沒有一種產品像 Visual FoxPro 那樣運行,它是獨一無二的!
許多人在享受了Visual FoxPro的服務後卻說不清它是什麼。就讓我們沿著它的發展軌跡了解了解它吧!這會使您能對它有更深刻的認識。
FoxPro隸屬於一種名為Xbase的DBMS類別。Xbase這個術語很常見,他表示諸如FoxPro、dBASEIII PLUS、dBASEIV、FoxBASE+以及ARAGO的語言。Xbase最初起源於一個大型機使用的DBMS,這個DBMS叫做JPLDIS(噴射推動實驗室資料庫管理和信息檢索系統)。這個DBMS 是由美國人Jeb Long在1972年開發成功的。到目前為止全世界的開發者和程序員已經編寫了幾千萬行的Xbase代碼。
追溯到80年代末,FoxBASE是dBase的克隆系統。只要是dBASEIII能做的工作,FoxBASE就能做得更好更快。FoxBASE雖然擁有某些全新的特徵,但它並沒有真正重大的技術突破,只是為了運行得更快更好,而更重要的是它與dBASEIII兼容。
FoxPro 1.0首先背離了與兼容的原則。它開始在圖形用戶界面的設計和軟體開發方法中採用一些新的思路,從而使它領先於當時年前景已不妙的dBASEIV。
從2.0開始,FoxPro才真正形成了它自己的特色。當FoxPro 2.0推出時,它包含了若干項關鍵技術,給PC資料庫開發市場帶來了革命性的變化。這些技術是:
加入了Rushmore技術,它能從事許多難以想像的復雜工作。突然之間,帶有以百萬計數的記錄的表格在PC資料庫系統中不僅成為可能,而且可以非常容易地加以實現,無需轉用其他比較昂貴的技術;Rushmore最重要的優點在於它是完全自動化的,不用用戶花費精力和時間。因為有了Rushmore技術,再加上Fox天生的快速,即使在今天Visual FoxPro仍然是最快的桌面資料庫引擎。
SQL語句是FoxPro 2.0推出的另一項具有革命性意義的關鍵技術。Fox的開發人員首次用單一語句取代了整個程序過程,並且這種支持是內含於Fox數據引擎之中的。SQL語言曾經並且現在仍然是強大的數據語言。
FoxPro 2.0還推出了某種所見即所得的開發報表和屏幕的工具。
FoxPro 2.0確實具備了我們今天的Visual FoxPro擁有的一些出色的功能。GUI設計服務、SQL和極快的數據訪問,是它明顯的特徵。
FoxPro 2.5有for DOS、for Windows版,不過那個Windows版只是具有看上去像「Windows」的DOS應用程序的外觀。特別是那個DOS下的版本絕對是經典之作,觀察身邊是不是還有很多這樣的系統在運行著?當時有人這樣評價:這個軟體已經無法再快了,除非硬體升級……
直到1995年春天Visual FoxPro推出時,才出現了FoxPro的又一次重大改進(這時Microsoft已經收購了Fox Software公司)。Visual FoxPro 3.0增加了一些人們企盼已久的特性,使PC資料庫開發界大為震驚。我們可以看到:Visual FoxPro與FoxPro是由很大差別的,不要再把Visual FoxPro成為FoxPro了。這些特性是:
資料庫容器(Database Container),也叫DBC,它增加了開發人員多年盼望的對存儲過程的支持、與表格相關聯的數據規則和一系列的附加數據功能。
遠程數據的無縫連接。談到連接遠程數據的處理,大家往往會想到RDO、ADO、BDE等處理數據引擎,那麼Visual FoxPro利用什麼實現遠程數據的無縫連接?Visual FoxPro本身的數據處理引擎,這和其他任何開發工具都是不同的!Visual FoxPro數據處理引擎通過ODBC驅動程序與遠程資料庫伺服器「通話」,遠程資料庫伺服器的ODBC驅動程序能將Visual FoxPro數據轉化成可由他們解釋的數據;相反,Visual FoxPro的ODBC驅動程序也能將遠程數據轉化成可由Visual FoxPro數據引擎處理的數據。可見,只要遠程資料庫有ODBC驅動程序,就可以用Visual FoxPro最為客戶端軟體。常見的SQL Server、Oracle、Access等資料庫都提供ODBC驅動程序。
在Visual FoxPro中實際操作遠程數據有兩種方法,遠程視圖和SPT技術。視圖(View)是可更新的SQL游標,增加了一整套的數據訪問方法,用於數據處理、GUI顯示和報表製作。它支持兩種類型的視圖,即本地視圖和遠程視圖。本地視圖是基於Visual FoxPro表格的視圖,遠程視圖是基於任何ODBC數據源的視圖。另外為了使Visual FoxPro成為完整的C/S開發環境,除視圖之外Visual FoxPro還支持SPT(SQL Pass Through)技術來完成視圖無法完成的工作,比如資料庫伺服器的用戶管理、存儲過程調用等。View與SPT技術的產生後,Visual FoxPro就成為訪問遠程數據的主要工具。從總體來看,創建整個企業范圍內的應用程序和使用存儲在遠程數據源中的數據,幾乎與使用Visual FoxPro表格本身一樣容易,處理在數據存取時增加了一些命令、函數,數據處理與普通的Visual FoxPro編程沒有任何區別。再次指出:Remote View與SPT技術是由Visual FoxPro數據處理引擎直接支持的,這與在VB、VC++中的外部數據訪問技術不同(他們使用組件,如:DAO、RDO、ADO……),所以用Visual FoxPro訪問遠程數據的效率很高,並能把遠程數據與本地數據完美的融合在一起,最大程度地提高開發效率和程序運行效率。
完全支持面向對象技術(OOP)。充分而健壯的實現了面向對象的處理方式大大改善了軟體開發條件。健壯的對象模型和創建你自己的類及子類的所用的功能,形成了一種全新的軟體開發手段。
Visual FoxPro 5.0是3.0的升級版本,它是一個32位的系統。具備了使用和創建COM伺服器的功能,並開始支持在Internet上發布Visual FoxPro。從這個版本開始,Visual FoxPro進入了Visual studio家族,並且Visual FoxPro將不再升級的謠言也是在這個時期出現。
在Visual FoxPro 6.0出現之前,微軟計劃推出DNA,演化到今天就是.NET,並承諾把Visual FoxPro發展成健壯的中間層工具,所以這以後Visual FoxPro的變化初級用戶就不太容易感覺了。
Visual FoxPro 6.0也沒有根本上的變化,不過有些變化還是相當明顯的。Access和Assign這兩種方法在控制放入你的對象中的數據方面很有創意。運用新的Component Gallery(組件庫)和Foundation Classes(基礎類),你能很容易地轉向創建面向對象的應用程序的工作。對COM支持的更好,在Server Pack 3後我們可以用Visual FoxPro創建多線程的COM組件。
Visual FoxPro 7是Fox第一個可視化版本——Visual FoxPro 3以後的最具有革命意義的一次產品升級換代。關於它的特性,稍候本文會有專門段落講解。
Visual FoxPro的語言是由Xbase、SQL、OOP構成的。我不知道這樣分解是否合理,我只是從FoxPro的發展歷史得出以上結論的。其實以上三者在Visual FoxPro完美的融合在一起了,已經與Visual FoxPro血脈相連、不可分割,很多語句、函數很難區分它屬於哪個門類(也沒必要)。再者Xbase這一叫法也不十分妥當,這樣容易讓人誤會,好像Visual FoxPro的語言是沒有發展的「死語言」、是十幾年前的「老古董」,其實在FoxPro每一次升級中(現在已是Visual FoxPro 7)都會對這部分語言進行修訂、增補。我看還是這樣:Visual FoxPro語言就叫它:「Visual FoxPro語言」,它既不同於任何以往的Xbase(最多有歷史淵源),也不同於其它的編程語言。這就象Delphi那樣,是Object Pascal語言,不是以前的Pascal;VB就是VB,不是以前的 Basic。
從Fox進入可視化的時代後,對COM技術的支持一直是Visual FoxPro在過去、現在、將來不斷改進的地方。面向對象程序設計(OOP)的最大的好處就在於代碼的重復使用。然而,OOP只是一種解決代碼重復使用的一種優秀的方案(solution)。單純利用OOP技術不僅要求所有對象都必須用一種語言完成,並且你還需要得到原程序代碼嵌入應用程序(就像我們在Visual FoxPro開發使用Class那樣)。如果對象是有你或你的公司完成的這些可能不是什麼問題,但如果對象是由其他人或其他公司寫的這就是問題了……再者為了節省資源我們常希望把一對象放在遠程的計算機上供許多應用程序使用,怎樣簡單、安全完成這個任務呢?看來,單有OOP是不行的!於是微軟提出了Component Object Model(COM)技術,有了它我們就不需要把對象源程序嵌入我們的應用程序中,就可以使用其他語言開發的對象,就可以分布的使用對象了。
COM技術提供四種不同的特性,Visual FoxPro支持所有的COM 特性。
ActiveX documents 允許用戶在一個應用程序中編輯另一個應用程序的document。我們把Word文檔嵌入或鏈接到Visual FoxPro中,就可以不離開Visual FoxPro編輯Word文檔了。
ActiveX controls 為開發人員提供了增加的系統功能的方法,典型的應用就是各類ActiveX控制項的使用來加強用戶界面。這里要說明的是Visual FoxPro不支持(7.0也不支持)「集裝箱式的」ActiveX 控制項,比如Cool bar控制項。
Automation 允許用戶在一個應用程序中操縱另外一個應用程序或組件,典型的應用就是Visual FoxPro 與Office 的OLE-Automation應用。
Remote Automation 或者稱 Distributed COM (DCOM)與Automation技術差不多,只是它支持組件的分布,這就是微軟的分布式應用戰略。
Visual FoxPro 不支持Active controls(ActiveX)的開發,但支持server components的開發,也就是在Automation、Remote Automation中使用的組件都可以用Visual FoxPro來開發。Visual FoxPro的這種能力是從5.0開始具有的,到了6.0的SP 3已經可以開發出多線程的組件了,這些在上文已經有過論述。以後的 Visual FoxPro 版本一定會對Automation,特別是Remote Automation有更好的支持,無論是開發server components,還是由Visual FoxPro充當客戶程序。
綜上所述,Visual FoxPro是創建關鍵任務的、企業范圍的、面向對象的單層次、雙層次、多層次應用程序的重要開發工具,這些應用程序可以在本地或全球范圍內進行配置。
Visual FoxPro 已經過時了嗎
恕我直言,這樣的問題我真的聽膩了。這個問題我聽了好幾年了。從謠言出現到今天Visual FoxPro的版本已經生了兩次變化,就是Visual FoxPro 6.0 與2001年春天推出的Visual FoxPro 7.0。根據微軟的官方消息,Visual FoxPro 8(可能是這個名稱吧)已經在研發之中了。我不敢保證是否會有Visual FoxPro 9.0(這就像我不敢保證微軟是否在那時還存在一樣)。可以這樣認為,只要不出意外情況(比如微軟倒閉、業界發生了重大的變革等),Fox就會平穩地發展!
在國外,一個程序員、一家公司把他們使用的開發工具視作一項投資,作為Visual FoxPro的開發廠商微軟公司就必須保護客戶的投資權益,這是很基本的商業原則,微軟絕對不敢隨意淘汰有著50萬用戶的Fox,除非永遠不想賺這50萬用戶的錢了。
為什麼會有Visual FoxPro 要淘汰的傳聞呢,我不是很清楚。但這兩年微軟對Visual FoxPro的不宣傳態度卻是為這股謠言起到了推波助瀾的作用。另外Visual FoxPro 確實是一個容易引起誤會的產品,初級用戶很容易對它產生「不怎麼樣的」評判,於是加上那謠言就產生了「Visual FoxPro 就真的要淘汰了」的幻覺了。
為什麼說Visual FoxPro 是容易引起誤會的產品呢?我總結以下幾點原因:
面向對象與面向過程之爭
我們說Visual FoxPro是面向對象化的語言,是有根據的。面向對象化的語言必須具備四個特性:抽象(Abstraction)、封裝(Encapsulation)、繼承(Inheritance)、多態(Polymorphism)。對照一下Visual FoxPro,是不是支持這四大特性!
當然,Visual FoxPro 與C++和Object Pascal 一樣都是歷史悠久的語言,所以語言中有很多面向過程的語素。我知道很多學校在教學中,只是教導學生們使用Visual FoxPro的面向過程的語言特色,而忽視了面向對象的教學,同樣的問題也存在於廣大的 Visual FoxPro 程序員中。我們必須明白:不能因為我們沒有使用Visual FoxPro面向對象的強大功能,而說Visual FoxPro不是面向對象的語言,這就像不能因為天下雨、沒有出太陽,而說太陽被天狗吃掉了——多麼的幼稚可笑!
我們知道Visual FoxPro對數據的操作沿用了多年來的面向過程的做法,這與現在流行的開發工具有很大的不同。我覺得,微軟這樣做是有它的道理的:
第一,面向過程的數據處理,更能發揮XBase語言體系的靈活與隨意的特色。這一點,你用過其他的資料庫開發工具,然後再用用Visual FoxPro就明白了。
第二,不直接提供面向對象的數據處理組件,不代表不允許用戶封裝自己的數據處理組件。很多優秀的 Fox程序員,都會自己封裝專門數據處理組件,這才是Visual FoxPro編程的高尚境界!
面向記錄與面向集合之爭
根據筆者的淺薄認知,關系型資料庫處理可以分為面向記錄操作和面向集合操作。
各種開發工具支持的客戶端游標體系就是面向記錄操作的,它們支持記錄之間的絕對定位,更明白地說就是可以在記錄之間導航,諸如:SKIP、GO TOP之類的語句。Visual FoxPro 無疑是此道的絕對高手,20年的語言發展,聚集了大量面向記錄的語言要素。這是因為這樣,我們才會反復強調:Visual FoxPro的Cursor 體系靈活、強大!
各類大型資料庫,如Oracle、SQL Server 是面向集合處理的代表,看看正統的SQL 語言,絕對沒有數據導航之說,數據記錄之間是平等的,一切都要講關系、擺條件!
隨著技術的發展,人們開始注意到,不能分割這兩種對數據的操作方式,於是大型資料庫支持了游標語素,Fox也支持符合規范的SQL 語言。
產品定位導致Visual FoxPro變化不易為人們感覺。微軟要把Visual FoxPro作為三層構架(或是多層構架)的中間層開發工具。
什麼是三層構架呢?第一層是用戶界面:它包含了用戶界面,讓使用者輸入,輸出,查詢等工作;第三層是資料層:它就是用來放資料的地方,一般是指後端資料庫,主要有包括 Oracle、SQL Server 等,它主要是提供一個很大的地方,來有規則的存放數據;第二層是商務邏輯層(中間層):有人要說了:存取資料,直接從第一層跳到第二層可不可以?當然可以,沒有人規定不能走捷徑,而且從資料庫直接抓資料,既快又好,那為什麼搞出個第二層呢?
商務規則是經常變化的,比如上班從8 點改為10 點,那電腦怎那麼知道老闆因為不景氣少讓大家上二個小時班呢?它一定無法知道,你必須告訴它,這時問題就來了,如果你有很多部電腦,例如:100 台,你就得一部部換新程序。如果這是一個掛在Internet上的網路程序,難道總讓用戶download新程序不成?
更重要的是,在大量客戶存在的環境里,傳統的兩層構架根本沒有能力承擔巨大的工作壓力,必須通過某種中間系統實現壓力平衡,這就是中間層的另一妙用!
中間層是沒有圖形界面設計的代碼編寫,並且是OOP方式的代碼編寫,不僅要熟悉後台資料庫的特性,還要考慮前台界面工具的特性,最重要的是商務邏輯的構架,同時還要求懂得IIS、MTS(COM+)、NT的安全設置等復雜枯燥的東西。有趣的是,近年來 Visual FoxPro 的各種改進,更多的是在這些方面下功夫,到了最新版本的Visual FoxPro 7 更是在此方面增加了若干特性,下面就讓我用四個問題來說明Visual FoxPro 在開發中間層方面的貢獻:
問題一:Visual FoxPro能開發出穩定、有效率的Server程序嗎?能,在1999年發布的Visual FoxPro SP 3中微軟賦予了Visual FoxPro開發多線程進程的內組件的能力,並增加了新的運行時刻庫VFPnT.DLL(n代表版本號),支持其運行,在這個運行庫中,刪除了大量老式的和界面控制元素,使得它更小巧。但是由於Visual FoxPro6本身不是很穩定(加打SP4或SP5才有所改善),所以這個很棒的功能在Visual FoxPro 6下並不能充分發揮,直到Visual FoxPro 7出現才使它的顯示出英雄本色!
問題二:分布式的事務、動態負載平衡怎麼實現?Visual FoxPro 7對COM+有很好的支持,藉由COM+就可以解決這兩個問題了!
問題三:作為Server程序,客戶程序怎樣與Server交換數據集合?這是Visual FoxPro 6開發的Server程序的致命弱點,我們知道Visual FoxPro是用來處理數據的,但不能與外界自由交換數據集合會大大降低開發、使用以及程序運行效率!在Visual FoxPro 7里我們XML就可以快速、輕易的傳遞大型數據集合,真正做到數據集的來去自由。現在回想Visual FoxPro 6中我們用的那種「循環+屬性」的做法,真有天上與人間的感受!
問題四:能不能讓Visual FoxPro開發的Server任由客戶使用,叫干什麼就干什麼?可以的,在Visual FoxPro 7里提供了一個全新的函數:ExecScript()。有了它,就可以一次執行多條客戶端送來的符合Visual FoxPro規范的語句:你可以定義變數、做查詢、更新數據、修改表結構……
微軟確實實踐著讓Visual FoxPro在中間層運行的承諾。但遺憾的是:由於國內用戶的水平、國內軟體應用的領域,對大多數Fox Fans 無法感受Visual FoxPro日新月異的變化——對他們來說,Visual FoxPro確實「沒有改變」!
Visual FoxPro 只能局限於桌面應用程序的開發嗎?
技術在進步,軟體技術的應用不斷在拓寬,Internet 已經是眾多開發工具競相支持的應用領域。Visual FoxPro 從版本 5 開始不斷擴充對Internet的支持,到最新的Visual FoxPro 7 更是增加了對Web Service的支持。我們可以把Visual FoxPro 對Internet的支持分為三大部分:
第一,簡單的HTML的轉換。Visual FoxPro 自帶的「Web 發布」就是這類型的工具,利用HTML和DHTML的模版,支持Visual FoxPro數據的Web化,這是一種全靜態的 Web 支持。
第二,適合於企業內部使用的 Active Document 技術。是不是希望快速、簡單的把Visual FoxPro應用程序轉變為Web 應用程序,這個Active Document 技術就是最佳的選擇。它支持 App 程序運行在IE中,它的缺點是:在客戶端必須安裝Visual FoxPro的運行庫、客戶端與資料庫間依然是緊密的有狀態的關系,屬於F/S構架——只是界面能夠運行在IE之中了。它的開發快速以及它依然基於傳統構架,決定了這個技術只能運行在企業內部,一般不能在廣域網路中發布。
這技術是Visual FoxPro 6提出的,當時在 Tool 菜單里還有一個專門的菜單項。到了而今的Visual FoxPro 7,這個菜單項已經取消了,但並不是說Visual FoxPro 7 不支持Active Document,只是這種並不出色的技術沒有必要再放在醒目的位置了。
第三,基於COM 的 Web 應用。
Visual FoxPro 真正能被用於Web 開發,就是通過 COM 支持的。
這里您要有個認識,作為資料庫開發工具,Visual FoxPro 不是FronPage這樣的用於開發Web 界面的工具(也許未來的 Visual FoxPro 會支持 Web 界面的開發)。Visual FoxPro 完全是作為 Server 運行在網站的後台,為各種應用提供服務。使用 Visual FoxPro 編寫的 COM 組件能夠被IIS支持,壓在後台進行各種運作——這就是真正意義上的Visual FoxPro 的Web應用,也是典型的多層構架的中間層!
這個階段,Visual FoxPro 對 Web的支持有可以劃分為三個層次:
FoxISAPI。
這是最先登場的技術,當年 ASP 技術還沒有出現的時候,我們在 IIS 里就可以通過 ISAPI 技術實現動態網頁開發。
Web Server
ASP 技術出現了,我們知道 ASP 技術的一大特色就是支持伺服器端的組件的應用。用 Visual FoxPro 的編寫的 COM 組件就能運行在 IIS 里,供 ASP 調用。
Web Service
這是 Visual FoxPro 7 的新特性,也是當前最熱門的技術。它與Web Service的最大不同就是:Web Server 組件只能通過 ASP 程序調用,而Web Service可以供任何系統在全球范圍調用,無論客戶端的硬體平台、軟體平台,只要它支持SOAP、支持XML就可以了。
更誇張一點說:只要能上網,就可以享用 Web Service 提供的服務!
有人也許會問:我可以用VB、VC++建立對象組件時,為何我要用Visual FoxPro 來建立相同的組件? 微軟對這一問題有專門的評論,大意為:快、重復使用性、跨語言重復使用性。「快」是指用Visual FoxPro開發的組件擷取、處理資料都極為迅速,並且Visual FoxPro能夠非常迅速的建立字元串。到底有多快,我想數據處理、存取的速度大家平時都領教過了,字元串生成速度我這里有個數據不妨一看,這是台灣的一位高手做的試驗——將1M的數據寫入文本中,結果VC++ 6.0程序用了3.5秒、VB 6.0程序用了11秒、Java 1.1.5用了24秒、Visual FoxPro 6.0用了7秒;「重復使用性」是指Visual FoxPro具備OOP的功能;「跨語言重復使用性」是指Visual FoxPro編寫的對象編譯以後成為COM、COM+對象組件,這樣就可以在其他語言中使用它了。
不要以為Visual FoxPro是「低端產品",無論從資料庫(DBF Base)品質還是開發環境評價Visual FoxPro,它都是一個「高端工具」。
許多人認為Visual FoxPro只能用來開發單用戶系統或是文件伺服器構架的小型網路系統——這是謬誤——這種無知的言論在許多講C/S、三層構架的書中都有(特別是一些VB、PB、Delphi的資料庫編程書)。我可以很負責任的告訴大家完全可以用Visual FoxPro開發C/S結構的系統。這里說的C/S構架絕對是正宗的,不是用什麼F/S構架在糊弄大家。在C/S構架中我們常常選擇Visual FoxPro作為客戶端開發工具,以Oracle、SQL Server等網路資料庫壓在後台,使用Visual FoxPro內置的Remote View和SPT技術,這樣就可以完美地解決問題。這里不能詳細展開,只特別介紹Visual FoxPro的本地引擎在開發中的作用。Visual FoxPro的本地引擎特別強大(上文我們說過處理百萬條記錄不費吹灰之力),我們在設計系統時可以十分簡單的將遠程數據與本地數據結合,很簡單、很有效地控制網路數據流量、提高系統工作效率(我看過不少VB、Delphi、PB的書,他們很少在怎樣控制網路數據流量、提高系統工作效率論述,不知是不屑一顧,還是其他什麼原因)。
我認為Visual FoxPro的本地引擎在C/S構架下起碼有三項偉大的用途。其一:非經常變動數據的本地存儲。我國的郵政編碼與地區的關系是相對穩定的數據,而且數據量也不是太小,我想總有上千個記錄(我沒仔細考察過具體情況),我們把這些信息存儲在客戶端的計算機中,就可以在使用郵政編碼及其相關信息時從本地得到數據,這樣能使高系統效率同時節省網路資源(這是C/S開發的重要原則),只在郵政編碼發生變化時在伺服器上統一更新,下載更新客戶機上的數據。如果用別的軟體實現同樣的功能,絕對比Visual FoxPro麻煩而且效果絕對不及Visual FoxPro,這因為Visual FoxPro的數據引擎直接支持遠程數據讀取,能很好的融合本地數據與遠程數據;其二:離線數據包。單位里總有人出差,在千萬里路之外能不能拿著筆記本為客戶發訂單、與客戶簽合同,就像在自己的辦公室一樣?當他回到公司時只要把筆記本連到伺服器中,發送更新就行了。Visual FoxPro的離線視圖是經濟且高效安全的方案(當然您可以使用遠程撥入或建一個Web網站,這些Visual FoxPro可能幹)。其實離線數據包還有一個重要的功能:當下載的數據是大量的(除非萬不得已請不要這樣設計系統),這種情況下使用離線視圖可以數據集自動轉化為物理表,充分利用Visual FoxPro的高速與靈活,完成後連線更新後端數據源——一切都很簡單。我認為:離線視圖絕對是Visual FoxPro在C/S系統中的一個賣點,雖然ADO也支持類似的東西,但肯定不及Visual FoxPro有效率;其三:數據驅動。您是否知道,Visual FoxPro中絕大多數文件格式實際上都是DBF文件,如DBC、SCX、FRX等,他們都可以由Visual FoxPro的本地引擎驅動完成復雜的任務。在設計C/S結構時如果要存儲用戶設置、自定義文件格式,用Visual FoxPro的本地引擎幫忙絕對比其他軟體簡單,因為你用的是換湯不換葯的方法,但它簡單、有效率。
Visual FoxPro 開發C/S系統時,最與眾不同的特色就是對遠程數據的操控是通過本地資料庫來實現的,Remote View、Connection都作為本地資料庫的對象被管理起來,完美的銜接本地數據與遠程數據。這種在客戶端建立遠程數據邏輯的做法,與最新的ADO.NET有相似之處!
在三層構架中,Visual FoxPro可以充當任意一層的任務,但本人以為大中型系統的資料庫部分應以網路資料庫為主。客戶端界面用Visual FoxPro也是可以的,但一般限於企業內部,在Internet上我們通常使用IE作為客戶界面。在三層構架中Visual FoxPro最勝任中間層的開發,它簡單(開發難度與普通的Visual FoxPro項目相差不大)、快速的字元串生成、支持COM技術、它支持(MTS)COM+技術、它支持XML(Visual FoxPro 7.0提供3個與XML有關的函數)、它具有強大本地數據引擎、靈活的數據處理方式、它支持多線程的服務組件的開發。
可能有人要問:用ASP+腳本語言一樣可以開發Web系統,何必加個中間層。的確,目前在市面上與多討論Web的書都直接使用腳本語言來開發整個系統,這是十分不正確的做法,甚至有寫書還說硬體越來越快,因此使用腳本語言來開發整個系統並沒有什麼關系。會說出這樣話的作者通常都是沒有實際開發Web應用經驗的人。腳本語言,如VBScript是一種解釋性語言,運行效率很低,他們只合適作為膠水程序。開發Web系統正統的做法是:把應用邏輯編寫成COM、DCOM對象,然後用少量的腳本語言來驅動/使用這些對象。這樣系統開發時工作量會大一些,但它符合開發任何數