官术网_书友最值得收藏!

第一篇 《C++面向?qū)ο蟪绦蛟O(shè)計(jì)(第三版)》習(xí)題和參考答案

第1章 面向?qū)ο蟪绦蛟O(shè)計(jì)

【1.1】什么是面向?qū)ο蟪绦蛟O(shè)計(jì)?

【解】

面向?qū)ο蟪绦蛟O(shè)計(jì)是一種新型的程序設(shè)計(jì)范型。這種范型的主要特征是:

程序=對(duì)象+消息

面向?qū)ο蟪绦虻幕驹厥菍?duì)象,面向?qū)ο蟪绦虻闹饕Y(jié)構(gòu)特點(diǎn):第一,程序一般由類的定義和類的使用兩部分組成,在主程序中定義各對(duì)象并規(guī)定它們之間傳遞消息的規(guī)律。第二,程序中的一切操作都是通過(guò)向?qū)ο蟀l(fā)送消息來(lái)實(shí)現(xiàn)的,對(duì)象接收到消息后,啟動(dòng)有關(guān)方法完成相應(yīng)的操作。

面向?qū)ο蟪绦蛟O(shè)計(jì)方法模擬人類習(xí)慣的解題方法,代表了計(jì)算機(jī)程序設(shè)計(jì)新穎的思維方式。這種方法的提出是對(duì)軟件開發(fā)方法的一場(chǎng)革命,是目前解決軟件開發(fā)面臨困難的最有希望、最有前途的方法之一。

【1.2】在面向?qū)ο蟪绦蛟O(shè)計(jì)中,什么是對(duì)象?什么是類?對(duì)象與類的關(guān)系是什么?

【解】

在面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)象是描述其屬性的數(shù)據(jù)以及對(duì)這些數(shù)據(jù)施加的一組操作封裝在一起構(gòu)成的統(tǒng)一體。對(duì)象可以認(rèn)為是:數(shù)據(jù)+操作。對(duì)象所能完成的操作表示它的動(dòng)態(tài)行為,通常也把操作稱為方法。

在面向?qū)ο蟪绦蛟O(shè)計(jì)中,“類”就是具有相同的數(shù)據(jù)和相同的操作的一組對(duì)象的集合,也就是說(shuō),類是對(duì)具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的一類對(duì)象的描述。

類和對(duì)象之間的關(guān)系是抽象和具體的關(guān)系。類是多個(gè)對(duì)象進(jìn)行綜合抽象的結(jié)果,一個(gè)對(duì)象是類的一個(gè)實(shí)例。

【1.3】現(xiàn)實(shí)世界中的對(duì)象有哪些特征?

【解】

現(xiàn)實(shí)世界中的對(duì)象,具有以下特性:

(1)每一個(gè)對(duì)象必須有一個(gè)名字以區(qū)別于其他對(duì)象。

(2)用屬性來(lái)描述它的某些特征。

(3)有一組操作,每個(gè)操作決定對(duì)象的一種行為。

(4)對(duì)象的操作可以分為兩類:一類是自身所承受的操作,一類是施加于其他對(duì)象的操作。

【1.4】什么是消息?消息具有什么性質(zhì)?

【解】

在面向?qū)ο蟪绦蛟O(shè)計(jì)中,一個(gè)對(duì)象向另一個(gè)對(duì)象發(fā)出的請(qǐng)求稱為“消息”。當(dāng)對(duì)象接收到發(fā)向它的消息時(shí),就調(diào)用有關(guān)的方法,執(zhí)行相應(yīng)的操作。消息是一個(gè)對(duì)象要求另一個(gè)對(duì)象執(zhí)行某個(gè)操作的規(guī)格的說(shuō)明,通過(guò)消息傳遞才能完成對(duì)象之間的相互請(qǐng)求或相互協(xié)作。

消息具有以下三個(gè)性質(zhì):

(1)同一個(gè)對(duì)象可以接收不同形式的多個(gè)消息,做出不同的響應(yīng)。

(2)相同形式的消息可以傳遞給不同的對(duì)象,所做出的響應(yīng)可以是不同的。

(3)對(duì)消息的響應(yīng)并不是必需的,對(duì)象可以響應(yīng)消息,也可以不響應(yīng)。

【1.5】什么是方法?在C++中它是通過(guò)什么來(lái)實(shí)現(xiàn)的?

【解】

在面向?qū)ο蟪绦蛟O(shè)計(jì)中的消息傳遞實(shí)際是對(duì)現(xiàn)實(shí)世界中的信息傳遞的直接模擬。調(diào)用對(duì)象中的函數(shù)就是向該對(duì)象傳送一個(gè)消息,要求該對(duì)象實(shí)現(xiàn)某一行為(功能、操作)。對(duì)象所能實(shí)現(xiàn)的行為(操作),在面向?qū)ο蟪绦蛟O(shè)計(jì)中稱為方法,它們是通過(guò)調(diào)用相應(yīng)的函數(shù)來(lái)實(shí)現(xiàn)的,在C++中方法是通過(guò)成員函數(shù)來(lái)實(shí)現(xiàn)的。

【1.6】什么是抽象和封裝?

【解】

抽象是人類認(rèn)識(shí)問(wèn)題的最基本的手段之一。抽象是將有關(guān)事物的共性歸納、集中的過(guò)程。抽象是通過(guò)特定的實(shí)例(對(duì)象)抽取共同性質(zhì)后形成概念的過(guò)程。面向?qū)ο蟪绦蛟O(shè)計(jì)中的抽象包括兩個(gè)方面:數(shù)據(jù)抽象和代碼抽象(或稱行為抽象)。前者描述某類對(duì)象的屬性或狀態(tài),也就是此類對(duì)象區(qū)別于彼類對(duì)象的特征物理量;后者描述某類對(duì)象的共同行為特征或具有的共同功能。

在現(xiàn)實(shí)世界中,所謂封裝就是把某個(gè)事物包圍起來(lái),使外界不知道該事物的具體內(nèi)容。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,封裝是指把數(shù)據(jù)和實(shí)現(xiàn)操作的代碼集中起來(lái)放在對(duì)象內(nèi)部,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。

封裝是面向?qū)ο蟪绦蛟O(shè)計(jì)方法的一個(gè)重要特性,所謂封裝具有兩方面的含義:一是將有關(guān)的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)象中,各個(gè)對(duì)象相對(duì)獨(dú)立、互不干擾。二是將對(duì)象中某些數(shù)據(jù)與操作代碼對(duì)外隱蔽,即隱蔽其內(nèi)部細(xì)節(jié),只留下少量接口,以便與外界聯(lián)系,接收外界的消息。這種對(duì)外界隱蔽的做法稱為信息隱蔽。信息隱蔽有利于數(shù)據(jù)安全,防止無(wú)關(guān)人員訪問(wèn)和修改數(shù)據(jù)。

【1.7】什么是繼承?請(qǐng)舉例說(shuō)明。

【解】

繼承所表達(dá)的是對(duì)象類之間的相關(guān)關(guān)系,這種關(guān)系使得某類對(duì)象可以繼承另外一類對(duì)象的特征和能力。現(xiàn)實(shí)生活中,繼承是很普遍和容易理解的。例如,我們繼承了父母的一些特征,如種族、血型、眼睛的顏色等,父母是我們所具有的屬性的基礎(chǔ)。

圖1-1所示是一個(gè)繼承的典型例子:汽車?yán)^承的層次。

以面向?qū)ο蟪绦蛟O(shè)計(jì)的觀點(diǎn),繼承所表達(dá)的是對(duì)象類之間相關(guān)的關(guān)系。這種關(guān)系使得某一類可以繼承另外一個(gè)類的特征和能力。

圖1-1 汽車?yán)^承的層次圖

【1.8】若類之間具有繼承關(guān)系,則它們之間具有什么特征?

【解】

若類之間具有繼承關(guān)系,則它們之間具有下列幾個(gè)特性:

(1)類間具有共享特征(包括數(shù)據(jù)和操作代碼的共享)。

(2)類間具有差別或新增部分(包括非共享的數(shù)據(jù)和操作代碼)。

(3)類間具有層次結(jié)構(gòu)。

假設(shè)有兩個(gè)類A和B,若類B繼承類A,則類B包含了類A的特征(包括數(shù)據(jù)和操作),同時(shí)也可以加入自己所特有的新特性。這時(shí),稱被繼承類A為基類或父類;稱繼承類B為A的派生類或子類。同時(shí),我們還可以說(shuō),類B是從類A中派生出來(lái)的。

【1.9】什么是單繼承、多繼承?請(qǐng)舉例說(shuō)明。

【解】

從繼承源上分,繼承分為單繼承和多繼承。單繼承是指每個(gè)派生類只直接繼承了一個(gè)基類的特征。圖1-2表示了一種單繼承關(guān)系。它表示W(wǎng)indows操作系統(tǒng)的窗口之間的繼承關(guān)系。

多繼承是指多個(gè)基類派生出一個(gè)派生類的繼承關(guān)系。多繼承的派生類直接繼承了不止一個(gè)基類的特征。例如,小孩喜歡的玩具車即繼承了車的一些特性,還繼承了玩具的一些特征,如圖1-3所示。

圖1-2 單繼承關(guān)系

圖1-3 多繼承關(guān)系

【1.10】什么是多態(tài)性?請(qǐng)舉例說(shuō)明。

【解】

多態(tài)性也是面向?qū)ο蟪绦虻闹匾卣鳌K侵覆煌膶?duì)象收到相同的消息時(shí)產(chǎn)生不同的行為方式。例如,同樣雙擊Windows系統(tǒng)桌面上的圖標(biāo)時(shí),有的是打開多媒體播放器,有的是打開資源管理器。

利用多態(tài)性,用戶只需發(fā)送一般形式的消息,而將所有的實(shí)現(xiàn)留給接收消息的對(duì)象。對(duì)象根據(jù)所收到的消息而做出相應(yīng)的動(dòng)作。

【1.11】傳統(tǒng)程序設(shè)計(jì)方法的局限性主要有哪些?

【解】

傳統(tǒng)程序設(shè)計(jì)方法的局限性主要有三個(gè)方面:

(1)傳統(tǒng)程序設(shè)計(jì)開發(fā)軟件的生產(chǎn)效率低下。

傳統(tǒng)程序設(shè)計(jì)的生產(chǎn)方式仍是采用較原始的方式進(jìn)行,程序設(shè)計(jì)基本上還是從語(yǔ)句一級(jí)開始。軟件的生產(chǎn)中缺乏大粒度、可重用的構(gòu)件,軟件的重用問(wèn)題沒(méi)有得到很好的解決,從而導(dǎo)致軟件生產(chǎn)的工程化和自動(dòng)化屢屢受阻。傳統(tǒng)程序設(shè)計(jì)的特點(diǎn)是數(shù)據(jù)與其操作分離,而且對(duì)同一數(shù)據(jù)的操作往往分散在程序的不同的地方。這樣,如果一個(gè)或多個(gè)數(shù)據(jù)的結(jié)構(gòu)發(fā)生了變化,那么這種變化將波及程序的很多部分甚至遍及整個(gè)程序,致使許多函數(shù)和過(guò)程必須重寫,嚴(yán)重時(shí)會(huì)導(dǎo)致整個(gè)軟件結(jié)構(gòu)的崩潰。傳統(tǒng)程序設(shè)計(jì)是面向過(guò)程的,其數(shù)據(jù)和操作相分離的結(jié)構(gòu),使得維護(hù)數(shù)據(jù)和處理數(shù)據(jù)的操作過(guò)程要花費(fèi)大量的精力和時(shí)間,嚴(yán)重地影響了軟件的生產(chǎn)效率。

總之,要提高軟件生產(chǎn)的效率,就必須很好地解決軟件的重用性、復(fù)雜性和可維護(hù)性問(wèn)題。但是傳統(tǒng)的程序設(shè)計(jì)是難以解決這些問(wèn)題的。

(2)傳統(tǒng)程序設(shè)計(jì)難以應(yīng)付日益龐大的信息量和多樣的信息類型。

當(dāng)代計(jì)算機(jī)的應(yīng)用領(lǐng)域已從數(shù)值計(jì)算擴(kuò)展到了人類社會(huì)的各個(gè)方面,所處理的數(shù)據(jù)已從簡(jiǎn)單數(shù)字和字符發(fā)展為具有多種格式的多媒體數(shù)據(jù)(如文本、圖形、圖像、影像、聲音等),描述的問(wèn)題從單純的計(jì)算問(wèn)題到仿真復(fù)雜的自然現(xiàn)象和社會(huì)現(xiàn)象。隨著計(jì)算機(jī)處理的信息量與信息類型的迅速增加,程序的規(guī)模日益龐大,復(fù)雜度不斷增加,傳統(tǒng)程序設(shè)計(jì)方法是無(wú)法應(yīng)付的。

(3)傳統(tǒng)的程序設(shè)計(jì)難以適應(yīng)各種新環(huán)境。

當(dāng)前,并行處理、分布式、網(wǎng)絡(luò)和多機(jī)系統(tǒng)等已經(jīng)或?qū)⑹浅绦蜻\(yùn)行的主流方式和主流環(huán)境。這些環(huán)境的一個(gè)共同的特點(diǎn)是都具有一些有獨(dú)立處理能力的結(jié)點(diǎn),結(jié)點(diǎn)之間有通信機(jī)制,即以消息傳遞進(jìn)行聯(lián)絡(luò)。顯然傳統(tǒng)的程序設(shè)計(jì)技術(shù)很難適應(yīng)這些新環(huán)境。

【1.12】面向?qū)ο蟪绦蛟O(shè)計(jì)的優(yōu)點(diǎn)主要有哪些?

【解】

面向?qū)ο蟪绦蛟O(shè)計(jì)的優(yōu)點(diǎn)主要包括以下幾個(gè)方面:

(1)可提高程序的重用性。

重用是提高軟件開發(fā)效率的最主要的方法,面向?qū)ο蟪绦蛟O(shè)計(jì)能比較好地解決軟件重用的問(wèn)題。對(duì)象所固有的封裝性和信息隱藏等機(jī)理,使得對(duì)象內(nèi)部的實(shí)現(xiàn)與外界隔離,具有較強(qiáng)的獨(dú)立性,它可以作為一個(gè)大粒度的程序構(gòu)件,供同類程序直接使用。

(2)可控制程序的復(fù)雜性。

面向?qū)ο蟪绦蛟O(shè)計(jì)采用了數(shù)據(jù)抽象和信息隱藏技術(shù),把數(shù)據(jù)及對(duì)數(shù)據(jù)的操作放在一個(gè)個(gè)類中,作為相互依存、不可分割的整體來(lái)處理。這樣,在程序中任何要訪問(wèn)這些數(shù)據(jù)的地方都只需簡(jiǎn)單地通過(guò)傳遞信息和調(diào)用方法來(lái)進(jìn)行,這就有效地控制了程序的復(fù)雜性。

(3)可改善程序的可維護(hù)性。

在面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)對(duì)象的操作只能通過(guò)消息傳遞來(lái)實(shí)現(xiàn),所以只要消息模式即對(duì)應(yīng)的方法界面不變,方法體的任何修改不會(huì)導(dǎo)致發(fā)送消息的程序修改,這顯然對(duì)程序的維護(hù)帶來(lái)了方便。另外,類的封裝和信息隱藏機(jī)制使得外界對(duì)其中的數(shù)據(jù)和程序代碼的非法操作成為不可能,這也就大大地減少了程序的錯(cuò)誤率。

(4)能夠更好地支持大型程序設(shè)計(jì)。

面向?qū)ο蠹夹g(shù)在數(shù)據(jù)抽象和抽象數(shù)據(jù)類型之上又引入了動(dòng)態(tài)鏈接和繼承性等機(jī)制,進(jìn)一步發(fā)展了基于數(shù)據(jù)抽象的模塊化設(shè)計(jì),使其更好地支持大型程序設(shè)計(jì)。

(5)增強(qiáng)了計(jì)算機(jī)處理信息的范圍。

面向?qū)ο蟪绦蛟O(shè)計(jì)方法模擬人類習(xí)慣的解題方法,代表了計(jì)算機(jī)程序設(shè)計(jì)的新穎的思維方法。用類來(lái)直接描述現(xiàn)實(shí)世界中的類型,可使計(jì)算機(jī)系統(tǒng)的描述和處理對(duì)象從數(shù)據(jù)擴(kuò)展到現(xiàn)實(shí)世界和思維世界的各種事物,這實(shí)際上大大擴(kuò)展了計(jì)算機(jī)系統(tǒng)處理的信息量和信息類型。

(6)很好地適應(yīng)新的硬件環(huán)境。

面向?qū)ο蟪绦蛟O(shè)計(jì)中的對(duì)象、消息傳遞等思想和機(jī)制,與分布式、并行處理、多機(jī)系統(tǒng)及網(wǎng)絡(luò)等硬件環(huán)境也恰好相吻合。面向?qū)ο蟮乃枷胍灿绊懙接?jì)算機(jī)硬件的體系結(jié)構(gòu),現(xiàn)在已在研究直接支持對(duì)象概念的面向?qū)ο笥?jì)算機(jī)。這樣的計(jì)算機(jī)將會(huì)更適合于面向?qū)ο蟪绦蛟O(shè)計(jì),更充分地發(fā)揮面向?qū)ο蠹夹g(shù)的威力。

主站蜘蛛池模板: 娱乐| 沁阳市| 福贡县| 祁阳县| 岚皋县| 临安市| 宁海县| 文化| 宁强县| 平潭县| 辽阳县| 黔西| 惠来县| 隆昌县| 萝北县| 康定县| 遵化市| 西贡区| 太康县| 玉树县| 句容市| 双流县| 黄平县| 台东县| 武川县| 图们市| 兴义市| 百色市| 绥宁县| 虹口区| 临安市| 平凉市| 纳雍县| 安平县| 梅州市| 吕梁市| 贺州市| 明溪县| 麦盖提县| 平果县| 乳源|