630 likes | 893 Views
Visual C# 2010 程式設計經典. 第 1 章 .NET Framework 與 Visual Studio 2010 簡介. 1.1 Visual Studio 2010 簡介. Visual Studio 2010 的新功能如下:
E N D
Visual C# 2010 程式設計經典 第1章 .NET Framework與Visual Studio 2010簡介
1.1 Visual Studio 2010簡介 • Visual Studio 2010 的新功能如下: • 以最新的WPF(Windows Presentation Foundation)設計工具讓你使用視覺化方式設計 Windows Vista與Windows 7視窗應用程式的GUI(圖形化使用者介面),WPF可建立2D或3D動畫,且3D動畫支援攝影機、光源與材質;透過Visual Studio 2010開發WPF應用程式可支援XAML IntelliSense,讓開發人員可以更精確的撰寫XAML Code,屬性視窗可調整控制項的漸層色彩,讓開發人員完全不用撰寫設計WPF介面的XAML code,便可建立更具使用者經驗及生動的視窗應用程式。
可在WPF或Silverlight應用程式上開發Multi-Touch多點觸控的應用程式。可在WPF或Silverlight應用程式上開發Multi-Touch多點觸控的應用程式。 • Visual Studio 2010內建Silverlight專案,透過Silverlight 專案可讓開發人員快速開發更具使用者經驗的RIA(Rich Internet Application)及Windows Phone 7行動裝置應用程式。 • ASP .NET 4.0新增MVC2專案,為大型Web應用程式簡化開發流程。此外ASP .NET Web 應用程式內建ASP .NET AJAX擴充功能以及Microsoft AJAX Library讓您快速開發AJAX Web應用程式,以便建置Web 2.0的網站;並支援jQuery前端指令碼開發套件,透過jQuery跨平台的JavaScript函式庫與ASP .NET AJAX擴充功能,讓開發人員能設計即時性及更豐富的Web應用程式UI介面。
使用Visual Studio 2010或Visual C# 2010 Express Edition編輯JavaScript或jQuery,可以支援IntelliSense,讓程式設計師撰寫用戶端指令碼JavaScript或jQuery更有效率。 • ASP .NET 4.0新增Chart圖表控制項,Chart圖表控制項只要配合資料來源控制項(如SqlDataSource或AccessDataSource…等),即可讓您可以不用撰寫任何一行程式即能在網頁上繪製各種類型的統計圖表。
透過全新的CSS(Cascading Style Sheet,串接樣式表)與網頁標準支援來建立Web應用程式的使用者介面(ASP .NET網頁,即Web Form)。 • Visual Studio 2010支援 .NET Framework多目標版本開發(multi-targeting support),讓開發人員建立專案時可選擇 .NET Framework 2.0、.NET Framework 3.0、.NET Framework 3.5以及 .NET Framework 4.0各種版本的應用程式。
透過Visual Studio 2010的整合開發環境可輕鬆建立更可靠、可延展以及容易使用的Microsoft Office 2010 System專案。 • Visual Basic及C# 整合LINQ查詢語法,透過LINQ查詢運算式可以讓您使用一致性的語法輕鬆查詢SQL Server資料庫、XML、ADO .NET 資料集、陣列和集合、或其它支援 LINQ遠端或本機資料來源的資料。 • Visual Studio 2010 內含 SharePoint開發專案,以便協助開發人員建立 Microsoft SharePoint Server 2010以及Microsoft SharePoint Foundation 2010 專案。 • Visual Studio 2010支援多螢幕顯示,讓開發人員可以將工具箱、方案總管、除錯視窗、編輯器拖曳到第二台螢幕顯示,讓整合開發環境空間變得更大,使開發人員提高工作效率。
Visual Studio 2010內建Windows Azure Cloud Service專案,讓開發人員可以建立雲端服務,進行Winsows Azure的開發、測試與部署。
Visual Studio 2010 的特色如下: • 透過您熟悉的語言,如Visual Basic、C# 、C++ 可開發Windows Form應用程式、WPF應用程式、ASP .NET Web應用程式、Silverlight應用程式、Web服務、智慧型裝置應用程式(Windows Phone)、Windows Embedded、報表應用程式、SharePoint…等各類型應用程式專案。 • 以視覺化的拖放設計工具來建立Windows Form應用程式、WPF應用程式、ASP .NET Web應用程式、Silverlight應用程式、智慧型裝置應用程式(Windows Phone)、報表應用程式…等各類型應用程式專案。
透過Visual Studio 2010整合開發環境的IntelliSense編輯器功能,可簡化應用程式的設計週期,以提升專案的生產力。 • ClickOnce是一種部署應用程式的技術,透過ClickOnce 可讓您建立以最少的使用者互動經驗來安裝自行更新至用戶端的Windows 應用程式。 • 透過ASP .NET可快速建立互動的Web應用程式、Web服務或WCF服務,並使用主版面頁(MasterPage)讓開發人員設計統一且方便管理的網站版面。
1.2 軟體技術的演進 • 在一項新的軟體開發技術或平台推出時,往往導因於原有的技術或平台已不足以應付目前軟體開發的需求,因此如果能夠了解軟體開發技術的演進,就更能清楚了解 .NET Framework 這個新一代的軟體開發平台與技術是從何而來,有什麼值得我們深入探討的。 • 分別以「軟體分析方法」、「程式設計方法」、「軟體系統功能分層」、「軟體開發架構演進」與「軟體平台」五個部份,說明過去和現在的軟體開發技術演進。
1.2.1 軟體分析方法 • 在整個軟體系統開發流程先期 系統分析 相當重要。 • 在物件導向技術出現前 結構化程式設計是軟體開發主流 • 為因應複雜軟體系統,程式設計出現大變革 物件導向 (Object Oriented) 技術
以往結構化、模組化軟體分析方法 已不適超大型軟體系統。 • OOA 物件導向分析、OOD 物件導向設計 在 1989~1994年間增到 50多種,不同分析方法導致 無法適用各類型系統分析的問題。 • 1997 年 Grady Booch, James Rumbaugh, Ivar Jacobson 三位軟體分析大師 與 微軟、Digital、HP、IBM、Oracle…共同整合制訂: UML 軟體分析方法,被 OMG 協會認可,正式成為 主流的物件導向分析與設計的方法。
1.2.2 程式設計方法 • 傳統結構化程式設計技術在今日早已無法掌握日益複雜的軟體系統 • 物件導向(OO) 是近代軟體系統分析、規劃與 設計概念大突破,是大型軟體系統救世主。 • 在OO領域中,除先前所提到的OOA 與OOD物件導向設計外,一項與程式設計密不可份的技術就是 「物件導向程式設計」。 • OOP 是使用物件導向的概念來撰寫程式。
1.2.3 軟體系統功能分層 • 展示 (Presentation)負責進行使用者介面的處理,包含資料的輸入與顯示、圖表的繪製…等與資料展現有關的工作。 • 商業邏輯 (Business Logic)軟體系統中都包含許多邏輯處理,如銀行利率計算、轉帳、帳號與密碼檢查、資料的加密與解密…等等,這些工作都屬於商業邏輯層次工作範圍。 • 資料來源 (Data Source)指的就是軟體系統中資料儲存的位置,如 Microsoft SQL Server、Oracle、Sybase、Access…等資料庫,甚至是 XML 資料都可稱作是資料來源。
1.2.4 軟體開發架構演進 以軟體系統的架構大致上可分以下幾個類型: • 單機架構(Stand Alone) • 主從架構(Client/Server) • 三層次架構(Three Tiers) • 多層次架構(N-Tiers) • Windows DNA 2000 • .NET
一. 單機架構 (Standalone) • 在單機架構中,展示、商業邏輯與資料來源都位於同一個軟體、同一部電腦上。 • 例如dBase、Access、FoxPro…等開發出來的單機應用程式,由於整個系統不需要牽涉到與其它電腦或系統的整合,因此在設計上非常單純,在單機上的效率也不差,適合單人操作使用。 • 然而由於資料是位於軟體所在的電腦上,因此如果要進行不同電腦之間的資料交換,往往需要透過檔案複製來達成,非常的不方便。 • 假設銀行的系統是採用單機的架構所開發,那麼今天在台北某一分行存款10,000元,這個存款資料只會存放在該洽辦行員所用的電腦上,必須將該筆新的存款資料拷貝到磁片上,然後複製到全省其它分行的所有行員所使用的電腦中,這樣才能在其它分行中也能看得到這筆新的存款資料,如果還要進行複雜的轉帳交易,那麼單機架構就明顯力有未殆了。
五. Windows DNA 2000 • 微軟在實現N-Tiers架構上,提供了Windows DNA (Distributed interNet Architecture) 2000架構 (前身是 Windows DNA),在這個架構中,使用COM+ (Component Object Model) 做為元件設計規格,配合Windows 2000上的元件服務(Component Service),建構出多層次架構中所需要的商業邏輯元件,後端配合Microsoft SQL Server,前端可以使用Windows應用程式,或者使用ASP開發Web 應用程式。 • 在這個架構中,足以整合所有以微軟為主的解決方案,但是對於非微軟的系統,例如IBM、Java…等等,就產生整合不易的缺點,原因在於COM+ 透過 DCOM (Distributed COM) 通訊協定進行資料傳輸,再加上必須支援COM+ 規格介面的存取才能呼叫COM+ 元件,其它系統未必支援。
六. Web服務 • .NET 在分散式系統支援上,強調使用 XML (eXtensible Markup Language) 做為傳輸的標準資料格式,並且使用Internet上標準的HTTP與SOAP (Simple Object Access Protocol) 通訊協定來傳輸 XML 資料 (如下圖),因此幾乎所有可以連上Internet的系統都支援,十分適合用在異質系統的整合上。
在元件規格上,使用標準的Web服務規格將元件Web化,Web服務可以看做一種沒有使用者介面的網站,用來提供用戶端所需的商業邏輯服務,用戶端只需要支援XML、HTTP、SOAP,就可以和Web服務溝通,不限任何作業系統平台、程式語言、硬體設備,如下圖:在元件規格上,使用標準的Web服務規格將元件Web化,Web服務可以看做一種沒有使用者介面的網站,用來提供用戶端所需的商業邏輯服務,用戶端只需要支援XML、HTTP、SOAP,就可以和Web服務溝通,不限任何作業系統平台、程式語言、硬體設備,如下圖:
七. 雲端運算與三螢一雲 • 雲端運算(Cloud computing)是一種透過網際網路運算的新方式,因為網際網路通常使用雲圖形來表示。用戶端的使用者不需要了解「雲端」中所使用的技術與設備,只需要關注用戶端需要的資源以及如何透過雲端運算由網路下載來取得所需要的服務。 • 「三螢」是指電腦螢幕、手機螢幕、電視螢幕;而「一雲」即是指雲端。 • 透過Visual Studio 2010將所有的技術共用、進行整合。微軟的Widnows視窗應用程式除了可運用在電腦上,也可以移植到手機或手持裝置上,更可以控制電視節目或微軟的XBox 360遊戲機。因此微軟推出Windows Azure雲端運算服務,使用者不管是使用大螢幕或小螢幕,皆可透過網路連上雲端進行運算,即可取得所需要的服務。因此「三螢一雲」(3 Screens and a Cloud)是微軟未來的商業戰略,更是未來資訊科技的新面貌。
1.2.5 軟體平台 • 軟體需要有平台來開發與執行:- 在Windows 上使用 VB 開發視窗應用程式。- 在IIS上使用ASP開發Web應用程式。 - 在Unix系統下用C++ 開發系統程式。 • Windows、IIS 與 Unix就 是所謂的軟體平台。 • 由於不同軟體平台的架構不同,在不同平台開發軟體的方式 明顯不同。 • 程式設計師的程式開發經驗中有絕大部份是與所使用的作業系統、程式語言以及程式庫有關。 以往單機、主從式、多層次系統中還行得通。
在網際網路時代 全世界所有各類型的軟體系統都悄悄連上Internet。 開發系統不再只是企業內部封閉的系統,甚至不 全都是使用同一種軟體平台來開發, • 現今各公司無不想進辦法要 e 化 建立公司 的ERP (Enterprise Resource Planning) 系統和以往企業中的MRP (Material Requirement Planning)系統 不同的是傳統 MRP 系統主要在處理某一單純的 企業流程與資料,
Windows 平台上的程式設計師為延續既有的 Windows 程式開發經驗與資源,只好繼續開發 Windows 平台上的程式。 • 軟體平台不再侷限於作業系統 • 現今 Internet 就是一個軟體平台 如何運用 Internet 上豐富軟體開發資源,使用 適當軟體開發工具,在Internet上開發出結合 各類型軟硬體的軟體系統, .NET 於是應運而生。
MicroSoft .NET 的願景提供: 1. 未來生活的願景 2. 軟體開發平台 3. 超棒的使用者經驗
CLR (Common Language Runtime ) 是 .NET Framework 中最基本的部份。 包含程式碼的編譯、安全性控管、程式庫與執行 檔的快取等功能,都由 CLR 包辦。 下圖是程式在 CLR 中的編譯與執行的流程,也是CLR 的架構圖。
1. 組件 (Assembly) 程式原始碼經過IL (Intermediate Language)編譯器編譯 產生副檔名為 exe 或 dll 的檔案,稱為「 組件」。 組件不能直接由 CPU 執行,因 IL 編譯器只是將原始 程式碼編譯成一個中間碼,稱為 MSIL。 IL 必須再經過第二次編譯後才會產生真正可由 CPU 執行的執行檔,這點有些類似Java,Java 原始程式 碼在經過編譯後會產生中間碼*.class, 稱為 byte code。
byte code 類似 .NET 中的 Assembly,是不能直接執行。 • 需再透過 Java 的虛擬機器 JVM 來解譯執行,也是一行一行翻譯成機器碼,然後由虛擬機器來執行。 • 在組件中除程式碼 IL 部份外,尚包含程式所需要相關資源 ,如:圖示、文字…等,除此之外在 Assembly中還包含一份 Metadata。
Metadata ? 是用來描述該組件的資訊,如版本、 所需類別 程式庫…等。 只要一個組件就可包含所有需要的程式、資源 及自我描述資訊。 組件不需如 COM 元件一樣必須在系統登錄 也免除以往不同版本 COM 元件在 Registry 中 的註冊資訊衝突的問題。
2. JIT編譯器 (Just-In-Time Compiler) • 組件不是可執行檔,執行前再進行第二次編譯 由 JIT 編譯器來負責。 • 當第一次執行某個組件時 組件載入器 會負責將組件載入。 檢查該組件是否有編譯權限及相關安全性。 交由 JIT 編譯器來進行編譯,將組件中的IL編譯 成真正的可執行機器碼 Native Code。 如該組件引用其它類別程式庫,則由類別載入器 將所需類別程式庫一併載入編譯。
3. Native Code Manager • 編譯產生的 Native Code 交由 Native Code Manager 來管理。 • Native Code Manager 會進行 Native Code 的快取,因此第二次再執行某個組件時,就直接執行快取中的 Native Code,不用再經由 JIT 編譯器進行編譯。 • 第二次後的執行速度會非常快,這點和 Java 不同, Java 不論第幾次執行,都必須經 Java虛 擬機器一行一行 解譯執行。 速度上會慢很多 而 Native Code 就是 CPU 可執行的機器 碼,可直接由CPU執行,不需任何解譯,執行速度會快很 多。
4. 垃圾收集 (Garbage Collection) • 程式執行要配置記憶體,使用完需將記憶體還給作業系統: 若未釋放記憶體,隨程式不斷執行,系統可用記憶體 愈來愈少。 記憶體不足而當機,程式設計師必須自行對記憶體的 使用多注意。 • .NET 提供垃圾收集機制 只要沒用到記憶體,.NET Framework 適當時機將這些記憶體回收給其它需要的組件使用。 程式設計師對記憶體使用非常方便,要用時宣告一下, 不用時由 .NET Framework自動回收,不會造成記憶體 漏失狀況。
5. 例外管理員 (Exception Manager) • 程式中出現如除以零、寫入磁片時磁碟機中找不到磁片狀況錯誤,就會產生例外 。 • 在不同程式語言或軟體平台上處理錯誤方式都不盡相同 VB 使用 On Error Goto C++ 使用 try … catch • Windows API 使用 HRESULT 傳回錯誤代碼… • 在 .NET中 統一錯誤處理機制,不論使用那種程式語言,例外狀 況都由 Exception Manager 統一管理,在 C函式中產 生的例外狀況可在VB程式中進行處理,完全做到跨語 言例外處理。
6. 執行緒支援 (Thread Support) • 在 .NET Framework 中直接支援多執行緒(Multi-Threads) 程式的開發 包含執行緒的建立、使用、暫停、結束都可在不同語 言中獨立實作出來。
7. COM元件整合 (COM Interop) • 由於組件的執行環境與傳統COM元件不同,因此如果組件中需要引用到一個COM元件,就必須進行轉換,在 .NET 中使用 COM Interop 技術來達成這樣的目的,簡單來說,COM Interop做的只是使用一個 .NET 的類別將原本的 COM 元件包裝起來,讓組件誤以為所引用的是另一個組件,這項工作如果在Visual Studio 2010整合環境下做,就只需要直接將COM元件自系統登錄中引用進來,Visual Studio 2010會自動幫我們做 COM Interop。也就是說原本使用舊技術開發出來的COM 元件,在 .NET Framework中可以繼續延用,並不會浪費原有的投資,另外新的組件也可以透過 COM+ 元件服務 (Component Service) 的機制,讓舊有的程式引用,如此新舊程式可以相互支援,各取所長。
8.偵錯引擎(Debug Engine) • 透過 CLR 中的偵錯引擎,可在 .NET 平台上進行跨語言的程式偵錯。 • 也就是說專案中的各個子系統可用不同程式語言來撰寫。 • 統一透過 CLR 進行偵錯。 • 這樣大大節省專案偵錯與維護所需成本。
1.4.2 基礎類別程式庫 • 在不同程式語言中除語言本身語法差異外,程式語言所引用的程式庫也大不相同 • 例如 Visual C++中的 MFC (Microsoft Foundation Class Library)、ATL (Active Template Library),Java中的 AWT (Abstract Window Toolkit)、JFC (Java Foundation Classes)…等 • 在 .NET Framework 中為達到不同語言在程式庫上的統一,定義「基底類別程式庫 (Base Class Library)」
過去在不同程式語言中除了語言本身的語法差異外,程式語言引用的程式庫也不相同。過去在不同程式語言中除了語言本身的語法差異外,程式語言引用的程式庫也不相同。 • 例如Visual C++中的 MFC ATL (Active Template Library)Java中的AWT 、JFC (Java Foundation Classes) • .NET Framework 為達到不同語言在程式庫上統一,定義「基底類別程式庫 (Base Class Library)」,讓這程式庫能廣泛包含開發各類型應用程式的需求
.NET Framework 程式庫中包含數百個類別 • 內容含括 Windows表單、控制項、Web應用程式中的狀態處理、快取、XML、XSL、Socket…等,幾乎所需基本功能都具備 • 整個程式庫是以類別方式存在,必要時還可運用一些物件導向機制 (例如繼承) 加以擴充修改,以便符合自己需要。