




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
圖119所示。圖STYLEREF1\s1SEQ圖\*ARABIC\s119數(shù)字的輸入輸出在C#程序中使用Console.Write()或Console.WriteLine()時,還有以下兩種三種知識經(jīng)常用到:三種(1)如果有多項信息,信息之間可以用加號(+)連接起來,以表示形成一個字符串。例如:"Youhaveentered:"+n+"and"+d(2)若在字符串有變量,還可以在字符串中用{0}、{1}、{2}等分別表示各個變量。例如:Console.WriteLine("Youhaveentered:{0}and{1}.",n,d);(3)在C#6.0以上的版本中,還可以直接使用{變量名或表達式}嵌入到格式串中,這要求格式串前面寫一個$符號。例如:Console.WriteLine($"Youhaveentered:{n}and1byxkbh.");這種方式稱為字符串嵌入值(stringinterpolation),它比較直觀而且不容易錯。這實際是一個語法糖(syntexsuger),也就是說C#編譯器會將這種簡寫方式翻譯成復雜的語法元素,字符串嵌入值實際上翻譯成了字符串的加號連接(而加號連接又翻譯成了字符串的Append方法)。隨著C#語言的發(fā)展,C#語言中增加了大量的語法糖,極大地方便了代碼的書寫,但給初學者增加了負擔,我們會在不同的章節(jié)提到這些語法糖。1.3.2Windows應用程序輸入輸出Windows應用程序用圖形界面的,其基本的輸入輸出手段是使用界面上的對象(也稱為“控件”),例如:使用文本框?qū)ο螅═extBox)獲取用戶輸入的數(shù)據(jù),使用標簽對象(Label)或文本框?qū)ο筝敵鰯?shù)據(jù),使用命令按鈕(Button)來執(zhí)行命令。圖形界面的程序最好借助于集成開發(fā)工具(如VisualStudio)來實現(xiàn)。例STYLEREF1\s1SEQ例\*ARABIC\s16WinInOut.cs圖形界面輸入輸出。1 usingSystem;2 usingSystem.Windows.Forms;3 usingSystem.Drawing;4 publicclassWinInOut:Form5 {6 TextBoxtxt=newTextBox();7 Buttonbtn=newButton();8 Labellbl=newLabel();9 10 publicvoidinit()11 {12 this.Controls.Add(txt);13 this.Controls.Add(btn);14 this.Controls.Add(lbl);15 txt.Dock=System.Windows.Forms.DockStyle.Top;16 btn.Dock=System.Windows.Forms.DockStyle.Fill;17 lbl.Dock=System.Windows.Forms.DockStyle.Bottom;18 btn.Text="求平方";19 lbl.Text="用于顯示結(jié)果的標簽";20 this.Size=newSize(300,120);21 22 btn.Click+=newSystem.EventHandler(this.button1_Click);23 }24 25 publicvoidbutton1_Click(objectsender,EventArgse)26 {27 strings=txt.Text;28 doubled=double.Parse(s);29 doublesq=d*d;30 lbl.Text=d+"的平方是:"+sq;31 }32 33 staticvoidMain()34 {35 WinInOutf=newWinInOut();36 f.Text="WinInOut";37 f.init();38 Application.Run(f);39 -+ }40 }在本程序中,生成了一個文本框txt用于輸入,一個標簽lbl用于輸出,一個按鈕btn用于觸發(fā)命令。在init(初始化)方法中,將這三個對象加入。在程序中,還有一點很關(guān)鍵,就是加入一個事件處理程序,其作用是當用戶點擊此按鈕時,通過Text方法得到用戶的輸入,然后用double.Parse()方法轉(zhuǎn)為一個實數(shù)(double),再計算其平方,用Label的Text顯示其平方值,如REF_Ref41129290\h圖120所示。圖STYLEREF1\s1SEQ圖\*ARABIC\s120圖形界面輸入輸出1.3.3常用的運算在程序中,可以使用基本的運算,如+、-、*、/,而且一些基本的寫法與C、C++、Java等相似,下章將會詳細介紹。這里介紹幾個基本的類,以方便我們編寫一些簡單的程序。Math類:是關(guān)于數(shù)學運算的類,有一系列方法可用,如Math.Sqrt()表示平方根,Math.Round()表示四舍五入,Math.Log()表示自然對數(shù),Math.Pow()表示冪運算,Math.Sin()表示正弦等等。Random類:表示隨機數(shù)。如:Randomrnd=newRandom();intn=rnd.Next(10);doubled=rnd.NextDouble();這里生成了一個隨機數(shù)對象,用其Next(10)方法得到一個0到9的隨機整數(shù),而用NextDouble()則得到一個隨機小數(shù)(0到1之間)。Convert類:表示轉(zhuǎn)換。它可以方便地將輸入的字符串轉(zhuǎn)成別的類型:intn=Convert.ToInt32("123");doubled=Convert.ToDouble("123.45");其中分別轉(zhuǎn)成整數(shù)和小數(shù)。在VisualStudio中,可以方便地查看這些類及方法,一方面在輸入過程中系統(tǒng)會自動提示;另一方面將輸入點置于一個單詞上,然后按F1鍵,系統(tǒng)會自動打開幫助信息(要求聯(lián)網(wǎng)),即打開.NETFrameworkAPI文檔,如REF_Ref485588773\h圖121所示,可以從中查看詳細的說明。圖STYLEREF1\s1SEQ圖\*ARABIC\s121查看API文檔1.4開發(fā)工具前面多次提到了VisualStudio開發(fā)工具,也提到了控制臺、Windows兩種應用程序,為了更全面的了解,本節(jié)介紹更多的開發(fā)工具、更多的應用程序類型。1.4.1.NETFrameworkSDK及VisualStudio正如第1.1節(jié)所提到的,C#的主要環(huán)境是Microsoft.NETFramework,在該環(huán)境中,提供了一系列的開發(fā)工具,稱為.NETFrameworkSDK。Microsoft.NETFrameworkSDK是免費的,可以從以下站點下載/net/targeting要提醒的是,SDK是開發(fā)環(huán)境。如果不編譯C#程序,只運行程序,可以只安裝.NETFramework的運行環(huán)境,這樣可以占用較少的磁盤空間。不過,一般地Windows操作系統(tǒng)上已經(jīng)自帶了.NETFramework運行環(huán)境?,F(xiàn)在.NETFrameworkSDK直接包含在VisualStudio中了,所以可以直接安裝VisualStudio而得到SDK?,F(xiàn)在Microsoft提供了VisualStudio的社區(qū)版(免費)、專業(yè)版、企業(yè)版,對于學習者而言,社區(qū)版(community)的功能已經(jīng)足夠強大,可以從以下站點下載 下載VisualStudio后就可以安裝,在安裝時,我們可以選擇需要的Workload(工作負荷),對于初學者而言序,只要選擇“.NET桌面開發(fā)”就可以了,以后需要其他的,可以隨時安裝(再次運行安裝程序VisualStudioInstaller)。1.4.2使用命令行編譯及運行程序一般高級語言編程需要經(jīng)過源程序編輯、目標程序編譯生成和可執(zhí)行程序運行幾個過程,C#編程也不例外,本節(jié)就編輯、編譯、運行C#程序的一般步驟進行介紹。盡管可以使用VisualStudio集成開發(fā)環(huán)境來開發(fā)復雜的項目,但本書中大部分示例程序可以使用命令行來進行編譯和運行。1.程序的編輯C#源程序是以.cs為后綴的簡單的文本文件,可以用各種C#集成開發(fā)環(huán)境中的源代碼編輯器來編寫,也可以用其他文本編輯工具,如Windows中的記事本等。以簡單的記事本(Notepad)軟件為例,打開記事本,輸入下面一段程序:usingSystem;publicclassHelloWorld{//anapplication publicstaticvoidMain(string[]args){ Console.WriteLine("HelloWorld!"); }}程序輸入并修改完畢,要將此文件保存,在保存文件時,要注意,文件的類型要選“所有類型”,文件名文件名可以為HelloWorld.cs。如果使用其他編輯器,也要注意保存時以純文本方式進行保存,并且將文件擴展名定為.cs文件。提示:本書中的示例程序可以在附帶的電子資源中獲得,但對于初學者,手工輸入程序并調(diào)試運行是一種很好的學習方式。2.程序的編譯與其他語言一樣,源程序(.cs文件)要經(jīng)過編譯(compile)才能運行。編譯的過程實際上是將C#源程序轉(zhuǎn)變?yōu)榭蓤?zhí)行文件,擴展名為.exe,其中包含的是程序的指令。(如前面所說,這里.exe文件包含的是IL指令和元數(shù)據(jù),只有在實際運行時,才會即時地轉(zhuǎn)成機器的CPU指令并執(zhí)行。)編譯可以使用工具csc.exe。該工具的使用方法如下:1)進入命令行環(huán)境,方法是:選“開始”/“運行”,然后鍵入cmd<回車>2)然后進入到存放源文件的目錄(假定是d:\CsExample\ch01目錄),運行 d:<回車> cdd:\CsExample\ch01<回車>3)編譯源程序,鍵入 cscHelloWorld.cs<回車>csc后面可以跟C#源程序文件名,文件名可以有多個,還可以用*及?通配符,如: cscHello*.cs csc還可以跟一系列選項,為了查看其選項,可以用csc/?來查看,結(jié)果如下缺少結(jié)果部分。:缺少結(jié)果部分。 在以上選項中,比較重要的是:/out:<文件>輸出文件名(默認值:包含主類的文件或第一個文件的基名稱)/target:exe生成控制臺可執(zhí)行文件(默認)(縮寫:/t:exe)/target:winexe生成Windows可執(zhí)行文件(縮寫:/t:winexe)/unsafe[+|-]允許“不安全”代碼當編譯成功后,csc會產(chǎn)生相應的.exe文件。若編譯不成功,csc會提示信息,根據(jù)此信息,讀者可進一步修改源程序,再重新編譯。為了使用csc命令,需要設置環(huán)境變量,這個設置過程較復雜,稍后面專門講解。3.程序的運行程序的運行就是執(zhí)行.exe文件中的指令的過程。在上面的例子中,運行所編譯好的程序,用命令:HelloWorld程序的運行結(jié)果如REF_Ref41126065\h圖122所示。圖STYLEREF1\s1SEQ圖\*ARABIC\s122HelloWorld程序運行結(jié)果在Windows中,也可以在資源管理器中雙擊此.exe文件,即可以運行程序。4.設定path環(huán)境變量如上所述,在編譯及運行時,經(jīng)常需要設定path這個環(huán)境變量。值得注意的是,隨著Microsoft技術(shù)的演進,csc工具(csc.exe)所用的技術(shù)、所在的目錄(文件夾)也在發(fā)生變化,例如:早期csc.exe在C:\WINNT\Microsoft.NET\Framework\v1.0.3705\目錄下;在.NET2.0時期在C:\WINNT\Microsoft.NET\Framework\v2.0.50727\下;在4.0版本中,則在C:\Windows\Microsoft.NET\Framework64\v4.0.30319;安裝VisualStudio2015后,其中附帶安裝的MSBuild編譯平臺中的csc.exe則可能在C:\ProgramFiles(x86)\MSBuild\14.0\Bin目錄下;安裝VisualStudio2017后,其中附帶安裝的MSBuild編譯平臺中使用Roslyn編譯服務的csc.exe則可能在C:\ProgramFiles(x86)\MicrosoftVisualStudio\2017\Community\MSBuild\15.0\Bin\Roslyn目錄下;在跨平臺環(huán)境(.NETcore)中,csc則可能在C:\ProgramFiles\dotnet\sdk\1.0.3\Roslyn中。你可以在自已的電腦中搜索一下csc.exe看看其所在的目錄。以MSBuild編譯平臺為例,為了能使用csc.exe可以寫全路徑 C:\ProgramFiles(x86)\MSBuild\14.0\Bin\cscHelloWorld.cs為了省略其所在目錄,可以先鍵入設置path環(huán)境變量的命令 Setpath=C:\ProgramFiles(x86)\MSBuild\14.0\Bin;%path%這樣,編譯命令可以直接寫csc,如: cscHello*.cs為了長期設置path環(huán)境變量,可以在“我的電腦”(“此電腦”)右擊,選“屬性|高級系統(tǒng)設置|環(huán)境變量”,在系統(tǒng)變量中,選擇“path”,然后點擊“編輯”“新建”,就可以在path中增加一項,寫上csc.exe所在的目錄即可。如REF_Ref485375311\h圖123所示。圖STYLEREF1\s1SEQ圖\*ARABIC\s123編輯環(huán)境變量5.處理程序的語法錯誤在程序編輯的過程中,通常容易出現(xiàn)錯誤,最常見的是字母大小寫不對,輸錯某個字符等等。對于有錯誤的程序,編譯時會報告一個語法錯誤(syntaxerror)。在用csc進行編譯時,報告的語法錯一般具有以下格式 源程序名(行號,列號):error錯誤號:錯誤信息例如:HelloWorld.cs(8,27):errorCS1002:應輸入;根據(jù)這些信息,可以進一步對源程序進行修改。在實際編譯時,C#編譯器會試圖根據(jù)源代碼來理解程序的意圖,由于這個原因,報告的錯誤并不能總是反映問題的實際情況。為了找到出錯的真正原因,編程者需要再進行猜測,或是看一看出錯的那行代碼的附近的幾行代碼。1.4.3輔助工具EditPlus在實際編程時,還可以借助一些輔助工具來加快程序的設計。在C#的輔助工具中,有許多是比較小巧的,它們的主要功能有兩點:(1)提供一個編輯器,能編輯C#程序及Html文件;(2)用菜單或快捷鍵方便地調(diào)用csc和生成的exe文件來編譯和運行C#程序。這樣的輔助工具主要有:EditPlus,UltraEditor等。它們是免費軟件或共享軟件,可以從網(wǎng)上下載后安裝并使用。當然在安裝這些軟件工具之前,系統(tǒng)中必須首先安裝.NETFrameworkSDK。 下面以共享軟件EditPlus為例,它的主要功能是文本編輯,對編輯C#程序及Html網(wǎng)頁也有較好的支持。在編輯時,對于一些重要的關(guān)鍵詞還以醒目的顏色顯示出來,這樣可以使閱讀程序更加方便,也有助于減少鍵入錯誤。 如果要下載最新版本的EditPlus可以訪問網(wǎng)站: 在下載時,一方面要下載EditPlus運行程序,還要下載editplus的插件——即C#(Csharp)的語法文件。先安裝EditPlus,再安裝語法文件。安裝語法文件的步驟是: (1)選Tools(工具)Preference(首選項)Files(文件)SettingsandSyntax(設四置和語法),在其中加入文件類型(Csharp),設定其擴展名為cs,并設定語法文件為下載的語法文件,如REF_Ref41126562\h圖124所示。圖STYLEREF1\s1SEQ圖\*ARABIC\s124加入文件類型(2)要新建一個程序,選FileNewOthersCS大小寫?harp即可。大小寫?圖STYLEREF1\s1SEQ圖\*ARABIC\s125EditPlus界面EditPlus界面如REF_Ref29722173\h圖125所示。左邊為文件夾及文件的顯示區(qū),中間為編輯窗口,下邊為信息窗口。為了方便在EditPlus中調(diào)用編譯及運行功能,需要進行設置UserTools(用戶工具)。選擇菜單“Tools/ConfigureUserTools”,在彈出的對話框中,點“AddAddTool?與圖一致?!奔尤胗脩艄ぞ撸鏡EF_Ref29722247\h圖126所示。AddTool?與圖一致。圖STYLEREF1\s1SEQ圖\*ARABIC\s126設置UserTools對于編譯及運行分別設置如下:表STYLEREF1\s1SEQ表\*ARABIC\s12設置UserTools的值選項針對編譯的設置針對運行的設置MenutextCompileC#RunC#CommandC:\ProgramFiles(x86)\MicrosoftVisualStudio\2017\Community\MSBuild\15.0\Bin\Roslyn\csc.execmd/cArgument$(FileName)$(FileNameNoExt).exeInitialdirectory$(FileDir)$(FileDir)Captureoutput(選擇)(不選擇)設置好以后,用戶可以用以下方式來使用:使用菜單FileNewOthers中選擇Csharp文件,即可新建一個C#文件,然后開始編輯;按快捷鍵Ctrl+S(或使用菜單FileSave)保存文件;按快捷鍵(如:Ctrl+1)來進行編譯;按快捷鍵(如:Ctrl+2)來運行程序。當然用戶也可以只用EditPlus來編輯程序,然后,在命令行狀態(tài)下用csc的命令進行編譯,用生成的exe文件來運行。1.4.4輔助工具VisualStudioCodeMicrosoft提供了開源、免費的編輯工具VisualStudioCode,可以從以下網(wǎng)站下載/VisualStudioCode是一個跨平臺的文本編輯工具,可以方便編寫C#程序、網(wǎng)頁文件、Javascript腳本等,并且在Windows、Linux、MacOSX上都可以使用。如REF_Ref480184257\h圖127VisualStudioCodeREF_Ref480184264\h圖127所示。圖STYLEREF1\s1SEQ圖\*ARABIC\s127VisualStudioCode在VisualStudioCode中,按Ctrl+`可以進入控制臺(又叫終端),在其中可以輸入編譯命令及運行程序。如果安裝dotnetcore開發(fā)工具,還可以進行C#程序的調(diào)試。具體可參見/dotnet。1.5應用程序類型1.5.1VisualStudio建立不同類型的應用程序編寫C#應用程序最方便當然是使用VisualStudio,它是Microsoft新一代的集成開發(fā)環(huán)境。其中有針對多種編程語言(包括C#,C++,VB,F(xiàn)#,JavaScript,Python等)的代碼編輯器。而且這個環(huán)境中還具HTML編輯器、XML編輯器、SQLServer界面以及ServerExplorer。這個在環(huán)境還可以方便調(diào)試、文檔生成等輔助開發(fā)工作。總之,VisualStudio.一個功能強大的集成開發(fā)環(huán)境(IDE)。在VisualStudio可以建立各個項目類型,這些項目可以用各種語言來實現(xiàn)。以C#語言所能建立的類型也有很多種,如REF_Ref41127102\h圖128所示。圖STYLEREF1\s1SEQ圖\*ARABIC\s128VisualStudio能建立各種類型的項目而常見的項目類型如REF_Ref485478289\h表13所示。表STYLEREF1\s1SEQ表\*ARABIC\s13常見的項目類型項目類型項目說明控制臺應用程序此項目類型用于創(chuàng)建命令行實用工具和應用程序。程序的輸入和輸出是通過基于文本的終端窗口進行的。Windows應用程序此項目類型用于創(chuàng)建Windows客戶端應用程序。項目創(chuàng)建一個Windows窗體,可以在該窗體上放置其他控件、顯示文本和圖形。WPF應用程序此項目類型用于創(chuàng)建WPF客戶端應用程序。項目創(chuàng)建一個WPF窗體,可以在該窗體上放置其他控件、顯示文本和圖形。Windows服務程序此項目類型用于創(chuàng)建Windows服務程序。項目創(chuàng)建一個Windows服務,可以在控制面板的服務中進行管理。Web應用程序此項目類型用于創(chuàng)建ASP.NETWeb應用程序。Web應用程序運行在網(wǎng)絡上,可以通過瀏覽器來訪問。.NETCore應用程序使用跨平臺的.NETCore而不是.NETFramewok來作為運行環(huán)境。.NETCore大部分的類與.NETFramework是兼容的,但.NETCore沒有Windows界面,而使用ASP.NETCore的Web界面。類庫類庫項目創(chuàng)建一個庫文件,它可用來存儲類庫(.dll文件)以供在其他應用程序中引用??枕椖看诉x項創(chuàng)建一個不包含任何文件的項目。可以手工加入代碼及引用別的類庫。各種項目的差別在于運行環(huán)境的不同,所使用的界面也不同,但是所使用的底層技術(shù),如C#語言機制、基本類庫、文件輸入輸出、文本圖像信息的處理、數(shù)據(jù)庫訪問技術(shù)都是一樣的,本書的主要內(nèi)容也是這些基本的技術(shù),所以對各種項目類型都是適用的。本書中用到的主要項目類型有兩種,一是控制臺應用程序,一是Windows窗體應用程序,在1.2節(jié)中也主要介紹的這兩種項目的建立和運行方法。考慮到讀者的不同需求,這里簡單地介紹一下WPF和Web應用程序。1.5.2WPF應用程序WPF(WindowsPresentationFoundation)是微軟推出的基于Windows的用戶界面框架,是.NETFramework3.0以上版本開始提供的。WPF應用程序,也是Windows圖形化界面的應用程序,與Windows窗體應用程序很相似,建立WPF應用程序的步驟也很相似,它里面的界面對象的放置、屬性的設置、事件代碼的書寫也幾乎一樣,如REF_Ref485479038\h圖129所示。圖STYLEREF1\s1SEQ圖\*ARABIC\s129WPF應用程序WPF應用程序與Windows窗體應用程序最大的不同之處在于:WPF設計的界面是用一個.xaml文件來描述的。.xaml文件是一種有特殊格式的XML文件,其中用文本的方式描述了界面的對象及其屬性、事件,也就是說它的界面用描述性的,?而前面講到的Windows窗體應用程序中,其界面設計是用一個.designer.cs文件,用C#代碼來描述的。?WPF程序比Windows窗體程序具有一些優(yōu)點,比如.xaml文件可以由美工設計師來書寫,與程序代碼可以實現(xiàn)相好的分離,另外,WPF界面中可以不用代碼來實現(xiàn)漸變顏色等更效果(這在Windows窗體中要寫較多的代碼)。但是WPF的.xaml實際又是一種“語言”,它有很多的語法及標記需要學習和掌握,對于初學者而言,這個挑戰(zhàn)是很大的。基于這種考慮,我們在本書中主要以控制臺和Windows窗體應用程序來講解,使讀者更加專注于C#語言及基礎(chǔ)應用的學習。要提醒讀者的是:在簡單的情況下,WPF應用程序與Windows窗體應用幾乎是一樣的,讀者完全可以使用WPF來學習所有的例子。本書的配套電子資源提供了全書中所有的Windows窗體應用程序示例所對應WPF版本的代碼,可以對照學習。限于篇幅,WPF代碼就不列在紙質(zhì)書中了。1.5.3Web應用程序Web應用程序,是在網(wǎng)絡上應用的程序,程序的代碼運行在服務端,而使用瀏覽器來訪問它,可以簡單地說,Web應用程序是以瀏覽器來作為其輸入輸出的界面的。Web應用程序的項目又可以細分為好幾種,依其運行環(huán)境,又分為ASP.NET或ASP.NETcore兩種,前者是運行于.NETFramework中,后者是運行于跨平臺.NETCore框架中的。Web應用程序中也有對象及其屬性、方法、事件的概念,但其界面是網(wǎng)頁,也是一種特殊的HTML文本來描述的,如REF_Ref485480903\h圖130所示。圖STYLEREF1\s1SEQ圖\*ARABIC\s130Web應用程序Web項目會涉及更多的技術(shù),如HTML、CSS、Javascript等,這已超出本書的范圍內(nèi)。不過,本書學到的C#及相關(guān)知識完全可以應用到Web項目中。1.6面向?qū)ο蟪绦蛟O計的基本概念C#是面向?qū)ο蟮某绦蛟O計語言,面向?qū)ο蟮能浖_發(fā)和是當今計算機技術(shù)發(fā)展的重要成果和趨勢之一。本節(jié)介紹面向?qū)ο筌浖_發(fā)和面向?qū)ο蟪绦蛟O計中的基本概念和基本方法,使讀者對面向?qū)ο筌浖_發(fā)方法的體系、原則、基本思想和特點有—定的了解。對于初學者,可以略過此節(jié),等學過一段時間再回頭來看看比較抽象一些的描述。1.6.1面向?qū)ο蟾攀霾煌诿嫦蜻^程的程序設計中以具體的解題過程為研究和實現(xiàn)的主體,面向?qū)ο蟮某绦蛟O計(OOP)是以需解決的問題中所涉及到的各種對象為主要矛盾。在面向?qū)ο蟮姆椒▽W中,“對象”是現(xiàn)實世界的實體或概念在計算機邏輯中的抽象表示。具體地,對象是具有唯一對象名和固定對外接口的一組屬性和操作的集合,用來模擬組成或影響現(xiàn)實世界問題的一個或一組因素。其中對象名是區(qū)別于其他對象的標志;對外接口是對象在約定好的運行框架和消息傳遞機制中與外界通信的通道;對象的屬性表示了它所處于的狀態(tài);而對象的操作則用來改變對象的狀態(tài)達到特定的功能。對象的最主要特點是以數(shù)據(jù)為中心,它是一個集成了數(shù)據(jù)和其上操作的獨立、自恰的邏輯單位。面向?qū)ο蟮膯栴}求解就是力圖從實際問題中抽象出這些封裝了數(shù)據(jù)和操作的對象,通過定義屬性和操作來表述它們的特征和功能,通過定義接口來描述它們的地位及與其他對象的關(guān)系,最終形成一個廣泛聯(lián)系的可理解、可擴充、可維護、更接近于問題本來面目的動態(tài)對象模型系統(tǒng)。面向?qū)ο蟮某绦蛟O計將在面向?qū)ο蟮膯栴}求解所形成的對象模型基礎(chǔ)之上,選擇一種面向?qū)ο蟮母呒壵Z言來具體實現(xiàn)這個模型。相對于傳統(tǒng)的面向過程的程序設計方法,面向?qū)ο蟮某绦蛟O計具有如下的優(yōu)點:(1)對象的數(shù)據(jù)封裝特性徹底消除了傳統(tǒng)結(jié)構(gòu)方法中數(shù)據(jù)與操作分離所帶來的種種問題,提高了程序的可復用性和可維護性,降低了程序員保持數(shù)據(jù)與操作相容的負擔。(2)對象的數(shù)據(jù)封裝特性還可以把對象的私有數(shù)據(jù)和公共數(shù)據(jù)分離開,保護了私有數(shù)據(jù),減少了可能的模塊間干擾,達到降低程序復雜性、提高可控性的目的。(3)對象作為獨立的整體具有良好的自恰性,即它可以通過自身定義的操作來管理自己。一個對象的操作可以完成兩類功能,一是修改自身的狀態(tài),二是向外界發(fā)布消息。當一個對象欲影響其他的對象時,它需要調(diào)用其他對象自身的方法,而不是直接去改變那個對象。對象的這種自恰性能使得所有修改對象的操作都以對象自身的一部分的形式存在于對象整體之中,維護了對象的完整性,有利于對象在不同環(huán)境下的復用、擴充和維護。(4)在具有自恰性的同時,對象通過一定的接口和相應的消息機制與外界相聯(lián)系。這個特性與對象的封裝性結(jié)合在一起,較好地實現(xiàn)了信息的隱藏。即對象成為一只使用方便的“黑匣子”,其中隱藏了私有數(shù)據(jù)和細節(jié)內(nèi)容。使用對象時只需要了解其接口提供的功能操作即可,而不必了解對象內(nèi)部的數(shù)據(jù)描述和具體的功能實現(xiàn)。(5)繼承是面向?qū)ο蠓椒ㄖ谐庋b外的另一個重要特性,通過繼承可以很方便地實現(xiàn)應用的擴展和已有代碼的重復使用,在保證質(zhì)量的前提下提高了開發(fā)效率,使得面向?qū)ο蟮拈_發(fā)方法與軟件工程的新興方法——快速原型法很好地結(jié)合在一起。綜上所述,面向?qū)ο蟪绦蛟O計是將數(shù)據(jù)及數(shù)據(jù)的操作封裝在一起,成為一個不可分割的整體,同時將具有相同特征的對象抽象成為一種新的數(shù)據(jù)類型——類。通過對象間的消息傳遞使整個系統(tǒng)運轉(zhuǎn)。通過對象類的繼承提供代碼重用的有效途徑。在面向?qū)ο蟪绦蛟O計方法中,其程序結(jié)構(gòu)是一個類的集合和各類之間以繼承關(guān)系聯(lián)系起來的結(jié)構(gòu),有一個主程序,在主程序中定義各對象并規(guī)定它們之間傳遞消息的規(guī)律。從程序執(zhí)行這一角度來看,可以歸結(jié)為各對象和它們之間的消息通信。面向?qū)ο蟪绦蛟O計最主要的特征是各對象之間的消息傳遞和各類之間的繼承。1.6.2對象、類與實體1.對象對象的概念是面向?qū)ο蠹夹g(shù)的核心所在。以面向?qū)ο蟮挠^點看來,所有的面向?qū)ο蟮某绦蚨际怯蓪ο髞斫M成的,這些對象首先是自治、自恰的,同時它們還可以互相通信、協(xié)調(diào)和配合,從而共同完成整個程序的任務和功能。更確切地,面向?qū)ο蠹夹g(shù)中的對象就是現(xiàn)實世界中某個具體的物理實體在計算機邏輯中的映射和體現(xiàn)。比如,電視機是一個具體存在的,擁有外形,尺寸、顏色等外部特性和開關(guān)、頻道設置等實在功能的實體;而這樣一個實體,在面向?qū)ο蟮某绦蛑?,就可以表達成一個計算機可理解、可操縱、具有一定屬性和行為的對象。類也是面向?qū)ο蠹夹g(shù)中一個非常重要的概念。簡單地說,類是同種對象的集合與抽象。類是一種抽象的數(shù)據(jù)類型,它是所有具有一定共性的對象的抽象,而屬于類的某一個對象則被稱為是類的一個實例,是類的一次實例化的結(jié)果。如果類是抽象的概念,如“電視機”,那么對象就是某一個具體的電視機,如“我家那臺電視機”。2.對象的狀態(tài)與行為對象都具有狀態(tài)和行為。對象的狀態(tài)又稱為對象的靜態(tài)屬性,主要指對象內(nèi)部所包含的各種信息,也就是變量。每個對象個體都具有自己專有的內(nèi)部變量,這些變量的值標明了對象所處的狀態(tài)。當對象經(jīng)過某種操作和行為而發(fā)生狀態(tài)改變時,具體地就體現(xiàn)為它的屬性變量的內(nèi)容的改變。通過檢查對象屬性變量的內(nèi)容,就可以了解這個對象當前所處于的狀態(tài)。仍然以電視機為例。每一個電視機都具有以下這些狀態(tài)信息:種類、品牌、外觀、大小、顏色、是否開啟、所在頻道等。這些狀態(tài)在計算機中都可以用變量來表示。行為又稱為對象的操作,它主要表述對象的動態(tài)屬性,操作的作用是設置或改變對象的狀態(tài)。比如一個電視機可以有打開、關(guān)閉、調(diào)整音量、調(diào)節(jié)亮度、改變頻道等行為或操作。對象的操作一般都基于對象內(nèi)部的變量,并試圖改變這些變量(即改變對象的狀態(tài))。如“打開”的操作只對處于關(guān)閉狀態(tài)的電視機有效,而執(zhí)行了“打開”操作之后,電視機原有的關(guān)閉狀態(tài)將改變。對象的狀態(tài)在計算機內(nèi)部是用變量來表示,而對象的行為在計算機內(nèi)部是用方法來表示的。方法實際上類似于面向過程中的函數(shù)。對象的行為或操作定義在其方法的內(nèi)部。3.對象的關(guān)系一個復雜的系統(tǒng)必然包括多個對象,這些對象間可能存在的關(guān)系有三種:包含、繼承和關(guān)聯(lián)。(1)包含當對象A是對象B的屬性時,稱對象B包含對象A。例如,每臺電視機都包括一個顯像管。當把顯像管抽象成一個計算機邏輯中的對象時,它與電視機對象之間就是包含的關(guān)系。當一個對象包含另一個對象時,它將在自己的內(nèi)存空間中為這個被包含對象留出專門的空間,即被包含對象將被保存在包含它的對象內(nèi)部,就像顯像管被包含在電視機之中一樣,這與它是電視機組成部分的地位是非常吻合的。(2)繼承當對象A是對象B的特例時,稱對象A繼承了對象B。例如,黑白電視機是電視機的一種特例,彩色電視機是電視機的另一種特例。如果分別為黑白電視機和彩色電視機抽象出黑白電視機對象和彩色電視機對象,則這兩種對象與電視機對象之間都是繼承的關(guān)系。實際上,這里所說的對象間的繼承關(guān)系就是后面要詳細介紹的類間的繼承關(guān)系。作為特例的類稱為子類,而子類所繼承的類稱為父類。父類是子類公共關(guān)系的集合,子類將在父類定義的公共屬性的基礎(chǔ)上,根據(jù)自己的特殊性特別定義自己的屬性。例如彩色電視機對象除了擁有電視機對象的所有屬性之外,還特別定義了靜態(tài)屬性“色度”和相應的動態(tài)操作“調(diào)節(jié)色度”。(3)關(guān)聯(lián)當對象A的引用是對象B的屬性時,稱對象A和對象B之間是關(guān)聯(lián)關(guān)系。所謂對象的引用是指對象的名稱、地址、句柄等可以獲取或操縱該對象的途徑。相對于對象本身,對象的引用所占用的內(nèi)存空間要少得多,它只是找到對象的一條線索。通過它,程序可以找到真正的對象,并訪問這個對象的數(shù)據(jù),調(diào)用這個對象的方法。例如,每臺電視機都對應一個生產(chǎn)廠商,如果把生產(chǎn)廠商抽象成廠商對象,則電視機對象應該記錄自己的生產(chǎn)廠商是誰,此時電視機對象和廠商對象之間就是關(guān)聯(lián)的關(guān)系。關(guān)聯(lián)與包含是兩種不同的關(guān)系。廠商并不是電視機的組成部分,所以電視機對象里不需要也不可能保存整個廠商對象,而只需要保存一個廠商對象的引用,例如廠商的名稱。這樣,當需要廠商對象時,如當需要從廠商那里購買一個零件時,只需要根據(jù)電視機對象中保存的廠商的名字就可以方便地找到這個廠商對象。1.6.3封裝、繼承、多態(tài)所有的面向?qū)ο蟮木幊陶Z言,包括C#在內(nèi),都有3個最基本的共同特點:封裝、繼承和多態(tài)性。1.封裝封裝(Encapsulation)是這樣一種編程機制,它把代碼和其操作的數(shù)據(jù)捆綁在一起,從而防止了外部對數(shù)據(jù)和代碼的干擾和濫用,保證了數(shù)據(jù)和代碼的安全性。OO語言通過創(chuàng)建“自包含的暗箱”實現(xiàn)代碼和數(shù)據(jù)的捆綁。暗箱中包含所有必要的數(shù)據(jù)和代碼。代碼和數(shù)據(jù)以這種方式鏈接起來就創(chuàng)建了一個對象。換句話說,對象是一種支持封裝的設備。在一個對象中,代碼、數(shù)據(jù)或者兩者都可以是該對象私有的(private),也可以是公共的(public)。私有代碼或數(shù)據(jù)只能被本對象內(nèi)部的其他部分可見和可訪問。也就是說,私有代碼或數(shù)據(jù)不能被對象以外的程序塊所訪問。如果代碼或數(shù)據(jù)是公共的,程序的其他部分就可以訪問它,即使它們被定義在對象中。典型的做法是,對象的公共部分用來提供一個訪問該對象私有元素的受控接口。C#封裝的基本單位是“類”(class),類定義對象的格式。它規(guī)定數(shù)據(jù)和操作數(shù)據(jù)的代碼。C#使用類來規(guī)范構(gòu)建對象。對象是類的實例。所以說,類的本質(zhì)就是一套規(guī)定如何創(chuàng)建對象的計劃。組成類的代碼和數(shù)據(jù)叫做類的成員。具體地說,類中定義的數(shù)據(jù)叫做類的“成員變量”或者“實例變量”。操作數(shù)據(jù)的代碼叫做“成員方法”或“方法”。方法在C#中指的是一個子過程,或稱“函數(shù)”。2.繼承繼承(Inheritance)是一個對象獲得另一個對象的屬性的過程。它的重要性源于它支持按層次分類概念。這與現(xiàn)實世界是一致的,大多數(shù)知識因為層次化分類而變得容易掌握(即從上至下)。例如,紅色、美味的蘋果屬于蘋果類,而蘋果類又屬于水果類,并且最終屬于食物這個大類。食物類擁有許多屬性(可以吃,有營養(yǎng)等),邏輯上也適用于它的子類——水果。除了這些性質(zhì)以外,水果類還有許多特殊的性質(zhì)(多汁,甜等等)以使它區(qū)別于其他的食物。蘋果類定義了蘋果所獨有的屬性(長在樹上,不生長在熱帶等等)。紅色、美味的蘋果繼承了所有這些類,并且定義了那些屬于它的特有的屬性。如果不使用繼承,每一個對象都必須精確地定義它的全部屬性。使用繼承,一個對象可以從它父類繼承所有的通用屬性,而只需定義它特有的屬性。所以,正是繼承機制可以使一個對象成為一個更通用類的一個特例成為可能。3.多態(tài)性多態(tài)性(Polymorphism來自希臘語,意思是多種形態(tài))是指允許一個接口訪問動作的通用類的性質(zhì)。汽車方向盤就是多態(tài)性的一個簡單例子。不論你的汽車是手動轉(zhuǎn)向、動力轉(zhuǎn)向還是齒輪齒條轉(zhuǎn)向,操縱方法都是一樣的。不論什么樣的轉(zhuǎn)向系統(tǒng),向左轉(zhuǎn)動,方向盤將使汽車左轉(zhuǎn)。當然,這種統(tǒng)一接口的好處是一旦你會開車,你就可以駕駛各種車輛。同樣的規(guī)則也適用于編程。以堆棧(后入先出)為例,可能你的程序需要3種不同的堆棧類型,分別用于整數(shù)值、浮點數(shù)值和字符。在這里,雖然堆棧存儲數(shù)據(jù)類型不同,但每個堆棧的算法是相同的。在非OO語言中,需要創(chuàng)建3組不同名字的堆棧實用程序,但是,由于多態(tài)性,在C#中只需創(chuàng)建一套通用的堆棧實用程序來應付3種特定的情況。一般地,多態(tài)性的概念常被解釋為“一個接口,多種方法”。這意味著可以為一組相關(guān)活動設計一個通用接口。多態(tài)性允許用相同接口規(guī)定一個通用類來減輕問題的復雜度。選擇適當?shù)膭幼?方法)適應不同環(huán)境的工作則留給編譯器去做。作為編程者,無需手工去做這些事情,只需利用通用接口即可。1.6.4面向?qū)ο蟮能浖_發(fā)過程面向?qū)ο蟮能浖_發(fā)過程可以大體劃分為面向?qū)ο蟮姆治?ObjectOrientedanalysis,OOA)、面向?qū)ο蟮脑O計(Objectorienteddesign,OOD)、面向?qū)ο蟮膶崿F(xiàn)(Objectorientedprogramming,OOP)三個階段。1.面向?qū)ο蟮姆治雒嫦驅(qū)ο蟮姆治龅闹饕饔檬敲鞔_用戶的需求,并用標準化的面向?qū)ο蟮哪P鸵?guī)范地表述這一需求,最后將形成面向?qū)ο蟮姆治瞿P?,即OOA模型。分析階段的工作應該由用戶和開發(fā)人員共同協(xié)作完成。需求分析是要抽取存在于用戶需求中的各對象實體,分析、明確這些對象實體的靜態(tài)數(shù)據(jù)屬性和動態(tài)操作屬性以及它們之間的相互關(guān)系;更重要地,要能夠反映出由多個對象組成的系統(tǒng)的整體功能和狀態(tài),包括各
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度水稻種植與農(nóng)業(yè)休閑農(nóng)業(yè)融合發(fā)展合同
- 二零二五年度房產(chǎn)租賃權(quán)轉(zhuǎn)讓與租賃關(guān)系繼承合同
- 2025年度知識產(chǎn)權(quán)許可合同解除協(xié)議書模板
- 二零二五年度交通設施分攤費用共享協(xié)議
- 二零二五年度金融行業(yè)員工勞動集體合同(風險管理)
- 二零二五年度房屋抵押擔保企業(yè)節(jié)能減排貸款協(xié)議
- 二零二五停薪留職員工離職權(quán)益保障與就業(yè)創(chuàng)業(yè)輔導合同
- 二零二五年度國際學術(shù)研討會贊助協(xié)議
- 二零二五年度柴油價格風險管理合同
- Unit 6 Whose dress is this?Period 3 單元詞匯復習 同步練習(含答案)
- 戶外廣告制作安裝合同模板
- 廠房改公寓出租合同范例
- 污水處理廠SBR工藝的設計說明
- 城市軌道交通行車組織 課件 項目二任務六 車站行車組織作業(yè)
- 2025年國家自然科學基金委員會招聘流動編制人員59人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 歷史地理學研究-深度研究
- 2025江蘇太倉市城市建設投資集團限公司招聘易考易錯模擬試題(共500題)試卷后附參考答案
- 2.2 學會管理情緒(同步課件)2024-2025學年七年級道德與法治下冊(統(tǒng)編版2024)
- 14磁極與方向(教學設計)-二年級科學下冊(教科版)
- 2025年山西經(jīng)貿(mào)職業(yè)學院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 2024年09月江蘇2024年蘇州金融租賃校園招考筆試歷年參考題庫附帶答案詳解
評論
0/150
提交評論