




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章 程序設(shè)計(jì)語(yǔ)言
§2.1高級(jí)程序設(shè)計(jì)語(yǔ)言概述§2.2高級(jí)程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)計(jì)算的方式§2.3高級(jí)程序設(shè)計(jì)語(yǔ)言的基本特征
§2.4面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的基本特征§2.5網(wǎng)絡(luò)計(jì)算機(jī)時(shí)代的編程語(yǔ)言§2.6小結(jié)12.1高級(jí)程序設(shè)計(jì)語(yǔ)言概述
程序的表達(dá)手段是程序設(shè)計(jì)語(yǔ)言。程序設(shè)計(jì)語(yǔ)言是人-機(jī)交換信息的媒體;是表達(dá)軟件(程序)的工具;是人-人交換信息的工具。軟件的開(kāi)發(fā)和使用,協(xié)作開(kāi)發(fā)、使用修改都要讀程序,程序設(shè)計(jì)語(yǔ)言必須規(guī)范化和標(biāo)準(zhǔn)化。最初的語(yǔ)言是機(jī)器語(yǔ)言。機(jī)器語(yǔ)言在內(nèi)存中開(kāi)辟兩個(gè)區(qū):數(shù)據(jù)區(qū)存放數(shù)據(jù);指令區(qū)存放指令。CPU從指令區(qū)第一個(gè)地址開(kāi)始逐條取出指令并釋義執(zhí)行,直到所有的指令都被執(zhí)行完。一般的指令格式如下:操作碼操作數(shù)操作數(shù)表中列出了三種類(lèi)型的指令:2
DATA SEGMENT
XX DBX
YY DB? DATAENDS CODESEGMENT
ASSUMECS:CODE,DS:DATA START:MOVAX,DATA
MOVDS,AX
MOVAL,XX CMPAL,0
JGEBIGR MOVAL,0FFH
MOVYY,AL
HLT
JEEQUT BIGR:MOV AL,01H
MOV YY,AL
HLTEQUT:MOV YY,AL
HLTCODEENDS
ENDSTART ;數(shù)據(jù)段開(kāi)始;X值存入XX單元;YY單元留作存函數(shù)Y的值;以上是數(shù)據(jù)段;代碼段開(kāi)始;CS段中裝入代碼,DS段中裝入數(shù)據(jù);執(zhí)行開(kāi)始;;將XX中的值轉(zhuǎn)移到運(yùn)算器AL;將運(yùn)算器AL中的值與0比較;如果大于等于0就跳B(niǎo)IGR;X<0,將-1放入運(yùn)算器;將運(yùn)算器中的數(shù)移到Y(jié)Y中;停止;若等于0就跳到EQUT;將數(shù)01H移到運(yùn)算器;將運(yùn)算器中的數(shù)移到Y(jié)Y中
;運(yùn)算器中是0則移到Y(jié)Y中
;代碼段結(jié)束;結(jié)束MASM寫(xiě)的匯編程序3main(){intx,y;cinx;if(x>0)y=1elseif(x=0)y=0elsey=-1coutx,y;}
用類(lèi)VC編寫(xiě)的程序
VC程序更接近數(shù)學(xué)公式。與機(jī)器的運(yùn)算器、寄存器和內(nèi)存地址無(wú)關(guān)。高級(jí)語(yǔ)言是面向計(jì)算過(guò)程的,與解題的步驟有關(guān)。
42.2 高級(jí)程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)計(jì)算的方式機(jī)器只知道根據(jù)機(jī)器語(yǔ)言指令來(lái)執(zhí)行程序,高級(jí)語(yǔ)言程序必須通過(guò)翻譯變成機(jī)器語(yǔ)言程序,這個(gè)工作一般由翻譯程序自動(dòng)完成的。把一種語(yǔ)言翻譯成另一種語(yǔ)言的程序叫做翻譯器(如C++翻成C)。把高級(jí)語(yǔ)言程序翻譯成機(jī)器語(yǔ)言程序有兩種做法:編譯和解釋?zhuān)鄳?yīng)的翻譯程序分別叫做編譯器和解釋器。52.2.1 編譯器工作原理第一步詞法分析。一個(gè)高級(jí)語(yǔ)言程序是編譯(程序)器的輸入。編譯器逐行掃描程序,首先是識(shí)別符號(hào)串:關(guān)鍵字、字面量、標(biāo)識(shí)符(變量名、數(shù)據(jù)名)、運(yùn)算符、注釋行、特殊符號(hào)(續(xù)行、語(yǔ)句結(jié)束、數(shù)組等)這六類(lèi)符號(hào),分別歸類(lèi)等待處理。這個(gè)過(guò)程就是詞法分析(LexicalAnalysis)。第二步作語(yǔ)法分析(SyntaxAnalysis)。這時(shí)一個(gè)語(yǔ)句就作為一串記號(hào)(token)流由語(yǔ)法分析器處理。按照語(yǔ)言的文法檢查每個(gè)語(yǔ)法分析樹(shù),判定是否為合乎語(yǔ)法的句子。如果是合法句子就以?xún)?nèi)部格式把這個(gè)語(yǔ)法樹(shù)保存起來(lái),否則報(bào)錯(cuò)。這樣直至檢查完整個(gè)程序。第三步做語(yǔ)義分析(SemanticAnalysis)。對(duì)各句子的語(yǔ)法樹(shù)做檢查:運(yùn)算符兩邊類(lèi)型是否相兼容;作哪些類(lèi)型轉(zhuǎn)換(例如實(shí)數(shù)向整數(shù)賦值要取整);是否控制轉(zhuǎn)移到不該去的地方;是否有重名或者使語(yǔ)義含糊的記號(hào)等。如果有錯(cuò)轉(zhuǎn)到出錯(cuò)處理,否則生成中間代碼。6第四步中間代碼生成.中間代碼是向目標(biāo)碼即機(jī)器語(yǔ)言的代碼過(guò)渡的一種編碼,其形式盡可能和機(jī)器的匯編語(yǔ)言相似,以便下一步的代碼生成。中間碼不涉及具體機(jī)器的操作碼和地址碼。采用中間碼的好處是可以在中間碼上作優(yōu)化。第五步優(yōu)化。對(duì)中間碼程序做局部?jī)?yōu)化和全局優(yōu)化,使運(yùn)行更快,占用空間最小。局部?jī)?yōu)化是合并冗余操作、簡(jiǎn)化計(jì)算,例如x:=0;可用一條“清零”指令替換.全局優(yōu)化包括改進(jìn)循環(huán)、減少調(diào)用次數(shù)和快速地址算法等。第六步代碼生成。由代碼生成器生成目標(biāo)機(jī)器的目標(biāo)碼(或匯編)程序,要作數(shù)據(jù)分段、選定寄存器等工作,然后生成機(jī)器可執(zhí)行的代碼。第七步連接加載:高級(jí)語(yǔ)言源程序經(jīng)編譯后得到目標(biāo)碼程序,但它還不能立即裝入機(jī)器執(zhí)行,一般情況下它是不夠完整的。如程序中用到abs(),sin()這些函數(shù),可直接調(diào)用,不需求絕對(duì)值、求正弦的程序,已作為目標(biāo)碼存放在機(jī)器中。編譯后得到的目標(biāo)模塊還需進(jìn)行連接.連接程序(即Linker)找出需要連接的外部模塊并到模塊庫(kù)中找出被調(diào)用的模塊,調(diào)入內(nèi)存并連接到目標(biāo)模塊上,形成可執(zhí)行程序。把執(zhí)行程序加載(Loading)到內(nèi)存中合適的位置,即可執(zhí)行。72.2.2高級(jí)語(yǔ)言程序的解釋執(zhí)行
對(duì)高級(jí)語(yǔ)言源程序采取解釋執(zhí)行的方式.解釋執(zhí)行需要有一個(gè)解釋器(Interpreter),它將源代碼逐句讀入。先作詞法分析,建立內(nèi)部符號(hào)表;再作語(yǔ)法和語(yǔ)義分析,即以中間碼建立語(yǔ)法樹(shù),并作類(lèi)型檢查。完成檢查后把每一語(yǔ)句壓入執(zhí)行堆棧,壓入后立即解釋執(zhí)行。操作系統(tǒng)的命令、BASIC、VB、Prolog、LISP、Java、JavaScript、Postscript都是解釋執(zhí)行的,各種應(yīng)用軟件提供的界面語(yǔ)言(一般都很小)多半是解釋執(zhí)行的。解釋器不大,工作空間也不大,能根據(jù)程序執(zhí)行情況決定下一步做什么是它的優(yōu)點(diǎn),解釋執(zhí)行難于優(yōu)化、效率較低,是該語(yǔ)言的缺點(diǎn)。編譯型語(yǔ)言由于可進(jìn)行優(yōu)化(有的編譯器可作多次優(yōu)化),目標(biāo)碼效率很高,是目前軟件實(shí)現(xiàn)的主要方式。語(yǔ)言編寫(xiě)的源程序,都需要進(jìn)行編譯、連接,才能生成可執(zhí)行程序。編譯時(shí)花費(fèi)時(shí)間但程序的執(zhí)行效率提高。82.3高級(jí)程序設(shè)計(jì)語(yǔ)言的基本特征
高級(jí)程序設(shè)計(jì)語(yǔ)言從20世紀(jì)50年代以來(lái)己有一千多種,隨著軟件技術(shù)的發(fā)展不斷地出現(xiàn)新版本,每一個(gè)新版本都增加新的機(jī)制。下面介紹程序設(shè)計(jì)語(yǔ)言最基本的特征。2.3.1變量、表達(dá)式、賦值用高級(jí)語(yǔ)言編程是為了對(duì)數(shù)據(jù)實(shí)施計(jì)算,將輸入的數(shù)據(jù)經(jīng)過(guò)表達(dá)式的計(jì)算得到輸出數(shù)據(jù)。參與計(jì)算的數(shù)據(jù)、結(jié)果在編程時(shí)是不存在的。只能用變量表示它。如己知三角形三邊長(zhǎng)度求而積:s:=0.5*(a+b+c);area:=sqrt(s*(s-a)*(s-b)*(s-c));其中a,b,c,s,area是變量,0.5是常量,“+”和“*”是運(yùn)算符,sqrt是平方根函數(shù),它們構(gòu)成了表達(dá)式?!?=”是賦值號(hào)。表達(dá)式是常量、變量、函數(shù)調(diào)用或者由它們和運(yùn)算符組成的序列。表達(dá)式中的變量都是有值的.賦值號(hào)左端的變量在寫(xiě)程序時(shí)可以沒(méi)值,即使有值,計(jì)算執(zhí)行之后也會(huì)被賦成新值。用變量寫(xiě)程序的好處是通用,以上語(yǔ)句不僅可以算出三邊長(zhǎng)為3、4、5的三角形面積,任何三角形面積都可以算出(只要輸入a、b、c的正確值即可)。一個(gè)計(jì)算只要有了明確的數(shù)學(xué)表達(dá)式(也就是該計(jì)算的數(shù)學(xué)模型)編程是比較容易的.程序中的一條語(yǔ)句對(duì)應(yīng)著計(jì)算機(jī)的一條命令(用一條或多條指令來(lái)實(shí)現(xiàn))。一個(gè)賦值語(yǔ)句就是一條賦值命令。92.3.2程序的控制結(jié)構(gòu)程序約定自上向下、自左向右地執(zhí)行,即順序地執(zhí)行語(yǔ)句(或表達(dá)式)。但不僅限于此,計(jì)算機(jī)之所以能自動(dòng)計(jì)算,它能通過(guò)判斷將程序轉(zhuǎn)到應(yīng)該執(zhí)行的地方。人們就是通過(guò)巧妙地安排控制轉(zhuǎn)移,使計(jì)算機(jī)實(shí)施算法。1.最基本的程序控制語(yǔ)句無(wú)條件轉(zhuǎn)移語(yǔ)句:在匯編語(yǔ)言時(shí)代就有了Jump指令使執(zhí)行跳轉(zhuǎn),對(duì)應(yīng)的高級(jí)語(yǔ)言語(yǔ)句是無(wú)條件轉(zhuǎn)移語(yǔ)句:gotoloop;其中l(wèi)oop是跳轉(zhuǎn)到的語(yǔ)句的標(biāo)號(hào)(數(shù)字或標(biāo)識(shí)符)。條件轉(zhuǎn)移語(yǔ)句:加上條件判斷子句if(E)就是條件轉(zhuǎn)移語(yǔ)句:If(E)gotoloop;其中E是條件(布爾)表達(dá)式,求值結(jié)果是‘真’、‘假’值。如果為‘真’轉(zhuǎn)移到標(biāo)號(hào)為l的語(yǔ)句,為‘假’則按順序執(zhí)行下一條語(yǔ)句。有了這兩個(gè)語(yǔ)句再加上簡(jiǎn)單語(yǔ)句(賦值、調(diào)用、輸入/出),就可以實(shí)現(xiàn)程序的任何執(zhí)行控制。102.結(jié)構(gòu)化程序的控制結(jié)構(gòu)
goto語(yǔ)句相互交織使設(shè)計(jì)出的程序控制結(jié)構(gòu)成為不可分解的一個(gè)整體。盡管算法設(shè)計(jì)精巧,但牽一發(fā)而動(dòng)全身。程序一大,修改很困難。顯式使用goto
語(yǔ)句使得任何寫(xiě)錯(cuò)轉(zhuǎn)移語(yǔ)句標(biāo)號(hào)的小錯(cuò)誤都會(huì)導(dǎo)致滅項(xiàng)之災(zāi)。使程序控制邏輯是結(jié)構(gòu)化的,顯式使用goto
語(yǔ)句,程序依然難于閱讀。早期的編程語(yǔ)言是語(yǔ)句級(jí)的.用簡(jiǎn)單準(zhǔn)語(yǔ)句集合加goto構(gòu)成復(fù)雜的程序控制。然而顯式地使用goto語(yǔ)句是極其危險(xiǎn)的。這是因?yàn)椋喝N結(jié)構(gòu)化的基本控制結(jié)構(gòu)11出了錯(cuò)易于找出錯(cuò)誤并修改易閱讀導(dǎo)致易擴(kuò)充、修改,大程序易于分析。程序控制結(jié)構(gòu)清晰,是它用關(guān)鍵字控制程序塊(語(yǔ)句組)。任何控制轉(zhuǎn)移不能進(jìn)入這些控制塊,除非入口。塊中轉(zhuǎn)出也不能直接轉(zhuǎn)到程序其他處,只能轉(zhuǎn)到出口。在出/入口增加檢查語(yǔ)句就使得程序錯(cuò)誤真正局部化。程序塊級(jí)(語(yǔ)句組)控制采用語(yǔ)句括號(hào)使程序邏輯與表示法結(jié)構(gòu)完全一致??芍苯泳幊?。程序語(yǔ)言結(jié)構(gòu)化以后,編程對(duì)流程圖的依賴(lài)就很少了。Nassi-Schneldermann提出了結(jié)構(gòu)化流程圖(主要取消流線(xiàn)及箭頭),因沒(méi)有直接用類(lèi)似結(jié)構(gòu)化編程語(yǔ)言的偽代碼方便而沒(méi)有流行起來(lái)。結(jié)構(gòu)化控制結(jié)構(gòu)的優(yōu)點(diǎn):12無(wú)假塊條件分支和嵌套if語(yǔ)句
if(E)thenSTendif
if(E1)thenS1elseifE2thenS2…elseSm
endif
無(wú)假塊條件語(yǔ)句是正規(guī)條件語(yǔ)句的簡(jiǎn)化,很常用。嵌套語(yǔ)句在否定部分用關(guān)鍵字elseif,有的語(yǔ)言用elsif。只有當(dāng)所有條件均有‘假’時(shí)才執(zhí)行else塊。逐個(gè)檢查m個(gè)條件效率很低,有時(shí)似無(wú)必要。3.結(jié)構(gòu)化編程語(yǔ)言的其他控制結(jié)構(gòu)結(jié)構(gòu)化程序只需三種基本結(jié)構(gòu)重復(fù)和嵌套。但為了方便編程,第三代語(yǔ)言派生出許多結(jié)構(gòu)。以下簡(jiǎn)略說(shuō)明。(1)條件分支13case語(yǔ)句也叫分情形語(yǔ)句。根據(jù)條件變量Z的值單獨(dú)執(zhí)行S1,S2…,Sn,執(zhí)行完Si自動(dòng)跳到endcase(C語(yǔ)言例外,它要加上break才跳。否則執(zhí)行Si+1到Sn)。case語(yǔ)句流程圖14(2)循環(huán)結(jié)構(gòu)do-until和for結(jié)構(gòu)
do-until語(yǔ)句形式是doSuntilE,先執(zhí)行再判斷,若E為‘真’不再循環(huán)。正好和先判斷再執(zhí)行的do-while語(yǔ)句是相反的。將它改成do-while結(jié)構(gòu)十分容易。條件取反,先執(zhí)行一次S塊。do-until流程圖15for-do語(yǔ)句以控制變量增減值或枚舉集合值計(jì)數(shù)的循環(huán)。for-do是do-while的另一種變體結(jié)構(gòu),其書(shū)寫(xiě)格式有多種變體。
for-do流程圖16(3)順序控制gotoloop 多數(shù)語(yǔ)言作為歷史遺留保留,不提倡使用,Java取消了該語(yǔ)句。break C/C++中用于跳出塊到endcase(switch)。continue 僅用于循環(huán),立即結(jié)束本次循環(huán),作下次循環(huán)。exit 立即跳到末端出口。abort(STOP)強(qiáng)行停止本程序。delayXX 延遲XX時(shí)間后繼續(xù)執(zhí)行。raise-exception 引發(fā)異常,處理異常。執(zhí)行了raise后跳到exception指明的異常處理段執(zhí)行,處理后不再返回。在Java、C++中是try-catch-finally語(yǔ)句,把可能出現(xiàn)異常的代碼放入try塊(它包含catch、finally兩種塊),通過(guò)throw引發(fā),catch捕捉后處理,finally為可選的善后處理。通常把一切影響正常順序執(zhí)行的,如調(diào)用/返回、前跳、延遲、異常、控制語(yǔ)句都?xì)w為順序控制。常見(jiàn)的有以下語(yǔ)句:172.3.3 數(shù)據(jù)類(lèi)型計(jì)算機(jī)中計(jì)算對(duì)象(不管是常量、變量)都是有類(lèi)型的,不能把一個(gè)實(shí)數(shù)和邏輯‘真’值(true)相加。指出數(shù)據(jù)類(lèi)型的一個(gè)目的就是要避免這類(lèi)錯(cuò)誤的發(fā)生。各語(yǔ)言轉(zhuǎn)換函數(shù)(inttoreal或realtoint)不盡相同,有的是把類(lèi)型名作為轉(zhuǎn)換函數(shù)名,不兼容的類(lèi)型,如整數(shù)和布爾一般不能轉(zhuǎn)換,但C語(yǔ)言例外。18常用的基本類(lèi)型int/integer 整型對(duì)應(yīng)為數(shù)學(xué)中整數(shù)real/float/double 實(shí)型(浮點(diǎn)類(lèi)型)對(duì)應(yīng)為數(shù)學(xué)中實(shí)數(shù)logical/Boolean 布爾型(邏輯型)只有‘真’、‘假’值char/character 字符型ASCII碼的所有可見(jiàn)字符string 字符串類(lèi)型enum 枚舉類(lèi)型,用戶(hù)預(yù)定義的一串標(biāo)識(shí)符最常見(jiàn)的最基本的數(shù)據(jù)類(lèi)型就是純量類(lèi)型,程序設(shè)計(jì)語(yǔ)言提供了下面幾種基本數(shù)據(jù)類(lèi)型:floatx,y; //x,y是單精度浮點(diǎn)數(shù)intiCount,doubledbPert//整型和雙精浮點(diǎn)conststringsPASSWORD=”Espresso”//串常量boolfFinished//布爾型變量CommandButtona //對(duì)象變量variantmyVar //變體變量符號(hào)常量、變量則要先聲明類(lèi)型才能使用。例如VC中可以這樣聲明:19數(shù)組類(lèi)型
數(shù)組的特征是所有元素均為同一類(lèi)型。charstr[15];
聲明了16個(gè)元素的數(shù)組,每個(gè)元素都是字符串類(lèi)型。因?yàn)殡[含數(shù)組每一元素從0下標(biāo)開(kāi)始,聲明時(shí)只要指出下標(biāo)值的上界。如果每一元素又是一數(shù)組那么就可以得到如矩陣一樣的二維數(shù)組:doubleMatrix[9][9];是10*10=100元素的方陣,元素類(lèi)型為雙精度浮點(diǎn)數(shù)。第一下標(biāo)是行,第二下標(biāo)是列。使用時(shí)只能一個(gè)元素接著一個(gè)元素去賦值。Matrix(2,3)=30.23//第3行第4列元素賦以30.23變量代表單個(gè)數(shù)據(jù)值叫純量變量。如果代表多個(gè)(數(shù)組)或多種(記錄)值就叫它結(jié)構(gòu)型數(shù)據(jù)的變量。先來(lái)說(shuō)數(shù)組:20記錄類(lèi)型
structperson{ charname[15];intage; charsex[8]; chartelnumber[15]; charlable[9];}student[99];相同或不同類(lèi)型數(shù)據(jù)組成的結(jié)構(gòu)叫記錄.記錄型記錄了對(duì)象的屬性信息,記錄的各個(gè)組成部分,稱(chēng)為記錄域,各個(gè)域的數(shù)據(jù)類(lèi)型可以不相同。下面給出用VC聲明的一個(gè)例子:21指針類(lèi)型指針類(lèi)型是一種很重要的數(shù)據(jù)類(lèi)型,但同時(shí)也是一種簡(jiǎn)單卻不大好理解的數(shù)據(jù)類(lèi)型。在講述指針之前,首先來(lái)看一個(gè)例子(采用C語(yǔ)言來(lái)描述):
int i; //定義一個(gè)整型變量I i=1; //i賦值為1 i=i+1; //表達(dá)式計(jì)算 計(jì)算機(jī)語(yǔ)言中的變量代表的只是計(jì)算機(jī)內(nèi)存中的一個(gè)存儲(chǔ)單元。這個(gè)單元中存放的內(nèi)容是變化的,所以把它叫做變量。
每個(gè)變量都有一個(gè)名字(標(biāo)識(shí)符),對(duì)應(yīng)為存儲(chǔ)單元的地址,存儲(chǔ)單元的內(nèi)容為變量的值。引用變量的值時(shí)直接把變量名放到用值的地方(賦值語(yǔ)句的兩邊)。程序運(yùn)行時(shí)按地址存取內(nèi)容。如果某個(gè)變量的值是內(nèi)存中的地址.這個(gè)變量叫指針變量。指針變量示意圖22C語(yǔ)言中指針類(lèi)型,以類(lèi)型指明符‘*’表示。它所指向的對(duì)象是有類(lèi)型的。
inti,*p;//聲明i為整型,P為整型對(duì)象的指針charc,*pCh;//聲明c為字符型,pCh
為指向字符里對(duì)象指針
‘*’放在變量標(biāo)識(shí)符之前,出現(xiàn)在類(lèi)型標(biāo)識(shí)符之后,指明它所修飾的標(biāo)識(shí)符是指向該類(lèi)型對(duì)象的指針.p是指向整型的指針,*p是p所指向的無(wú)名變量的代名詞.聲明完成后變量p有存儲(chǔ)單元但無(wú)內(nèi)容.
C語(yǔ)言中指針類(lèi)型232.3.4過(guò)程及數(shù)據(jù)傳遞函數(shù)sin的自變量(參數(shù))為x,并指出其函數(shù)(返回)值是Double類(lèi)型.每當(dāng)程序中出現(xiàn)求正弦時(shí),直接調(diào)用該過(guò)程,稱(chēng)函數(shù)引用,即引用該函數(shù)的(返回)值。一個(gè)主程序中寫(xiě)三段相似代碼的執(zhí)行情況是一樣的,只是省寫(xiě)了兩次,多了三次實(shí)參和形參匹配(置換)的執(zhí)行過(guò)程。求正弦值的程序被分離開(kāi)來(lái),可以被多次調(diào)用,這種分離出來(lái)的部分叫子例程(routine),執(zhí)行完后依然返回原處。帶返回值的叫函數(shù)過(guò)程,不帶返回值的叫子例程過(guò)程.簡(jiǎn)稱(chēng)子程序。在C語(yǔ)言中統(tǒng)稱(chēng)為函數(shù)。使用過(guò)程可以降低程序復(fù)雜性、提高編程效率、使程序結(jié)構(gòu)變得消晰明了。過(guò)程(函數(shù))24函數(shù)的語(yǔ)法形式類(lèi)型標(biāo)識(shí)符函數(shù)名(形式參數(shù)表)形式參數(shù)說(shuō)明{說(shuō)明部分語(yǔ)句}函數(shù)的返回值通過(guò)return語(yǔ)句返回。返回值的類(lèi)型為定義的函數(shù)類(lèi)型,若return語(yǔ)句中表達(dá)式類(lèi)型與函數(shù)類(lèi)型不一致,則轉(zhuǎn)換為函數(shù)類(lèi)型。無(wú)返回值的函數(shù),定義為void類(lèi)型。若無(wú)參數(shù),寫(xiě)void是被初始化的內(nèi)部變量,壽命和可見(jiàn)性?xún)H限于函數(shù)內(nèi)部若不說(shuō)明類(lèi)型,一律自動(dòng)按整型處理,若為void即為無(wú)返回C語(yǔ)言函數(shù)的定義及調(diào)用25函數(shù)有兩類(lèi)庫(kù)函數(shù)I/O,分類(lèi),轉(zhuǎn)換,診斷,目標(biāo)控制,圖形,接口,進(jìn)程控制,處理,數(shù)學(xué),文本窗口,內(nèi)存,雜務(wù),時(shí)間和日期用戶(hù)自定義函數(shù)從使用角度C語(yǔ)言中函數(shù)的作用,就與其它程序中的子程序一樣,以模塊的形式出現(xiàn),而且允許一個(gè)函數(shù)被多次調(diào)用,但不允許自己調(diào)函數(shù)自己本身。26函數(shù)有兩類(lèi)函數(shù)形式角度有參函數(shù),定義:類(lèi)型標(biāo)識(shí)符,函數(shù)名(形式參數(shù)分配表列)形參說(shuō)明{說(shuō)明部分語(yǔ)句 }無(wú)參函數(shù),定義:類(lèi)型標(biāo)識(shí)符,函數(shù)名(){說(shuō)明部分語(yǔ)句}27函數(shù)的調(diào)用調(diào)用前先說(shuō)明函數(shù)原型:在調(diào)用函數(shù)的說(shuō)明部分按如下形式說(shuō)明:類(lèi)型標(biāo)識(shí)符被調(diào)用函數(shù)名(含類(lèi)型說(shuō)明的形參表)調(diào)用形式函數(shù)名(實(shí)參)嵌套調(diào)用C語(yǔ)言不允許嵌套定義,但可以嵌套調(diào)用遞歸調(diào)用函數(shù)直接或間接調(diào)用自身計(jì)算機(jī)軟件技術(shù)基礎(chǔ)28/**例***函數(shù)的定義和調(diào)用,兩數(shù)相加**************/main(){floatadd(floatx,floaty);floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}floatadd(floatx,floaty){floatz;z=x+y;return(z);}29/****例*******庫(kù)函數(shù)的調(diào)用***********************//*Thisprogramusesthetextwindowsfunctionsto*//*demonstratetheuseofthelibraryfunction*/#include"stdio.h"#include<stdlib.h>#include<conio.h>#include<graph.h>main(){inti,j;charbuffer[80];_clearscreen(_GCLEARSCREEN);_setvideomode(_TEXTC80);
clearthescreensetthedisplayascolorandtextmodel30while(!kbhit()){for(i=0;i<=15;i++){_settextcolor(i);for(j=48;j<=90;j++){/*sprintfisafunctionwhichtransfertheascii*//*value(j)tocharformatandthenstoreintothe*//*arraynamedasbufferinthisprogram*/sprintf(buffer,"%c",j);_outtext(buffer);}}}}16kindsoftextcolorshowtheasciivaluefrom48to90,i.e.form0~9,:;<=>?@,A~Z31/***例***函數(shù)返回值為定義的函數(shù)類(lèi)型,*//*由于已定義為int型,輸入實(shí)數(shù)就出錯(cuò)**/main(){inta,b,c,d;floate;printf("Pleaseinputthreedatas\n");scanf("%d,%d,%d",&a,&b,&c);d=max(a,max(b,c));e=max(a,max(b,c));printf("Thelargestdatainputedis%d\n",d);printf("Thelargestdatainputedis%f\n",e);}max(x,y)intx,y;{intz;z=x>y?x:y;return(z);}322.3.5變量的生命期和Static變量
程序中變量生命期隨其聲明所在程序塊而異。程序一執(zhí)行完它的所有數(shù)據(jù)變量均失去意義,它所在的存儲(chǔ)區(qū)則可另行分配其他程序裝入執(zhí)行。因此,主程序中變量的生命期比過(guò)程中變量生命期要長(zhǎng),內(nèi)嵌的子過(guò)程其變量生命期更短,最長(zhǎng)的是文件變量,它放入磁盤(pán),程序沒(méi)有了它依然存在,所以按“生命期”的長(zhǎng)短有:持久變量 除非人為銷(xiāo)毀全局變量 出了程序便失去定義靜態(tài)局部變量 見(jiàn)下文自動(dòng)變量(局部變量) 出了所在塊便失去定義循環(huán)控制變量 出了循環(huán)便失去定義常常有一種需要,一個(gè)局部變量在它所在的局部程序塊消失后依然保留其值,又不希望它是全局變量被該局部塊以外的程序引用。例如偽隨機(jī)數(shù)發(fā)生器,為使偽隨機(jī)數(shù)每次調(diào)用新值,則上次數(shù)是生成下次數(shù)的種子,如不希望其他操作影響這個(gè)發(fā)生器,此時(shí)用Static(靜態(tài))變量更方便。332.3.6 輸入/輸出
程序的輸入/輸出分作兩大類(lèi):一類(lèi)是程序之間以文件形式進(jìn)行數(shù)據(jù)傳遞;另一類(lèi)是人一機(jī)交互,把人們可識(shí)別的形式(字符串、數(shù))按一定格式輸入到程序變量中。輸出則相反,按用戶(hù)要求的格式顯示或打印。這一般由高級(jí)程序設(shè)計(jì)語(yǔ)言以過(guò)程調(diào)用(標(biāo)準(zhǔn)過(guò)程)的形式實(shí)現(xiàn)。過(guò)程在高級(jí)語(yǔ)言?xún)?nèi)部通過(guò)調(diào)用操作系統(tǒng)的系統(tǒng)調(diào)用完成。Scanf(“%d%d%d,&n1,&n2,&n3)/*%d表示讀入一個(gè)十進(jìn)制整數(shù),&n1表示讀到n1的存儲(chǔ)單元中。*/Printf(“DF,CF=%12.7%12.7f\n”,df,cf)輸出:DF,CF=__35.2272410___0.0000000C語(yǔ)言的輸出語(yǔ)句功能很強(qiáng)且具有計(jì)算功能;輸出變量處直接寫(xiě)表達(dá)式,可以輸出其結(jié)果值。例如:Printf(“DF,CF=%12.7f%12.7f\n”,a+b*df,3.0/7.0)C語(yǔ)言把格式合并到輸入(scanf)和輸出(printf)函數(shù)中,這組函數(shù)在終端上功能很強(qiáng),一般形式是輸入/出一個(gè)串,串中特殊符號(hào)“%”批示格式,出現(xiàn)幾次“%”串后跟幾個(gè)待輸入/出的變?cè)@纾?42.4面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的基本特征面向?qū)ο笳Z(yǔ)言是過(guò)程語(yǔ)言的進(jìn)一步發(fā)展,面向?qū)ο蟪绦蛟O(shè)計(jì)(90年代-現(xiàn)在)(ObjectOrientedProgramming—OOP)模塊:(對(duì)象)類(lèi)---屬性(數(shù)據(jù))和方法(操作或功能)組成代表語(yǔ)言:Smalltalk,C++,Java程序設(shè)計(jì)范式=對(duì)象+消息人眼睛,鼻子..,直立行走…吃飯、走路、笑、工作…汽車(chē)發(fā)動(dòng)機(jī),輪子…陸地行進(jìn)、變速、變向…2.4.1面向?qū)ο蟪绦蛟O(shè)計(jì)概述
351、面向?qū)ο蠛兔嫦蜻^(guò)程程序設(shè)計(jì)面向過(guò)程程序設(shè)計(jì):功能抽象(核心)、自頂向下設(shè)計(jì)、逐步求精(基本思想)面向?qū)ο蟪绦蛟O(shè)計(jì):對(duì)象的抽象(類(lèi))和封裝(核心)、類(lèi)的認(rèn)定和設(shè)計(jì)以及建立在類(lèi)上的類(lèi)組織關(guān)系。362、面向過(guò)程程序設(shè)計(jì)舉例學(xué)生注冊(cè)管理系統(tǒng)的設(shè)計(jì)過(guò)程對(duì)當(dāng)前系統(tǒng)進(jìn)行任務(wù)設(shè)計(jì)(模塊化)任務(wù)分解(子任務(wù)模塊化)子任務(wù)在分解,…….,一直到原子任務(wù)算法實(shí)現(xiàn)原子任務(wù)。373、面向?qū)ο蟪绦蛟O(shè)計(jì)舉例學(xué)生注冊(cè)管理系統(tǒng)的設(shè)計(jì)過(guò)程學(xué)生類(lèi)的認(rèn)定(學(xué)生信息屬性、學(xué)生信息的操作)學(xué)生類(lèi)的設(shè)計(jì)(數(shù)據(jù)成員、函數(shù)成員)應(yīng)用程序的實(shí)現(xiàn)classstudent{
private:charname[20];intage;boolsex;………
public:search();edit();insert();del();save();……};voidmain(){studentsts[87];sts[0].edit();…}38類(lèi)與抽象數(shù)據(jù)類(lèi)型(封裝和接口)C/S模式和消息傳遞繼承多態(tài)(重載和虛函數(shù))模板(*)C++的異常處理(*)組件技術(shù)(*)4、面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念392.4.2類(lèi)與抽象數(shù)據(jù)類(lèi)型暴露接口、隱藏實(shí)現(xiàn)細(xì)節(jié)用戶(hù)沒(méi)有必要知道實(shí)現(xiàn)細(xì)節(jié)開(kāi)發(fā)者需要修正開(kāi)發(fā)過(guò)程中留下的bug,以及升級(jí)的需要C++中使用關(guān)鍵字private對(duì)信息進(jìn)行隱藏,public公開(kāi)類(lèi)的接口信息隱藏封裝(encapsulation)就是把每個(gè)對(duì)象的數(shù)據(jù)(屬性)和操作(行為)包裝在一個(gè)類(lèi)中,并盡可能隱藏對(duì)象的內(nèi)部細(xì)節(jié)。一般限制直接訪(fǎng)問(wèn)對(duì)象的屬性,而應(yīng)通過(guò)操作接口訪(fǎng)問(wèn),這樣使程序中模塊之間關(guān)系更簡(jiǎn)單、數(shù)據(jù)更安全。對(duì)程序的修改也僅限于類(lèi)的內(nèi)部,使得由于修改程序所帶來(lái)的影響局部化。40類(lèi)的組成=數(shù)據(jù)成員(屬性)+函數(shù)成員(方法)將數(shù)據(jù)成員和函數(shù)成員結(jié)合成一個(gè)有機(jī)整體的過(guò)程,就是封裝封裝的有機(jī)整體就是抽象數(shù)據(jù)類(lèi)型,C++中稱(chēng)之為類(lèi)面向?qū)ο蟮姆椒ㄟM(jìn)行分析設(shè)計(jì)時(shí)首先需要確定抽象數(shù)據(jù)類(lèi)型,也就是類(lèi)的認(rèn)定。換一個(gè)角度,抽象數(shù)據(jù)類(lèi)型也是面向?qū)ο蠓椒ㄖ袑?duì)事物的一個(gè)抽象概括,如上面的classStudent,該類(lèi)就是對(duì)學(xué)生信息的一個(gè)概括。類(lèi)的具體實(shí)例稱(chēng)為對(duì)象,對(duì)象是對(duì)抽象數(shù)據(jù)類(lèi)型的一個(gè)具體化,如studentzhangsan;可以生成一個(gè)具體的學(xué)生對(duì)象zhangsan.[注]在面向?qū)ο蟪绦蛟O(shè)計(jì)中,int類(lèi)型也可以被看成抽象數(shù)據(jù)類(lèi)型。inta;就說(shuō)明了一個(gè)整型對(duì)象a.41封裝和面向?qū)ο蟪绦?22.4.3C/S模式與消息使用面向?qū)ο蠓绞皆O(shè)計(jì)和實(shí)現(xiàn)的程序具有與眾不同的編程模式。在面向?qū)ο蟪绦蛑?,?lèi)和對(duì)象表現(xiàn)為服務(wù)器,使用類(lèi)和對(duì)象的模塊(如C++中的函數(shù))表現(xiàn)為客戶(hù),客戶(hù)通過(guò)特殊的方式請(qǐng)求服務(wù),這個(gè)方式就是消息(消息可以包含參數(shù))??蛻?hù)/服務(wù)器模式消息(message)相當(dāng)于過(guò)程語(yǔ)言的過(guò)程調(diào)用,可帶實(shí)在參數(shù):方法(method)則相當(dāng)于過(guò)程定義,帶參數(shù)也是形式參數(shù),一定要有方法體(執(zhí)行語(yǔ)句集).面向?qū)ο笾兄挥邢⒁环椒?,沒(méi)有過(guò)程調(diào)用一過(guò)程體的說(shuō)法。舉例:zhangsan.insert(s);可以把zhangsan這個(gè)對(duì)象的信息添加到一個(gè)對(duì)象數(shù)組中。432.4.4繼承性繼承性:是自動(dòng)地共享類(lèi)、子類(lèi)和對(duì)象中的方法和數(shù)據(jù)的機(jī)制,它是面向?qū)ο蠹夹g(shù)所獨(dú)有的。繼承性支持代碼重用。繼承的傳遞性:如果C1繼承C2,C2繼承C3,則C1(間接)繼承C3。多重繼承:一個(gè)子類(lèi)具有多個(gè)超類(lèi)時(shí),它可以繼承它們的結(jié)構(gòu)和方法。舉例:classPerson{charIDcard[18];charname[20];………..};classStudent:publicPerson{charstudentcode[8];chardeparment[15];……………};Student類(lèi)繼承了Person類(lèi)的屬性和方法。44類(lèi)繼承的實(shí)例:假設(shè)某公司的雇員分為兩類(lèi):計(jì)時(shí)雇員和月薪雇員,而他們的工資計(jì)算方式是不同的。比如月薪員工有醫(yī)療保險(xiǎn)而計(jì)時(shí)員工卻沒(méi)有。月薪員工又分為兩類(lèi):專(zhuān)業(yè)人員和項(xiàng)目經(jīng)理。類(lèi)似地,他們的工資計(jì)算方式也是不同的。比如項(xiàng)目經(jīng)理可以有項(xiàng)目提成而專(zhuān)業(yè)人員則沒(méi)有。顯然,首先要定義一個(gè)雇員類(lèi),它記錄了所有雇員都擁有的屬性和方法。然后再定義一個(gè)計(jì)時(shí)雇員類(lèi),它繼承了雇員類(lèi)的屬性和方法,并有自己專(zhuān)有的屬性和方法,同樣,月薪員工繼承了雇員類(lèi)的屬性和方法并有自己的專(zhuān)有特性。當(dāng)然,根據(jù)需要,可以再定義兩個(gè)類(lèi):專(zhuān)業(yè)人員類(lèi)和項(xiàng)目經(jīng)理類(lèi),它們都是月薪員工類(lèi)的子類(lèi)。經(jīng)過(guò)分析,可得到圖所示的類(lèi)繼承圖.雇員信息繼承關(guān)系45每個(gè)類(lèi)的屬性和方法如下:462.4.5多態(tài)性多態(tài)性:(polymorphism)是指允許不同類(lèi)的對(duì)象對(duì)同一消息作出的響應(yīng)不相同。即允許把同一消息發(fā)送給超類(lèi)及其子類(lèi)不同對(duì)象的能力。一般類(lèi)中定義的屬性或行為,被特殊類(lèi)繼承后,可以具有不同的數(shù)據(jù)類(lèi)型或者是表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在一般類(lèi)及其各個(gè)特殊類(lèi)中具有不同的語(yǔ)義多態(tài)性作用:允許超類(lèi)及各子類(lèi)的對(duì)象各自以不同的方法響應(yīng)同一消息,即所謂的“同一接口,多種方法”。在實(shí)際使用的時(shí)候有2種方式:編譯時(shí)的多態(tài)性——靜態(tài)連編:編譯時(shí)就將對(duì)象和方法的代碼連接起來(lái),其優(yōu)點(diǎn)是執(zhí)行速度快,所需內(nèi)存小,缺點(diǎn)是靈活性差;運(yùn)行時(shí)的多態(tài)性——?jiǎng)討B(tài)連編:運(yùn)行時(shí)才按照具體的數(shù)據(jù)類(lèi)型和參量數(shù)來(lái)確定將哪個(gè)方法同對(duì)象連接起來(lái),其優(yōu)點(diǎn)是具有相當(dāng)大的靈活性,有利于建立類(lèi)庫(kù),便于重用和擴(kuò)充。47多態(tài)性舉例
voidEmployee::Print_List(){ Employee*Scan; for(Scan=Link;Scan!=NULL;Scan=Scan->Link) Print_Empl();};voidManager::Print_List(){ cout<<”\n\nManager:\n”;//打印經(jīng)理題頭
Print_Empl();//打印經(jīng)理記錄數(shù)據(jù)
cout<<”\nEmployeeSupervised:\n”; Employee::Print_List();//打印所轄雇員表};注意到上述類(lèi)中有許多方法是同名的,但是,由于它們所屬類(lèi)不同,編譯器不會(huì)弄混。例如Print_List方法:這時(shí)p一>Print_List()就是多態(tài)的,有時(shí)是父類(lèi)Employee實(shí)例的數(shù)據(jù),有時(shí)是子類(lèi)Manager實(shí)例數(shù)據(jù),因?yàn)槊嫦驅(qū)ο笤试S子類(lèi)實(shí)例就是父類(lèi)實(shí)例。*p所代表的既可以是雇員也可以是經(jīng)理,這種多態(tài)性的好處是不因雇員經(jīng)理數(shù)量多少而更改程序.48總之:通過(guò)使用面向?qū)ο蟪绦蛟O(shè)計(jì)的抽象、封裝、繼承和多態(tài)性等機(jī)制,程序更易于維護(hù)、更新和升級(jí)。利用代碼可重用性,程序員可以在程序中大量使用成熟的類(lèi)庫(kù),從而縮短程序的開(kāi)發(fā)時(shí)間,提高程序員的工作效率和程序的可靠性。492.5網(wǎng)絡(luò)計(jì)算機(jī)時(shí)代的編程語(yǔ)言網(wǎng)絡(luò)時(shí)代的軟件部署:面向?qū)ο笳Z(yǔ)言和技術(shù)是分布式客戶(hù)/服務(wù)器計(jì)算時(shí)代的產(chǎn)物??蛻?hù)站點(diǎn)即客戶(hù)對(duì)象,服務(wù)器站點(diǎn)就是服務(wù)器對(duì)象,它們相互發(fā)消息,共同協(xié)作完成應(yīng)用。它們可以建立在局域網(wǎng)、廣域網(wǎng)上,把每個(gè)對(duì)象安裝到各個(gè)站點(diǎn)上。網(wǎng)絡(luò)時(shí)代的軟件開(kāi)發(fā):分布式客戶(hù)/服務(wù)器計(jì)算時(shí)代,服務(wù)器提供的程序往往是事先編好了的.客戶(hù)端只要編一些“使用”服務(wù)器提供的“服務(wù)”(程序運(yùn)行后的結(jié)果)的簡(jiǎn)單對(duì)象(程序),就完成了應(yīng)用開(kāi)發(fā)。只有不存在這種服務(wù)時(shí)才去開(kāi)發(fā)服務(wù)器端的程序。再者,開(kāi)發(fā)客戶(hù)端和服務(wù)器端程序也不是像單主機(jī)計(jì)算時(shí)代那樣,基本上是從第一句寫(xiě)到最后一句,而是在系統(tǒng)提供的控件、構(gòu)件(系統(tǒng)類(lèi))的基礎(chǔ)上,選定參數(shù)生成實(shí)例對(duì)象。網(wǎng)絡(luò)時(shí)代的軟件應(yīng)用:Internet把全世界計(jì)算資源聯(lián)接起來(lái),世界上有無(wú)數(shù)資源,如何找到它是關(guān)鍵問(wèn)題。找到之后,只需訂閱(租賃),到時(shí)候發(fā)消息,它回復(fù)你計(jì)算結(jié)果。這如同打電話(huà)付費(fèi)一樣?!败浖褪欠?wù)”,可以想象,應(yīng)用程序使用發(fā)生了重大變化。網(wǎng)絡(luò)時(shí)代軟件開(kāi)發(fā)專(zhuān)業(yè)的分工:軟件開(kāi)發(fā)多限于應(yīng)用服務(wù)提供商(ASP),他們可以做得十分完關(guān)。在自己選定的業(yè)務(wù)范田內(nèi),把功能件做成標(biāo)準(zhǔn)的構(gòu)件.并由他們自己升級(jí)維護(hù):使用者只要有一個(gè)連接各種服務(wù)的小程序,開(kāi)發(fā)者的工作重心是問(wèn)題分析、建立計(jì)算模型、建立計(jì)算框架、連接上選定的構(gòu)件(填滿(mǎn)框架)。網(wǎng)絡(luò)計(jì)算:簡(jiǎn)介502.5.1HTML和XML
HTML:網(wǎng)絡(luò)計(jì)算在網(wǎng)站之間傳遞的是主頁(yè)。主頁(yè)按http協(xié)議傳遞,頁(yè)面格式是HTML(超文本標(biāo)記語(yǔ)言)。每個(gè)站點(diǎn)上都有瀏覽器可以識(shí)別以約定標(biāo)簽標(biāo)記過(guò)的正文,標(biāo)簽成對(duì)形如:<tag>正文</tag>,標(biāo)簽層層嵌套,如一本書(shū)先章、節(jié)、段落后復(fù)合語(yǔ)句、簡(jiǎn)單語(yǔ)句。經(jīng)過(guò)標(biāo)記之后一段正文信息就成為結(jié)構(gòu)化數(shù)據(jù)。傳到另一站點(diǎn)后,瀏覽器讀出這段正文,就原封不動(dòng)地轉(zhuǎn)移了,即使是圖文并茂的多媒體文檔也照傳無(wú)誤。XML:但HTML約定的60多個(gè)標(biāo)簽表達(dá)能力有限。它只知道傳遞的內(nèi)容是符號(hào)串和二進(jìn)制塊。于是,人們發(fā)展了可以由用戶(hù)定義標(biāo)簽的XML可擴(kuò)展的置標(biāo)語(yǔ)言)語(yǔ)言,從而可描述頁(yè)面的數(shù)據(jù)內(nèi)容。頁(yè)面格式由XSL或CSS子語(yǔ)言描述.XML可描述數(shù)據(jù)關(guān)系比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如圖、表、樹(shù)、索引文件和數(shù)據(jù)庫(kù)中定義的數(shù)據(jù)關(guān)系。在數(shù)據(jù)庫(kù)服務(wù)器站點(diǎn)上根據(jù)不同客戶(hù)要求,從庫(kù)中取出數(shù)據(jù)放入XML文檔,傳送到不同站點(diǎn)的客戶(hù)機(jī)上,各站點(diǎn)上的客戶(hù)就可以按標(biāo)簽理解并使用它們。腳本語(yǔ)言:盡管HTML和XML在當(dāng)今萬(wàn)維網(wǎng)上傳送信息(寫(xiě)主頁(yè))是不可或缺的工具,但它們不是傳統(tǒng)意義上的編程語(yǔ)言.它們只能描述、傳遞數(shù)據(jù),不能表達(dá)對(duì)這些數(shù)據(jù)的操作.也就是客戶(hù)接到數(shù)據(jù)庫(kù)中的數(shù)據(jù)后還要自己編寫(xiě)程序完成數(shù)據(jù)處理。為此,發(fā)展了各種腳本語(yǔ)言,腳本語(yǔ)言隨同Web頁(yè)面一起傳送到另一站點(diǎn),該站點(diǎn)的瀏覽器叮以立即執(zhí)行。512.5.2腳本語(yǔ)言有常規(guī)的基本類(lèi)型和算術(shù)邏輯運(yùn)算,有弱化的可變類(lèi)型;有變量、表達(dá)式、賦值語(yǔ)句;有if--then_else和迭代控制(do_while、for_do);有函數(shù)和過(guò)程調(diào)用機(jī)制;有封裝和可見(jiàn)性控制(public、private):與可視界面、鍵盤(pán)、鼠標(biāo)聯(lián)系緊密。借助可視界面工具編程。而可視界面本身是用面向?qū)ο髮?shí)現(xiàn)的。例如,窗體就是類(lèi),在其中定義屬性(全局變量)和方法或事件,運(yùn)行時(shí)給出值就是實(shí)例對(duì)象。支持事件驅(qū)動(dòng),用戶(hù)或其他對(duì)象可隨機(jī)驅(qū)動(dòng);一般都有到大語(yǔ)言的接口:有限定的背景(應(yīng)用領(lǐng)域)。例如,支持一般小型Windows應(yīng)用程序,如VB(VBScript):支持?jǐn)?shù)據(jù)庫(kù)應(yīng)用.如Delphi、PowerBuilder:支持網(wǎng)絡(luò)客戶(hù)端應(yīng)用的,如JavaScript;支持打印控制的,如PostScript、PCL。腳本語(yǔ)言(ScriptLanguage)是小型的編程語(yǔ)言.它是依附于某一特定環(huán)境下的編程語(yǔ)言,它們的特點(diǎn)是:腳本語(yǔ)言的語(yǔ)法特征小巧而簡(jiǎn)單多采用解釋執(zhí)行源代碼。基于對(duì)象而不是面向?qū)ο螅ㄖ挥姓Z(yǔ)言?xún)?nèi)定義的簡(jiǎn)單繼承,沒(méi)有用戶(hù)定義的繼承,甚至沒(méi)有顯式的類(lèi)機(jī)制)。522.5.3網(wǎng)絡(luò)編程語(yǔ)言為了在網(wǎng)絡(luò)各結(jié)點(diǎn)上共同完成協(xié)作計(jì)算,為了程序能隨主頁(yè)到處傳送,迫切需要一個(gè)全新的與平臺(tái)無(wú)關(guān)的編程語(yǔ)育。因?yàn)橐延械木幊陶Z(yǔ)言和本機(jī)操作系統(tǒng)聯(lián)系太深,編譯后的目標(biāo)碼就是所在機(jī)器的目標(biāo)碼,特別是編譯后優(yōu)化代碼完全要取決于目標(biāo)碼指令系統(tǒng)不同的機(jī)器。同一源代碼程序在兩個(gè)機(jī)器上生成的目標(biāo)碼程序不同早有定論。1996年由Sun公司研制的Java可以做到平臺(tái)無(wú)關(guān).以下結(jié)合Java語(yǔ)言介紹網(wǎng)絡(luò)編程語(yǔ)言的特點(diǎn)。Java稱(chēng)為純面向?qū)ο笳Z(yǔ)言,它在C++成功的基礎(chǔ)上,進(jìn)行了創(chuàng)新改進(jìn),采取“改造”C++的策略,基本是C++哪里不合適就改哪里.53Java虛擬機(jī)(JVM)的建立.所謂虛擬機(jī)就是不管你操作系統(tǒng)的平臺(tái)是什么,建立一個(gè)解釋Java代碼的執(zhí)行系統(tǒng)(RuntimeSystem),正確地執(zhí)行。本機(jī)操作系統(tǒng)是實(shí)在地機(jī)器執(zhí)行系統(tǒng).是實(shí)現(xiàn)虛擬機(jī)的手段。每臺(tái)機(jī)器若都能實(shí)現(xiàn)虛擬機(jī)的功能,則Java的平臺(tái)無(wú)關(guān)性就得到第一層的保證。第二層,執(zhí)行的代碼必須統(tǒng)一。Java源代碼是統(tǒng)一的,但編程可執(zhí)行代碼就不一定了。如不同類(lèi)型字長(zhǎng)不統(tǒng)一,有的整型數(shù)32位,有的64、128位。再如復(fù)合操作碼本可簡(jiǎn)化操作.但不同系統(tǒng)復(fù)合習(xí)慣不同,帶來(lái)微小差別……所以,Java采用泛代碼(Unicode)的中間碼技術(shù)。泛代碼也叫字節(jié)碼(bytecode),操作碼和最小字長(zhǎng)都是16位的雙字節(jié)。這樣,Java源代碼變?yōu)樗刑摂M機(jī)都可執(zhí)行的中間碼,保證大家對(duì)Java源程序理解一樣,執(zhí)行結(jié)構(gòu)一樣。其示意圖如下所示。平臺(tái)無(wú)關(guān)54JVM上執(zhí)行Java程序的過(guò)程
55編譯----解釋執(zhí)行Java代碼是解釋執(zhí)行的,這是指它的中間代碼。從Java源代碼要經(jīng)過(guò)編譯器Javac翻譯,這不妨礙源程序在類(lèi)庫(kù)支持下派生類(lèi),因?yàn)轭?lèi)支持也是中間碼。Java虛擬機(jī)首先要裝入類(lèi),檢查代碼(安全)后解釋執(zhí)行。為了提高解釋效率,發(fā)展了即時(shí)編譯技術(shù)(Just-in-time)。即對(duì)于多次重復(fù)或耗時(shí)較長(zhǎng)的段落編譯后,作為模塊暫存,下次遇到則直接執(zhí)行目標(biāo)碼。即時(shí)編譯技術(shù)目前還在向智能化方向發(fā)展。更為純粹的面向?qū)ο笳Z(yǔ)言Java無(wú)全程變量,無(wú)主函數(shù)main(),從而函數(shù)全改方法。類(lèi)中的方法均缺省為‘虛’函數(shù),更加支持動(dòng)態(tài)加載。取消C++中的模板而用動(dòng)態(tài)的實(shí)例類(lèi)型化Object類(lèi)。為了封裝更干凈,取消了C++的頭文件和C的預(yù)處理。一個(gè)或多個(gè)功能相關(guān)的類(lèi)組成為包(package,即名字空間),從而為構(gòu)件規(guī)范化提供了基礎(chǔ)。支持多線(xiàn)程多線(xiàn)程即共享資源的并行執(zhí)行的‘子進(jìn)程’??梢蕴岣邎D形用戶(hù)界面的交互性能。C++中多線(xiàn)程是由程序員控制鎖來(lái)完成的。Java的Java.lang包提供Thread類(lèi)大為簡(jiǎn)化了多線(xiàn)程就用程序的開(kāi)發(fā)。線(xiàn)程概念后面介紹。56方法型構(gòu)(接口)和方法體可以顯式分開(kāi)在C++中己經(jīng)實(shí)現(xiàn),方便了編程和修改。只要接口(及其所帶參數(shù))不變,方法體可隨意修改而不影響該方法的程序。然而,把接口作為類(lèi)型有其更深遠(yuǎn)的意義。接口類(lèi)是一組方法型構(gòu)而無(wú)方法體,除有常量外沒(méi)有屬性。接口類(lèi)和普通類(lèi)一樣可以嵌套和繼承,且可以多繼承,可以聲明接口實(shí)例。接口類(lèi)由普通類(lèi)實(shí)現(xiàn)(寫(xiě)出各方法的體)。比C++的強(qiáng)類(lèi)型更強(qiáng),要求顯示方法聲明,編譯器可以發(fā)現(xiàn)錯(cuò)誤消息。取消了指針,杜絕了內(nèi)存的非法訪(fǎng)問(wèn)。增設(shè)自動(dòng)無(wú)用單元回收集,減少內(nèi)存分配帶來(lái)的問(wèn)題。特
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年湖南三一工業(yè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)學(xué)生專(zhuān)用
- 2025年環(huán)保節(jié)能型冷卻塔項(xiàng)目合作計(jì)劃書(shū)
- 2025年廣東水利電力職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及參考答案
- 機(jī)器學(xué)習(xí)原理與應(yīng)用電子教案 5.8混合高斯模型
- 機(jī)器學(xué)習(xí)原理與應(yīng)用電子教案 2.4數(shù)學(xué)基礎(chǔ)
- 第13課 猜拳游戲-交互式動(dòng)畫(huà) 教學(xué)設(shè)計(jì) -2023--2024學(xué)年清華大學(xué)版(2012)初中信息技術(shù)八年級(jí)上冊(cè)
- 2025年哈爾濱科學(xué)技術(shù)職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及參考答案
- 2025年貴州航天職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)必考題
- 2025年河南工業(yè)和信息化職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)參考答案
- 內(nèi)蒙古烏海市2023-2024學(xué)年高二上學(xué)期期中測(cè)試地理試題(解析版)
- DBJ50-T-100-2022 建筑邊坡工程施工質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 2025年中考語(yǔ)文模擬試卷(含答案解析)
- 2025年寧夏工商職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025版校園樂(lè)器銷(xiāo)售代理與服務(wù)協(xié)議3篇
- DB11-T 1004-2023 房屋建筑使用安全檢查評(píng)定技術(shù)規(guī)程
- 2024-2025年天津河西區(qū)七年級(jí)上學(xué)期期末道德與法治試題(含答案)
- 《藝術(shù)與傳播》課件
- 烹飪安全知識(shí)培訓(xùn)課件
- 預(yù)制板粘貼碳纖維加固計(jì)算表格
- 2025年海南農(nóng)墾自然資源開(kāi)發(fā)集團(tuán)有限公司筆試題
- 2023CSCO兒童及青少年白血病診療指南
評(píng)論
0/150
提交評(píng)論