【正文】
面向?qū)ο蟪绦蛟O(shè)計教程(C++語言描述)題解與課程設(shè)計指導(dǎo)第1章面向?qū)ο蟪绦蛟O(shè)計概論一、 名詞解釋抽象封裝消息【問題解答】面向?qū)ο蠓椒ㄖ械某橄笫侵笇唧w問題(對象)進行概括,抽出一類對象的公共性質(zhì)并加以描述的過程。面向?qū)ο蠓椒ㄖ械姆庋b就是把抽象出來的對象的屬性和行為結(jié)合成一個獨立的單位,并盡可能隱蔽對象的內(nèi)部細節(jié)。消息是面向?qū)ο蟪绦蛟O(shè)計用來描述對象之間通信的機制。一個消息就是一個對象要求另一個對象實施某種操作的一個請求。二、 填空題(1) 目前有面向過程的結(jié)構(gòu)化程序設(shè)計方法和面向?qū)ο蟮某绦蛟O(shè)計方法兩種重要的程序設(shè)計方法。(2) 結(jié)構(gòu)化程序設(shè)計方法中的模塊由順序、選擇和循環(huán)3種基本結(jié)構(gòu)組成。(3) 在結(jié)構(gòu)化程序設(shè)計方法中,程序可表示為程序=數(shù)據(jù)結(jié)構(gòu)+算法; 而面向?qū)ο蟮某绦蛟O(shè)計方法,程序可表示為程序=對象+消息。(4) 結(jié)構(gòu)化程序設(shè)計方法中的基本模塊是過程; 而面向?qū)ο蟪绦蛟O(shè)計方法中的基本模塊是類。(5) 面向?qū)ο蟪绦蛟O(shè)計方法具有抽象性、封裝性、繼承性和多態(tài)性等特點。三、 選擇題(至少選一個,可以多選)(1) 面向?qū)ο蟪绦蛟O(shè)計著重于( B )的設(shè)計。A. 對象B. 類C. 算法D. 數(shù)據(jù) (2) 面向?qū)ο蟪绦蛟O(shè)計中,把對象的屬性和行為組織在同一個模塊內(nèi)的機制叫做( C )。A. 抽象 B. 繼承 C. 封裝 D. 多態(tài)(3) 在面向?qū)ο蟪绦蛟O(shè)計中,類通過( D )與外界發(fā)生關(guān)系。A. 對象 B. 類 C. 消息 D. 接口(4) 面向?qū)ο蟪绦蛟O(shè)計中,對象與對象之間的通信機制是( C )。A. 對象 B. 類 C. 消息 D. 接口(5) 關(guān)于C++與C語言的關(guān)系的描述中,( D )是錯誤的。A. C語言是C++的一個子集 B. C語言與C++是兼容的C. C++對C語言進行了一些改進 D. C++和C語言都是面向?qū)ο蟮摹窘Y(jié)果分析】C語言是面向過程的。C++語言是一種經(jīng)過改進的更為優(yōu)化的C語言,是一種混合型語言,既面向過程也面向?qū)ο?。?) 面向?qū)ο蟮某绦蛟O(shè)計將數(shù)據(jù)結(jié)構(gòu)與( A )放在一起,作為一個相互依存、不可分割的整體來處理。A. 算法 B. 信息 C. 數(shù)據(jù)隱藏 D. 數(shù)據(jù)抽象(7) 下面( A )不是面向?qū)ο笙到y(tǒng)所包含的要素。A. 重載 B. 對象 C. 類 D. 繼承【結(jié)果分析】面向?qū)ο?對象+類+繼承+消息+多態(tài)(8) 下面說法正確的是( BC )。A. 將數(shù)據(jù)結(jié)構(gòu)和算法置于同一個函數(shù)內(nèi),即為數(shù)據(jù)封裝 B. 一個類通過繼承可以獲得另一個類的特性C. 面向?qū)ο笠蟪绦騿T集中于事物的本質(zhì)特征,用抽象的觀點看待程序D. 同一消息為不同的對象接受時,產(chǎn)生的行為是一樣的,這稱為一致性【結(jié)果分析】面向?qū)ο蟪绦蛟O(shè)計方法具有抽象性、封裝性、繼承性和多態(tài)性等特點。將數(shù)據(jù)結(jié)構(gòu)和算法置于同一個類內(nèi),即為數(shù)據(jù)封裝。同一消息為不同的對象接受時,產(chǎn)生的行為可能是不一樣的,這稱為多態(tài)性。(9) 下面說法正確的是( AD )。A. 對象是計算機內(nèi)存中的一塊區(qū)域,它可以存放代碼和數(shù)據(jù)B. 對象實際是功能相對獨立的一段程序C. 各個對象間的數(shù)據(jù)可以共享是對象的一大優(yōu)點D. 在面向?qū)ο蟮某绦蛑校瑢ο笾g只能通過消息相互通信【結(jié)果分析】對象是計算機內(nèi)存中的一塊區(qū)域。在對象中,不但存有數(shù)據(jù),而且存有代碼,使得每個對象在功能上相互之間保持相對獨立。對象之間存在各種聯(lián)系,但它們之間只能通過消息進行通信。四、 判斷題(1) 在高級程序設(shè)計語言中,一般用類來實現(xiàn)對象,類是具有相同屬性和行為的一組對象的集合,它是創(chuàng)建對象的模板。( √ ) (2) C++語言只支持面向?qū)ο蠹夹g(shù)的抽象性、封裝性、繼承性等特性,而不支持多態(tài)性。( ) 【結(jié)果分析】C++語言不僅支持面向?qū)ο蠹夹g(shù)的抽象性、封裝性、繼承性等特性,而且支持多態(tài)性。(3) 面向?qū)ο蟪绦蛟O(shè)計中的消息應(yīng)該包含“如何做”的信息。( ) 【結(jié)果分析】消息是面向?qū)ο蟪绦蛟O(shè)計用來描述對象之間通信的機制。向?qū)ο蟆鞍l(fā)送消息”只需告訴對象做什么,對象根據(jù)這個消息決定如何做。(4) 一個消息只能產(chǎn)生特定的響應(yīng)效果。( ) 【結(jié)果分析】當(dāng)一個對象發(fā)出消息時,由于接收對象的類型可能不同,所以,它們可能做出不同的反應(yīng)。這樣,一個消息可以產(chǎn)生不同的響應(yīng)效果,這種現(xiàn)象叫做多態(tài)。(5) 類的設(shè)計和類的繼承機制實現(xiàn)了軟件模塊的可重用性。( √ ) (6) C++語言和Java語言均不是一個純正的面向?qū)ο蟮某绦蛟O(shè)計的語言。( ) 【結(jié)果分析】Java語言是一個純正的面向?qū)ο蟮某绦蛟O(shè)計語言。(7) 學(xué)習(xí)C++語言是學(xué)習(xí)面向?qū)ο蟮某绦蛟O(shè)計方法的唯一途徑。( )【結(jié)果分析】程序設(shè)計方法是獨立于具體程序設(shè)計語言的一種技術(shù),學(xué)習(xí)C++語言是學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計方法的重要途徑之一。(8) 在C++語言中,類是支持數(shù)據(jù)封裝的工具。( √ ) 五、 簡答題(1) 什么是結(jié)構(gòu)化程序設(shè)計方法?它有哪些優(yōu)點和缺點?【問題解答】結(jié)構(gòu)化程序設(shè)計方法著眼于系統(tǒng)要實現(xiàn)的功能,從系統(tǒng)的輸入輸出出發(fā),分析系統(tǒng)要做哪些事情,進而考慮如何做這些事情,自頂向下地對系統(tǒng)的功能進行分解,來建立系統(tǒng)的功能結(jié)構(gòu)和相應(yīng)的程序模塊結(jié)構(gòu),有效地將一個較復(fù)雜的程序系統(tǒng)設(shè)計任務(wù)分解成許多易于控制和處理的子任務(wù),便于開發(fā)和維護。隨著程序規(guī)模與復(fù)雜性的增長,這種面向過程的結(jié)構(gòu)化程序設(shè)計方法存在明顯的不足之處。首先是數(shù)據(jù)安全性問題。由于數(shù)據(jù)被每個模塊所共用,因此是不安全的,一旦出錯,很難查明原因。其次是可維護性及可重用性差。它把數(shù)據(jù)結(jié)構(gòu)和算法分離為相互獨立的實體,一旦數(shù)據(jù)結(jié)構(gòu)需要改變時,常常要涉及整個程序,修改工作量極大并容易產(chǎn)生新的錯誤。每一種相對于老問題的新方法都要帶來額外的開銷。另外,圖形用戶界面的應(yīng)用程序,很難用過程來描述和實現(xiàn),開發(fā)和維護也都很困難。(2) 什么是面向?qū)ο蟪绦蛟O(shè)計方法?它有哪些優(yōu)點?【問題解答】面向?qū)ο蟮某绦蛟O(shè)計方法中,將程序設(shè)計為一組相互協(xié)作的對象而不是一組相互協(xié)作的函數(shù)。在程序中,屬性用數(shù)據(jù)表示,用來描述對象靜態(tài)特征; 行為用程序代碼實現(xiàn),用來描述對象動態(tài)特征??梢?,在面向?qū)ο蟮某绦蛟O(shè)計方法中,對象是數(shù)據(jù)結(jié)構(gòu)和算法的封裝體。對象之間存在各種聯(lián)系,它們之間通過消息進行通信。程序可表示為: 程序=對象+消息在面向?qū)ο蟪绦蛟O(shè)計中應(yīng)著重于類的設(shè)計。類正是面向?qū)ο笳Z言的基本程序模塊,通過類的設(shè)計來完成實體的建模任務(wù)。類通過一個簡單的外部接口與外界發(fā)生關(guān)系。一個類中的操作不會處理到另一個類中的數(shù)據(jù),這樣程序模塊的獨立性、數(shù)據(jù)的安全性就有了良好的保障。程序的執(zhí)行取決于事件發(fā)生的順序,由順序產(chǎn)生的消息來驅(qū)動程序的執(zhí)行。不必預(yù)先確定消息產(chǎn)生的順序,更符合客觀世界的實際。并且面向?qū)ο蟪绦蛟O(shè)計方法提供了軟件重用、解決大問題和復(fù)雜問題的有效途徑,具有抽象性、封裝性、繼承性和多態(tài)性等特點。(3) 結(jié)構(gòu)化程序設(shè)計方法與面向?qū)ο蟪绦蛟O(shè)計方法在對待數(shù)據(jù)結(jié)構(gòu)和算法關(guān)系上有 什么不同?【問題解答】結(jié)構(gòu)化程序設(shè)計方法中,把數(shù)據(jù)結(jié)構(gòu)和算法分離為相互獨立的實體; 而在面向?qū)ο蟪绦蛟O(shè)計中,數(shù)據(jù)結(jié)構(gòu)和算法封裝在一起,結(jié)合成一個獨立的單位,即對象,并盡可能隱蔽對象的內(nèi)部細節(jié)。對象的私有屬性只能由這個對象的