軟件技術(shù)基礎(chǔ)第三版課后習(xí)題答案_第1頁
軟件技術(shù)基礎(chǔ)第三版課后習(xí)題答案_第2頁
軟件技術(shù)基礎(chǔ)第三版課后習(xí)題答案_第3頁
軟件技術(shù)基礎(chǔ)第三版課后習(xí)題答案_第4頁
軟件技術(shù)基礎(chǔ)第三版課后習(xí)題答案_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

真誠為您提供優(yōu)質(zhì)參考資料,若有不當(dāng)之處,請指正。第二章程序設(shè)計(jì)語言計(jì)算機(jī)工作是執(zhí)行相應(yīng)程序,程序規(guī)定了執(zhí)行的動作和動作的執(zhí)行順序。程序的表達(dá)手段是程序設(shè)計(jì)語言。程序設(shè)計(jì)語言是人-機(jī)交換信息的媒體;是表達(dá)軟件(程序)軟件的開發(fā)和使用,協(xié)作開發(fā)、使用修改都要讀程序,程序設(shè)計(jì)語言必須規(guī)范化和標(biāo)準(zhǔn)化。程序設(shè)計(jì)語言是與計(jì)算機(jī)通信創(chuàng)造的語言,嚴(yán)格、小巧,沒有二義性(語句執(zhí)行只有一個(gè)解釋)。最初的語言是機(jī)器語言。機(jī)器語言在內(nèi)存中開辟兩個(gè)區(qū):數(shù)據(jù)區(qū)存放數(shù)據(jù);指令區(qū)存放指令。編譯型語言由于可進(jìn)行優(yōu)化(有的編譯器可作多次優(yōu)化),目標(biāo)碼效率很高,對高級語言源程序采取解釋執(zhí)行的方式.解釋執(zhí)行需要有一個(gè)解釋器 (Interpreter),它將源代碼逐句讀入。先作詞法分析,建立內(nèi)部2.3.1變量、表達(dá)式、賦值程序中的一條語句對應(yīng)著計(jì)算機(jī)的一條命令(用一條或多條指令來實(shí)現(xiàn))。一個(gè)賦值語句就是一條賦值命令。程序約定自上向下自左向右地執(zhí)行,即順序地執(zhí)行語句(或表達(dá)式)。最基本的程序控制語句其中l(wèi)oop是跳轉(zhuǎn)到的語句的標(biāo)號(數(shù)字或標(biāo)識符),加上條件判斷子句if(E)就是條件轉(zhuǎn)移語句:有了這兩個(gè)語句再加上簡單語句(賦值、調(diào)用、輸入/出),就可以實(shí)現(xiàn)程序的任何執(zhí)行控制。最基本的程序控制有以下三種:順序執(zhí)行簡單語句序列S=S1;S2;…;Sn選擇執(zhí)行結(jié)構(gòu)化程序的控制結(jié)構(gòu)早期的編程語言是語句級的.用簡單準(zhǔn)語句集合加goto構(gòu)成復(fù)雜的程序控制。然而顯式地使用goto語句是極其危險(xiǎn)的。這是因?yàn)椋骸oto語句相互交織使設(shè)計(jì)出的程序控制結(jié)構(gòu)成為不可分解的一個(gè)整體。盡管算法設(shè)計(jì)精巧,但牽一發(fā)而動全身。程序一大,修改很困難。顯式使用goto語句使得任何寫錯(cuò)轉(zhuǎn)移語句標(biāo)號的小錯(cuò)誤都會導(dǎo)致滅項(xiàng)之災(zāi)。使程序控制邏輯是結(jié)構(gòu)化的,顯式使用goto語句,程序依然難于閱出了錯(cuò)易于找出錯(cuò)誤并修改易閱讀導(dǎo)致易擴(kuò)充、修改,大程序易于分析。程序控制結(jié)構(gòu)清晰,是它用關(guān)鍵字控制程序塊(語句組)。任何控制轉(zhuǎn)移不能進(jìn)入這些控制塊,除非入口。塊中轉(zhuǎn)出也不能直接轉(zhuǎn)到程序其他處,只能轉(zhuǎn)到出口。在出/入口增加檢查語句就使得程序錯(cuò)誤真正局部化。程序塊級(語句組)控制采用語句括號使程序邏輯與表示法結(jié)構(gòu)完全一致??芍苯泳幊?。程序語言結(jié)構(gòu)化以后,編程對流程圖的依賴就很少了。Nassi-Schneldermann提出了結(jié)構(gòu)化流程圖(主要取消流線及箭頭),因沒有直接用類似結(jié)構(gòu)化編程語言的偽代碼方便而沒有流行起來。結(jié)構(gòu)化編程語言的其他控制結(jié)構(gòu)結(jié)構(gòu)化程序只需三種基本結(jié)構(gòu)重復(fù)和嵌套。但為了方便編程,第三代語言派生出許多結(jié)構(gòu)。以條件分支無假塊條件分支和嵌套if語句if(E)thenSTendif無假塊條件語句是正規(guī)條件語句的簡化,很常用。嵌套語句在否定部分用關(guān)鍵字elseif,有的語case語句循環(huán)結(jié)構(gòu)除了doSwhileE之外,還有do-until和for結(jié)構(gòu)。不再循環(huán)。正好和先判斷再執(zhí)行的do-while語句是相反的。將它改成do-while結(jié)構(gòu)十分容易。條件取反,先執(zhí)行一次S塊。以控制變量增減值或枚舉集合值計(jì)數(shù)的循環(huán)。for-do是do-while的另一種變體結(jié)構(gòu),其書寫格式do-while-do語句2.3.3數(shù)據(jù)類型計(jì)算機(jī)中計(jì)算對象(不管是常量、變量)都是有類型的,不能把一個(gè)相加。指出數(shù)據(jù)類型的一個(gè)目的就是要避免這類錯(cuò)誤的發(fā)生。各語言轉(zhuǎn)換函數(shù)(inttoreal或realtiont)不盡相數(shù)組類型變量代表單個(gè)數(shù)據(jù)值叫純量變量。如果代表多個(gè)(數(shù)組)或多種(記錄)值就叫它結(jié)構(gòu)型數(shù)據(jù)的變量。先bigArray(1)=ages)使用時(shí)用二維索引BigArray(0,7)=Names記錄類型引入記錄數(shù)據(jù)類型:相同或不同類型數(shù)據(jù)組成的結(jié)構(gòu)叫記錄.記錄型記錄了對象的屬性信息,記錄的各個(gè)組成部分,稱為記錄域,各個(gè)域的數(shù)據(jù)類型可以不相同。下面給出用VB聲明的一個(gè)例子:EndType(或一行值)稱作元組(tuples),由屬性變量的值組成。每個(gè)屬性變量指明了一個(gè)(取值)域.也叫字段。有了這個(gè)類型就可以聲明記錄型變量。該變量在運(yùn)算中只能按域取指針類型指針類型是一種很重要的數(shù)據(jù)類型,但同時(shí)也是一種簡單卻不大好理解的數(shù)據(jù)類型。在講述指針之前,首先來看一個(gè)例子(采用C語言來描述):I=i+1;//i賦值為1在上面的例子中,首先定義一個(gè)整數(shù)型變量,然后設(shè)該變量的值為1。在第三行使用了一個(gè)賦值能成立!所以,計(jì)算機(jī)語言中的變量并不是數(shù)學(xué)意義上的變量,它代表的只是計(jì)算機(jī)內(nèi)存中的一個(gè)存儲單元。這個(gè)單元中存放的內(nèi)容是變化的,所以把它叫做變量。每個(gè)變量都有一個(gè)名字(標(biāo)識符),對應(yīng)為存儲單元的XXX,存儲單元的內(nèi)容為變量的值。引用變量的值時(shí)直接把變量名放到用值的地方(賦值語句的兩邊)。程序運(yùn)行時(shí)按XXX存取內(nèi)容。如果某個(gè)變量的值是內(nèi)存中的XXX.這指針.p是指向整型的指針,*p是p所指向的無名變量的代名詞.聲明完成后變量p有存儲單元但無內(nèi)容.int1.&r=i;程序分離開來,簡稱過程,可以多次調(diào)用。分離出來的部分叫子例程(routine),執(zhí)行完后依然返回原處的叫子例程過程.簡稱子程序。函數(shù)的自變量(參數(shù))為x,并指出其函數(shù)(返回)值是Double類型.每當(dāng)程序中出現(xiàn)求正弦時(shí),直接調(diào)用該過程,稱函數(shù)引用,即引用該函數(shù)的(返回)值。一個(gè)主程序中寫三段相似代碼的執(zhí)行情況是一樣的,只是省寫了兩次,多了三次實(shí)參和形參匹配(置換)的執(zhí)行過程。函數(shù)過程是參數(shù)化(更抽象)的程序。使用過程還可以降低程序復(fù)雜性、使程序結(jié)構(gòu)變得消晰明了。假設(shè)有一個(gè)主程序引用了30個(gè)函數(shù),每個(gè)函數(shù)引用了100次,如果在每個(gè)引用函數(shù)的地方都要寫出函數(shù)的代碼的話,程序?qū)⒆兊檬址彪s。如果使用函數(shù),就顯得簡明清晰。還可以提高編程效率。許多可以標(biāo)準(zhǔn)化的函數(shù),可以事先編寫調(diào)試好,放到函數(shù)庫中,使用時(shí)直接調(diào)用即可。過程的定義從過程關(guān)鍵字開始到過程結(jié)束之間的一段封閉的程序就是過程定義,它由型構(gòu)(signature)和過程體(body)組成,以下是兩種過程定義的結(jié)構(gòu):FunctionFname(形式參數(shù)表)AS返回類型‘本行為函數(shù)型構(gòu)’真誠為您提供優(yōu)質(zhì)參考資料,若有不當(dāng)之處,請指正。[類型和數(shù)據(jù)聲明]EndFuncsub名字《形式參數(shù)表》[類型和數(shù)據(jù)聲明]EndSub‘本行是子程序型構(gòu)’‘以下是子程序體語句集以上可以看到除了關(guān)鍵字和形參表外過程和一般的程序沒什么兩樣。函數(shù)過程型構(gòu)只比子程序型構(gòu)多一個(gè)返回類型。有的語言規(guī)定函數(shù)名必須在函數(shù)體中至少在賦值號左邊出現(xiàn)一次,以便帶回返回值,如VB。有的語言可指定任何返回表達(dá)式,如C。主程序中的數(shù)據(jù)通過型構(gòu)的形參表進(jìn)入過程。在過程中也可以聲明數(shù)據(jù),不過這類數(shù)據(jù)與主程序沒什么關(guān)系,主程序中無法訪問它們,它們是局部變量。局部變量的有效范圍,即作用域(scope)僅限于本過程。從主程序一側(cè)看,這些局部變量都被過程隱藏起來了,只有型構(gòu)中的參數(shù)表是通向外部的窗口(在此交換數(shù)據(jù)),所以型構(gòu)也叫接口(Interface).為與一般變量區(qū)別把形參表中的變量稱為變元(Argument)。請看下面的兩個(gè)例子過程調(diào)用函數(shù)過程因返回位可以出現(xiàn)在主程序的表達(dá)式中,以函數(shù)名引用函數(shù)值。并列出與形參表變元的個(gè)數(shù)、類型、次序一樣的實(shí)在參數(shù)表.如子程序過程的使用是過程調(diào)用,它相當(dāng)于濃縮的一段程序。PrintNStar5//調(diào)用過程,打印五個(gè)星號過程調(diào)用是把過程體的代碼調(diào)回到主程序的環(huán)境下執(zhí)行。形參和實(shí)參變元匹配之后過程運(yùn)行,和主程序中其他代碼運(yùn)行沒什么兩樣.主程序中聲明的變量在過程中自動可用。全程變量和局部變量,局部變量在過程執(zhí)行完之后所有的數(shù)據(jù)和過程體都消失了,因此出了過程體再引用過程中的變量當(dāng)然出錯(cuò)。過程調(diào)用這種執(zhí)行機(jī)制,為程序運(yùn)行、節(jié)省內(nèi)存空間帶來了極大的好處。程序中的數(shù)據(jù)對象,自它聲明時(shí)起到本程序塊結(jié)束(見到End)為其有效的作用范圍(作用域)。顯然,內(nèi)塊嵌入在外塊內(nèi),外塊的變量,內(nèi)塊中是能見到的,這就可能導(dǎo)致這樣一個(gè)問題:外塊的變量與內(nèi)塊同名怎么辦?程序設(shè)計(jì)語言中以“就近聲明優(yōu)先”準(zhǔn)則來處理。內(nèi)塊程序中所有出現(xiàn)X的地方均按布爾類型解釋,Double型的X雖在其作用域內(nèi)但被覆蓋(overrided)了,通過點(diǎn)表示法才能出現(xiàn)在內(nèi)塊中:(P.X>5.0)andX指明頭一個(gè)X是P中聲明的X,是Double類型的。后一個(gè)X是本塊Boolean類型的。2.3.5過程的數(shù)據(jù)傳遞過程是一段封閉的程序,型構(gòu)是它與外界通信的接口,它的變量是抽象的,通過形、實(shí)參數(shù)匹配具體執(zhí)行。執(zhí)行出口是本過程末端(除非中間有顯式的retun語句).數(shù)據(jù)出入有兩個(gè)途徑,一為全程量,一為參數(shù)表。上小節(jié)己說過全程量,此處討論參數(shù)表。無參過程2.3.6變量的生命期和Static變量程序中變量生命期隨其聲明所在程序塊而異。程序一執(zhí)行完它的所有數(shù)據(jù)變量均失去意義,它所在的存儲區(qū)則可另行分配其他程序裝入執(zhí)行。因此,主程序中變量的生命期比過程中變量生命期要長,內(nèi)嵌的子過程其變量生命期更短,最長的是文件變量,它放入磁盤,程序沒有自動變量(局部變量)除非人為銷毀常常有一種需要,一個(gè)局部變量在它所在的局部程序塊消失后依然保留局變量被該局部塊以外的程序引用。例如偽隨機(jī)數(shù)發(fā)生器,為使偽隨機(jī)數(shù)每次調(diào)用新值,則上次數(shù)是生成下次數(shù)的種子,如不希望其他操作影響這個(gè)發(fā)生器,此時(shí)用Static(靜態(tài))變量2.4面向?qū)ο蟪绦蛟O(shè)計(jì)語言的基本特征一個(gè)大程序分成五個(gè)大模塊,只留過程接口等待外面調(diào)用。當(dāng)然,模塊間也可以彼此調(diào)用,例如圖2.16中,Sub22調(diào)用Sub89、Sub43調(diào)用Sub62等。盡管數(shù)據(jù)可沿著調(diào)用路線來回串,但加工最后結(jié)果都落實(shí)在各模塊聲明的數(shù)據(jù)存儲單元內(nèi),總結(jié)果若在第二、四模塊內(nèi),下一道打印命令(也是調(diào)用),它就把自己那組數(shù)打印出來。示(變量)就是堆棧的數(shù)據(jù),壓入(Push)、彈出(Pop)就是它的基本操作,詢問是否空(Is這樣封裝之后使用者就不必關(guān)心對象內(nèi)部情況,只按接口規(guī)定的形式向它發(fā)消息(如同調(diào)用)就可以了。如對象的設(shè)計(jì)者發(fā)現(xiàn)某個(gè)操作的算法(過程體)不好,重新改寫一個(gè),使用者也過去只有數(shù)據(jù)類型及數(shù)據(jù)結(jié)構(gòu)、過程(算法描述)和嵌套過程,把一個(gè)活生生的世界硬拆成過程式程序表達(dá),使用者要知道許多內(nèi)部細(xì)節(jié),設(shè)計(jì)者調(diào)試起來也極不方便。程序?qū)ο筇峁┝酥苯用枋隹陀^世界對象的有力手段.數(shù)據(jù)叫做對象的屬性(Attribute);操作則改稱方法(Method),即改變屬性的方法。對象間相互只有通信,調(diào)用方法叫發(fā)消息(Message)。消息——方法與過程調(diào)用——過程體的定義幾乎因?qū)ο笫亲灾鞯某绦驅(qū)嶓w,發(fā)消息者可等可不等,接受消息的對象可以立即響應(yīng)可以稍晚些時(shí)間響應(yīng),這降低了對象間的引用耦合,為并發(fā)程序、事件驅(qū)動程序提供了程序?qū)崿F(xiàn)的技術(shù)沿用程序中表達(dá)數(shù)據(jù)的抽象辦法:定義一個(gè)類型、聲明該類型的變量,定義一類對象然后聲明它的不同實(shí)例(Instance):DimvAsDouble//v是雙精型的數(shù)據(jù)變量DimOKAsCommandButton//OK是按鈕類的對象變量屬性值就是一實(shí)例)。正是因?yàn)樽兞恳活愋秃蛯?shí)例一類的相似性,許多語言(如C++)都把類看作是類型,類的定義如同以簡單的類型構(gòu)造復(fù)雜的數(shù)據(jù)類型一樣,只不過類定義時(shí)還要定義類的方法。類方法可以只寫型構(gòu).方法體可以在類之外定義,以下是C++的字符堆棧類:C++的main()函數(shù)相當(dāng)于實(shí)例對象,Java已將它改成主程序?qū)ο蟮姆椒?外面套上對象名)。當(dāng)Char_stackstk1(100);消息和方法.有外部可見性控制public(公有)、Private(私有)息(例如鼠標(biāo)點(diǎn)擊),圖示給出兩個(gè),誰先誰后其類定義由系統(tǒng)做,用戶只能在它提供的屬性和方法的前提下.生成并使用實(shí)例對象,用戶全無類定義概念。VB.Net回到面向?qū)ο笳Z言的大家庭,才提供類定義機(jī)制,所以本節(jié)只能類定義以類名封裝類成員,其中分?jǐn)?shù)據(jù)成員和方法成員。只有指明它們是公有的(Public),其去封裝和數(shù)據(jù)隱藏的意義.全部私有只是一個(gè)孤立的對象,也失去對象通信模擬客觀世界對象的意義.所以,一般是數(shù)據(jù)成員全部私有,方法成員多半公有、少量私有。私有方法只接受公有方法的消息,間接為類外對象服務(wù).2.4.2節(jié)char_stack類的例子就是很好的類定義,構(gòu)造子和析構(gòu)子接口類有什么用呢?用處很大!因?yàn)橥唤涌陬惪梢杂刹煌念悓?shí)現(xiàn),而應(yīng)用程Atrl22,{AO,A1.A12,A122}真誠為您提供優(yōu)質(zhì)參考資料,若有不當(dāng)之處,請指如果要設(shè)計(jì)的類與類庫中某個(gè)類的定義相近,例如C122,就從它派生:ClassCI22I:[public]C22{Atrl221//只定義自己增加的網(wǎng)性集//隱含繼承了(AO.AI.A12,A122)屬性集public:Mtd1221//只定義自己的方法集//隱含繼承T長Mo.Ml.M12,Mi22)方法集}顯然.在定義自己的屬性和方法時(shí)名字和原有類庫中類的屬性和方法名字重復(fù)了,就產(chǎn)生了覆蓋(override),例如C1中有print(),C1221中也有print(),那么,本類的實(shí)例就不繼承被覆蓋的屬性和方法了,只按自己定義的屬性和方法執(zhí)行.如果瀏覽類庫查出了某個(gè)類正好是自己要設(shè)計(jì)的類,例如Cn22,那么只要按它的構(gòu)造函數(shù)在使用它的實(shí)例的地方聲明實(shí)例(填上參數(shù))就可以了。隨著使用日久.類庫中派生出各種各樣的類,如果使用良好就將它定制(Customized,即更加完善,為較規(guī)范的類)入類庫,在龐大的類庫支持下,絕大部分類不用設(shè)計(jì)只按上述第三種方法設(shè)計(jì)實(shí)例對象,程序設(shè)計(jì)就完成了。而且使用越久類庫越有價(jià)值(因?yàn)樗锌赡艹霈F(xiàn)的bug都己經(jīng)改正過了).以下給出了一個(gè)類繼承的實(shí)例:假設(shè)某公司的雇員分為兩類:計(jì)時(shí)雇員和月薪雇員,而他們的工資計(jì)算方式是不同的。比如月薪員工有醫(yī)療保險(xiǎn)而計(jì)時(shí)員工卻沒有。月薪員工又分為兩類:專業(yè)人員和項(xiàng)目經(jīng)理。類似地,他們的工資計(jì)算方式也是不同的。比如項(xiàng)目經(jīng)理可以有項(xiàng)目提成而專業(yè)人員則沒有。顯然,首先要定義一個(gè)雇員類,它記錄了所有雇員都擁有的屬性和方法。然后再定義一個(gè)計(jì)時(shí)雇員類,它繼承了雇員類的屬性和方法,并有自己專有的屬性和方法,同樣,月薪員工繼承了雇員類的屬性和方法并有自己的專有特性。當(dāng)然,根據(jù)需要,可以再定義兩個(gè)類:專業(yè)人員類和項(xiàng)目經(jīng)理類,它們都是月薪員工類的子類。經(jīng)過分析,可得到圖2.21所示的類繼承圖.2.4.5多態(tài)性注意到上述類中有許多方法是同名的,但是,由于它們所屬類不同,編譯器不會弄混。例如Print-List方這時(shí)p一>Print_List()就是多態(tài)的,有時(shí)是父類Employee實(shí)例的數(shù)據(jù),有時(shí)是子類Manager實(shí)例數(shù)據(jù),因?yàn)槊嫦驅(qū)ο笤试S子類實(shí)例就是父類實(shí)例。*p所代表的既可以是雇員也可以是經(jīng)理,這種多態(tài)性的好處是不因雇員經(jīng)理數(shù)量多少而更改程序.請注意在給定的程序C++中若沒有虛函數(shù)Virtual關(guān)鍵字,這種自動動態(tài)切換是無法實(shí)現(xiàn)的。因?yàn)镃++是編譯型,編譯時(shí)若無Virtual告訴它,它只認(rèn)為*p是Employee類中的一個(gè)無名實(shí)例。這種動態(tài)聯(lián)接它要執(zhí)行的是Print_List的程序體,學(xué)術(shù)上稱作動態(tài)束定(DynamicBinding)。由于繼承,屬性和方法可能重名,這就產(chǎn)生了多態(tài)(同一名字執(zhí)行內(nèi)容不同)。靜態(tài)(在編譯或連接)時(shí)就可以分辨的叫重載(overloading),例如多個(gè)構(gòu)造函數(shù)是最常見的。運(yùn)行中根據(jù)執(zhí)行情況才能決定束定(也叫綁定)到哪個(gè)方法體。多繼承2.4.4節(jié)中雇員類體系結(jié)構(gòu)的派生類只有一個(gè)父類,體系結(jié)構(gòu)是樹模型。但客觀世界多數(shù)事物是多繼承的。例如一個(gè)北航的大學(xué)生,他是北京市民,又是航空專業(yè),又是大學(xué)生。只是討論不同問題時(shí)強(qiáng)調(diào)他的不同側(cè)面,繼承不同的屬性,如市民應(yīng)具有的屬性:性別、年齡、婚姻、職業(yè)、戶口所在地、身份證號碼……大學(xué)生應(yīng)具有的屬性:學(xué)號、專業(yè)、年級、入學(xué)成績、真誠為您提供優(yōu)質(zhì)參考資料,若有不當(dāng)之處,請指正。各學(xué)期選課、成績、獎學(xué)金……查看他是否選民用前者,選拔優(yōu)秀生用后者.辦理出國留學(xué)就要用到兩者。多繼承的體系結(jié)構(gòu)是一個(gè)網(wǎng)狀模型.C++就支持多繼承,在定義類時(shí)寫:本類屬性集public單看一個(gè)類這樣很清楚,問題是如果按樹模型嚴(yán)格的輩分關(guān)系,很有可能把該類父類的重孫子類當(dāng)了該類的第二個(gè)父類繼承關(guān)系形成回路,類庫的查找、派生變得十分難以管理。Java和C#堅(jiān)決不用多繼承,類庫是單繼承的樹模型,而實(shí)際問題要多繼承怎么辦?用接口class類名:[public]接口類名1,[public]接口類名2…{由于接口類不入類庫,它隨應(yīng)用程序,應(yīng)用程序運(yùn)行完了它也就消失。從前面可知道接口最后還是要接到類庫上(它自己沒有體無法運(yùn)行),所以,也一樣能提供C++的多繼承的功能。把繼承之間的復(fù)雜關(guān)系交由程序員負(fù)責(zé),不影響其他人使用類庫。在這里再次看到了接口類以前不對外開放的(私有)成員,對子孫就要開放。類定義中protected指出該成員對家族外是私有,對內(nèi)公有。真正私有的還只限于本類方法訪問。圖2.23給出派生類中成員的可見性.現(xiàn)在又有了問題,父類以前定義的成員可見性(公有、私有),子類繼承之后是否仍然維持原狀?嵌套類可見性當(dāng)一個(gè)類的成員不是屬性和方法而是類class時(shí),叫嵌套類。這些子類和其父類不是派生——繼承關(guān)系而是直接包容關(guān)系。如同一個(gè)工廠有車間類、科室類、門市類、后勤類,它們聚集在一起共同構(gòu)成工廠類的一部分。子類彼此之間的關(guān)系并不密切,車間的業(yè)務(wù)和門市的業(yè)務(wù)相差很大,所以只能聚集。至于鍛鑄(熱)加工、機(jī)械加工類車間業(yè)務(wù)雖有差異,但是“車間要嵌套類成員的訪問性控制和普通成員的訪問性控制的關(guān)鍵字解釋是一樣的。沒有修飾符的嵌套類為包容類私有類,它的實(shí)例外部不可訪問,加public的修飾符后的內(nèi)嵌套和一般普通類的使用沒有什么差別,只是聲明實(shí)例時(shí):Outer.SomeclassP(100);類體系的組織統(tǒng)就可以按名自動索引使用。最新面向?qū)ο笳Z言Java、C#均設(shè)NameSpace機(jī)制,Java叫Package(包),用Import語句引入:2.5網(wǎng)絡(luò)計(jì)算機(jī)時(shí)代的編程語言面向?qū)ο笳Z言和技術(shù)是分布式客戶/服務(wù)器計(jì)算時(shí)代的產(chǎn)物。對象計(jì)算模型天生就和分布式網(wǎng)絡(luò)計(jì)算模型對應(yīng)。客戶站點(diǎn)即客戶對象,服務(wù)器站點(diǎn)就是服務(wù)器對象,它們相互發(fā)消息,共同協(xié)作完成應(yīng)用。它們可以建立在局域網(wǎng)、廣域網(wǎng)上,下層有網(wǎng)絡(luò)軟件支持,上層用面向?qū)ο笳Z言編程。調(diào)試后增加一道部署工序,把每個(gè)對象安裝到各個(gè)站點(diǎn)上。分布式客戶/服務(wù)器計(jì)算時(shí)代(1985一1995),大為改變了單主機(jī)計(jì)算時(shí)代(Mai。加mocomputing,1985年之前)應(yīng)用開發(fā)觀念.服務(wù)器提供的程序往往是事先編好了的.客戶端只要編一些“使用”服務(wù)器提供的“服務(wù)”(程序運(yùn)行后的結(jié)果)的簡單對象(程序),就完成了應(yīng)用開發(fā)。只有不存在這種服務(wù)時(shí)才去開發(fā)服務(wù)器端的程序。如果在開發(fā)時(shí)網(wǎng)上有相近的服務(wù),把它下載下來稍作修改即可交活。再者,開發(fā)客戶端和服務(wù)器端程序也不是像單主機(jī)計(jì)算時(shí)代那樣,基本上是從第一句寫到最后一句,而是在系統(tǒng)提供的控件、構(gòu)件(系統(tǒng)類)的基礎(chǔ)上,選定參數(shù)生成實(shí)例對象.簡單應(yīng)用幾乎不用編程.但必須遵守系統(tǒng)支持提供的使用方式和小范圍內(nèi)可變的格式(輸入、輸出).隨著網(wǎng)絡(luò)范圍進(jìn)一步擴(kuò)大,Intenet把全世界計(jì)算資源聯(lián)接起來,計(jì)算機(jī)應(yīng)用的概念又面臨一次大飛躍。世界上有無數(shù)資源,你要的應(yīng)用網(wǎng)上幾乎全有,如何找到它延關(guān)鍵問題。找到之后連下載也不要,只需訂閱(租賃),到時(shí)候發(fā)消.息,它回復(fù)你計(jì)算結(jié)果。這如同打電話付費(fèi)一樣?!败浖褪欠?wù)”,可以想象,應(yīng)用程序的開發(fā)和使用有多大的變化。軟件開發(fā)多限于應(yīng)用服務(wù)提供商(ASP)。專業(yè)分工很細(xì),他們可以做得十分完關(guān)。在自己選定的業(yè)務(wù)范田內(nèi),把功能件做成標(biāo)準(zhǔn)的構(gòu)件.并由他們自己升級維護(hù):使用者只要有一個(gè)連接各種服務(wù)的小程序,開發(fā)者的工作重心是問題分析、建立計(jì)算模型、建立計(jì)算框架、連接上選定的構(gòu)件(填滿框架)。這個(gè)框架的軟件實(shí)體一股不在開發(fā)者的站點(diǎn)上,他只有一組網(wǎng)址。網(wǎng)絡(luò)計(jì)算目前在大型應(yīng)用中僅限于某些行業(yè)的電子商務(wù).還沒有成為應(yīng)用主流技術(shù),本節(jié)只作簡略介紹。2.5.1HTML和XML2.5.2腳本語言Java語言的特點(diǎn)當(dāng)今的編程語言很少建立在全新概念和全新語法上.歷史上Smalltalk創(chuàng)造性地實(shí)現(xiàn)了面向?qū)ο缶幊?,但因其語法獨(dú)特,使用方式新穎,本身始終難以推廣。如今它的思想、關(guān)鍵概念、使用方式紛紛化為已有語言,C++是成功的范例。比Smalltalk在面向?qū)ο蠓矫娓晟票臼荂++哪里不合適就改哪里.平臺無關(guān)最大的變化是建立Java虛擬機(jī)(JVM).所謂虛擬機(jī)就是不管你操作系統(tǒng)的平臺是什么,建立一個(gè)解釋Java代碼的執(zhí)行系統(tǒng)(RuntimeSystem),正確地執(zhí)行。本機(jī)操作系統(tǒng)是實(shí)在地機(jī)器執(zhí)行系統(tǒng).是實(shí)現(xiàn)虛擬機(jī)的手段。每臺機(jī)器若都能實(shí)現(xiàn)虛擬機(jī)的功能,則Java的平臺無關(guān)真誠為您提供優(yōu)質(zhì)參考資料,若有不當(dāng)之處,請指正。性就得到第一層的保證。第二層,執(zhí)行的代碼必須統(tǒng)一。Java源代碼是統(tǒng)一的,但編程可執(zhí)行代碼就不一定了。如不同類型字長不統(tǒng)一,有的整型數(shù)32位,有的64、128位。再如復(fù)合操作碼本可簡化操作.但不同系統(tǒng)復(fù)合習(xí)慣不同,帶來微小差別……所以,Java采用泛代碼(Unicode)的中間碼技術(shù)。泛代碼也叫字節(jié)碼(bytecode),操作碼和最小字長都是16位的雙字節(jié)。這樣,Java源代碼變?yōu)樗刑摂M機(jī)都可執(zhí)行的中間碼,保證大家對Java源程序理解一樣,執(zhí)行結(jié)構(gòu)一樣。其示意圖如2.26所示。編譯一個(gè)解釋執(zhí)行Java代碼是解釋執(zhí)行的,這是指它的蹭中間代碼。從Java源代碼要經(jīng)過編譯器Javac翻譯,這不妨礙源程序在類庫支持下派生類,,因?yàn)轭愔С忠彩侵虚g碼。Java虛擬機(jī)首先要裝入類,檢查代碼(安全)后解釋執(zhí)行。為了提高解釋效率,發(fā)展了即時(shí)編譯技術(shù)(Just-in-time)。即對于多次重復(fù)或耗時(shí)較長的段落編譯后,作為模塊暫存,下次遇到則直接執(zhí)行目標(biāo)碼。即時(shí)編譯技術(shù)目前還在向智能化方向發(fā)展。更為純粹的面向?qū)ο笳Z言Java無全程變量,無主函數(shù)main(),從而函數(shù)全改方法。類中的方法均缺省為‘虛’函數(shù),更加支持動態(tài)加載。取消C++中的模板而用動態(tài)的實(shí)例類型化Object類。為了封裝更干凈,取消了C++的頭文件和C的預(yù)處理。一個(gè)或多個(gè)功能相關(guān)的類組成為包(package,即名字空間),從而為構(gòu)件規(guī)范化提供了基礎(chǔ)。支持網(wǎng)絡(luò)安全比C++的強(qiáng)類型更強(qiáng),要求顯示方法聲明,編譯器可以發(fā)現(xiàn)錯(cuò)誤消息。取消了指針,杜絕了內(nèi)存的非法訪問。增設(shè)自動無用單元回收集,減少內(nèi)存分配帶來的問題。特別是代碼傳輸之后由程序員回收無用單元是不現(xiàn)實(shí)的。增加泛代碼驗(yàn)證,以防下載非法代碼。此外,下載代碼和本機(jī)支持代碼放在不同的名字空間。用異常處理機(jī)制增強(qiáng)程序健壯性??梢灾付ň€程安全ThreadSafe變量。支持多線程多線程即共享資源的并行執(zhí)行的‘子進(jìn)程’??梢蕴岣邎D形用戶界面的交互性能。C+中多線程是由程序員控制鎖來完成的。Java的Java.lang包提供Thread類大為簡化了多線程就用程序的開發(fā)。線程概念參閱第八章。接口作為類型方法型構(gòu)(接口)和方法體可以顯式分開在C++中己經(jīng)實(shí)現(xiàn),方便了編程和修改。只要接口(及其所帶參數(shù))不變,方法體可隨意修改而不影響該方法的程序。然而,把接口作為類型有其更深遠(yuǎn)的意義。接口類是一組方法型構(gòu)而無方法體,除有常量外沒有屬性。接口類和普通類一樣可以嵌套和繼承,且可以多繼承,可以聲明接口實(shí)例。接口類由普通類實(shí)現(xiàn)(寫出各方法的體)。請看以下示例:支持網(wǎng)絡(luò)上分布式應(yīng)用Java既可以用于客戶端也可以用于服務(wù)器端,只要該端有虛擬機(jī)??梢砸訟pplet嵌入主頁到處傳送,也可以直接分發(fā)和部署。因?yàn)镴ava提供了包,通過包中的類,可以完成各個(gè)層次上的連接.如URL(同一資源定位器)支持Java應(yīng)用程序通過Internet以打開和訪問遠(yuǎn)程對象.并且使打開遠(yuǎn)程文件和打開本地文件一樣容易。包中的Socket類可以提供可靠的流式網(wǎng)絡(luò)連接。從面向?qū)ο蟮交跇?gòu)件編程接口類一實(shí)現(xiàn)類的顯示分開,實(shí)際是反應(yīng)了設(shè)計(jì)和實(shí)現(xiàn)的分離??梢园磦鹘y(tǒng)的方法先設(shè)計(jì)后實(shí)現(xiàn),也可以先實(shí)現(xiàn)(把類做成較為規(guī)范的構(gòu)件component,如同軟件‘集成電路片’)后設(shè)計(jì)應(yīng)真誠為您提供優(yōu)質(zhì)參考資料,若有不當(dāng)之處,請指正。用程序。從而引起一場程序設(shè)計(jì)或軟件開發(fā)的革命——基于構(gòu)件的編程。試想,各行各業(yè)軟件的項(xiàng)尖高手大量生產(chǎn)各領(lǐng)域常用的軟件IC,應(yīng)用開發(fā)者只需寫接口類,形成體系結(jié)構(gòu)(架構(gòu)),再外購(或租賃)軟件IC作為軟插件插在本機(jī)操作系統(tǒng)上就完成了設(shè)計(jì)和實(shí)現(xiàn)。以后選定參數(shù)發(fā)消息就可以使用了。軟件開發(fā)的重點(diǎn)向分析設(shè)計(jì)轉(zhuǎn)移。為比較面向?qū)ο蠓植际綉?yīng)用和基于構(gòu)件的分布式應(yīng)用,請看示意圖2.27.圖中構(gòu)件以軟插件方式插入所在站點(diǎn)的操作系統(tǒng)平臺,垂直的方框即與環(huán)境的接口。圖中封閉曲線為實(shí)現(xiàn)接口的體。接口類均無體。對于一個(gè)站點(diǎn)上的接口,其實(shí)現(xiàn)接口的體可在另一站點(diǎn)上的構(gòu)件之內(nèi),如圖中構(gòu)件4,它支持a2、a8、a9、b5、c8、c9方法接口程序設(shè)計(jì)語言一般指高級語言,是為了人們方便編制程序而設(shè)計(jì)的.它最終還得翻譯為機(jī)器代碼由機(jī)器執(zhí)行.它是在低級語言(機(jī)器、匯編)的基礎(chǔ)上為了方便使用而對低級語言進(jìn)行的抽象.隨著編譯技術(shù)的發(fā)展和程序設(shè)計(jì)語言描述能力要求的進(jìn)一步提高,高級語言也在不斷發(fā)展.把面向機(jī)器編程的第一代語言(IGL),即機(jī)器碼、匯編語言排除在外。第二代語言(2GL)即早期的高級程序設(shè)計(jì)語言就有了數(shù)據(jù)類型,執(zhí)行控創(chuàng)、過程和函數(shù)的概念.當(dāng)然,最本質(zhì)的是賦值語句和判斷語句.如果一個(gè)程序不能改變一個(gè)變量的值或者不知道如何去改變變量的值,那將毫無意義!當(dāng)然.賦值的強(qiáng)制性給程序正確性帶來許多問題.60一70年代發(fā)展了不用賦值的函數(shù)式語言,但由于使用不便而沒有得到廣泛應(yīng)用.顯然,如果沒有賦值和判斷,不講究給什么樣的數(shù)據(jù)賦值,如何組織利斷結(jié)構(gòu),只按算法過程湊程序,這

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論