2-5.撰寫程式碼的輔助---『註解』、『續行』與『收合』
(1).程式碼的註解
A.使用時機
(a).寫的程式如果很大,內容都是一些變數與指令運算,過完3個月後再重新回來看這個程式,常常都會忘了某些變數的意義、或是某些指令運算的用途了,
(b).所以為了方便日後閱讀所寫程式的內容,最好是在某些比較困難或是需要提醒的地方加上『註解』
B.方法:
(a).法1:使用『’』加在所要註解文字的前面
換言之,當程式在進行編譯時,只要遇到『’』,就會跳過『’』後面的文字而不編譯
被註解的文字將會以『綠色』來和一般文字作為區分
(b).法2:使用『REM』加在所要註解文字的前面
REM就是『註解』的英文Remark的簡寫
使用『REM』與使用『’』的功用是相同的
(2).程式碼的續行
A.使用時機
(a).寫的程式碼如果有一行太長了,導致在視窗上無法一個畫面就閱讀完,可以使用這個續行指令來讓一列程式碼分成兩列
B.方法:使用『 _』加在所要註解文字的前面
- 注意:_為下引線,而且必須前面加上一個空格
Visual Basic.Net教學講義PART 1
文章版權(Copyright)
本文寫作的目的是本著取之於社會(大 部分來自於Internet),理應回饋於社會的心態來寫作,所以本文是以Open Publication License的型態來發佈,本文作者仍保有本文著作權,但允許以任何形式加以重製或散佈,其他有未提及的部分均依照Open Publication License內的規定行之,Open Publication License全文請按此,本文著作權 屬洪世華所有。
本部分教學目標
1. 了解何謂程式語言
2. 了解第一代、第二代和第三代語言
3. 何謂第 四代語言和人工智慧語言
4. 了解Visaul Basic程式語言的歷史
5. 了解何謂OO(物件導向)和OOPL(物件導向程式設計語言)
6. 了解Visual Basic 6和Visual Basic.Net的差異
7. 了解何謂Microsoft .Net Framework
第一節 何謂程式語言
n 何謂程式(Program)
簡單來說,程式即是以電腦的程式語言之規則所寫出來和電腦溝通並命令電腦做事的一些敍述(Statements),中間這個程式語言又是什麼用途呢?我們知道電腦並無法直接了解人類的語言,理 所當然地並無法直接地接受人類的命令直接做事,所以電腦科學家便發明了程式語言當作中間語言以作為間接的溝通方式,而以程式語言的語法規則所寫出來的一些 敍述便可稱之為程式。
那麼一般而言,程式大致上有哪些構成要素?某位知名的電腦科學家說過:「程式=資料結構+演算法」,即程式中不可或缺的兩要素為資 料和演算法,資料是什麼大家當然都很清楚,比如說統計數 字,文字敍述等。而演算法則是用來操作那段資料的運算法則,它詳細描述了整個程式的運作流程,通常能完成一特 定功能。如果用點武俠風格的話來說,演算法就如同練武之人必練的外家拳路和 肌肉鍛鍊,資料(或叫資料結構)即如同練武之人必練的內 功心法,內力愈強,同一套拳法打演出來的會更加有威力。
第二節 第一代、第二代和第三代語言
n 第 一代程式設計語言 第 一代的程式語言即指最低階的程式語言-機器語言,早期電腦剛剛發展出來時,大約還在用真空管和打孔卡片寫程式的年代,很有可能就是直接用機器語言來寫程 式,當然用機器語言來寫程式是相當辛苦的一件事。因為機器語言只有電腦直接看得懂,對人類來說,要看得懂程式邏輯,得花很大的功夫訓練過。
n 第 二代程式設計語言 第 二代程式語言即指組合語言(Assembly Language),它只是 稍稍的把機器語言表示的更高階(接近人類看得懂程度)一點點,如把常用的算術加減法的機器語言,用ADD和SUB這一類的 助憶符號來取代機械碼的加法和減法,在此階段,用組合語言來寫程式又更高階了一些。
n 第 三代程式設計語言 第 三代語言一般即指程序式的程式語言,常見的有C語言和BASIC語 言和FORTRAN和COBOL和Pascal 等語言,其最主要的特色為第三代語言強調結構化的程式設計,每個第三代語言都會有三種共同結構,Œ循序結構(從第一行第二行第三行由上而下執行下來)�選擇結構(如If then else)Ž反覆結構(如迴圈)。
第三節 第四代語言和人工智慧語言
n 第 四代語言即指語言本身即內建了許多預先寫好的程式模組,程式師可根據程式需求,輸入應用程式中所需要的功能,第四代語言本身即會自動找出合適的程式模組達 成程式師所要的功能。
n 而AI(人工智慧語言)最有名的即是Prolog和Lisp, 以LISP而言,我們可以先將某些已知的事實,告訴LISP,和一般的推論方法,日後我們可以輸入一Question, LISP可以根據已知事實和推論方法,幫我們找到問題的答案。看起來好像電腦會自動思考一般。但LISP比 較不一樣的地方是,它屬於函數式程式語言,寫起來完全和C和BASIC和PASCAL的 習慣不一樣,函數式語言沒有像C和BASIC等語言,有變數和迴圈等結構,所以函數式語言有它自己的獨立一 套程式設計思維。
第四節 回顧Visual Basic程式語言的歷史
n Visual Basic語 言發展史 Visual Basic語言的老祖宗是BASIC語言,在早期它是採直 譯式(有BASICA或GWBASIC等直譯器),因為BASIC採直譯式,使得它易學易用,成為很多人的第一個學習的程式語 言,但它也有相關的缺點,從DOS時代的直譯式BASICA,一直到後來發展出DOS下的Quick Basic和Turbo Basic等,等到作業系 統進入視窗時代,便發展出了可以設計出視窗介面外觀的Visual Basic,強調的是快速應用程式快速發展(Rapid Application Development-RAD),使用VB來開發WINDWOS下的應用程式,開發時間著實節 省許多。
第五節 物件導向和物件導向程式設計語言
n 物 件導向 強 調的是程式設計時的一種思維方式,把應用程式當成一個我們欲建構出的軟體系統,所先看到的是系統中一個一個的物件,將物件相同的歸成一類,抽出同類物件中具有的共同行為和屬性,將其行為和屬性定義在 類別(Class)中,如此反覆此過程,我們最終會得到許多的類別定義,用C++的觀點來說,每一個CLASS都 等同於是一個使用者自訂型別,亦即除了BASIC和C++語言的字串和整數等內建DATA TYPE之外,用OOPL(物件導向程式設計語言,如JAVA 和C++和VB.Net和C# 等)來開發程式,都允許我們用類別機制,來為語言本身中 不足的DATA TYPE引入更多更合適的自訂DATA TYPE。
物件導向程式設計語言 即用物件導向思維方式(引入許多自訂 的DATA TYPE)的程式設計語言,常見的有JAVA和C+ +,在.Net架構下的物件導向程式設計語言,有VB.Net和C# 和VC++.Net等等,這是一個OOP大行其道的年代。
所謂的物件導向程式語言(OOPL) 即是指利用OO(Object Oriented)-物件導向技術來作為 主要編程風格的程式語言,而物件導向技術其主要的特色有三, 即Œ封裝�繼 承Ž多 型,而在物件導向技術中用來封裝程式碼的結構在Java和C++中即為Class,而 透過繼承我們可以達到程式碼的再利用,而多型則指method overloading或Operator Overloading和dynamic binding。最簡單的Operator Overloading,舉個例子來說,如加號可以用來 作算術的相加,比如說3+5,5+8等,但在BASIC語 言中也可用來作兩個字串的串連(如”你好!”+ “大衛!”, 用加號可以得到“你好!大衛!”串接後的單一較長字串。),Basic語言的加號可以有兩種以上不同功能作用的例子,即是一種運算子多載 (Operator Overloading)的極佳例子。
至於Dynamic Binding的 情況的解釋較為繁雜,留待後面章節再討論。
第六節 Visual Basic 6和Visual Basic.Net的異同
Visual Basic 6程式語言屬RAD工具的範疇,即程式語言本身就內建了許多可直接使用的元件(或叫控制項),可快速到應用佈置到應用程式的表單中(應用程式的表單可視為 此應用程式的主視窗),例如說,我們可以先佈置三個LABEL控制項和四個對應的TEXTBOX(文字輸入方塊),外加一個命令按鈕,我們可設計成當按下 此一命令按鈕時,即會自動抓取前三個文字方塊的值作加總並平均,然後顯示在第四個文字方塊中,此種程式的開發方式,不僅直觀易懂,將來視窗的外觀長得就如 同設計時期的VB表單一樣,所以是一種所見即所得的視窗應用程式開發方式。但VB6本身對OO物件導向的支援度不是非常全面,不能算是一種純的OOPL, 但到了VB.NET時,就完全脫胎換骨了,擁有和JAVA和C++一樣的OOPL機制,包括封裝,繼承和多型等一應俱全,甚至還主動支援垃圾收集 (Garbage Collections),而其實在純C++中是沒有支援Garbage Collections的,這方面的記憶體管理得要程式員自己來費心,但是經過擴充過的Visual C++.NeT也會主動支援垃圾收集,這方面有一個 術語可以注意一下,亦即用到.NET Class Library的程式語言,所寫出來的原始碼,我們統統把它們叫Managed Code-受管理的程式碼。在VB.NET中,我們甚至還可以自訂事件,以及規定何時會觸發這些自訂事件。而在VB6中或許就比較沒有這麼大的自由度。但 在VB6中,如果我們需要在表單中佈置一個月曆控制項,但VB6內建中沒有提供,那要怎麼辦呢?我們可以透過自己建立ActiveX元件的方式,自己建立 一個自己的月曆控制項,而你自己寫好的ActiveX月曆控制項也可以拿去和寫程式的好友分享。當然這一些在VB6時可以做到的功能,在VB.NET中同 樣也可以做得到,因為VB.NET經過重大改良,已和原來的VB6有很大不同,如果您以前學過JAVA或C++的話,轉移到VB.NET時,應不會有太大 的障礙。
(補充:
嚴格說起來,VB6頂多只能算是Event-Driven(事件驅動)式的程式語言,事件驅動簡單來說,就是整個程式一進入,就進入一個訊息迴圈之中,在 迴圈內它會不斷檢查進來的是哪一種訊息,再進一步的加以處理,比如說,使用者在一個按鈕上按了一下滑鼠左鍵,VB6就把訊息傳到該按鈕的Click事件程 序中加以處理,我們可以在Click事件程序內寫程式進去,把我們要作的動作回應(當使用者按了一下按鈕時)通通指定好(比如說秀一個小視窗,內寫著: 『你剛剛按了一下按鈕。』),以上我們稱之為Event-Driven式的程式設計,但VB6和VB.Net最大的不同在於,在VB.Net中加入了 OOP的3大特色,即 1.封裝2.繼承 3.多型,而這也是很多VB6程式人難以親近VB.Net的一個鴻溝,其實各位看倌,OOP語言之所以這麼強而有力,生產 力這麼強大,可維護性這麼高,全在於OO的3大特性,1.封裝2.繼承 3.多型,簡單來說學會了定義類別就學會了封裝,進而學到了類別間的繼承,以至於最後的多 型。結論是,VB6要放棄嗎?不是,我們該這麼問,何時才要趕快加入VB.Net陣營,就如C++包含了C語言,反過來則不是。VB6和VB.Net間的 關係也如同C/C++一般。相信這樣說,各位就會了解了。
)
第七節 Microsoft .Net Framework的來龍去脈
.Net Framework和以前的MFC一樣,同樣是屬一種將底層的API包裝後變成更高階可以使用的CLASS,都是一種Class Library,但.Net Framework的CLASS LIBRARY則包裝得更自然,易於使用,底層都是同樣的CLR(common language runtime), 所以同樣架構其上的各種語言,如C#,J#,VB.NET和VC+ +.NET,它們所使用的底層類別庫都是一樣的,亦即在CLR之上的每個程 式語言地位都平等,我用C#開發出來的元件,可以不用修 改地拿來給VB.NET繼承使用,或是給C+ +或是其他.NET的程式語言直接使用,如此一 來,在一個開發團隊中,不同的人可以用自己熟悉的語言來開發元件,然後可以彼此互相交流使用沒有障礙,此即所謂的跨語言開發(Cross Language Development)。
廣義而言, .Net Framework 2.0包含了:『 1. CLR(Common Language Runtime) 2. BCL(Base Class Library--基礎類別程式庫) 3. 使用BCL來寫程式的程式語言(如C++.Net或VB.Net或C#.Net等等)
我想我們都很清楚了程式語言可以用來 開發軟體(用.Net Framework開發好的軟體我們稱它為組件--Assembly), 之所以稱它為組件的用意我想很明顯, 在用BCL以及各種.Net Framework來開發的軟體過程中, 就像堆積木一樣(積木即BCL或.Net元件), 程式人員所作的工作就像創意家一樣, 發揮它的各種想像力和創造力, 堆積出各式各樣的組合積木出來(所以所開發出來的應用程式叫做組件--組件可以是 .exe 或是 .dll), 以下我們就各別的來看看以上所提到的三點。
1. CLR (Common Language Runtime) 相信有寫過JAVA程式的人一定都知道JVM (Java Virtual Machine)—Java執行時期的虛擬機器, 其實它也是JAVA軟體的一種Runtime Environment(簡稱Runtime), 其實用過VB6的人也都知道寫好的VB6要封裝時都會順便把VB6的相關執行時期DLL順便一起封裝進去, 那個就叫做VB6的Runtime Environment, 同樣的你寫好的VC++6程式, 要可以在客戶的機器上執行無礙, 也必須在客戶的電腦上在Setup時裝上必要的C++的相關DLL(那個叫做C++的Runtime), 各位試想用VB6寫就要自己的一套Runtime, 用VC++寫也要自己的一套Runtime, 而且用VC++寫的類別程式碼無法直接被VB6繼承來使用, 必須在VC++6中寫成DLL檔或COM元件來讓VB6呼叫使用, 造成使用VB6和使用VC++不同程式語言的人極大的隔閡與不便, 而且COM或COM+這樣高深的技術也只能讓初學者望COM而興嘆, 其實JVM本身是一個用來將程式語言和底層硬體分開的一種抽象層, 所以JAVA開發者它宣稱它可以寫一次然後可以到處跑(Write once and run anywhere), 亦即良好的跨平台特性, 說了這麼多, 其實CLR就像JVM一樣, 是一個用來隔開硬體的抽象層, 所以.Net的應用程式, 可以在Windows平台上執行無礙, 也可以在LINUX中順利地執行(LINUX下的CLR是由Open Source專案Mono所實作), 將來如果其他平台上的CLR實作也有了之後, 相信.Net程式要達到和JAVA一樣的跨平台特性就指日可待了。
2. BCL (Base Class Library) 在.Net Framework中亦提供了一組定義良好的類別庫可供程式開發人員使用, 就像以前在VC++6時代有一組MFC類別庫可供使用一般, 但是, 可別把.Net Framework BCL和MFC混為一談了, MFC算是棺材已經進了一半了, MFC有太多太多的缺點和歷史的包袱, .Net Framework BCL易學易用, 如果你已經掌握了BCL的使用訣竅, 日後你遇到新的BCL CLASS時, 所需的只是查閱MSDN的功夫而已, 真的是一點都不誇大。
3. 支援.Net的程式語言 目前支援.Net的程式語言多不勝數, 最常聽到的就屬C#, VC++.Net, VB.Net, J#.Net或Delphi.Net等等, 雖然這些各種不同的語言擁有各自的程式語法, 如果你習慣Basic語法, 你就選VB.Net, 如果你還是新手, 那不妨選原汁原味的C#, 如果你用慣C++, 那你可以選C++/CLI (算是第二代的C++.Net), 如果你習慣Pascal語法, 你可以選Delphi.Net。總而言之, 不管你所選的是哪一種語言, 它們用的類別庫通通都是一樣的, 都是.Net Framework BCL, 更妙的是用C++/CLI寫好的CLASS可以給任何其他的.Net語言繼承過來使用, 當然要寫成DLL類別庫供其他的語言來呼叫也是可以的。
4. MSIL(Microsoft Intermediate Language) 咦, 記得前面筆者並沒提到MSIL啊, 啊, 那一定是筆者給忘了, MSIL叫做微軟中繼語言, 算是一種中間碼, 拿JAVA作比較, MSIL就類似JAVA的byte code, 這樣如果學過JAVA的大大就懂了, 在第3點中提到的各種.Net程式語言, 經過編譯之後, 通通都會變成MSIL, 它本身並無法直接執行, 所以在.Net機制中就透過JIT式編譯(Just In Time Compiling), 在MSIL被喚起執行時, 會被JIT編譯器翻譯成目的機器的原生碼(Native Code), 然後再交給CLR去執行。
沒有留言:
張貼留言