版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
軟件制造工程
第三章編程工程
3.1.1編程工程的定義
■編程工程就是用程序設(shè)計(jì)語(yǔ)言把程序設(shè)
計(jì)的結(jié)果和過(guò)程翻譯為在計(jì)算機(jī)相應(yīng)環(huán)
境下可運(yùn)行的軟件產(chǎn)品,把系統(tǒng)工程師
按照用戶需求設(shè)計(jì)出來(lái)的系統(tǒng)構(gòu)架變?yōu)?/p>
真正可運(yùn)行的軟件系統(tǒng)的工程。
3,1?工編程工程的定義
-編程工程的作業(yè)內(nèi)容詳細(xì)地劃分為制定
工作標(biāo)準(zhǔn),制定編碼基準(zhǔn),理解設(shè)計(jì)書,
程序編碼,自查,送上級(jí)系統(tǒng)工程師審
查,修改以及進(jìn)行單元測(cè)試等若干步驟,
3.1.1編程工程的定義
■編程工程的作業(yè)流程
見P12圖2.3
3.1.2易讀易懂的程序
JI-----------------——
■結(jié)構(gòu)化編程以前,以個(gè)人為中心的編程作業(yè)
■程序的規(guī)模逐漸擴(kuò)大,產(chǎn)生了組織行為的軟件
開發(fā),而且產(chǎn)生了對(duì)過(guò)去開發(fā)的程序進(jìn)行修改
后再利用的需求
■Goto語(yǔ)句的使用
■能夠把猛一看很大的很復(fù)雜的程序用單純的方
法分解,分解后的一塊一塊的程序也都很單純,
這就是“易讀易懂的程序”。
3.2結(jié)構(gòu)化編程
■結(jié)構(gòu)化開發(fā)-結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計(jì)和
結(jié)構(gòu)化編程三個(gè)階段
3.2.1結(jié)構(gòu)化開發(fā)過(guò)程
3.2.1結(jié)構(gòu)化開發(fā)過(guò)程
1、結(jié)構(gòu)化分析
■結(jié)構(gòu)化分析方法的核心是沿?cái)?shù)據(jù)流程圖自頂向
下、逐步求精,是最經(jīng)典的面向數(shù)據(jù)流的需求
分析方法。結(jié)構(gòu)化分析方法使用系統(tǒng)流程圖、
數(shù)據(jù)流程圖、數(shù)據(jù)字典、ER圖、處理說(shuō)明等工
具來(lái)描述系統(tǒng)的功能需求、數(shù)據(jù)需求、運(yùn)行需
求和系統(tǒng)擴(kuò)充需求。該方法廣泛應(yīng)用于銀行,
證券,商務(wù)處理,生產(chǎn)管理等大中型信息管理
系統(tǒng)的需求分析過(guò)程。
3.2.1結(jié)構(gòu)化開發(fā)過(guò)程
■在軟件系統(tǒng)開發(fā)的初期階段,首先要對(duì)
用戶的現(xiàn)行業(yè)務(wù)運(yùn)行系統(tǒng)進(jìn)行調(diào)查和現(xiàn)
狀分析,把握用戶對(duì)新的開發(fā)系統(tǒng)的要
求和希望,從用戶提供的基本信息中,
整理出開發(fā)系統(tǒng)目的和可能實(shí)現(xiàn)的功能
范圍,設(shè)計(jì)出新系統(tǒng)的數(shù)據(jù)流程圖一
(DFD:DataFlowDiagram),顯示屏
幕關(guān)連圖和功能概要說(shuō)明書。
3.2.1結(jié)構(gòu)化開發(fā)過(guò)程
2、結(jié)構(gòu)化設(shè)計(jì)
■結(jié)構(gòu)化設(shè)計(jì)方法通常也叫做面向數(shù)據(jù)流的設(shè)計(jì)、
面向行為的設(shè)計(jì)。結(jié)構(gòu)化設(shè)計(jì)方法是以需求分
析階段獲得的新系統(tǒng)的數(shù)據(jù)流程圖(DFD)和顯
示屏幕關(guān)連圖為基礎(chǔ),通過(guò)一系列映射,自頂
向下,逐步細(xì)化,把它們變換為具體的程序概
要結(jié)構(gòu)圖和屏幕設(shè)計(jì)式樣,把一個(gè)個(gè)復(fù)雜的問(wèn)
題分解細(xì)化為由多個(gè)功能模塊組成的具有層次
結(jié)構(gòu)的軟件系統(tǒng)。
3.2.1結(jié)構(gòu)化開發(fā)過(guò)程
3、結(jié)構(gòu)化程序制造
■結(jié)構(gòu)化程序制造由結(jié)構(gòu)化程序設(shè)計(jì)和結(jié)構(gòu)化程
序編碼組成,它以外部設(shè)計(jì)和內(nèi)部設(shè)計(jì)過(guò)程中
獲得的軟件結(jié)構(gòu)圖及其相關(guān)設(shè)計(jì)資料為基礎(chǔ),
采用自頂向下,逐步細(xì)化的方法,把一個(gè)個(gè)模
塊的功能逐步分解,細(xì)化為一系列具體的步驟,
作出結(jié)構(gòu)化程序設(shè)計(jì)說(shuō)明書,程序員再按照程
序設(shè)計(jì)說(shuō)明書和系統(tǒng)設(shè)計(jì)的相關(guān)資料,把一步
步的處理說(shuō)明翻譯成一系列用某種程序設(shè)計(jì)語(yǔ)
言編寫的程序代碼。
3.2.2系統(tǒng)分析和系統(tǒng)設(shè)計(jì)的
成果文檔與編程的關(guān)系
-結(jié)構(gòu)化分析、設(shè)計(jì)的成果文檔
系統(tǒng)功能概要說(shuō)明書程序名稱一覽表
業(yè)務(wù)處理概要圖(ER圖)公共子程序設(shè)計(jì)說(shuō)明書
顯示屏幕關(guān)連圖程序功能結(jié)構(gòu)圖
屏幕設(shè)計(jì)式樣書程序設(shè)計(jì)說(shuō)明書
數(shù)據(jù)庫(kù)設(shè)計(jì)說(shuō)明書程序處理追加功能說(shuō)明書
代碼設(shè)計(jì)說(shuō)明書模塊功能的定義說(shuō)明書
輸入/輸出文件設(shè)計(jì)說(shuō)明書輸入數(shù)據(jù)檢查說(shuō)明書
3.2,2系統(tǒng)分析和系統(tǒng)設(shè)計(jì)的
成果文檔與編程的關(guān)系
■在進(jìn)行程序編碼工作的初期,程序員首
先要獲取系統(tǒng)功能概要說(shuō)明書、業(yè)務(wù)處
理概要圖(DFD圖或者ER圖)、顯示屏
幕關(guān)連圖和程序名稱一覽表,理解開發(fā)
系統(tǒng)的目的、整體要素和各個(gè)子系統(tǒng)的
處理要求。
3.2.2系統(tǒng)分析和系統(tǒng)設(shè)計(jì)的
成果文檔與編程的關(guān)系
-程序編碼的主要依據(jù)是程序設(shè)計(jì)說(shuō)明書,在編
寫程序代碼之前,程序員首先要確認(rèn)自己所要
編制的程序名稱,獲取該程序的程序設(shè)計(jì)說(shuō)明
書,理解該程序的程序功能概要和各個(gè)模塊的
詳細(xì)處理說(shuō)明,確定該程序所要使用的屏幕和
報(bào)表的名稱,數(shù)據(jù)庫(kù)表和輸入輸出文件的名稱,
以及調(diào)用公共子程序的名稱,找出所有相關(guān)的
設(shè)計(jì)資料,充分理解程序設(shè)計(jì)說(shuō)明書的內(nèi)容,
若有疑問(wèn)或不明白的地方,要提出問(wèn)題,與系
統(tǒng)設(shè)計(jì)人員進(jìn)行交流確認(rèn)。
3.2.2系統(tǒng)分析和系統(tǒng)設(shè)計(jì)的
成果文檔與編程的關(guān)系
■在正確理解程序設(shè)計(jì)說(shuō)明書的基礎(chǔ)上,
構(gòu)思出結(jié)構(gòu)化程序的框架,必要時(shí)作出
程序處理流程圖。使用c語(yǔ)言或者其它語(yǔ)
言編寫程序代碼時(shí),還要獲取相關(guān)文件
和DB的格式定義代碼(*.h)或COPY句,
確認(rèn)各個(gè)數(shù)據(jù)項(xiàng)目的變量名稱。需要調(diào)
用公共子程序時(shí),要獲得公共子程序的
代碼或者可執(zhí)行文件,做好輸入輸出參
數(shù)的設(shè)置和返回值的判斷處理。
3.2.2系統(tǒng)分析和系統(tǒng)設(shè)計(jì)的
成果文檔與編程的關(guān)系
■在編寫程序代碼之前,還需要獲得編碼
測(cè)試基準(zhǔn)、共通處理說(shuō)明書和代碼設(shè)計(jì)
說(shuō)明書、獲取相應(yīng)的例子程序,在正確
理解編碼測(cè)試基準(zhǔn)的基礎(chǔ)上,進(jìn)行程序
編碼和編碼完成后的單元測(cè)試,一定不
要在程序編碼測(cè)試完成以后,再回過(guò)頭
來(lái)對(duì)照編程基準(zhǔn)和共通處理說(shuō)明書,檢
查修改與基準(zhǔn)不一致的地方,那樣既增
加了作業(yè)時(shí)間又不能保證程序質(zhì)量。
3.2.3結(jié)構(gòu)化編碼
■程序代碼的質(zhì)量與軟件系統(tǒng)外部設(shè)計(jì)和
內(nèi)部設(shè)計(jì)的質(zhì)量直接相關(guān),同時(shí),程序
設(shè)計(jì)語(yǔ)言的特性和程序員的編碼水平,
程序代碼的可讀性,可維護(hù)性,可靠性,
可測(cè)試性都是直接影響程序質(zhì)量的因素。
3.2.2系統(tǒng)分析和系統(tǒng)設(shè)計(jì)的
成果文檔與編程的關(guān)系
■在進(jìn)行組合測(cè)試之前,需要獲取系統(tǒng)功
能概要說(shuō)明書、數(shù)據(jù)流程圖、編碼測(cè)試
基準(zhǔn)和共通處理說(shuō)明書,把握各個(gè)子系
統(tǒng)的處理流程和各個(gè)程序單元之間的接
口,確保實(shí)現(xiàn)整個(gè)系統(tǒng)的設(shè)計(jì)功能
3.2.3結(jié)構(gòu)化編碼
■結(jié)構(gòu)化編碼采用自頂向下,逐步細(xì)化的
方法,先全局,后局部,先整體,后細(xì)
節(jié),先抽象,后具體,逐步求精,編制
出來(lái)的程序具有清晰的邏輯層次結(jié)構(gòu),
容易閱讀、理解、修改和維護(hù),可以提
高軟件質(zhì)量,提高軟件開發(fā)的成功率和
生產(chǎn)性。結(jié)構(gòu)化編碼過(guò)程中,要遵循以
下幾個(gè)主要的原則:
3.2.3結(jié)構(gòu)化編碼
⑴盡可能使用語(yǔ)言提供的基本控制結(jié)構(gòu),順序結(jié)構(gòu)、選
擇結(jié)構(gòu)和重復(fù)結(jié)構(gòu)。
⑵選用的控制結(jié)構(gòu)只準(zhǔn)許有一個(gè)入口和一個(gè)出口。
⑶利用程序內(nèi)部函數(shù),把程序組織成容易識(shí)別的內(nèi)部函
數(shù)模塊,每個(gè)模塊只有一個(gè)入口或一個(gè)出口,一般不
超過(guò)200行。
(4)復(fù)雜結(jié)構(gòu)應(yīng)該用基本控制結(jié)構(gòu)組合或嵌套來(lái)實(shí)現(xiàn)。
⑸盡可能減少GOTO語(yǔ)句的使用,一般限制用到以下兩
種情況:
?把控制轉(zhuǎn)移到出錯(cuò)處理。
?把控制轉(zhuǎn)移到函數(shù)模塊結(jié)束
3.2.3結(jié)構(gòu)化編碼
■大量采用GOTO語(yǔ)句實(shí)現(xiàn)控制路徑,會(huì)使
程序路徑變得復(fù)雜而且混亂,但有時(shí)完
全不用GOTO語(yǔ)句,可能會(huì)增加程序?qū)崿F(xiàn)
的復(fù)雜度。例如,在查找結(jié)束時(shí)、文件
訪問(wèn)結(jié)束時(shí)或出現(xiàn)錯(cuò)誤情況要從循環(huán)中
轉(zhuǎn)出時(shí),使用GOTO語(yǔ)句會(huì)使程序更加清
晰易懂。所以,應(yīng)該加以限制地使用
GOTO語(yǔ)句。
3.2.3結(jié)構(gòu)化編碼
■例如,使用c語(yǔ)言編寫下面的一個(gè)小程序,
目的是打印出A,B,C三個(gè)數(shù)據(jù)中的最小
數(shù),如圖32給出了程序流程圖。
■程序段1、程序段2比較
3.2.3結(jié)構(gòu)化編碼
■結(jié)構(gòu)化程序編碼就是按照結(jié)構(gòu)化程序設(shè)
計(jì)說(shuō)明書,從程序的控制結(jié)構(gòu)入手,自
頂向下,逐步細(xì)化,把一個(gè)個(gè)模塊的功
能逐步分解,細(xì)化為一系列具體的步驟。
3.2.3結(jié)構(gòu)化編碼
■在結(jié)構(gòu)化程序的實(shí)現(xiàn)方法中,有兩種常
用的基本方法,第一是BREAK處理(見
圖3.3),第二是MATCHING處理(見圖
3.5)
3.2.3結(jié)構(gòu)化編碼
BREAK方法的處理概要如下,處理流程見圖34
①按關(guān)鍵字項(xiàng)目值的升序讀入輸入文件的記錄,
把關(guān)鍵字項(xiàng)目的值存入工作變量中。
②關(guān)鍵字項(xiàng)目的值相同時(shí),進(jìn)行統(tǒng)計(jì)處理(或者
其他處理)。
③關(guān)鍵字項(xiàng)目的值發(fā)生了變化(BREAK)的時(shí)候,
把變化前(BREAKBEFOR)的關(guān)鍵字項(xiàng)目值和
統(tǒng)計(jì)結(jié)果輸出到文件中(或者其他處理),用
變化后(BREAKAFTER)的關(guān)鍵字項(xiàng)目值替換
變化前的關(guān)鍵字項(xiàng)目值。
3.2.3結(jié)構(gòu)化編碼
④讀入輸入文件的下一條記錄,把關(guān)鍵字
項(xiàng)目的值存入變化后的工作變量中。
⑤繼續(xù)進(jìn)行上述②至④的處理,直至文件
讀入結(jié)束。
3.2.3結(jié)構(gòu)化編碼
■前提條件是:
在進(jìn)行BREAK處理之前,輸入文件必須
是已經(jīng)按照關(guān)鍵字項(xiàng)目值進(jìn)行排序(升
序或者降序)處理好的。
>3.2.3結(jié)構(gòu)化編碼
MATCHING方法處理概要說(shuō)明如下,處理流程如
圖3,6所示。
①按關(guān)鍵字項(xiàng)目值的升序讀入基礎(chǔ)文件的記錄,
把關(guān)鍵字項(xiàng)目的值存入基礎(chǔ)KEY工作變量中。
②按關(guān)鍵字項(xiàng)目值的升序讀入事務(wù)文件的記錄,
把關(guān)鍵字項(xiàng)目的值存入事務(wù)KEY工作變量中。
③基礎(chǔ)KEY的值與事務(wù)KEY值相等時(shí),把事務(wù)文
件的數(shù)據(jù)編輯輸出到文件中。讀入事務(wù)文件的
下一條記錄,把關(guān)鍵字值存入事務(wù)KEY。
>3.2.3結(jié)構(gòu)化編碼
④基礎(chǔ)KEY的值大于事務(wù)KEY值的時(shí)候,把事務(wù)KEY的值
寫到錯(cuò)誤信息文件中。讀入事務(wù)文件的下一條記錄,
把關(guān)鍵字值存入事務(wù)KEY。
⑤基礎(chǔ)KEY的值小于事務(wù)KEY值的時(shí)候,讀入基礎(chǔ)文件的
下一條記錄,把關(guān)鍵字值存入基礎(chǔ)KEY。
⑥繼續(xù)進(jìn)行上述③至④的處理,直至文件讀入結(jié)束。
1:1的匹配處理的情況下,上述處理③讀入事務(wù)文件的同
時(shí),還要讀入基礎(chǔ)文件
3.2.3結(jié)構(gòu)化編碼
■前提條件是:
在進(jìn)行MATCHING處理之前,輸入文件
必須是已經(jīng)按照關(guān)鍵字項(xiàng)目的值進(jìn)行排
序(升序或者降序)處理好的。
3.3.1什么是面向?qū)ο?/p>
■面向?qū)ο螅╫bject-oriented或object-
orientation亦僅是一些具體的軟件開發(fā)
技術(shù)與策略,而且是一整套關(guān)于如何看
待軟件系統(tǒng)與現(xiàn)實(shí)世界的關(guān)系,以什么
觀點(diǎn)來(lái)研究問(wèn)題并進(jìn)行求解,以及如何
進(jìn)行系統(tǒng)構(gòu)造的軟件方法學(xué)。
3.3.1什么是面向?qū)ο?/p>
-概括地說(shuō),面向?qū)ο蠓椒ǖ幕舅枷胧?,從現(xiàn)實(shí)世界
中客觀存在的事物(即對(duì)象)出發(fā)來(lái)構(gòu)造軟件系統(tǒng),
并在系統(tǒng)構(gòu)造中盡可能運(yùn)用人類的自然思維方式。
■開發(fā)一個(gè)軟件是為了解決某些問(wèn)題,這些問(wèn)題所涉及
的業(yè)務(wù)范圍稱作該軟件的問(wèn)題域。面向?qū)ο蠓椒◤?qiáng)調(diào)
直接以問(wèn)題域(現(xiàn)實(shí)世界)中的事物為中心來(lái)思考問(wèn)
題、認(rèn)識(shí)問(wèn)題,并根據(jù)這些事物的本質(zhì)特征,把它們
抽象地表示為系統(tǒng)中的對(duì)象,作為系統(tǒng)的基本構(gòu)成單
位(而不是用一些與現(xiàn)實(shí)世界中的事物相差較遠(yuǎn),并
且沒有對(duì)應(yīng)關(guān)系的其它概念來(lái)構(gòu)造系統(tǒng))。這可以使
系統(tǒng)直接地映射問(wèn)題域,保持問(wèn)題域中事物及其相互
關(guān)系的本來(lái)面貌。
什么是面向?qū)ο?/p>
■自80年代末期到90年代,面向?qū)ο蟮姆?/p>
法與技術(shù)向著軟件生命周期的前期階段
發(fā)展,即:人們對(duì)面向?qū)ο蠓椒ǖ难芯?/p>
與運(yùn)用,不再局限于編程階段,而是從
系統(tǒng)分析和系統(tǒng)設(shè)計(jì)階段就開始采用面
向?qū)ο蠓椒?。這標(biāo)志著面向?qū)ο蠓椒ㄒ?/p>
經(jīng)發(fā)展成一種完整的方法論和系統(tǒng)化的
技術(shù)體系
3.3.1什么是面向?qū)ο?/p>
■面向?qū)ο蟮姆椒ㄅc技術(shù)發(fā)展到軟件生命周期的
前期階段有著更為深刻的意義。因?yàn)槊嫦驅(qū)ο?/p>
方法的本質(zhì),就是主張從客觀世界固有的事物
出發(fā)來(lái)構(gòu)造系統(tǒng),提倡用人類在現(xiàn)實(shí)生活中常
用的思維方法來(lái)認(rèn)識(shí)、理解和描述客觀事物,
強(qiáng)調(diào)最終建立的系統(tǒng)能夠映射問(wèn)題域,即:系
統(tǒng)中的對(duì)象以及對(duì)象之間的關(guān)系能夠如實(shí)地反
映問(wèn)題域中固有事物及其關(guān)系。這恰恰是從分
析和設(shè)計(jì)階段入手才能根本解決的問(wèn)題。
3.3.2面向?qū)ο蟮能浖こ谭椒?/p>
■面向?qū)ο蟮能浖こ谭椒ㄊ敲嫦驅(qū)ο蠓?/p>
法在軟件工程領(lǐng)域的全面運(yùn)用。它包括
面向?qū)ο蟮姆治?、面向?qū)ο蟮脑O(shè)計(jì)、面
向?qū)ο蟮木幊?、面向?qū)ο蟮臏y(cè)試和面向
對(duì)象的軟件維護(hù)(OOSM)等主要內(nèi)容。
一j3.3.2面向?qū)ο蟮能浖こ谭椒?/p>
-軟件開發(fā)是對(duì)問(wèn)題求解的過(guò)程。按照軟
件工程學(xué)對(duì)軟件生命周期的劃分,軟件
開發(fā)過(guò)程包括分析、設(shè)計(jì)、編程、測(cè)試
和維護(hù)等主要階段。從認(rèn)識(shí)論的角度看,
整個(gè)軟件開發(fā)過(guò)程又可歸結(jié)為兩項(xiàng)主要
活動(dòng),即:人們對(duì)所要解決的問(wèn)題及其
相關(guān)事物的認(rèn)識(shí)和基于這種認(rèn)識(shí)所進(jìn)行
地描述。
3.3.2面向?qū)ο蟮能浖こ谭椒?/p>
■粗略地劃分認(rèn)識(shí)與描述,可以把分析與設(shè)計(jì)看
作對(duì)問(wèn)題及其解決方案的認(rèn)識(shí),把編程看作對(duì)
解決方案的描述。細(xì)致地劃分,則分析和設(shè)計(jì)
階段本身也包括描述,即按一定的軟件開發(fā)模
型中分析及設(shè)計(jì)階段的表示方法,產(chǎn)生分析文
檔和設(shè)計(jì)文檔;編程階段也包括一定的認(rèn)識(shí)和
理解活動(dòng),特別是在傳統(tǒng)的軟件開發(fā)方法中,
分析文檔和設(shè)計(jì)文檔不能很好地映射問(wèn)題域,
程序員在書寫程序之前,往往需要在分析、設(shè)
計(jì)文檔的幫助下,對(duì)程序所要描述的事物進(jìn)行
再認(rèn)識(shí)。
3.3.2面向?qū)ο蟮能浖こ谭椒?/p>
■對(duì)問(wèn)題域的正確認(rèn)識(shí)是軟件開發(fā)工作的
首要任務(wù)。沒有對(duì)問(wèn)題域的正確認(rèn)識(shí),
就不可能產(chǎn)生一個(gè)正確的系統(tǒng)。描述只
是把開發(fā)人員對(duì)問(wèn)題域的認(rèn)識(shí)表達(dá)出來(lái),
最終產(chǎn)生一個(gè)機(jī)器能夠理解和執(zhí)行的系
統(tǒng)實(shí)現(xiàn)。
一j3.3.2面向?qū)ο蟮能浖こ谭椒?/p>
■既然軟件開發(fā)是對(duì)問(wèn)題域的認(rèn)識(shí)和描述,按軟
件工程學(xué)的觀點(diǎn),從認(rèn)識(shí)事物方面看,它在分
析階段提供了一些對(duì)問(wèn)題域的分析認(rèn)識(shí)方法。
從描述事物方面看,它在分析和設(shè)計(jì)階段提供
了一些從問(wèn)題域逐步過(guò)渡到編程語(yǔ)言的描述手
段。但是在結(jié)構(gòu)化的軟件工程方法中,這些過(guò)
渡手續(xù)并不連續(xù)。就是說(shuō),并沒有完全填平語(yǔ)
言之間的鴻溝(如下圖)。而在面向?qū)ο蟮拈_
發(fā)中,它們都是緊密銜接的,填平了語(yǔ)言之間
的鴻溝(如下圖)。
傳統(tǒng)的軟件工程方法與面向?qū)ο?/p>
的軟件工程方法
問(wèn)題域問(wèn)題域
自然語(yǔ)言需求分析00A
自然語(yǔ)言(面向?qū)ο蠓治觯?/p>
分析與設(shè)計(jì)的鴻溝
總體設(shè)計(jì)00D
(面向?qū)ο笤O(shè)計(jì))
詳細(xì)設(shè)計(jì)
OOP
中向?qū)ο蟮木幊陶Z(yǔ)(面向?qū)ο缶幊蹋?/p>
編程語(yǔ)言編程
00T
(面向?qū)ο鬁y(cè)試)
測(cè)試
計(jì)算機(jī)
計(jì)算機(jī)
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■面向?qū)ο蟮木幊逃址Q作面向?qū)ο蟮膶?shí)現(xiàn)(001)。它
是面向?qū)ο蠓椒◤恼Q生、發(fā)展到走向成熟的第一片領(lǐng)
地,也是使面向?qū)ο蟮能浖_發(fā)最終實(shí)現(xiàn)的重要階段。
在00A和00D理論出現(xiàn)之前,程序員要寫一個(gè)好的面
向?qū)ο蟮某绦?,首先要學(xué)會(huì)運(yùn)用00方法來(lái)認(rèn)識(shí)問(wèn)題域,
所以O(shè)OP被看作一門比較高深的技術(shù)?,F(xiàn)在,在
OOA-OOD-OOP這一軟件工程的過(guò)程系列中,OOP
的分工比較簡(jiǎn)單了:認(rèn)識(shí)問(wèn)題域與設(shè)計(jì)系統(tǒng)成分的工
作已經(jīng)在00A與00D階段完成,OOP工作就是用同一
種面向?qū)ο蟮木幊陶Z(yǔ)言把00D模型中的每個(gè)部分書寫
出來(lái)。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■我們使用的編程語(yǔ)言直接影響我們觀察(建模)
現(xiàn)實(shí)的方式。20世紀(jì)70年代當(dāng)我們使用C、
Pascal和PL/1等編程語(yǔ)言時(shí),我們使用命令式
范圍(即結(jié)構(gòu)化方法)對(duì)現(xiàn)實(shí)建模。20世紀(jì)80
年代當(dāng)我們使用關(guān)系數(shù)據(jù)庫(kù)、SQL和4GL時(shí),
我們使用數(shù)據(jù)建模范型對(duì)現(xiàn)實(shí)建模一實(shí)體一關(guān)
系圖。今天我們使用C++、JAVA、Smalltalk和
ObjectiveC編程時(shí),我們使用面向?qū)ο蟮哪P?/p>
對(duì)現(xiàn)實(shí)建模。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■面向?qū)ο缶幊痰幕靖拍?/p>
由于面向?qū)ο蠓椒◤?qiáng)調(diào)在軟件開發(fā)過(guò)程
中面向客觀世界(問(wèn)題域)中的事物,
采用人類在認(rèn)識(shí)世界的過(guò)程中普通運(yùn)用
的思維方法,我們?cè)谡J(rèn)識(shí)面向?qū)ο蟮木?/p>
程時(shí),需要了解面向?qū)ο蟮囊恍┗靖?/p>
念,在介紹這些概念時(shí)力求與客觀世界
和人的自然思維方式聯(lián)系起來(lái)。
3.3.3面向?qū)ο蟮木幊?OOP)
⑴對(duì)象(Object)
■對(duì)象(Object)是面向?qū)ο缶幊痰淖罨?/p>
本的概念。
■對(duì)象是系統(tǒng)中用來(lái)描述客觀事物的一個(gè)
實(shí)體,它是構(gòu)成系統(tǒng)的一個(gè)基本單元。
一個(gè)對(duì)象由一組屬性(attribute)和對(duì)這
組屬性進(jìn)行操作的一組服務(wù)(Service)
組成。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
-屬性和服務(wù),是構(gòu)成對(duì)象的兩個(gè)主要因素,其
定義是:
-屬性是用來(lái)描述對(duì)象靜態(tài)特征的一個(gè)數(shù)據(jù)項(xiàng)。
■服務(wù)是用來(lái)描述對(duì)象動(dòng)態(tài)特征(行為)的一個(gè)
操作序列。
■一個(gè)對(duì)象可以有多項(xiàng)屬性和多項(xiàng)服務(wù)。一個(gè)對(duì)
象的屬性和服務(wù)被結(jié)合成一個(gè)整體,對(duì)象的屬
性值只能由這個(gè)對(duì)象的服務(wù)存取。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■另外需要說(shuō)明以下兩點(diǎn):第一點(diǎn)是,對(duì)
象只描述客觀事物本質(zhì)的、與系統(tǒng)目標(biāo)
有關(guān)的特征,而不考慮那些非本質(zhì)的、
與系統(tǒng)目標(biāo)無(wú)關(guān)的特征。這就是說(shuō),對(duì)
象是對(duì)事物的抽象描述。第二點(diǎn)是,對(duì)
象是屬性和服務(wù)的結(jié)合體,二者是不可
分的;而且對(duì)象的屬性值只能由這個(gè)對(duì)
象的服務(wù)來(lái)讀取和修改,這就是封裝概
念。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■根據(jù)以上兩點(diǎn),也可以給出如下對(duì)象定
義:
對(duì)象是問(wèn)題域或?qū)崿F(xiàn)域中某些事物的一
個(gè)抽象,它反映該事物在系統(tǒng)中需要保
存的信息和發(fā)揮的作用;它是一組屬性
和有權(quán)對(duì)這些屬性進(jìn)行操作的一組服務(wù)
的封裝體。
3.3.3面向?qū)ο蟮木幊?OOP)
⑵類(class)
在00方法中,類的定義是:
■類是具有相同屬性和服務(wù)的一組對(duì)象的集合,
它為屬于該類的全部對(duì)象提供了統(tǒng)一的抽象描
述,其內(nèi)部包括屬性和服務(wù)兩個(gè)主要部分。
■在面向?qū)ο蟮木幊陶Z(yǔ)言中,類是一個(gè)獨(dú)立的程
序單元,它應(yīng)該有一個(gè)類名并包括屬性說(shuō)明和
服務(wù)說(shuō)明兩人主要部分。類的作用是定義對(duì)象。
比如,程序中給出了一個(gè)類的說(shuō)明,然后以靜
態(tài)聲明或動(dòng)態(tài)創(chuàng)建等方式定義它的對(duì)象實(shí)例。
.3.3.3面向?qū)ο蟮木幊?OOP)
-JI------------------
■類與對(duì)象的關(guān)系如同一個(gè)模具與用這個(gè)模具鑄
造出來(lái)的鑄件之間的關(guān)系。類給出了屬于該類
的全部對(duì)象的抽象定義,而對(duì)象則是符合這種
定義的一個(gè)實(shí)體。所以,一個(gè)對(duì)象又稱作類的
一個(gè)實(shí)例(instance),而有的文僦文把類稱
作對(duì)象的模板(template)o所謂“實(shí)襪”、
“實(shí)例”意味著什么呢?最現(xiàn)實(shí)的一件事是:
在程序中,每個(gè)對(duì)象需要有自己的存儲(chǔ)空間,
以保存它自己的屬性值。我們說(shuō)同類對(duì)象具有
相同的屬性與服務(wù),是指它們的定義形式相同,
而不是說(shuō)每個(gè)對(duì)象的屬性值都相同
3.3.3面向?qū)ο蟮木幊蹋∣OP)
-事物(對(duì)象)既具有共同性,也具有特殊性。運(yùn)用抽
象的原則舍棄對(duì)象的特殊性,抽取其共同性,則得到
一個(gè)適應(yīng)一批對(duì)象的類。如果在這個(gè)類的范圍內(nèi)考慮
定義這個(gè)類時(shí)舍棄的某些特殊性,則在這個(gè)類中有一
部分對(duì)象具有這些特殊性,而這些對(duì)象彼此是共同的,
于是得到一個(gè)新的類。它是前一個(gè)類的子集,稱作前
一個(gè)類的特殊類,而前一個(gè)類稱作這個(gè)新類的一般類,
這是從一般類發(fā)現(xiàn)特殊類。也可以從特殊到一般:考
慮若干類所具有的彼此共同的特征,舍棄它們彼此不
同的特殊性,則得到這些類的一般類。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■一般類和特殊類是相對(duì)而言的,它們之
間是一種真包含的關(guān)系(即:一般類是
特殊類的一個(gè)真子集)。如果兩個(gè)類之
間沒有這種關(guān)系,就談不上一般和特殊。
特殊類具有它的一般類的全部特征,同
時(shí)又具有一些只適應(yīng)于本類對(duì)象的獨(dú)特
特征。
.3.3.3面向?qū)ο蟮木幊蹋∣OP)
-Ji--------------------------
-在00方法中關(guān)于一般類與特殊類的定義是:
如果類A具有類B的全部屬性和全部服務(wù),而且
具有自己特有的某些屬性或服務(wù),貝蛆叫做B的
特殊類,B叫做A的一般類。
■這個(gè)定義也可用另一種方式給出:
如果類A的全部對(duì)象都是類B的對(duì)象,而且類B
中存在不屬于類A的對(duì)象,則A是B的特殊類,B
是A的一般類。
■以上兩個(gè)定義是等價(jià)的。但從軟件開發(fā)的角度
看,前一個(gè)定義運(yùn)用起來(lái)將更加方便。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
⑶封裝(encapsulation)和信息隱蔽
(informationhiding)
■封裝是面向?qū)ο蠓椒ǖ囊粋€(gè)重要原則。它有兩
個(gè)涵義是,把對(duì)象的全部屬性和全部服務(wù)結(jié)合
在一起,形成一個(gè)不可分割的獨(dú)立單位(即對(duì)
象)。第二個(gè)涵義也稱作“信息隱蔽”,即盡
可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié),對(duì)外形成一個(gè)邊界
(或者說(shuō)形成一道屏障),只保留有限的對(duì)外
接口使之與外部發(fā)生聯(lián)系。這主要是指對(duì)象的
外部不能直接地存取對(duì)象的屬性,只能通過(guò)幾
個(gè)允許外部使用的服務(wù)與對(duì)象發(fā)生聯(lián)系。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■用比較簡(jiǎn)練的語(yǔ)言給出封裝的定義就是:
封裝就是把對(duì)象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú)立
的系統(tǒng)單位,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。
■封裝是面向?qū)ο蠓椒ǖ囊粋€(gè)原則,也是面向?qū)?/p>
象技術(shù)必須提供的一種機(jī)制。例如在面向?qū)ο?/p>
的語(yǔ)言中,要求把屬性和服務(wù)結(jié)合起來(lái)定義成
一個(gè)程序單位,并通過(guò)編譯系統(tǒng)保證對(duì)象的外
部不能直接存取對(duì)象的屬性或調(diào)用它的內(nèi)部服
務(wù)。這種機(jī)制就叫作封裝機(jī)制。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■與封裝密切相關(guān)的一個(gè)術(shù)語(yǔ)是可見性。它是指
對(duì)望的屬性和服務(wù)允許對(duì)象外部存取和引用的
程度。
■我們已經(jīng)討論了封裝的好處,然而封裝也有它
的副作用。如果強(qiáng)調(diào)嚴(yán)格的封裝,則對(duì)象的任
何屬性都不先百外部直接存取,因此就要增加
許多沒有其它意義,只負(fù)責(zé)讀或?qū)懙姆?wù)。這
為編程工作增加了負(fù)擔(dān),增加了運(yùn)行開銷,并
且使程序顯得臃腫。為了避免這一點(diǎn),語(yǔ)言往
往米取一種比較現(xiàn)實(shí)的靈活態(tài)度一允許對(duì)象有
不同程度的可見性。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
⑷繼承(inheritance)
■繼承是00方法中一個(gè)十分重要的概念,并且是00技
術(shù)可提高軟件開發(fā)效率的重要原因之一,其定義是:
特殊類的對(duì)象擁有其一般類的全部屬性與服務(wù),稱作
特殊類對(duì)一般類的繼承。
■繼承意味著“自動(dòng)地?fù)碛小保颉半[含地復(fù)制”。就
是說(shuō),特殊類中不必重新定義已在它的一般類中定義
過(guò)的屬性和服務(wù),而它卻自動(dòng)地、隱含地?fù)碛衅湟话?/p>
類的所有屬性與服務(wù)。00方法的這種特性稱作對(duì)象的
繼承性。從一般類和特殊類的定義可看到,后者對(duì)前
者的繼承在邏輯上是必然的。繼承的實(shí)現(xiàn)則是通過(guò)00
系統(tǒng)(例如OOPL)的繼承機(jī)制來(lái)保證的。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■繼承對(duì)于軟件復(fù)用是很益的。在開發(fā)一個(gè)系統(tǒng)
時(shí),使特殊類繼承一般類,這本身就是軟件復(fù)
用,然而其復(fù)用意義不僅如此。如果把用00
方法開發(fā)的類作為可復(fù)用構(gòu)件提交到構(gòu)件庫(kù),
那么在開發(fā)新系統(tǒng)時(shí)不僅可以直接地復(fù)用這個(gè)
類,還可以把它作為一般類,通過(guò)繼承而實(shí)現(xiàn)
復(fù)用,從而大大擴(kuò)展了復(fù)用范圍。
-一個(gè)類可以是多個(gè)一般類的特殊類,它從多個(gè)
一般類中繼承了屬性與服務(wù),這種繼承模式叫
作多繼承。多繼承無(wú)論從概念上還是從技術(shù)上
都是單繼承的推廣。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
⑸消息(message)
■對(duì)象通過(guò)它對(duì)外提供的服務(wù)在系統(tǒng)中發(fā)揮自己的作用。
當(dāng)系統(tǒng)中的其它對(duì)象(或其它系統(tǒng)成分)請(qǐng)求這個(gè)對(duì)
象執(zhí)行某個(gè)服務(wù)時(shí),它就響應(yīng)這個(gè)請(qǐng)求,完成指定的
服務(wù)所應(yīng)完成的職責(zé)。在00方法中把向?qū)ο蟀l(fā)出的服
務(wù)請(qǐng)求稱作消息。通過(guò)消息進(jìn)行對(duì)象之間的通信,也
是00方法的一個(gè)原則,它與封裝的原則有密切的關(guān)系。
封裝使對(duì)象成為一些各司其職,互不干擾的獨(dú)立單位;
消息通信則為它們提供了唯一合法的動(dòng)態(tài)聯(lián)系途徑,
使它們的行為能夠互相配合,構(gòu)成一個(gè)有機(jī)的運(yùn)動(dòng)的
系統(tǒng)。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
00方法中對(duì)消息的定義是:
-消息就是向?qū)ο蟀l(fā)出的服務(wù)請(qǐng)求,它應(yīng)該含有下述信
息:提供服務(wù)的對(duì)象標(biāo)識(shí)、服務(wù)標(biāo)識(shí)、輸入信息和回
答彳言息。
-72、前血攵者是提供服務(wù)的對(duì)象。在設(shè)計(jì)時(shí),它對(duì)外
提供的每個(gè)服務(wù)應(yīng)規(guī)定消息的格式,這種規(guī)定稱作消
息協(xié)議。
-消息的發(fā)送者是要求提供服務(wù)的對(duì)象或其它系統(tǒng)成分
(在不要求完全對(duì)象化的語(yǔ)言中允許有不屬于任何對(duì)
象的成分,例如C++程序的main函數(shù))。在它的每個(gè)
發(fā)送點(diǎn)上需要寫出一個(gè)完整的消息,其內(nèi)容包括接收
者(對(duì)象標(biāo)識(shí))、服務(wù)標(biāo)識(shí)和符合消息協(xié)議要求的參
數(shù)。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■對(duì)照一下某些00語(yǔ)言(如C++,ObjectPascal或Eiffel)
對(duì)消息的實(shí)現(xiàn),在這些語(yǔ)言中,所謂消息其實(shí)就是函
數(shù)(或過(guò)程、例程)調(diào)用。
■作為00方法中的一個(gè)基本概念,采用“消息”這個(gè)術(shù)
語(yǔ)至少有以下好處:第一,更接近人們?nèi)粘K季S所采
用的術(shù)語(yǔ);第二,其涵義更具有一般性,而不限制采
用何種實(shí)現(xiàn)技術(shù)。在分布式技術(shù)和客戶/服務(wù)器技術(shù)快
速發(fā)展的今天,對(duì)象可以在不同的網(wǎng)絡(luò)結(jié)點(diǎn)上實(shí)現(xiàn)并
相互提供服務(wù)。在這種背景下可以看到,“消息”這
個(gè)術(shù)語(yǔ)確實(shí)有些更強(qiáng)的適應(yīng)性。
3.3.3面向?qū)ο蟮木幊?OOP)
⑹結(jié)構(gòu)(Structure)與連接(connection)
■僅僅用一些對(duì)象(以及它們的類)描述'可題域中的事物是不夠的。
因?yàn)槿魏我粋€(gè)較為復(fù)雜的問(wèn)題域中,事物之間并不是互相孤立、
各不相關(guān)的,而是具有一定的關(guān)系,并因此構(gòu)成一個(gè)有機(jī)的整體。
為了使系統(tǒng)能夠有效地映射問(wèn)題域,系統(tǒng)開發(fā)者需認(rèn)識(shí)并描述對(duì)
象之間的以下幾種關(guān)系:
?對(duì)象的分類關(guān)系;
?對(duì)象之間的組成關(guān)系;
?對(duì)象屬性之間的靜態(tài)聯(lián)系;
?對(duì)象行為之間的動(dòng)態(tài)聯(lián)系。
-00方法運(yùn)用一般一特殊結(jié)構(gòu)、整體一部分結(jié)構(gòu)、實(shí)例連接和消息
連接描述對(duì)象之間的以上四種關(guān)系。以下分別加以介紹。
3.3.3面向?qū)ο蟮木幊?OOP)
-JI--------------------
①一^般—特殊結(jié)構(gòu)
■一般一特殊結(jié)構(gòu)又稱作分類結(jié)構(gòu)(classification
structure),是由一組具肴一酸一特殊關(guān)素(繼承關(guān)系)
的類所組成的結(jié)構(gòu)。它是一個(gè)以類為結(jié)點(diǎn),以繼承關(guān)
系為邊的連通有向圖。其中,僅由一些存在單繼承關(guān)
系的類形成的結(jié)構(gòu)又稱作層次結(jié)構(gòu)(hierarchy
structure),它是一個(gè)以最上層的一般類為旗的樹形
結(jié)構(gòu);由一些存在多繼承關(guān)系的類形成的結(jié)構(gòu)又稱作
網(wǎng)格結(jié)構(gòu)(latticestructure),它是一個(gè)羋序的連逋
有向圖。
■下圖是兩人一般一特殊結(jié)構(gòu)的例子,其中(a)是一個(gè)層
次結(jié)構(gòu),(b)是一個(gè)網(wǎng)格結(jié)構(gòu)。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
(b)
43?3.3面向?qū)ο蟮木幊?OOP)
②整體一部分結(jié)構(gòu)
■整體一部分結(jié)構(gòu)又稱作組裝結(jié)構(gòu)(composition
structure),它描述對(duì)象之間的組成關(guān)系,即:
一個(gè)(或一些)對(duì)象是另一個(gè)對(duì)象的組成或部
分??陀^世界中存在許多這樣的現(xiàn)象,例如,
發(fā)動(dòng)機(jī)是汽車的一個(gè)組成部分。一個(gè)整體一部
分結(jié)構(gòu)由一組彼此之間存在著這種組成關(guān)系的
對(duì)象構(gòu)成,如上右圖所示。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■整體一部分結(jié)構(gòu)有兩種實(shí)現(xiàn)方式。第一種方式
是用部分對(duì)象的類作為一種廣義的數(shù)據(jù)類型來(lái)
定義整體對(duì)象的一個(gè)屬性,構(gòu)成一人嵌套對(duì)象。
在這種方式下,一個(gè)部分對(duì)象只能隸屬于唯一
的整體對(duì)象,并與它同生同滅。第二種方式是
獨(dú)立地定義和創(chuàng)建整體對(duì)象和部分對(duì)象,并在
整體對(duì)象中設(shè)置一個(gè)屬性,它的值是部分對(duì)象
的對(duì)象標(biāo)識(shí),或者是一個(gè)指向部分對(duì)象的指針。
在這種方式下,一個(gè)部分對(duì)象可以屬于多個(gè)整
體對(duì)象,并具有不同的生存期。后一種情況便
于表示比豉松酸的整體一機(jī)分關(guān)系。
、O
43?3.3面向?qū)ο蟮木幊?OOP)
③實(shí)例連接
■實(shí)例連接反映對(duì)象與對(duì)象之間的靜態(tài)聯(lián)
系。例如教師和學(xué)生之間的任課關(guān)系,
單位的公用汽車和駕駛員之間的使用關(guān)
系等等。這種雙邊關(guān)系在實(shí)現(xiàn)中可以通
過(guò)對(duì)象(實(shí)例)的屬性表達(dá)出來(lái)。所以
這種關(guān)系稱作實(shí)例連接。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
④消息連接
■消息連接描述對(duì)象之間的動(dòng)態(tài)聯(lián)系,即:
若一個(gè)對(duì)象在執(zhí)行自己的服務(wù)時(shí),需要
(通過(guò)消息)請(qǐng)求另一個(gè)對(duì)象為它完成
某個(gè)服務(wù),則說(shuō)第一個(gè)對(duì)象與第二個(gè)對(duì)
象之間存在著消息連接。消息連接是有
向的,從消息發(fā)送者指向消息接收者。
43?3.3面向?qū)ο蟮木幊?OOP)
(7)多態(tài)性(polymorphism)
■對(duì)象的多態(tài)性是指在一般類中定義的屬
性或服務(wù)被特殊類繼承之后,可以具有
不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。
這使得同一個(gè)屬性或服務(wù)名在一般類及
其各個(gè)特殊類中具有不同的語(yǔ)義。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■如果一種OOPL(面向?qū)ο蟮木幊陶Z(yǔ)言)
能支持對(duì)象的多態(tài)性,則可為開發(fā)者帶
來(lái)不少方便。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
-例如,在一般類“幾何圖形”中定義了一個(gè)服務(wù)“繪
圖”,但并不確定執(zhí)行時(shí)到底畫一個(gè)什么圖形。特殊
類“橢圓”和“多邊形”都繼承了,但其功能幾何圖
形類的繪圖服務(wù)卻不同:一個(gè)是畫出一個(gè)橢圓,一個(gè)
是畫出一個(gè)多邊形。進(jìn)而,在多邊形類更下層的一般
類“矩形”中繪圖服務(wù)又可以采用一個(gè)比畫一般的多
邊形更高效和的算法來(lái)畫一個(gè)矩形。這樣,當(dāng)系統(tǒng)的
其余部分請(qǐng)求畫出任何一種幾何圖形時(shí),消息中給出
的服務(wù)名同樣都是“繪圖”(因而消息的書寫方式可
以統(tǒng)一),而橢圓、多邊形、矩形等類的對(duì)象接收到
這個(gè)消息時(shí)卻各自執(zhí)行不同的繪圖算法。
3.3.3面向?qū)ο蟮木幊?OOP)
(8)永久對(duì)象(persistentobject)
■永久對(duì)象是當(dāng)前00領(lǐng)域的一個(gè)技術(shù)熱點(diǎn)。所謂
永久對(duì)象,就是生存期可以超越程序的執(zhí)行時(shí)
間而長(zhǎng)期存在的對(duì)象。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■目前大多數(shù)商品化的OOPL是不支持永久對(duì)象的。程序
中定義的對(duì)象,其生存期都不超過(guò)程序的運(yùn)行時(shí)間。
即當(dāng)程序運(yùn)行結(jié)束時(shí),它所定義的對(duì)象也都消失了。
如果一個(gè)應(yīng)用要求把某些對(duì)象的屬性信息長(zhǎng)期保存,
并能在下一次程序運(yùn)行時(shí)加以恢復(fù),就只好借助文件
系統(tǒng)或數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)實(shí)現(xiàn)。這需要程序員做許多
工作,包括對(duì)象與文件(或數(shù)據(jù)庫(kù))之間數(shù)據(jù)格式的
轉(zhuǎn)換,以及保存與恢復(fù)所需的操作。這些工作無(wú)疑是
很繁瑣的,而且這意味著面向?qū)ο蟮母拍畹臅r(shí)空范圍
只局限于程序運(yùn)行時(shí)間和內(nèi)存空間,一旦超出這個(gè)范
圍,對(duì)象就變成了傳統(tǒng)的外存數(shù)據(jù)。
3.3.3面向?qū)ο蟮木幊?OOP)
■永久對(duì)象的概念及實(shí)現(xiàn)技術(shù)可以使上述問(wèn)題得
到解決。只要程序員聲明某個(gè)對(duì)象是永久的,
則它的存儲(chǔ)、恢復(fù)、轉(zhuǎn)換等問(wèn)題一概不用程序
員關(guān)心,完全由系統(tǒng)自動(dòng)解決。呈現(xiàn)在開發(fā)人
員面前的是一個(gè)“無(wú)縫的”(seamless)對(duì)象
概念。永久對(duì)象的意義不僅僅提高了編程效率,
它還使00D階段的數(shù)據(jù)管理部分的設(shè)計(jì)大為簡(jiǎn)
化,而且可實(shí)現(xiàn)對(duì)象在不同程序之間的動(dòng)態(tài)共
■永久對(duì)象的實(shí)現(xiàn)需要有較強(qiáng)的技術(shù)支持。它需要一個(gè)
能夠描述和處理永久對(duì)象的編程語(yǔ)言。這種語(yǔ)言的實(shí)
現(xiàn)需要基于一個(gè)存儲(chǔ)和管理永久羽象的對(duì)象管理系統(tǒng)
(objectmanagementsystem,簡(jiǎn)稱0MS)。無(wú)論是支
持永久對(duì)象的00PL還是0MS,其實(shí)現(xiàn)都有較大難度,需
要解決對(duì)象的存儲(chǔ)、恢復(fù)、共享、并發(fā)存取、一致性
保護(hù)等一系列技術(shù)問(wèn)題,所以目前國(guó)內(nèi)外在這方面研
究性的工作較多而實(shí)用的產(chǎn)品較少。在我國(guó),由北京
大學(xué)等20多家單位通過(guò)“八五”科技攻關(guān)研制成功的
青鳥H型系統(tǒng)(JB2)中已經(jīng)實(shí)現(xiàn)了一個(gè)0MS和一個(gè)支
持永久對(duì)象的00PL(叫作CASE—C++語(yǔ)言),并用它開
發(fā)了近20個(gè)軟件工具。
3.3.3面向?qū)ο蟮木幊?OOP)
⑼主動(dòng)對(duì)象(activeobject)
■按照通常理解00概念,對(duì)象是一組屬性和一組
服務(wù)的封裝體。它的每個(gè)服務(wù)是一個(gè)在消息的
驅(qū)動(dòng)下被動(dòng)執(zhí)行的操作。
43?3.3面向?qū)ο蟮木幊?OOP)
■向?qū)ο蟀l(fā)一個(gè)消息,它就響應(yīng)這個(gè)消息
而執(zhí)行被請(qǐng)求的服務(wù),否則它的服務(wù)就
不執(zhí)行。每個(gè)服務(wù)相當(dāng)于過(guò)程式語(yǔ)言中
一個(gè)過(guò)程、函數(shù)或例程(在大多數(shù)OOPL
中它的確就是一個(gè)等待被調(diào)用的過(guò)程、
函數(shù)或例程。Smallatlk中稱作“方法”
而沒有采用這些傳統(tǒng)的術(shù)語(yǔ),但本質(zhì)上
并沒有什么不同)。
>3.3.3面向?qū)ο蟮木幊蹋∣OP)
■所有這樣的對(duì)象都是被動(dòng)對(duì)象(passiveobject),
需要通過(guò)消息的驅(qū)動(dòng)(或者說(shuō)通過(guò)消息的觸發(fā))才能
執(zhí)行,那么,原始的驅(qū)動(dòng)來(lái)自哪里?目前的00PL一般
是來(lái)自所有類定義之外的一段主程序,例如C++中的
main函數(shù)。以純00風(fēng)格著稱的Smalltalk,也需要在所
有類定義之外寫一段相當(dāng)于主程序的源碼,才能使系
統(tǒng)最終成為一個(gè)可運(yùn)行的程序。這樣做是不是純00,
對(duì)實(shí)踐者來(lái)說(shuō)并不重要。特別是,當(dāng)系統(tǒng)是一個(gè)順序
程序時(shí),做到這一點(diǎn)也沒有太大的不便。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
-在現(xiàn)實(shí)世界(問(wèn)題域)中具有主動(dòng)行為的事物并不罕
見。例如,交通控制系統(tǒng)中的信號(hào)燈,生產(chǎn)控制系統(tǒng)
中異步運(yùn)行的設(shè)備等等。每個(gè)具有主動(dòng)行為的事物在
系統(tǒng)中應(yīng)該被設(shè)計(jì)成一個(gè)任務(wù),因?yàn)樗鼈兊男袨槭侵?/p>
動(dòng)的,需要并發(fā)地執(zhí)行。除此之外,在系統(tǒng)設(shè)計(jì)階段
還可能因?qū)崿F(xiàn)的要求而增加其它一些任務(wù)。由于任務(wù)
是一些主動(dòng)的、彼此并發(fā)的執(zhí)行單位,所以無(wú)法用被
動(dòng)對(duì)象描述。為此,引入了主動(dòng)對(duì)象的概念,在00D階
段進(jìn)行任務(wù)管理部分的設(shè)計(jì)時(shí)用主動(dòng)對(duì)象表示每個(gè)任
務(wù)。
.3.3.3面向?qū)ο蟮木幊蹋∣OP)
其定義是:
主動(dòng)對(duì)象是一組屬性和一組服務(wù)的封裝體,其
中至少有一個(gè)服務(wù)不需要接收消息就能主動(dòng)執(zhí)
行(稱作主動(dòng)服務(wù))。
■主動(dòng)對(duì)象的作用是描述問(wèn)題域中具有主動(dòng)行為
的事物以及在系統(tǒng)設(shè)計(jì)時(shí)識(shí)別的任務(wù),它的主
動(dòng)服務(wù)描述相應(yīng)的任務(wù)所應(yīng)完成的操作。在系
統(tǒng)實(shí)現(xiàn)階段,主動(dòng)服務(wù)應(yīng)該被實(shí)現(xiàn)為一個(gè)能并
發(fā)執(zhí)行的、主動(dòng)的程序單位,例如進(jìn)程或線程。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■引入主動(dòng)對(duì)象概念解決了系統(tǒng)設(shè)計(jì)階段對(duì)任務(wù)
的描述問(wèn)題,從而為在實(shí)現(xiàn)階段構(gòu)造一個(gè)描述
多任務(wù)的并發(fā)程序提供了依據(jù)。但是這種依據(jù)
只能是編程工作的一個(gè)參考,因?yàn)槟壳斑€沒有
商品化的OOPL能支持主動(dòng)對(duì)象的概念,所以
00D階段識(shí)別的主動(dòng)對(duì)象無(wú)法直接地對(duì)應(yīng)為程
序中的一個(gè)主動(dòng)對(duì)象,需要程序員在現(xiàn)有的語(yǔ)
言條件下設(shè)法把它實(shí)現(xiàn)成一個(gè)主動(dòng)成分。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■面向?qū)ο蟮木幊陶Z(yǔ)言(OOPL)與已往各種語(yǔ)言的根本
不同是,它的設(shè)計(jì)出發(fā)點(diǎn)就是為了更直接地描述問(wèn)題
域中客觀存在的事物(即對(duì)象)以及它們之間的關(guān)系,
主要體現(xiàn)在以下幾點(diǎn):
⑴客觀世界(問(wèn)題域)是由一些具體的事物構(gòu)成的。每
個(gè)事物具有自己的靜態(tài)特征(即可以由一組數(shù)據(jù)表示
的特征)和動(dòng)態(tài)特征(事物的行為或功能,即可以由
一組操作表示的特征)。
OOPL用對(duì)象描述問(wèn)題域中的事物,每個(gè)對(duì)象由一組屬
性和一組服務(wù)構(gòu)成,分別描述事物的靜態(tài)特征和動(dòng)態(tài)
特征。
.3.3.3面向?qū)ο蟮木幊蹋∣OP)
JI----------------------------
⑵客觀世界中的事物既具有共同性又具有特殊性。
人類認(rèn)識(shí)客觀世界的基本方法之一是對(duì)事物進(jìn)
行分類,即:根據(jù)事物的共同性把事物歸結(jié)為
某些類;考慮一個(gè)類中部分事物的特殊可得到
這個(gè)類的子類,子類既具有父類的共同性又具
有自己的特殊性。
OOPL用類表示一組具有相同的屬性和服務(wù)的
對(duì)象,并通過(guò)繼承機(jī)制保證子類具有父類的全
部屬性和服務(wù)。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
⑶客觀世界中較為復(fù)雜的事物往往是由其
它一些比較簡(jiǎn)單的事物構(gòu)成的,例如一
架飛機(jī)由機(jī)艙、機(jī)翼和發(fā)動(dòng)機(jī)構(gòu)成。
OOPL中提供了描述這種組成關(guān)系的結(jié)構(gòu)
(一^般—特殊結(jié)構(gòu)、整體—部分結(jié)構(gòu)
等)。
3.3.3面向?qū)ο蟮木幊?OOP)
(4)客觀世界中的一個(gè)事物可能與其它事物
存在某種行為上的聯(lián)系。例如:采購(gòu)員
購(gòu)入一次貨物要引起會(huì)計(jì)的一次帳目處
理。
OOPL通過(guò)消息表示對(duì)象之間的動(dòng)態(tài)聯(lián)系。
3.3.3面向?qū)ο蟮木幊蹋∣OP)
■由以上幾點(diǎn)可以看出,面向?qū)ο蟮木幊陶Z(yǔ)言使
程序能夠比較直接地反映客觀世界的本來(lái)面目,
并且使軟件開發(fā)人員能夠運(yùn)用人類認(rèn)識(shí)事物所
采用的一般思維方法來(lái)進(jìn)行軟件開發(fā)。面向?qū)?/p>
象的語(yǔ)言和人類認(rèn)識(shí)、理解客觀世界所使用的
自然語(yǔ)言之間的距離是比較小的。當(dāng)然,二者
之間仍然存在著一定的距離。自然語(yǔ)言的豐富
多樣和借助人腦的聯(lián)想思想才能辨別的語(yǔ)義,
仍是目前任何一種計(jì)算機(jī)編程語(yǔ)言無(wú)法企及的O
43?3.3面向?qū)ο蟮木幊蹋∣OP)
■如圖3.7表示隨著編程語(yǔ)言由低級(jí)向高級(jí)的發(fā)
展,它們與自然語(yǔ)言之間的鴻溝在逐漸變窄。
開發(fā)人員從對(duì)問(wèn)題域產(chǎn)生正確的認(rèn)識(shí),到用一
種編程語(yǔ)言把這些認(rèn)識(shí)描述出來(lái)所付出的勞動(dòng)
(以及其中可能發(fā)生的錯(cuò)誤),隨著語(yǔ)言鴻溝
的變窄而減少;由機(jī)器代替人完成的工作則隨
著語(yǔ)言鴻溝的變窄而增多。這正是計(jì)算機(jī)語(yǔ)言
(以及整個(gè)計(jì)算機(jī)科學(xué))發(fā)展的大趨勢(shì)。
43?3.3面向?qū)ο蟮木幊?OOP)
■編程語(yǔ)言到計(jì)算機(jī)之間的深色陰影表示
這部分工作是由機(jī)器自動(dòng)完成的,基本
不需要開發(fā)人員花費(fèi)精力了。自然語(yǔ)言
和編程語(yǔ)言中間的空白區(qū)域表示語(yǔ)言的
鴻溝,它表明從人們借助自然語(yǔ)言對(duì)問(wèn)
題域有一個(gè)正確認(rèn)識(shí),到用一種編程語(yǔ)
言正確地表達(dá)出來(lái),其間所存在的差距。
而面向?qū)ο蟮恼Z(yǔ)言使這條鴻溝變窄,但
仍有一些距離。
3.4編程前的準(zhǔn)備
■為了保證開發(fā)成果的質(zhì)量,提高開發(fā)效
率,防止錯(cuò)誤發(fā)生,在實(shí)際進(jìn)行程序編
制之前應(yīng)作如下方面的準(zhǔn)備。
⑴制定標(biāo)準(zhǔn)(工作標(biāo)準(zhǔn)和編程基準(zhǔn))?
⑵知識(shí)共享;
⑶共享數(shù)據(jù)準(zhǔn)備;
(4)綜合利用開發(fā)環(huán)境;
⑸注意開發(fā)環(huán)境與實(shí)際應(yīng)用環(huán)境的差異。
3.4.1確定標(biāo)準(zhǔn)
■JI-----------------------
■實(shí)際編程工作開始前、為了保證開發(fā)成果的質(zhì)
量,系統(tǒng)的開發(fā)環(huán)境和標(biāo)準(zhǔn)化的工作流程應(yīng)該
有機(jī)地結(jié)合起來(lái),把編程作業(yè)從頭到尾的過(guò)程
歸納為標(biāo)準(zhǔn)化的模式,開發(fā)者都必須按照這個(gè)
標(biāo)準(zhǔn)化模式進(jìn)行工作,這樣可以抑制和防止最
終開發(fā)成果因人而異造成的差異,防止錯(cuò)誤發(fā)
生,提高生產(chǎn)效率,確保程序編制的質(zhì)量。在
項(xiàng)目開發(fā)之前,從事開發(fā)工作的管理者必須把
業(yè)務(wù)工作的次序、流程和最終開發(fā)成果的格式
按標(biāo)準(zhǔn)化模式作出開發(fā)基準(zhǔn),以取得一致的開
發(fā)成果。
3.4.1確定標(biāo)準(zhǔn)
1、工作標(biāo)準(zhǔn)的制定
■在準(zhǔn)備階段,所制定的工作標(biāo)準(zhǔn)包含的
內(nèi)容有:詳細(xì)設(shè)計(jì)書的標(biāo)準(zhǔn)、程序設(shè)計(jì)
的標(biāo)準(zhǔn)以及共有資源利用的規(guī)定,如圖
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)采集工具面試題及答案
- 中國(guó)鋁業(yè)集團(tuán)有限公司2026年度高校畢業(yè)生招聘?jìng)淇碱}庫(kù)及一套完整答案詳解
- 氧療考試題目及答案
- 2025年西安電子科技大學(xué)通信工程學(xué)院外聘人員一般崗位招聘?jìng)淇碱}庫(kù)含答案詳解
- 2025年寶勝科技創(chuàng)新股份有限公司貴州航空線束分公司招聘?jìng)淇碱}庫(kù)及一套答案詳解
- 2025年西安交通大學(xué)材料科學(xué)與工程學(xué)院科研財(cái)務(wù)助理招聘?jìng)淇碱}庫(kù)及一套參考答案詳解
- 網(wǎng)絡(luò)文學(xué)編輯面試題分析
- 2025年三門縣珠岙鎮(zhèn)專職消防員招聘?jìng)淇碱}庫(kù)及答案詳解1套
- 2025年黔西南市中小學(xué)教師招聘筆試備考試題及答案解析
- 大慶師范學(xué)院2025年下半年公開招聘50名教師備考題庫(kù)有答案詳解
- 口腔正畸學(xué)課件
- 血常規(guī)報(bào)告單模板
- 物聯(lián)網(wǎng)就在身邊初識(shí)物聯(lián)網(wǎng)課件
- 路基拼接技術(shù)施工方案
- 宏觀經(jīng)濟(jì)學(xué)PPT完整全套教學(xué)課件
- 陜09J02 屋面標(biāo)準(zhǔn)圖集
- 2023年上海清算登記托管結(jié)算試題試題
- 動(dòng)車組受電弓故障分析及改進(jìn)探討
- GB/T 41932-2022塑料斷裂韌性(GIC和KIC)的測(cè)定線彈性斷裂力學(xué)(LEFM)法
- 2023年浙江省大學(xué)生物理競(jìng)賽試卷
- GB/T 2007.1-1987散裝礦產(chǎn)品取樣、制樣通則手工取樣方法
評(píng)論
0/150
提交評(píng)論