1.標(biāo)準(zhǔn)集成:XML、SOAP及其它
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),陵水黎族企業(yè)網(wǎng)站建設(shè),陵水黎族品牌網(wǎng)站建設(shè),網(wǎng)站定制,陵水黎族網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,陵水黎族網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
過去,微軟的體系結(jié)構(gòu)建立在COM/DCOM基礎(chǔ)上,COM/DCOM是進(jìn)程間通信的二進(jìn)制標(biāo)準(zhǔn)。雖然這個(gè)標(biāo)準(zhǔn)本身沒有什么失誤,但是它與微軟以外的領(lǐng)域格格不入。也就是說,這個(gè)標(biāo)準(zhǔn)成了實(shí)現(xiàn)與其它軟件平臺(tái)互操作的瓶頸。
除此之外,數(shù)據(jù)也是一個(gè)問題。雖然ADO簡(jiǎn)化了數(shù)據(jù)訪問,但是把數(shù)據(jù)從一個(gè)地方傳送到另外一個(gè)地方就成了問題。ADO Recordset(記錄集)對(duì)象是一個(gè)存儲(chǔ)了數(shù)據(jù)的二進(jìn)制結(jié)構(gòu),而這種二進(jìn)制格式對(duì)于非微軟的平臺(tái)沒有任何意義。
.Net彌補(bǔ)了這些缺陷,因?yàn)樗耆跇?biāo)準(zhǔn)。比如,數(shù)據(jù)用XML的格式通過進(jìn)程邊界,而這個(gè)數(shù)據(jù)有一個(gè)到XSD的連接,所以任何客戶端都可以正確地轉(zhuǎn)化數(shù)據(jù)。
SOAP基于XML,用于與Web服務(wù)的通信。集成SOAP以后,不管客戶端運(yùn)行的是不是微軟的操作系統(tǒng),都可以實(shí)現(xiàn)簡(jiǎn)單的可編程訪問。
2.簡(jiǎn)化應(yīng)用
COM所面臨的一個(gè)頭痛的問題就是應(yīng)用。COM利用Windows注冊(cè)表來定位機(jī)器上的組件。這個(gè)想法是不錯(cuò)的:每個(gè)注冊(cè)的組件只有一個(gè)實(shí)例,所有的應(yīng)用程序都使用相同的版本。COM具有向后兼容性,也就是說新版本兼容老版本,但是開發(fā)人員可能會(huì)破壞這種兼容性。
.Net則采用了不同的方法:它根本就沒有使用注冊(cè)表。相反,微軟的建議是每個(gè)應(yīng)用程序使用自己局部的組件(在.Net稱為“assembly”)。利用這種方法,用于應(yīng)用程序Foo的Assembly X如果發(fā)生變化,Assembly X的Application Bar不會(huì)受到任何影響。這種方法聽起來好象以前一臺(tái)機(jī)器上同一個(gè)DLL的多個(gè)拷貝,的確是這樣。不過你不會(huì)遇到應(yīng)用程序查找Windows\System32目錄的問題。
由于.Net不使用注冊(cè)表,很多應(yīng)用都可以用簡(jiǎn)單的拷貝命令來完成,通常沒有必要開發(fā)安裝程序。此外,應(yīng)用程序不會(huì)瑣定assembly,所以升級(jí)DLL的時(shí)候不必關(guān)閉應(yīng)用程序。
3.Web服務(wù)支持
在流行的Web服務(wù)方面,微軟發(fā)揮著重要的作用,而.Net為開發(fā)Web服務(wù)帶來了前所未有的便利。用Notepad就可以建立簡(jiǎn)單的Web服務(wù),甚至不必利用編譯器,只要對(duì)它們進(jìn)行簡(jiǎn)單的調(diào)用即可,因?yàn)?Net會(huì)對(duì)它們進(jìn)行編譯,甚至提供一個(gè)測(cè)試頁供用戶檢驗(yàn)其功能。.Net 擁有所有必需的渠道,可以生成用戶所需的所有文件,比如WSDL文件。
.Net也是一個(gè)聰明的Web服務(wù)使用者:只要設(shè)置了指向某個(gè)Web服務(wù)的索引,你就可以把它當(dāng)作本地的assembly。你可以獲得完整的Intel許可和功能實(shí)現(xiàn)幫助。
Web服務(wù)對(duì)于發(fā)送數(shù)據(jù)是非常重要的,感謝ADO.Net,Web服務(wù)可以利用簡(jiǎn)單或者復(fù)雜的數(shù)據(jù),并以XML格式把它們發(fā)送到任何客戶端,最后設(shè)置一個(gè)鏈接,指回到一個(gè)描述數(shù)據(jù)模式的XSD。
4.用于所有.Net語言的標(biāo)準(zhǔn)工具集
最終,你會(huì)擁有一個(gè)適用于所有語言的集成工具集。你會(huì)擁有一個(gè)統(tǒng)一的IDE、調(diào)試工具以及其它類似的工具。因此,其它公司可以把他們的語言嵌入IDE環(huán)境,并獲得.Net工具所有的支持。比如富士通開發(fā)了netCOBOL .Net,它已經(jīng)直接集成到IDE中,因此可以用 COBOL編寫Web服務(wù)和Windows應(yīng)用并獲得微軟提供的調(diào)試和profiling(監(jiān)管)工具。
.Net是個(gè)開放的架構(gòu),所以其它廠商也可以提供自己的工具。比如Borland,該公司已經(jīng)宣布其下一版Delphi將具有建立.Net應(yīng)用的功能,同時(shí)它也保證,Delphi會(huì)擁有自己的IDE,不會(huì)嵌入Visual Studio .Net。
5.對(duì)移動(dòng)設(shè)備的支持
Visual Studio .Net發(fā)布不久,微軟就推出了移動(dòng)Internet工具包(Microsoft Mobile Internet Toolkit ,MMIT),以便用.Net構(gòu)建移動(dòng)應(yīng)用。該工具包提供了可視化功能,你可以直觀地拖動(dòng)和下拉面向移動(dòng)設(shè)備的窗體和控件。該工具包有利于正確書寫標(biāo)記語言(比如WML、WAP等等)。
.Net簡(jiǎn)化架構(gòu)(.Net Compact Framework)不久就會(huì)面市,它是.Net架構(gòu)的縮略版,設(shè)計(jì)用于Pocket PC設(shè)備。有了這個(gè)架構(gòu),開發(fā)人員就可以開發(fā)出豐富的Pocket PC計(jì)算機(jī)應(yīng)用。你可以編寫一個(gè)運(yùn)行于小型設(shè)備上的應(yīng)用,比如用于Pocket PC設(shè)備或者具有Web功能的手機(jī)。事實(shí)上,MMIT包含了很多仿真程序,它們使用了真正為這類設(shè)備編寫的ROM代碼,所以在你的應(yīng)用程序投入使用之前,可以首先測(cè)試其用于此類設(shè)備時(shí)的性能。
6.代碼管理
.Net管理用戶的代碼,從很多方面看,這一點(diǎn)都是很重要的,比如減少bug以及構(gòu)建更多可擴(kuò)展的應(yīng)用。.Net可以處理以下操作:內(nèi)存分配和回收,進(jìn)程及線程的創(chuàng)建和終止,以及運(yùn)行代碼的訪問許可。
VB開發(fā)人員先前面臨的問題——比如內(nèi)存管理、線程和進(jìn)程創(chuàng)建——現(xiàn)在都可以由.Net來處理。而C++程序員可以轉(zhuǎn)向C#,.Net代替他們處理這些操作后,內(nèi)存泄露和其它bug出現(xiàn)的可能性將大大減少。擁有了被管理的代碼,你可以訪問.Net所有跨語言的能力。
7.平臺(tái)獨(dú)立
雖然.Net是為微軟的操作系統(tǒng)創(chuàng)建的,但是微軟的確為ECMA標(biāo)準(zhǔn)委員會(huì)發(fā)布了一部分框架和C#。比如,Mono project實(shí)現(xiàn)了Linux的.Net,包括架構(gòu)和C#編譯器。這意味著很多應(yīng)用(特別是基于Web的應(yīng)用)一次編寫完成后就可以運(yùn)行于多種平臺(tái)上。
8.充足的學(xué)習(xí)資源
.Net的學(xué)習(xí)曲線非常重要,可能.Net的方面的書要比其它所有編程技術(shù)的書都多。此外,微軟和第三方團(tuán)體開設(shè)了很多課程,可以讓開發(fā)人員很快就上手。最后,很多網(wǎng)站為開發(fā)人員員學(xué)習(xí).Net提供了技術(shù)和指導(dǎo)。
9.現(xiàn)代化語言
VB.Net和C#都是現(xiàn)代化的語言。它們完全是面向?qū)ο蟮模O(shè)計(jì)的時(shí)候消除了很多VB 和C++的矛盾。這兩種語言使用了多層式架構(gòu) (n-tier),這是一種基于組件的方法。
比如,C#取消了指針和其它一些結(jié)構(gòu),它們?cè)?jīng)給C++程序員(特別是新手)帶來很多嚴(yán)重的問題。代碼由.Net架構(gòu)管理后,VB.Net 和C#都從中受益。這個(gè)架構(gòu)還包括一些基礎(chǔ)的對(duì)象,它們是開發(fā)多線程、支持XML等應(yīng)用所必須的。
10.跨語言標(biāo)準(zhǔn)基本類型
VB開發(fā)人員曾經(jīng)面臨一個(gè)致命的問題:VB中的字符串與C++中的字符串不同,所以調(diào)用Windows API函數(shù)的時(shí)候會(huì)出現(xiàn)一些問題。.Net確定了所有類型的標(biāo)準(zhǔn)定義,所以VB中的字符串和C#中的字符串相同,也和netCOBOL .Net中的字符串相同。這意味著你再也不必?fù)?dān)心語言A中的整型數(shù)據(jù)是32位而語言B中只有16位。你可以確信不同語言的數(shù)據(jù)類型都相同,可以更好地進(jìn)行跨語言集成。
優(yōu)點(diǎn)多于缺點(diǎn)
.Net具有很多明顯的優(yōu)點(diǎn),可以提高開發(fā)人員的效率,減少bug,加快應(yīng)用開發(fā)并簡(jiǎn)化使用。IT人員對(duì).Net保持了應(yīng)有的警惕,因?yàn)樗吘惯€是個(gè)新事物,需要有一個(gè)比較艱難的學(xué)習(xí)曲線。但是對(duì)于大多數(shù)組織而言,其優(yōu)點(diǎn)遠(yuǎn)遠(yuǎn)多于缺點(diǎn)。有了.Net,你可以在未來的開發(fā)項(xiàng)目中贏得更高的生產(chǎn)力。
在還有很多詳細(xì)的講解和回答。。
目前,最優(yōu)的選擇有四個(gè):
1.如果只在win下使用,.net form是不二選擇,可謂是又快又好,企業(yè)應(yīng)用或定制開發(fā)都是相當(dāng)好的,初學(xué)者也可以入手。
2.electron,跨平臺(tái)。需要會(huì)前端,必須熟悉js、css和html。屬于前端人員大殺器,如果是初學(xué)者,需要一下子學(xué)三樣?xùn)|西,再加上electron的進(jìn)程間通信,可能會(huì)被搞懵。
3. qt5,可以使用qml(js語法)進(jìn)行UI編程,但是需要懂c艸,但是寫軟件相當(dāng)快,還可以寫安卓、ios、Linux、嵌入式中的應(yīng)用。
4.flutter,剛剛正式支持win平臺(tái)的軟件開發(fā)。谷歌出的這個(gè)東西,適合沒有基礎(chǔ)的初學(xué)者,因?yàn)槭且粋€(gè)全新的體系,全新的語言,寫ios、安卓非常高效,之后還會(huì)兼容h5。如果是初學(xué)者可以跟著走,值得嘗試。但是新東西總有一些坑。
正式項(xiàng)目跨平臺(tái)建議electron或qt,只用win平臺(tái)強(qiáng)烈建議微軟自己的net。個(gè)人技術(shù)嘗試建議flutter。
桌面端開發(fā)跨平臺(tái)的,如果你是輕量級(jí)的項(xiàng)目,那么我推薦你用electron, 目前使用Electron來開發(fā)的桌面應(yīng)用非常多,我們最熟悉的比如Atom,VScode等等。
而且在github上也能找到許多應(yīng)用使用了electron。
electron是Node,Chromium,html,css,js的結(jié)合框架,這就需要你有一定的前端基礎(chǔ)。其實(shí)只需要了解一下electron的API就行了,其他的就像你在做web是一樣的。
這種方式最大的缺點(diǎn)就是性能,還有透明窗口也有問題。所以在做需要性能方面占有很大成分的項(xiàng)目時(shí),并不推薦使用這個(gè)方式。
那么其他的,就是最近幾年使用比較多的windows directui框架,但它不是跨平臺(tái)的。
那么就引出了qt,作為c++跨平臺(tái)的界面框架,這個(gè)上手的話,我覺得對(duì)一般人是有難度的,因?yàn)槭紫刃枰鷮?shí)的c++功底,其次你要熟悉控件的制作原理,因?yàn)橛袝r(shí)候你需要定制自己的UI控件。它現(xiàn)在在嵌入式,軍工領(lǐng)域非常受歡迎。但是整個(gè)庫(kù)非常臃腫龐大,而且開發(fā)界面的效率也非常低。如果來做互聯(lián)網(wǎng)項(xiàng)目,迭代更新的速度根本就跟不上。
目前都只有大公司會(huì)采用,像maya這種生產(chǎn)力型的應(yīng)用很多是qt做的。
還有一種是直接使用Cef加js,比如網(wǎng)易云音樂,就是這么搞的,但是很多和系統(tǒng)平臺(tái)的交互接口你需要重寫,等于是需要自己造輪子。工作量大,目前沒有適合的框架給你套用,也需要扎實(shí)的c++功底。
其實(shí)pc端的應(yīng)用基本也就windows會(huì)火一些,再加一個(gè)macos,那么選擇qt應(yīng)該會(huì)很好一點(diǎn),畢竟你自己造一個(gè)跨平臺(tái)的框架,太費(fèi)時(shí)??傊?,做跨平臺(tái)就意味著,不可能做到既有效率又完美的實(shí)現(xiàn)各種功能,許多都要自己摸索。
win桌面端直接上visual studio啊!然后你熟悉什么語言?vb.net,c#,c++都有相應(yīng)的win桌面工具。直接用就好了,非常好用
編程語言這種東西無所謂,只要能用啥都可以。 主要看你老板需要和你會(huì)用什么語言。
比如 我用AS編安卓程序,當(dāng)然用JAVA。不過我后臺(tái)最開始用ASP和ASP.NET來做,現(xiàn)在換PHP了。桌面端用QT或者VB做。 涉及單片機(jī)部分控制也用C。
現(xiàn)在做跨平臺(tái)的了 開始以QT為主了。
只要能達(dá)到目的啥都可以。
學(xué)會(huì)1-2種 換其他的也不是很難。
對(duì)初學(xué)者來建議學(xué)C起步吧。
精通一門,重新學(xué)個(gè)語言入門也就1個(gè)月的事。
PC桌面程序,如果簡(jiǎn)單一點(diǎn)的,用pyqt5+python的開發(fā)難度和周期都比較現(xiàn)實(shí)一點(diǎn)
會(huì)C++ 用Qt5 非常不錯(cuò) 寫代碼效率很高
會(huì)js 用atom使用的那個(gè)框架
會(huì)Python用PyQt 寫代碼很快
會(huì)java用JavaFX
看語言咯
還可以用delphi,其firemonkey框架發(fā)布8年時(shí)間,支持跨平臺(tái):win,安卓,ios,macos,linux,后續(xù)支持webassembly,界面是控件拖拽布局所見即所得,開發(fā)效率較高。編譯生成的是機(jī)器碼,編譯速度快,調(diào)試方便,其生成機(jī)器碼運(yùn)行效率較高,支持x86,arm的32位64位處理器。支持跨平臺(tái)3D界面,藍(lán)牙通訊,定位,重力,攝像等,支持多種SQL,NoSQL數(shù)據(jù)庫(kù)。單個(gè)開發(fā)工具實(shí)現(xiàn)前后端開發(fā),跨平臺(tái)開發(fā)。適合個(gè)人和小公司用一套工具實(shí)現(xiàn)大部分開發(fā)需求。
主要有以下幾種技術(shù)
### Duilib
#### 簡(jiǎn)述
Duilib是在Windows平臺(tái)上使用最廣泛的類庫(kù),使用C++和XML混合編程,國(guó)內(nèi)很多計(jì)算機(jī)企業(yè)都喜歡使用這個(gè)類庫(kù),可能是由于他的技術(shù)許可比較寬泛的原因。
適合于界面比較簡(jiǎn)單的軟件,視覺特效豐富,局限于Windows的平臺(tái)。例子:360電腦管家。
#### 優(yōu)勢(shì)
#### 劣勢(shì)
### Gtk、Qt或WxWidget:
#### 簡(jiǎn)述
三種基本可以做到跨平臺(tái)的技術(shù),使用C/C++開發(fā),使用者廣泛。其中WxWidget使用了API嫁接方式,Qt和Gtk(包括各種綁定技術(shù))使用自繪技術(shù)。
結(jié)構(gòu)嚴(yán)謹(jǐn),軟件可以做的很大很復(fù)雜。例子:WPS和Maya。
#### 優(yōu)勢(shì)
#### 劣勢(shì)
### Electron:
#### 簡(jiǎn)介
使用Web技術(shù)開發(fā)桌面軟件,基于Chromium(Chrome)引擎,使用JS編程語言,絕大多數(shù)使用者都是原來的網(wǎng)頁開發(fā)者。
絕大多數(shù)都是愛好者使用,處于“勉強(qiáng)可用”的地步。
適合大面積靜態(tài)展示型軟件使用。例子:網(wǎng)易云音樂。
#### 優(yōu)勢(shì)
#### 劣勢(shì)
### QtQuick(QML)
#### 簡(jiǎn)述
Qt公司開發(fā)的一款基于OpenGL的圖形類庫(kù),有顯卡加速,類似于Duilib。采用了C++與QML混合編程。QML類似于JavaScript語言。
QtQuick下一個(gè)版本在Qt 6上更加強(qiáng)大,業(yè)界期待已久。
#### 優(yōu)勢(shì)
#### 劣勢(shì)
### Atk、Swing或JavaFX
使用Java語言開發(fā)軟件,有JDK加持業(yè)界積累的眾多Java類庫(kù)支持。有不輸于VS的IDEA加持,本應(yīng)該更棒,只是現(xiàn)在已經(jīng)式微了。
絕大多數(shù)使用者都是企業(yè)開發(fā)(不追求界面美觀)、愛好者(開發(fā)順手)。
### WinForm、WPF或Xamarin:
使用C#開發(fā),WinForm和WPF局限于Windows平臺(tái)。有VisualStudio加持使用很爽。
### Flutter:
使用Dart語言,新類庫(kù),bug可能會(huì)很多。
### SwiftUI或Cocoa:
蘋果平臺(tái)原生界面技術(shù),macOS平臺(tái)內(nèi)建支持,不是macOS專用軟件不推薦。
### Win32:
經(jīng)典Windows 平臺(tái)API,絕大多數(shù)只有一些老軟件還在使用,不是維護(hù)老軟件不推薦。
winform,不二選擇
webview2,作為一個(gè)瀏覽器控件嵌入在桌面應(yīng)用中,支持.net core和.net framework
1.Java 是 簡(jiǎn) 單 的
Java 與 C++ 極 為 相 似, 但 卻 簡(jiǎn) 單 得 多。 高 級(jí) 編 程 語 言 的 所 有 特 性 中,
不 是 絕 對(duì) 需 要 的 都 已 刪 去 了。 例 如, Java 沒 有 算 符 過 載、 標(biāo) 題 文 件、
預(yù) 處 理、 指 針 運(yùn) 算、 結(jié) 構(gòu)、 聯(lián) 合、 多 維 數(shù) 組、 模 板 及 隱 式 類 型 變 換。 如
果 你 知 道 一 點(diǎn) C、 C++ 或 Pascal, 你 很 快 就 會(huì) 駕 馭 Java。 這 里 是 一 個(gè) 簡(jiǎn) 單 的 Java Hello World 程 序:
public class HelloInternet {
public static void main(String argv[]) {
System.out.println(“Hello In-ternet!”)
}
}
2.Java 是 面 向 對(duì) 象 的
Java 是 一 種 面 向 對(duì) 象 的 編 程 語 言。 除 了 簡(jiǎn) 單 的 類 型, 如 數(shù) 字 和 布 爾 算
子 之 外, Java 中 的 大 部 分 都 是 對(duì) 象。
正 如 任 何 面 向 對(duì) 象 的 語 言 一 樣, Java 代 碼 也 按 類 組 織。 每 個(gè) 類 定 義 一
組 規(guī) 定 對(duì) 象 行 為 的 方 法。 一 個(gè) 類 可 以 繼 承 另 一 個(gè) 類 的 行 為。 在 類 的
根 層 次 上, 通 常 是 類 對(duì) 象。
Java 支 持 單 繼 承 類 層 次 結(jié) 構(gòu)。 這 就 是 說, 每 個(gè) 類 一 次 只 能 繼 承 一 個(gè) 別
的 類。 有 些 語 言 允 許 多 繼 承 性, 但 這 可 能 造 成 混 亂, 使 語 言 不 必 要 地
復(fù) 雜 化。 例 如, 難 以 想 像, 一 個(gè) 對(duì) 象 會(huì) 繼 承 兩 個(gè) 完 全 不 同 的 類 的 行
為。
Java 還 支 持 摘 要 類 的 接 口。 這 允 許 編 程 人 員 先 定 義 接 口 的 方 法, 而 不
必 急 于 馬 上 確 定 方 法 的 實(shí) 現(xiàn)。 一 個(gè) 類 可 以 施 行 多 個(gè) 接 口, 從 而 具 有
真 正 多 繼 承 性 的 許 多 優(yōu) 點(diǎn)。 一 個(gè) 對(duì) 象 也 可 實(shí) 施 任 意 數(shù) 量 的 接 口。 Java
接 口 與 IDL 接 口 極 其 相 似。 很 容 易 建 立 IDLJ 編 譯 器。 這 就 是 說, Java 可
用 于 CORBA 對(duì) 象 系 統(tǒng) 來 建 立 分 布 式 對(duì) 象 系 統(tǒng)。 鑒 于 在 許 多 計(jì) 算 機(jī) 系 統(tǒng)
中 都 采 用 IDL 接 口 和 CORBA 對(duì) 象 系 統(tǒng), 這 種 兼 容 性 是 重 要 的。
3.Java 是 靜 態(tài) 類 型 的
在 一 個(gè) Java 程 序 中, 必 須 定 義 所 用 對(duì) 象 (數(shù) 字、 字 符、 數(shù) 組 等) 的 類 型。
這 有 助 于 編 程 人 員 很 快 發(fā) 現(xiàn) 問 題, 因 為 當(dāng) 程 序 編 譯 時(shí) 可 以 檢 測(cè) 類 型
錯(cuò) 誤。
不 過, Java 系 統(tǒng) 中 的 對(duì) 象 也 有 動(dòng) 態(tài) 類 型。 要 求 一 個(gè) 對(duì) 象 為 動(dòng) 態(tài) 類 型 往
往 是 可 能 的, 所 以 編 程 人 員 寫 的 程 序 可 以 對(duì) 不 同 類 型 的 對(duì) 象 做 不 同
的 事。
4.Java 是 編 譯 型 的
當(dāng) 運(yùn) 行 Java 程 序 時(shí), 它 首 先 被 編 譯 成 字 節(jié) 代 碼。 字 節(jié) 代 碼 非 常 類 似 于
機(jī) 器 指 令, 所 以 Java 程 序 非 常 高 效。 然 而, 字 節(jié) 代 碼 并 不 專 對(duì) 一 種 特
定 的 機(jī) 器, 所 以 Java 程 序 無 需 重 新 編 譯 便 可 在 眾 多 不 同 的 計(jì) 算 機(jī) 上
執(zhí) 行。
Java 源 程 序 被 編 譯 成 類 文 件, 它 相 當(dāng) 于 程 序 的 字 節(jié) 代 碼 表 現(xiàn)。 在 一 個(gè)
Java 類 文 件 中, 所 有 對(duì) 方 法 及 實(shí) 例 變 量 的 參 照 均 按 名 進(jìn) 行, 并 在 第 一
次 執(zhí) 行 代 碼 時(shí) 加 以 分 辨。 這 使 得 代 碼 更 通 用, 更 不 易 受 修 改 的 影 響,
而 仍 具 高 效。
5.Java 是 體 系 結(jié) 構(gòu) 中 立 的
Java 語 言 對(duì) 每 種 計(jì) 算 機(jī) 都 一 樣。 比 如, 簡(jiǎn) 單 的 類 型 都 是 不 變 的: 整 數(shù)
總 是 32 位, 長(zhǎng) 整 數(shù) 總 是 64 位。 令 人 奇 怪 的 是, 諸 如 C 及 C++ 等 時(shí) 髦 的
編 程 語 言 卻 不 是 這 樣。 由 于 這 些 語 言 定 義 如 此 自 由, 每 種 編 譯 器 及
開 發(fā) 環(huán) 境 便 各 有 不 同 了, 這 使 程 序 的 移 植 成 為 討 厭 的 問 題。 Java 程 序
的 移 植 卻 很 容 易, 而 且 不 需 要 進(jìn) 行 重 新 編 譯。
6.Java 是 健 全 的
Java 程 序 不 可 能 造 成 計(jì) 算 機(jī) 崩 潰。 Java 系 統(tǒng) 仔 細(xì) 檢 測(cè) 對(duì) 內(nèi) 存 的 每 次
訪 問, 確 認(rèn) 它 是 合 法 的, 而 且 不 致 引 起 任 何 問 題。
不 過, 即 使 Java 程 序 也 可 能 有 錯(cuò) 誤。 如 果 出 現(xiàn) 某 種 出 乎 意 料 之 事, 程
序 不 會(huì) 崩 潰, 而 把 該 例 外 拋 棄。 程 序 會(huì) 發(fā) 現(xiàn) 這 類 例 外, 并 加 以 處 理。
傳 統(tǒng) 的 程 序 可 以 訪 問 計(jì) 算 機(jī) 的 全 部 內(nèi) 存。 程 序 可 能 (無 意 識(shí) 地) 修 改
內(nèi) 存 中 的 任 何 值, 這 就 會(huì) 造 成 問 題。 Java 程 序 只 能 訪 問 內(nèi) 存 中 允 許 它
們 訪 問 的 那 些 部 分, 所 以 Java 程 序 不 可 能 修 改 不 擬 修 改 的 值。
7.Java 是 小 巧 的
由 于 Java 的 設(shè) 計(jì) 是 要 在 小 的 計(jì) 算 機(jī) 上 運(yùn) 行, 作 為 一 種 編 程 語 言 來 說
其 系 統(tǒng) 是 相 對(duì) 較 小 的。 它 能 有 效 地 在 4MB 以 上 RAM 的 PC 機(jī) 上 運(yùn) 行。 Java
翻 譯 器 只 占 用 幾 百 KB。 這 種 翻 譯 器 對(duì) Java 的 平 臺(tái) 無 關(guān) 性 和 可 移 植 性
是 可 靠 的。
由 于 Java 很 小, 它 對(duì) 內(nèi) 存 很 小 的 計(jì) 算 機(jī), 如 基 于 Java 的 PC 機(jī), 以 及 電
視 機(jī)、 烤 箱、 電 話 機(jī) 及 家 用 計(jì) 算 機(jī) 等, 是 很 理 想 的。
8.Java 是 多 線 程 的
Java 程 序 可 以 執(zhí) 行 一 個(gè) 以 上 的 線 程。 比 如, 它 可 以 在 一 個(gè) 線 程 中 完 成
某 一 耗 時(shí) 的 計(jì) 算, 而 其 它 線 程 與 用 戶 進(jìn) 行 交 互 對(duì) 話。 所 以 用 戶 不 必
停 止 工 作, 等 待 Java 程 序 完 成 耗 時(shí) 的 計(jì) 算。
在 多 線 程 環(huán) 境 中 的 編 程 通 常 是 困 難 的, 因 為 許 多 東 西 可 能 同 時(shí) 出
現(xiàn)。 但 是, Java 提 供 了 易 于 使 用 的 同 步 特 性, 使 編 程 更 為 方 便。
Java 線 程 通 常 被 映 射 為 實(shí) 際 的 操 作 系 統(tǒng) 線 程, 只 要 底 層 操 作 系 統(tǒng) 支
持 這 種 映 射。 因 此, 用 Java 寫 的 應(yīng) 用 程 序 可 說 是 “MP 熱”。 這 就 是 說,
如 果 它 們 在 多 處 理 器 機(jī) 器 上 運(yùn) 行, 它 們 更 將 表 現(xiàn) 不 凡。
9.Java 是 可 收 集 無 用 的 存 儲(chǔ) 單 元 的
用 C 及 C++ 寫 軟 件 的 編 程 人 員 必 須 仔 細(xì) 跟 蹤 所 用 的 內(nèi) 存 塊。 當(dāng) 一 個(gè) 塊
不 再 使 用 時(shí), 他 們 務(wù) 必 讓 程 序 釋 放 它, 從 而 方 可 再 用。 在 大 的 項(xiàng) 目
中, 這 可 能 很 困 難, 并 往 往 成 為 出 錯(cuò) 和 內(nèi) 存 不 足 的 根 源。
在 Java 的 情 況 下, 編 程 人 員 不 必 為 內(nèi) 存 管 理 操 心。 Java 系 統(tǒng) 有 一 個(gè) 叫
做 “無 用 單 元 收 集 器” 的 內(nèi) 置 程 序, 它 掃 描 內(nèi) 存, 并 自 動(dòng) 釋 放 那 些 不
再 使 用 的 內(nèi) 存 塊。
10.Java 是 快 速 的
Java 比 典 型 的 腳 本 語 言 大 為 有 效, 但 它 比 C 慢 20 倍。 這 對(duì) 大 多 數(shù) 應(yīng) 用
是 可 接 受 的。
不 久 的 將 來, 代 碼 生 成 器 就 可 供 利 用 了, 這 將 使 Java 程 序 幾 近 于 用 C
或 C++ 編 寫 的 程 序 那 么 快。
11.Java 是 安 全 的
Java 程 序 沒 有 指 針, 而 且 象 這 樣 的 字 節(jié) 代 碼 程 序 強(qiáng) 在 類 型 上, 所 以 在
執(zhí) 行 之 前 它 可 能 驗(yàn) 證 Java 程 序。 被 驗(yàn) 證 的 Java 程 序 得 以 保 證 不 突 破
Java 語 言 的 任 何 限 制, 而 且 可 以 安 全 地 執(zhí) 行。 Java 字 節(jié) 代 碼 驗(yàn) 證 被
Web 瀏 覽 器 用 來 確 保 小 程 序 不 含 病 毒。
12.Java 是 可 擴(kuò) 展 的
Java 程 序 可 與 用 其 它 語 言 編 寫 的 現(xiàn) 存 程 序 庫(kù) 連 接。 由 于 Java 數(shù) 據(jù) 結(jié)
構(gòu) 與 C 的 數(shù) 據(jù) 結(jié) 構(gòu) 的 類 型 極 為 相 似, 這 是 相 當(dāng) 方 便 的。 最 大 的 問 題 在
于, 現(xiàn) 有 多 線 程 程 序 庫(kù) 為 數(shù) 不 多。
Java 程 序 可 以 聲 明 某 些 方 法 是 內(nèi) 部 的, 然 后, 把 這 些 內(nèi) 部 方 法 映 射 成
軟 件 庫(kù) 所 定 義 的 功 能, 從 而 動(dòng) 態(tài) 地 鏈 接 到 虛 擬 機(jī)
--------------------------------------------------------------------
1.標(biāo)準(zhǔn)集成:XML、SOAP及其它
過去,微軟的體系結(jié)構(gòu)建立在COM/DCOM基礎(chǔ)上,COM/DCOM是進(jìn)程間通信的二進(jìn)制標(biāo)準(zhǔn)。雖然這個(gè)標(biāo)準(zhǔn)本身沒有什么失誤,但是它與微軟以外的領(lǐng)域格格不入。也就是說,這個(gè)標(biāo)準(zhǔn)成了實(shí)現(xiàn)與其它軟件平臺(tái)互操作的瓶頸。
除此之外,數(shù)據(jù)也是一個(gè)問題。雖然ADO簡(jiǎn)化了數(shù)據(jù)訪問,但是把數(shù)據(jù)從一個(gè)地方傳送到另外一個(gè)地方就成了問題。ADO Recordset(記錄集)對(duì)象是一個(gè)存儲(chǔ)了數(shù)據(jù)的二進(jìn)制結(jié)構(gòu),而這種二進(jìn)制格式對(duì)于非微軟的平臺(tái)沒有任何意義。
.Net彌補(bǔ)了這些缺陷,因?yàn)樗耆跇?biāo)準(zhǔn)。比如,數(shù)據(jù)用XML的格式通過進(jìn)程邊界,而這個(gè)數(shù)據(jù)有一個(gè)到XSD的連接,所以任何客戶端都可以正確地轉(zhuǎn)化數(shù)據(jù)。
SOAP基于XML,用于與Web服務(wù)的通信。集成SOAP以后,不管客戶端運(yùn)行的是不是微軟的操作系統(tǒng),都可以實(shí)現(xiàn)簡(jiǎn)單的可編程訪問。
2.簡(jiǎn)化應(yīng)用
COM所面臨的一個(gè)頭痛的問題就是應(yīng)用。COM利用Windows注冊(cè)表來定位機(jī)器上的組件。這個(gè)想法是不錯(cuò)的:每個(gè)注冊(cè)的組件只有一個(gè)實(shí)例,所有的應(yīng)用程序都使用相同的版本。COM具有向后兼容性,也就是說新版本兼容老版本,但是開發(fā)人員可能會(huì)破壞這種兼容性。
.Net則采用了不同的方法:它根本就沒有使用注冊(cè)表。相反,微軟的建議是每個(gè)應(yīng)用程序使用自己局部的組件(在.Net稱為“assembly”)。利用這種方法,用于應(yīng)用程序Foo的Assembly X如果發(fā)生變化,Assembly X的Application Bar不會(huì)受到任何影響。這種方法聽起來好象以前一臺(tái)機(jī)器上同一個(gè)DLL的多個(gè)拷貝,的確是這樣。不過你不會(huì)遇到應(yīng)用程序查找Windows\System32目錄的問題。
由于.Net不使用注冊(cè)表,很多應(yīng)用都可以用簡(jiǎn)單的拷貝命令來完成,通常沒有必要開發(fā)安裝程序。此外,應(yīng)用程序不會(huì)瑣定assembly,所以升級(jí)DLL的時(shí)候不必關(guān)閉應(yīng)用程序。
3.Web服務(wù)支持
在流行的Web服務(wù)方面,微軟發(fā)揮著重要的作用,而.Net為開發(fā)Web服務(wù)帶來了前所未有的便利。用Notepad就可以建立簡(jiǎn)單的Web服務(wù),甚至不必利用編譯器,只要對(duì)它們進(jìn)行簡(jiǎn)單的調(diào)用即可,因?yàn)?Net會(huì)對(duì)它們進(jìn)行編譯,甚至提供一個(gè)測(cè)試頁供用戶檢驗(yàn)其功能。.Net 擁有所有必需的渠道,可以生成用戶所需的所有文件,比如WSDL文件。
.Net也是一個(gè)聰明的Web服務(wù)使用者:只要設(shè)置了指向某個(gè)Web服務(wù)的索引,你就可以把它當(dāng)作本地的assembly。你可以獲得完整的Intel許可和功能實(shí)現(xiàn)幫助。
Web服務(wù)對(duì)于發(fā)送數(shù)據(jù)是非常重要的,感謝ADO.Net,Web服務(wù)可以利用簡(jiǎn)單或者復(fù)雜的數(shù)據(jù),并以XML格式把它們發(fā)送到任何客戶端,最后設(shè)置一個(gè)鏈接,指回到一個(gè)描述數(shù)據(jù)模式的XSD。
4.用于所有.Net語言的標(biāo)準(zhǔn)工具集
最終,你會(huì)擁有一個(gè)適用于所有語言的集成工具集。你會(huì)擁有一個(gè)統(tǒng)一的IDE、調(diào)試工具以及其它類似的工具。因此,其它公司可以把他們的語言嵌入IDE環(huán)境,并獲得.Net工具所有的支持。比如富士通開發(fā)了netCOBOL .Net,它已經(jīng)直接集成到IDE中,因此可以用 COBOL編寫Web服務(wù)和Windows應(yīng)用并獲得微軟提供的調(diào)試和profiling(監(jiān)管)工具。
.Net是個(gè)開放的架構(gòu),所以其它廠商也可以提供自己的工具。比如Borland,該公司已經(jīng)宣布其下一版Delphi將具有建立.Net應(yīng)用的功能,同時(shí)它也保證,Delphi會(huì)擁有自己的IDE,不會(huì)嵌入Visual Studio .Net。
5.對(duì)移動(dòng)設(shè)備的支持
Visual Studio .Net發(fā)布不久,微軟就推出了移動(dòng)Internet工具包(Microsoft Mobile Internet Toolkit ,MMIT),以便用.Net構(gòu)建移動(dòng)應(yīng)用。該工具包提供了可視化功能,你可以直觀地拖動(dòng)和下拉面向移動(dòng)設(shè)備的窗體和控件。該工具包有利于正確書寫標(biāo)記語言(比如WML、WAP等等)。
.Net簡(jiǎn)化架構(gòu)(.Net Compact Framework)不久就會(huì)面市,它是.Net架構(gòu)的縮略版,設(shè)計(jì)用于Pocket PC設(shè)備。有了這個(gè)架構(gòu),開發(fā)人員就可以開發(fā)出豐富的Pocket PC計(jì)算機(jī)應(yīng)用。你可以編寫一個(gè)運(yùn)行于小型設(shè)備上的應(yīng)用,比如用于Pocket PC設(shè)備或者具有Web功能的手機(jī)。事實(shí)上,MMIT包含了很多仿真程序,它們使用了真正為這類設(shè)備編寫的ROM代碼,所以在你的應(yīng)用程序投入使用之前,可以首先測(cè)試其用于此類設(shè)備時(shí)的性能。
6.代碼管理
.Net管理用戶的代碼,從很多方面看,這一點(diǎn)都是很重要的,比如減少bug以及構(gòu)建更多可擴(kuò)展的應(yīng)用。.Net可以處理以下操作:內(nèi)存分配和回收,進(jìn)程及線程的創(chuàng)建和終止,以及運(yùn)行代碼的訪問許可。
VB開發(fā)人員先前面臨的問題——比如內(nèi)存管理、線程和進(jìn)程創(chuàng)建——現(xiàn)在都可以由.Net來處理。而C++程序員可以轉(zhuǎn)向C#,.Net代替他們處理這些操作后,內(nèi)存泄露和其它bug出現(xiàn)的可能性將大大減少。擁有了被管理的代碼,你可以訪問.Net所有跨語言的能力。
7.平臺(tái)獨(dú)立
雖然.Net是為微軟的操作系統(tǒng)創(chuàng)建的,但是微軟的確為ECMA標(biāo)準(zhǔn)委員會(huì)發(fā)布了一部分框架和C#。比如,Mono project實(shí)現(xiàn)了Linux的.Net,包括架構(gòu)和C#編譯器。這意味著很多應(yīng)用(特別是基于Web的應(yīng)用)一次編寫完成后就可以運(yùn)行于多種平臺(tái)上。
8.充足的學(xué)習(xí)資源
.Net的學(xué)習(xí)曲線非常重要,可能.Net的方面的書要比其它所有編程技術(shù)的書都多。此外,微軟和第三方團(tuán)體開設(shè)了很多課程,可以讓開發(fā)人員很快就上手。最后,很多網(wǎng)站為開發(fā)人員員學(xué)習(xí).Net提供了技術(shù)和指導(dǎo)。
9.現(xiàn)代化語言
VB.Net和C#都是現(xiàn)代化的語言。它們完全是面向?qū)ο蟮?,設(shè)計(jì)的時(shí)候消除了很多VB 和C++的矛盾。這兩種語言使用了多層式架構(gòu) (n-tier),這是一種基于組件的方法。
比如,C#取消了指針和其它一些結(jié)構(gòu),它們?cè)?jīng)給C++程序員(特別是新手)帶來很多嚴(yán)重的問題。代碼由.Net架構(gòu)管理后,VB.Net 和C#都從中受益。這個(gè)架構(gòu)還包括一些基礎(chǔ)的對(duì)象,它們是開發(fā)多線程、支持XML等應(yīng)用所必須的。
10.跨語言標(biāo)準(zhǔn)基本類型
VB開發(fā)人員曾經(jīng)面臨一個(gè)致命的問題:VB中的字符串與C++中的字符串不同,所以調(diào)用Windows API函數(shù)的時(shí)候會(huì)出現(xiàn)一些問題。.Net確定了所有類型的標(biāo)準(zhǔn)定義,所以VB中的字符串和C#中的字符串相同,也和netCOBOL .Net中的字符串相同。這意味著你再也不必?fù)?dān)心語言A中的整型數(shù)據(jù)是32位而語言B中只有16位。你可以確信不同語言的數(shù)據(jù)類型都相同,可以更好地進(jìn)行跨語言集成。
優(yōu)點(diǎn)多于缺點(diǎn)
.Net具有很多明顯的優(yōu)點(diǎn),可以提高開發(fā)人員的效率,減少bug,加快應(yīng)用開發(fā)并簡(jiǎn)化使用。IT人員對(duì).Net保持了應(yīng)有的警惕,因?yàn)樗吘惯€是個(gè)新事物,需要有一個(gè)比較艱難的學(xué)習(xí)曲線。但是對(duì)于大多數(shù)組織而言,其優(yōu)點(diǎn)遠(yuǎn)遠(yuǎn)多于缺點(diǎn)。有了.Net,你可以在未來的開發(fā)項(xiàng)目中贏得更高的生產(chǎn)力。