版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
.1算法考點(diǎn)1算法的基本概念計(jì)算機(jī)解題的過(guò)程實(shí)際上是在實(shí)施某種算法,這種算法稱(chēng)為計(jì)算機(jī)算法。算法(algorithm)是一組嚴(yán)謹(jǐn)?shù)囟x運(yùn)算順序的規(guī)則,并且每一個(gè)規(guī)則都是有效的,同時(shí)令的有限序列,其中每一條指令表示一個(gè)或多個(gè)操作。義性。finiteness必需能在執(zhí)行有限個(gè)步(4)擁有足夠的情報(bào):要使算法有效必需為算法提供足夠的情報(bào)當(dāng)算法擁有足夠的情報(bào)時(shí),此算法才最有效的;而當(dāng)提供的情報(bào)不夠時(shí),算法可能無(wú)效。2算法的基本要素(1)算法中對(duì)數(shù)據(jù)的運(yùn)算和操作:每個(gè)算法實(shí)際上是按解題要求從環(huán)境能進(jìn)行的所有操作中選擇合適的操作所組成的一組指令序列。計(jì)算機(jī)可以執(zhí)行的基本操作是以指令的形式描述的。一個(gè)計(jì)算機(jī)系統(tǒng)能執(zhí)行的所有指令的集合,稱(chēng)為該計(jì)算機(jī)系統(tǒng)的指令系統(tǒng)。計(jì)算機(jī)程序就是按解題要求從計(jì)算機(jī)指令系統(tǒng)中選擇合適的指令所組成的指令序列在一般的計(jì)算機(jī)系統(tǒng)中,基本的運(yùn)算和操作有以下4類(lèi):④數(shù)據(jù)傳輸:主要包括賦值、輸入、輸出等操作。(2)算法的控制結(jié)構(gòu):一個(gè)算法的功能不僅僅取決于所選用的操作,而且還與各操作之間的執(zhí)行順序有關(guān)。算法中各操作之間的執(zhí)行順序稱(chēng)為算法的控制結(jié)構(gòu)。組合而成。(3)算法設(shè)計(jì)的基本方法各種方法之間往往存在著一定的聯(lián)系。哪些是不需要的。會(huì)很大。因此,在用列舉法設(shè)計(jì)算法時(shí),使方案優(yōu)化,盡量減少運(yùn)算工作量,是應(yīng)該重點(diǎn)注本質(zhì)上講,歸納就是通過(guò)觀察一些簡(jiǎn)單而特殊的情況,最后總結(jié)出一般性的結(jié)論。遞推是指從已知的初始條件出發(fā),逐次推出所要求的各中間結(jié)果和最后結(jié)果。其中初關(guān)系式往往是歸納的結(jié)果。對(duì)于數(shù)值型的遞推算法必須要注意數(shù)值計(jì)算的穩(wěn)定性問(wèn)題。人們?cè)诮鉀Q一些復(fù)雜問(wèn)題時(shí),為了降低問(wèn)題的復(fù)雜程度(如問(wèn)題的規(guī)模等),一般總是將進(jìn)行綜合,這就是遞歸的基本思想。遞歸分為直接遞歸與間接遞歸兩種。(5)減半遞推技術(shù)際問(wèn)題是有效的。工程上常用的分治法是減半遞推技術(shù)。不敗,就逐步回退,換別的路線再逐步試探。4算法設(shè)計(jì)的要求通常一個(gè)好的算法應(yīng)達(dá)到如下目標(biāo):②程序?qū)τ趲捉M輸入數(shù)據(jù)能夠得出滿足規(guī)格說(shuō)明要求的結(jié)果;③程序?qū)τ诰倪x擇的典型、苛刻而帶有刁難性的幾組輸入數(shù)據(jù)能夠得出滿足規(guī)格說(shuō)明要求的結(jié)果;④程序?qū)τ谝磺泻戏ǖ妮斎霐?shù)據(jù)都能產(chǎn)生滿足規(guī)格說(shuō)明要求的結(jié)果。算法主要是為了方便入的閱讀與交流,其次才是其執(zhí)行??勺x性好有助于用戶(hù)對(duì)算法的理解;晦澀難懂的程序易于隱藏較多錯(cuò)誤,難以調(diào)試和修改。的(4)效率與低存儲(chǔ)量需求算法效率高;存儲(chǔ)量需求指算法執(zhí)行過(guò)程中所需要的最大存儲(chǔ)空間考點(diǎn)2算法的復(fù)雜度可以認(rèn)為一個(gè)特定算法“運(yùn)行工作量”的大小,只依賴(lài)于問(wèn)題的規(guī)模(通常用整數(shù)n表示),它是問(wèn)題的規(guī)模函數(shù)。即算法的工作量=f(n)例如,在N×N矩陣相乘的算法中,整個(gè)算法的執(zhí)行時(shí)間與該基本操作(乘法)重復(fù)執(zhí)行在有的情況下,算法中的基本操作重復(fù)執(zhí)行的次數(shù)還隨問(wèn)題的輸入數(shù)據(jù)集不同而不同。次數(shù)為氏當(dāng)初始序列為自大至小有序時(shí),基本操作的執(zhí)行次數(shù)為n(n-1)/2。對(duì)這類(lèi)算法的分析,可以采用以下兩種方法來(lái)分析。所謂平均性態(tài)是指各種特定輸入下的基本運(yùn)算次數(shù)的加權(quán)平均值來(lái)度量算法的工作量。x入中的某個(gè)特定輸入,p(x)是x出現(xiàn)的概率(即輸入為x的概率),t(x)是算法在輸入為x時(shí)所執(zhí)行的基本運(yùn)算次數(shù),則算法的平均性態(tài)定義為n所謂最壞情況分析,是指在規(guī)模為n時(shí),算法所執(zhí)行的基本運(yùn)算的最大次數(shù)。2算法的空間復(fù)雜度算法的空間復(fù)雜度是指執(zhí)行這個(gè)算法所需要的內(nèi)存空間。一個(gè)算法所占用的存儲(chǔ)空間包括算法程序所占的空間、輸入的初始數(shù)據(jù)所占的存儲(chǔ)空間以及算法執(zhí)行中所需要的額外空間。其中額外空間包括算法程序執(zhí)行過(guò)程中的工作單元以及算法是原地(inplace)工作的。在許多實(shí)際問(wèn)題中,為了減少算法所占的存儲(chǔ)空間,通常采用壓縮存儲(chǔ)技術(shù),以便盡量減少不必要的額外空間。考點(diǎn)3數(shù)據(jù)結(jié)構(gòu)的定義數(shù)據(jù)結(jié)構(gòu)(datastructure)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合,即數(shù)據(jù)的組織形式。數(shù)據(jù)結(jié)構(gòu)作為計(jì)算機(jī)的一門(mén)學(xué)科,主要研究和討論以下三個(gè)方面:(l)數(shù)據(jù)集合中個(gè)數(shù)據(jù)元素之間所固有的邏輯關(guān)系,即數(shù)據(jù)的邏輯結(jié)構(gòu);(2)在對(duì)數(shù)據(jù)元素進(jìn)行處理時(shí),各數(shù)據(jù)元素在計(jì)算機(jī)中的存儲(chǔ)關(guān)系,即數(shù)據(jù)的存儲(chǔ)對(duì)各種數(shù)據(jù)結(jié)構(gòu)進(jìn)行的運(yùn)算。討論以上問(wèn)題的日的是為了提高數(shù)據(jù)處理的效率,所謂提高數(shù)據(jù)處理的效率有兩個(gè)方(l)提高數(shù)據(jù)處理的速度;(2)盡量節(jié)省在數(shù)據(jù)處理過(guò)程中所占用的計(jì)算機(jī)存儲(chǔ)空間。數(shù)據(jù)(data):是對(duì)客觀事物的符號(hào)表示,在計(jì)算機(jī)科學(xué)中是指所有能輸入到計(jì)算機(jī)中并被計(jì)算機(jī)程序處理的符號(hào)的總稱(chēng)。慮和處理。ect(即連續(xù)),這種關(guān)系反映了該集合中的數(shù)據(jù)元素所固有的一種結(jié)構(gòu)。在數(shù)據(jù)處理領(lǐng)域中,通常把數(shù)據(jù)元素之間這種固有的關(guān)系簡(jiǎn)單地用前后件關(guān)系(或直接前驅(qū)與直接后繼關(guān)系)來(lái)描象的不同而不同。一般來(lái)說(shuō),數(shù)據(jù)元素之間的任何關(guān)系都可以用前后件關(guān)系來(lái)描述。是指帶有結(jié)構(gòu)的數(shù)據(jù)元素的集合。所謂結(jié)構(gòu)實(shí)際上就是指數(shù)據(jù)元素之間的前后件關(guān)系。應(yīng)包含以下兩方面信息:(2)表示各數(shù)據(jù)元素之間的前后件關(guān)系。數(shù)據(jù)的邏輯結(jié)果是對(duì)數(shù)據(jù)元素之間的邏輯關(guān)系的描述。它可以用一嘎數(shù)據(jù)元素的集合和定義在此集合中的若干關(guān)系來(lái)表示。數(shù)據(jù)的邏輯結(jié)構(gòu)包括集合、線性結(jié)構(gòu)、樹(shù)型結(jié)構(gòu)和圖形結(jié)構(gòu)四種。線性結(jié)構(gòu):數(shù)據(jù)元素之間構(gòu)成一種順序的線性關(guān)系。樹(shù)型結(jié)構(gòu):數(shù)據(jù)元素之間形成一種樹(shù)型的關(guān)系例如,復(fù)數(shù)是一種數(shù)據(jù)結(jié)構(gòu),在計(jì)算機(jī)科學(xué)中,復(fù)數(shù)可取如下定義:c2數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)存儲(chǔ)空間中的存放形式,稱(chēng)為數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)(也稱(chēng)為數(shù)據(jù)的放在計(jì)算機(jī)存儲(chǔ)空間中的各數(shù)據(jù)元素之間的邏輯關(guān)系(即前后件關(guān)系),在數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)信息,還需要存放各數(shù)據(jù)元素之間的前后件關(guān)系的信息。有順序、鏈接、考點(diǎn)4數(shù)據(jù)結(jié)構(gòu)的圖形表示數(shù)據(jù)結(jié)構(gòu)除了用二元關(guān)系表示外,還可以直觀地用圖形表示。在數(shù)據(jù)結(jié)構(gòu)的圖形表示中,對(duì)于數(shù)據(jù)集合D中的每一個(gè)數(shù)據(jù)元素用中間標(biāo)有元素值的關(guān)系,對(duì)于關(guān)系R中的每一個(gè)二元組,用一條有向線段從前件結(jié)點(diǎn)指向后件結(jié)點(diǎn)。為葉子結(jié)點(diǎn))。一個(gè)數(shù)據(jù)結(jié)構(gòu)中的結(jié)點(diǎn)可能是在動(dòng)態(tài)變化的。根據(jù)需要或在處理過(guò)程中,可以在一個(gè)數(shù)據(jù)結(jié)構(gòu)中增加一個(gè)新結(jié)點(diǎn)(稱(chēng)為插入運(yùn)算),也可以刪除數(shù)據(jù)結(jié)構(gòu)中的某個(gè)結(jié)點(diǎn)(稱(chēng)為刪除運(yùn)算)。插入與刪除是對(duì)數(shù)據(jù)結(jié)構(gòu)的兩種基本運(yùn)算。除此之外,對(duì)數(shù)據(jù)結(jié)構(gòu)的運(yùn)算還有查找、分類(lèi)、合并、分解、復(fù)制和修改等??键c(diǎn)5線性結(jié)構(gòu)與非線性結(jié)構(gòu)。根據(jù)數(shù)據(jù)結(jié)構(gòu)中各數(shù)據(jù)元素之間前后件關(guān)系的復(fù)雜程度,一般將數(shù)據(jù)結(jié)構(gòu)分為兩大類(lèi)型:線性結(jié)構(gòu)與非線性結(jié)構(gòu)。(2)每一個(gè)結(jié)點(diǎn)最多有一個(gè)前件,也最多有一個(gè)后件。據(jù)結(jié)構(gòu)的運(yùn)算是按線性結(jié)構(gòu)的規(guī)則來(lái)處理的,則屬于線性結(jié)構(gòu);否則屬于非線性結(jié)構(gòu)。考點(diǎn)6線性表的定義了第一個(gè)外,有且只有一個(gè)前件,除了最后一個(gè)外,有且只有一個(gè)后件。即線性表是一個(gè)空表,或可以表示為項(xiàng)組成的。在復(fù)雜的線性表中,由若干數(shù)據(jù)項(xiàng)組成的數(shù)據(jù)元素稱(chēng)為記錄(record),而由多個(gè)記錄構(gòu)成的線性表又稱(chēng)為文件(file)。在非空表中的每個(gè)數(shù)據(jù)元素都有一個(gè)確定的位置,如性表中的位序。非空線性表有如下一些結(jié)構(gòu)特征:(2)有且只有一個(gè)終端結(jié)點(diǎn)an,它無(wú)后件;(3)除根結(jié)點(diǎn)與終端結(jié)點(diǎn)外,其他所有結(jié)點(diǎn)有且只有一個(gè)前件,也有且只有一個(gè)后件。線考點(diǎn)7線性表的順序存儲(chǔ)結(jié)構(gòu)線性表的順序表指的是用一組地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)線性表的數(shù)據(jù)元素。線性表的順序存儲(chǔ)結(jié)構(gòu)具備如下兩個(gè)基本特征:(l)線性表中的所有元素所占的存儲(chǔ)空間是連續(xù)的;(2)線性表中各數(shù)據(jù)元素在存儲(chǔ)空間中是按邏輯順序依次存放的。線性表第i個(gè)元素ai的存儲(chǔ)位置為式中ADR(ai)是線性表的第一個(gè)數(shù)據(jù)元素a,的存儲(chǔ)位置,通常稱(chēng)做線性表的起始位置或基址。線性表的這種表示稱(chēng)做線性表的順序存儲(chǔ)結(jié)構(gòu)或順序映像,這種存儲(chǔ)結(jié)構(gòu)的線性表為順序表。表中每一個(gè)元素的存儲(chǔ)位置都和線性表的起始位置相差一個(gè)和數(shù)據(jù)元素在線性表中的4所示。由此只要確定了存儲(chǔ)線性表的起始位置,線性表中任一數(shù)據(jù)元素都可以隨機(jī)存取,所以線性表的順序存儲(chǔ)結(jié)構(gòu)是一種隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)。放線性表時(shí),該一維數(shù)組的長(zhǎng)度通常要定義得比線性表的實(shí)際長(zhǎng)度大一些,以便對(duì)線性表進(jìn)行各種運(yùn)算,特別是插入運(yùn)算。在線性表的順序存儲(chǔ)結(jié)構(gòu)下,可以對(duì)線性表做以下運(yùn)算:(l)在線性表的指定位置處加入一個(gè)新的元素(即線性表的插入);(2)在線性表中刪除指定的元素(即線性表的刪除);(3)在線性表中查找某個(gè)(或某些)特定的元素(即線性表的查找);(4)對(duì)線性表中的元素進(jìn)行整序(即線性表的排序);(5)按要求將一個(gè)線性表分解成多個(gè)線性表(即線性表的分解);(6)按要求將多個(gè)線性表合并成一個(gè)線性表(即線性表的合并);(7)復(fù)制一個(gè)線性表(即線性表的復(fù)制);(8)逆轉(zhuǎn)一個(gè)線性表(即線性表的逆轉(zhuǎn))等。考點(diǎn)8順序表的插入運(yùn)算現(xiàn)在分析算法的復(fù)雜度。這里的問(wèn)題規(guī)模是表的長(zhǎng)度,設(shè)它的值為n。該算法的時(shí)間主要花費(fèi)在循環(huán)結(jié)點(diǎn)后移語(yǔ)句上,該語(yǔ)句的執(zhí)行次數(shù)(即移動(dòng)結(jié)點(diǎn)的次數(shù))是n-i+1。由此可看出,所需移動(dòng)結(jié)點(diǎn)的次數(shù)不僅依賴(lài)于表的長(zhǎng)度,而且還與插入位置有關(guān)。in,結(jié)點(diǎn)后移語(yǔ)句將不進(jìn)行;這是最好情況,n在長(zhǎng)度為n的線性表中第i個(gè)位置上插入一個(gè)結(jié)點(diǎn),令Eis(n)表示移動(dòng)結(jié)點(diǎn)的期望值(即移動(dòng)的平均次數(shù)),則在第i個(gè)位置上插入一個(gè)結(jié)點(diǎn)的移動(dòng)次數(shù)為n-i+1。故p1=p2=p3=…=pn+1=1/(n+1)等概率插入的情況下,法的效率相當(dāng)?shù)?。雖然Eis(n)中n的的系數(shù)較小,但就數(shù)量級(jí)而言,它仍然是線性級(jí)的??键c(diǎn)9順序表的刪除運(yùn)算線性表的刪除運(yùn)算是指將表的第i(1≤i≤n)個(gè)結(jié)點(diǎn)刪除,使長(zhǎng)度為n的線性表:刪除算法的平均性能分析與插入算法相似。在長(zhǎng)度為n的線性表中刪除一個(gè)結(jié)點(diǎn),令Ede(n)表示所需移動(dòng)結(jié)點(diǎn)的平均次數(shù),刪除表中第i個(gè)結(jié)點(diǎn)的移動(dòng)次數(shù)為n-i,故p1=p2=p3=…=pn=1/n間復(fù)雜度也是O(n)??键c(diǎn)10棧及其基本運(yùn)算棧頂(Top),另一端為棧底(Bottom)。當(dāng)?shù)自乜偸亲钕缺徊迦氲脑?,從而也是最后才能被刪除的元素。tOut2棧的順序存儲(chǔ)及其運(yùn)算(l)入棧運(yùn)算:入棧運(yùn)算是指在棧頂位置插入一個(gè)新元素。首先將棧頂指針加一(即top加1),然后將元素插入到棧頂指針指向的位置。當(dāng)棧頂指針已經(jīng)指向存儲(chǔ)空間的最后一個(gè)位置時(shí),說(shuō)明??臻g已滿,不可能再進(jìn)行入棧操作。這種情況稱(chēng)為?!吧弦纭卞e(cuò)誤。如圖(2)退棧運(yùn)算:退棧是指取出棧頂元素并賦給一個(gè)指定的變量。首先將棧頂元素(棧頂指針減一(即t叩減1)。當(dāng)棧頂指針為。這種情況稱(chēng)為棧的“下溢”錯(cuò)誤。(3)讀棧頂efrontrear),Out10所示。一個(gè)隊(duì)列幣。刪除個(gè)兒素后的隊(duì)列間插入元素E后的隊(duì)列2循環(huán)隊(duì)列及其運(yùn)算的環(huán)狀空間ear置之間所有的元素均為隊(duì)列中的元素??梢詫⑾蛄靠臻g想象為一個(gè)首尾相接的圓環(huán),如圖1-12所示,并稱(chēng)這種向量為循環(huán)向過(guò)front=rear來(lái)判斷隊(duì)列“空”還是“滿”。(l)入隊(duì)運(yùn)算2)退隊(duì)運(yùn)算退隊(duì)運(yùn)算是指在循環(huán)隊(duì)列的隊(duì)頭位置退出一個(gè)元素并賦給指定的變量。首先將隊(duì)頭指針計(jì)算機(jī)二級(jí)考試_考試大【責(zé)編:daiy糾錯(cuò)】(l)線性表順序存儲(chǔ)的缺點(diǎn)了保證插入或刪除后的線性表仍然為順序存儲(chǔ),則在插入或刪除過(guò)程中需要移動(dòng)大量的數(shù)據(jù)元素。因此采用順序存儲(chǔ)結(jié)構(gòu)進(jìn)行插入或刪除的運(yùn)算效率很低;③計(jì)算機(jī)空間得不到充分利用,并且不便于對(duì)存儲(chǔ)空間的動(dòng)態(tài)分配。(2)線性表鏈?zhǔn)降幕靖拍铈湵?線性單鏈表的存儲(chǔ)結(jié)構(gòu)用一組任意的存儲(chǔ)單元來(lái)依次存放線性表的結(jié)點(diǎn),這組存儲(chǔ)單元既可以是連續(xù)的,也可須存儲(chǔ)指示其后件結(jié)點(diǎn)的地址(或位置)信息,這個(gè)信息稱(chēng)為指針(pointer)或鏈(link)。這兩部分組成了鏈表中的結(jié)點(diǎn)結(jié)構(gòu),鏈表的每一個(gè)結(jié)點(diǎn)只有一個(gè)鏈域,故將這種鏈表稱(chēng)為單鏈表(SingleLinked)。驅(qū),故應(yīng)設(shè)頭指針HEAD指向開(kāi)始結(jié)點(diǎn)。同時(shí),由于終端結(jié)點(diǎn)無(wú)后件,故終端結(jié)點(diǎn)的指針帶鏈的棧與隊(duì)列(1)棧也是線性表,也可以采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。在實(shí)際應(yīng)用中,帶鏈的??梢杂脕?lái)收集計(jì)算機(jī)存儲(chǔ)空間中所有空閑的存儲(chǔ)結(jié)點(diǎn),這種帶鏈的棧稱(chēng)為可利用棧(2)隊(duì)列也是線性表,也可以采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),:(l)在線性鏈表中包含指定元素的結(jié)點(diǎn)之前插入一個(gè)新元素;指定元素的結(jié)點(diǎn);線性鏈表按要求合并成一個(gè)線性表;1在線性鑊表中查找指定元素要對(duì)線性鏈表進(jìn)行掃描查找,在線性鏈表中尋找包含指定元素的前一個(gè)結(jié)點(diǎn)。在線性鏈表中,即使知道被訪問(wèn)結(jié)點(diǎn)的序號(hào)a,也不能像順序表中那樣直接按序號(hào)i訪問(wèn)結(jié)點(diǎn),而只能從鏈表的頭指針出發(fā),順鏈域Next逐個(gè)結(jié)點(diǎn)往下搜索,直到搜索到第i個(gè)結(jié)點(diǎn)為止。因此,鏈表不是隨機(jī)存取結(jié)構(gòu)。x2線性鏈表的插入線性鏈表的插入是指在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)下的線性鏈表中插入一個(gè)新元素。插入運(yùn)算是將值為X的新結(jié)點(diǎn)插入到表的第i個(gè)結(jié)點(diǎn)的位置上,即插入到ai-1,與ai用棧不空,在線性鏈表插入時(shí)總能取到存儲(chǔ)插入元素的新結(jié)點(diǎn),不會(huì)發(fā)生“上溢”的情況。動(dòng)態(tài)分配。另外,線性鏈表在插入過(guò)程中不發(fā)生數(shù)據(jù)元素移動(dòng)的現(xiàn)象,只要改變有關(guān)結(jié)點(diǎn)的指針即可,從而提高了插入的效率。3多線性鏈表的刪除線性鏈表的刪除是指在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)下的線性鏈表中刪除包含指定元素的結(jié)點(diǎn)。結(jié)點(diǎn)就變?yōu)榭臻e,應(yīng)將空閑結(jié)點(diǎn)送回到可利用棧。在單鏈表中,從某個(gè)結(jié)點(diǎn)出發(fā)可以直接找到它的直接后件,時(shí)間復(fù)雜度為O(1),但無(wú)法直接找到它的互接前件;在單循環(huán)鏈表中,從某個(gè)結(jié)點(diǎn)出發(fā)可以直接找到它的直接后件,時(shí)間復(fù)雜度仍為O(1),直接找到它的直接前件,時(shí)間復(fù)雜度為O(n)。有時(shí),希望能快速找這樣的鏈表,就稱(chēng)為雙向鏈表(一個(gè)結(jié)點(diǎn)中含有兩個(gè)指針)。如果每條鏈構(gòu)成一個(gè)循環(huán)鏈表,則會(huì)得到雙向循環(huán)鏈表2雙向鏈表的基本運(yùn)算插入結(jié)點(diǎn)的指針變化。如圖1-20所示(若改為在值為Y的結(jié)點(diǎn)之前插入值為X的結(jié)點(diǎn),可以做類(lèi)似分析)。ADX考點(diǎn)15循環(huán)鏈表的結(jié)構(gòu)及其基本運(yùn)算單鏈表上的訪問(wèn)是一種順序訪問(wèn),從其中的某一個(gè)結(jié)點(diǎn)出發(fā),可以找到它的直接后件,但無(wú)法找到它的直接前件。在前面所討論的線性鏈表中,其插入與刪除的運(yùn)算雖然比較方便,但還存在一個(gè)問(wèn)題,在運(yùn)算過(guò)程中對(duì)于空表和對(duì)第一個(gè)結(jié)點(diǎn)的處理必須單獨(dú)考慮,使空表與非空表的運(yùn)算不統(tǒng)個(gè)結(jié)點(diǎn)的指針域?yàn)镹ULL,表示單鏈表已經(jīng)結(jié)束。如果將單鏈表最后一個(gè)結(jié)點(diǎn)的指針域改為存放鏈表中頭結(jié)點(diǎn)(或第一個(gè)結(jié)點(diǎn))的地址,就使得整個(gè)鏈表構(gòu)成一個(gè)環(huán),又沒(méi)有增加額外的存儲(chǔ)空間循環(huán)鏈表具有以下兩個(gè)特點(diǎn):(1)在循環(huán)鏈表中增加了一個(gè)表頭結(jié)點(diǎn),其數(shù)據(jù)域?yàn)槿我饣蛘吒鶕?jù)需要來(lái)設(shè)置,指針域指向線性表的第一個(gè)元素的結(jié)點(diǎn)。循環(huán)鏈表的頭指針指向表頭結(jié)點(diǎn);所有結(jié)點(diǎn)的指針構(gòu)成了一個(gè)環(huán)狀鏈。所個(gè)結(jié)點(diǎn)存在,從而使空表的運(yùn)算統(tǒng)一。(1)有一個(gè)特定的稱(chēng)為根(root)的結(jié)點(diǎn)。它只有直接后件,但沒(méi)有直接前件;(2)除根結(jié)點(diǎn)以外的其他結(jié)點(diǎn)可以劃分為m(m≥0)個(gè)互不相交的有限集合T0,T1,…,Tm-1,每個(gè)集合Ti(i=0,1,…,m-l)又是一棵樹(shù),稱(chēng)為根的子樹(shù),每棵子樹(shù)的根直接后件。樹(shù)型結(jié)構(gòu)具有如下特點(diǎn):(1)助每個(gè)結(jié)點(diǎn)只有一個(gè)前件,稱(chēng)為父結(jié)點(diǎn),沒(méi)有前件的結(jié)點(diǎn)只有一個(gè),稱(chēng)為樹(shù)的(2)每一個(gè)結(jié)點(diǎn)可以有多個(gè)后件,它們都稱(chēng)為該結(jié)點(diǎn)的子結(jié)點(diǎn)。沒(méi)有后件的結(jié)點(diǎn)稱(chēng)(3)一個(gè)結(jié)點(diǎn)所擁有的后件個(gè)數(shù)稱(chēng)為樹(shù)的結(jié)點(diǎn)度;次稱(chēng)為樹(shù)的深度。在計(jì)算機(jī)中,可以用樹(shù)結(jié)構(gòu)來(lái)表示算術(shù)表達(dá)式,用樹(shù)來(lái)表示算術(shù)表達(dá)式的原則是:(1)表達(dá)式中的每一個(gè)運(yùn)算符在樹(shù)中對(duì)應(yīng)一個(gè)結(jié)點(diǎn),稱(chēng)為運(yùn)算符結(jié)點(diǎn);(2)運(yùn)算符的每一個(gè)運(yùn)算對(duì)象在樹(shù)中為該運(yùn)算符結(jié)點(diǎn)的子樹(shù)(在樹(shù)中的順序?yàn)閺淖蟮?3)運(yùn)算對(duì)象中的單變量均為葉子結(jié)點(diǎn)。樹(shù)在計(jì)算機(jī)中通常用多重鏈表表示。根結(jié)點(diǎn)及兩棵互不相交的左右子樹(shù)組成,并且左右子樹(shù)都是二叉樹(shù)。二叉樹(shù)可以是空集合,根可以有空的左子樹(shù)或空的右子樹(shù)。二叉樹(shù)不是樹(shù)的特殊情況,它們是兩個(gè)概念。(2)每一個(gè)結(jié)點(diǎn)最多有兩棵子樹(shù),且分別稱(chēng)為該結(jié)點(diǎn)的左子樹(shù)與右子樹(shù)。且二叉樹(shù)是有序樹(shù)(樹(shù)為無(wú)序樹(shù)),其子樹(shù)的順序不能顛倒,因此,二叉樹(shù)有5種不同的形態(tài)在二叉樹(shù)中,一個(gè)結(jié)點(diǎn)可以只有左子樹(shù)而沒(méi)有右子樹(shù),也可以只有右子樹(shù)而沒(méi)有左子點(diǎn)既沒(méi)有左子樹(shù)也沒(méi)有右子樹(shù)時(shí),該結(jié)點(diǎn)即是葉子結(jié)點(diǎn))2二叉樹(shù)的基本性質(zhì)k深度為m的二叉樹(shù)的最大的結(jié)點(diǎn)數(shù)是為二叉樹(shù)中每層上的最大結(jié)點(diǎn)數(shù)之和,由性質(zhì)1。nN均再看二叉樹(shù)中的分支數(shù),除根結(jié)點(diǎn)外,其余結(jié)點(diǎn)都有一個(gè)進(jìn)入分支,設(shè)m為二叉樹(shù)中的分支總數(shù),則有N=m+1(2)n式有3滿二叉樹(shù)與完全二叉樹(shù)(l)滿二叉樹(shù)(2)完全二叉樹(shù)后一層上只缺少右邊的若干結(jié)點(diǎn)。轉(zhuǎn)貼于:計(jì)算機(jī)二級(jí)考試_考試大【責(zé)編:daiy糾錯(cuò)】如果一棵具有n個(gè)結(jié)點(diǎn)的深度為k的二叉樹(shù),它的每一個(gè)結(jié)點(diǎn)都與深度為k的滿二叉樹(shù)中編為滿二叉樹(shù)和完全二叉樹(shù)的結(jié)構(gòu)比較。下,表示本層結(jié)點(diǎn)數(shù)達(dá)到最大后,才能放入下一層。從左到右,表示同一層結(jié)點(diǎn)必須按從左點(diǎn)數(shù)都達(dá)到最大值,最后一層只缺少右邊的若干結(jié)點(diǎn)。滿二叉樹(shù)也是完全二叉樹(shù),反之完全二叉樹(shù)不一定是滿二叉樹(shù)。n4二叉樹(shù)的存儲(chǔ)結(jié)構(gòu)地址,稱(chēng)為左指針域;另一個(gè)用于指向該結(jié)點(diǎn)的右子結(jié)點(diǎn)的存儲(chǔ)地址,稱(chēng)為右指針域。問(wèn)根結(jié)點(diǎn),最后遍歷右子樹(shù)。中序遍歷描述為:后遍歷右子樹(shù),最后訪問(wèn)根結(jié)點(diǎn),并且,在遍歷左、右子樹(shù)時(shí),仍然先遍歷左子樹(shù),然后遍歷右子樹(shù),最后訪問(wèn)根結(jié)點(diǎn)。后序遍歷描述為:若二叉樹(shù)為空,則執(zhí)行空操作。否則:①后序遍歷左子樹(shù);②后序遍歷右子樹(shù);③訪問(wèn)點(diǎn).1程序設(shè)計(jì)方法與風(fēng)格設(shè)計(jì)體而言應(yīng)該強(qiáng)調(diào)得意和清晰,程序必須是可以理解的。要形成良好的程序設(shè)計(jì)風(fēng)格,主要應(yīng)注重和考慮下述一些因素。(1)符號(hào)名的命名:符號(hào)名的命名應(yīng)具有一定的實(shí)際含義,以便于對(duì)程序功能的理解。(2)程序注釋?zhuān)合驴说淖⑨屇軌驇椭x者理解程序。次清晰。幾點(diǎn):(1)數(shù)據(jù)說(shuō)明的次序規(guī)范化鑒于程序理解、新聞?dòng)浾吆途S護(hù)的需要,使數(shù)據(jù)說(shuō)明次(2)說(shuō)明語(yǔ)句中變量安排有序化。當(dāng)一個(gè)說(shuō)明語(yǔ)句說(shuō)明多個(gè)變量時(shí),變量按照字母順序?yàn)楹谩?3)使用注釋來(lái)說(shuō)明復(fù)雜數(shù)據(jù)的結(jié)構(gòu)。應(yīng)注意如下:(1)在一行內(nèi)只寫(xiě)一條語(yǔ)句;(2)程序編寫(xiě)應(yīng)優(yōu)先考慮清晰性;(3)除非對(duì)效率有特殊要求,程序編寫(xiě)要做清晰第一,效率第二;(4)首先要保證程序正確,然后才要求提高速度;(5)避免使用臨時(shí)變量而使程序的可讀性下降;(6)避免不必要的轉(zhuǎn)移;(7)盡可能使用庫(kù)函數(shù);(8)避免采用復(fù)雜的條件語(yǔ)句;(9)盡量減少使用“否定”條件的條件語(yǔ)句;(10)數(shù)據(jù)結(jié)構(gòu)要有利于程序的簡(jiǎn)化;(11)要模塊化,使模塊功能盡可能單一化;(12)利用住處隱蔽,確保每一個(gè)模塊的獨(dú)立性;(13)從數(shù)據(jù)出發(fā)去構(gòu)造程序;(14)不要修補(bǔ)不好的程序,要重新編寫(xiě);(1)對(duì)所有的輸入數(shù)據(jù)都要檢驗(yàn)數(shù)據(jù)的合法性;(2)檢查輸入項(xiàng)的各種重要組合的合理性;(3)輸入格式要簡(jiǎn)單,以使得輸入的步驟和操作盡可能簡(jiǎn)單;(4)輸入數(shù)據(jù)時(shí),應(yīng)允許使用自由格式;(5)應(yīng)允許缺省值;(6)輸入一批數(shù)據(jù)時(shí),最好使用輸入結(jié)束標(biāo)志;(7)在以交互式輸入/輸出方式進(jìn)行輸入時(shí),要在屏幕上使用提示符明確提示輸入的請(qǐng)求,同時(shí)在數(shù)據(jù)輸入過(guò)程中的輸入結(jié)束時(shí),應(yīng)在屏幕上給出狀態(tài)信息。(8)當(dāng)程序設(shè)計(jì)語(yǔ)言對(duì)輸入格式有嚴(yán)格要求時(shí),應(yīng)保持輸入格式與輸入語(yǔ)句的一致性;給所有的輸入出加注釋?zhuān)⒃O(shè)計(jì)輸出報(bào)表格式。一、結(jié)構(gòu)化程序設(shè)計(jì)的原則結(jié)構(gòu)化程序設(shè)計(jì)方法的主要原則可以概括為自頂向下,逐步求精,模塊化,限制使用(1)濫用GOTO語(yǔ)句確實(shí)有害,應(yīng)晝避免;使程序流程更清楚、效率更高;(3)爭(zhēng)論的焦點(diǎn)不應(yīng)該放在是否取消GOTO語(yǔ)句,而應(yīng)該放在用什么樣的程序結(jié)構(gòu)上。二、結(jié)構(gòu)化程序的基本結(jié)構(gòu)與特點(diǎn)執(zhí)構(gòu)可以根據(jù)設(shè)定的條件,判斷應(yīng)該選擇哪一條分支來(lái)執(zhí)行相應(yīng)的語(yǔ)句序列。3、重復(fù)結(jié)構(gòu):重復(fù)結(jié)構(gòu)又稱(chēng)為循環(huán)結(jié)構(gòu),它根據(jù)給定的條件,判斷是否需要重復(fù)執(zhí)行執(zhí)行,一是先執(zhí)行后判斷。優(yōu)點(diǎn):一是程序易于理解、使用和維護(hù)。二是編程工作的效率,降低軟件開(kāi)發(fā)成本。三、結(jié)構(gòu)化程序設(shè)計(jì)原則和方法的應(yīng)用(1)(2)(3)用一個(gè)非結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言去實(shí)現(xiàn)一個(gè)結(jié)構(gòu)化的構(gòu)造;在某種可以改善而不損害程序可讀性的情況下。一、關(guān)于面向?qū)ο蠓椒?lèi)在現(xiàn)實(shí)生活中常用的思維方法來(lái)認(rèn)識(shí)、理解和描述客觀事物,強(qiáng)調(diào)最終建立的系統(tǒng)能夠映射問(wèn)題域,也就是說(shuō),系統(tǒng)中的對(duì)象以及對(duì)象之間的關(guān)系能夠如實(shí)地反映問(wèn)題域中固有事物及其系。面向?qū)ο蠓椒ê图夹g(shù)以對(duì)象為核心。對(duì)象是由數(shù)據(jù)和容許的操作組成的封裝體,與客觀實(shí)體有直接的關(guān)系。對(duì)象之間通過(guò)傳遞消息互相聯(lián)系,以模擬現(xiàn)實(shí)世界中不同事物彼此之間系。使用現(xiàn)實(shí)世界的概念抽象地思考問(wèn)題從而自然地解決問(wèn)題。它強(qiáng)調(diào)模擬現(xiàn)實(shí)世界中的概念而不強(qiáng)調(diào)算法,它鼓勵(lì)開(kāi)發(fā)者在軟件開(kāi)發(fā)的絕大部分過(guò)程中都用應(yīng)用領(lǐng)域的要領(lǐng)去思考。3、可重用性好軟件重用是指在不同的軟件開(kāi)發(fā)過(guò)程中重復(fù)作用相同或相似軟件元素的過(guò)程。重用是提高軟件生產(chǎn)率的最主要的方法。4、易于開(kāi)發(fā)大型軟件產(chǎn)品5、可維護(hù)性好(1)用面向?qū)ο蟮姆椒ㄩ_(kāi)發(fā)的軟件穩(wěn)定性比較好(2)用面向?qū)ο蟮姆椒ㄩ_(kāi)發(fā)的軟件比較容易修改;(3)用面向?qū)ο蟮姆椒ㄩ_(kāi)發(fā)的軟件比較容易理解。(4)易于測(cè)試和調(diào)試。二、面向?qū)ο蠓椒ǖ幕靖拍?、對(duì)象(object)對(duì)象是面向?qū)ο蠓椒ㄖ凶罨镜母拍?。?duì)象可以用來(lái)表示客觀世界中的任何實(shí)體,也就抽象,也可以是人為的概念,或者是任何有明確邊界的意義的東西。并具有與它進(jìn)行交互的能力。面向?qū)ο蟮某绦蛟O(shè)計(jì)方法中涉及的對(duì)象是系統(tǒng)中用來(lái)描述客觀事物的一個(gè)實(shí)體,是構(gòu)成系統(tǒng)的一個(gè)基本單位,它由一組表示其靜態(tài)特征的屬性和它可執(zhí)行的一組操作組成。的操作也稱(chēng)為方法或服務(wù)。在對(duì)象中,用戶(hù)也看不到。對(duì)的這一特性即是對(duì)象的封裝性。過(guò)(2)分類(lèi)性。指可以將具有相同屬性的操作的對(duì)象抽象成類(lèi)。(3)多太性。指同一個(gè)操作可以是不同對(duì)象的行為。(4)封裝性。從外面看只能看到對(duì)象的外部特性,即只需知道數(shù)據(jù)的取值范圍和可以能直接修改其內(nèi)部狀態(tài),對(duì)象的內(nèi)部狀態(tài)只能由其自身改變。(5)模塊獨(dú)立性好。對(duì)象是面向?qū)ο蟮能浖幕灸K,它是由數(shù)據(jù)及可以對(duì)這些數(shù)理來(lái)設(shè)置,沒(méi)有無(wú)關(guān)的操作從模塊的獨(dú)立性考慮,對(duì)象內(nèi)部各種元素彼此結(jié)合得很緊密,內(nèi)聚性強(qiáng)。將屬性、操作相似的對(duì)象歸為類(lèi),也就是說(shuō),類(lèi)是具有共同屬性、共同方法的對(duì)象的集其對(duì)應(yīng)類(lèi)的一個(gè)實(shí)例。一般據(jù)上的一組合法操作。面向?qū)ο蟮氖澜缡峭ㄟ^(guò)對(duì)象與對(duì)象間彼此的相互合作來(lái)推動(dòng)的,對(duì)象間的這種相互合作需要一個(gè)機(jī)制協(xié)助進(jìn)行,這樣的機(jī)制稱(chēng)為“消息”。消息是一個(gè)實(shí)例與另一個(gè)實(shí)例之間傳遞使用類(lèi)似于函數(shù)調(diào)用,消息中指定了某一個(gè)實(shí)例,一個(gè)操作名和一個(gè)參數(shù)表(可空)。接收遞過(guò)程中,由發(fā)送消息的對(duì)象(發(fā)送對(duì)象)的觸發(fā)操作產(chǎn)生輸出結(jié)果,作為消息傳送至接受消息的對(duì)象(接受對(duì)象),引發(fā)接受消息的對(duì)象一系列的操作。所傳送的消息實(shí)質(zhì)上是接受對(duì)象所具有的操作/方法名稱(chēng),有時(shí)還包括相應(yīng)參數(shù)。消息中只包含傳遞者的要求,它告訴接受者需要做哪些處理,但并不指示接受者應(yīng)該怎樣完成這些處理。消息完全由接受者解釋?zhuān)邮苷擢?dú)立決定采用什么方式完成所需的處理,,常,一個(gè)消息由下述三部分組成:(1)接收消息的對(duì)象的名稱(chēng);(2)消息標(biāo)識(shí)符(也稱(chēng)為消息名);(3)零個(gè)或多個(gè)參數(shù)。4、繼承(Inheritance)繼承是面向?qū)ο蟮姆椒ǖ囊粋€(gè)主要特征。繼承是使用己有的類(lèi)定義作為基礎(chǔ)建立新類(lèi)的定義技術(shù)。已有的類(lèi)可當(dāng)作基類(lèi)來(lái)引用,則新類(lèi)相應(yīng)地可當(dāng)作派生類(lèi)來(lái)引用。廣義地說(shuō),繼承是指能夠直接獲得已有的性質(zhì)和特征,而不必重復(fù)定義它們。結(jié)構(gòu)繼承性,一個(gè)類(lèi)直接繼承其父類(lèi)的描述(數(shù)據(jù)和操作)或特性,子類(lèi)自動(dòng)地共享基類(lèi)中定義特性外,還具有該類(lèi)上層全部基類(lèi)定義的特性。。因此,功能更強(qiáng),使用更方便;便是,使用多重繼承時(shí)要注意避免二義性。生出新的類(lèi)以實(shí)現(xiàn)所需要的功能。5、多太性(Polymorphism)對(duì)象根據(jù)所接受的消息而做出動(dòng)作,同樣的消息被不同的對(duì)象接受時(shí)可導(dǎo)致完全不同多態(tài)性機(jī)制不僅增加了面向?qū)ο筌浖到y(tǒng)的靈活性,進(jìn)一步減少了信息冗余,而且顯著利用多態(tài)性,用戶(hù)能夠發(fā)送一般形式的消息,而將所有的實(shí)現(xiàn)細(xì)節(jié)都留給接受消息的對(duì)象。平臺(tái),標(biāo)準(zhǔn),設(shè)計(jì)模式等方面。發(fā)展,使得人們的工作更加高效,同時(shí)提高了生活質(zhì)量。同可以分為系統(tǒng)分析員,軟件設(shè)計(jì)師,系統(tǒng)架構(gòu)師,程序員,測(cè)試員等等。人們也常常用程序員來(lái)泛指各種軟件工程師。(1)軟件工程目標(biāo):生產(chǎn)具有正確性、可用性以及開(kāi)銷(xiāo)合宜的產(chǎn)品。正確性指軟件在實(shí)踐中均存在很多待解決的問(wèn)題,它們形成了對(duì)過(guò)程、過(guò)程模型及工程方法選取的約束。(2)軟件工程過(guò)程:生產(chǎn)一個(gè)最終能滿足需求且達(dá)到工程目標(biāo)的軟件產(chǎn)品所需要的步驟。軟件工程過(guò)程主要包括開(kāi)發(fā)過(guò)程、運(yùn)作過(guò)程、維護(hù)過(guò)程。它們覆蓋了需求、設(shè)計(jì)、實(shí)現(xiàn)、確認(rèn)以及維護(hù)等活動(dòng)。需求活動(dòng)包括問(wèn)題分析和需求分析。問(wèn)題分析獲取需求定義,又計(jì)建立整個(gè)軟件系統(tǒng)結(jié)構(gòu),包括子系統(tǒng)、模塊以及相關(guān)層次的說(shuō)明、每一模塊的接口定義。詳細(xì)設(shè)計(jì)產(chǎn)生程序員可用的模塊說(shuō)明,包括每一模塊中數(shù)據(jù)結(jié)構(gòu)說(shuō)明及加工描述。實(shí)現(xiàn)活動(dòng)把設(shè)計(jì)結(jié)果轉(zhuǎn)換為可執(zhí)行的程序代碼。確認(rèn)活動(dòng)貫穿于整個(gè)開(kāi)發(fā)過(guò)程,實(shí)現(xiàn)完成后的確認(rèn),(3)軟件工程的原則是指圍繞工程設(shè)計(jì)、工程支持以及工程管理在軟件開(kāi)發(fā)過(guò)程一、軟件工程概述概念:應(yīng)需而生軟件工程是一類(lèi)工程。工程是將理論和知識(shí)應(yīng)用于實(shí)踐的科學(xué)。就軟件工程而言,評(píng)估成本及確定權(quán)衡,管理科學(xué)用于計(jì)劃、資源、質(zhì)量和成本的管理。1968年NATO(北大西洋公約組織)會(huì)議上。自這一概念提出以來(lái),圍繞軟件項(xiàng)目,開(kāi)展PASCALAda管理期著重研究系統(tǒng)實(shí)現(xiàn)技術(shù),后期開(kāi)始強(qiáng)調(diào)開(kāi)發(fā)管理和軟件質(zhì)量。,主要圍繞軟件過(guò)程以及軟件復(fù)泛的面向?qū)ο笳Z(yǔ)言以及相關(guān)的面向?qū)ο蠓椒?,大力開(kāi)展了計(jì)算機(jī)輔助軟件工程的研究與實(shí)進(jìn)行企業(yè)管理和技術(shù)的提升。軟件工程所涉及的要素可概括如下:目標(biāo):我的眼里只有“產(chǎn)品”軟件工程活動(dòng)是“生產(chǎn)一個(gè)最終滿足需求且達(dá)到工程目標(biāo)的軟件產(chǎn)品所需要的步驟”。主要包括需求、設(shè)計(jì)、實(shí)現(xiàn)、確認(rèn)以及支持等活動(dòng)。需求活動(dòng)包括問(wèn)題分析和需求分的說(shuō)明、每一模塊接口定義。詳細(xì)設(shè)計(jì)產(chǎn)生程序員可用的模塊說(shuō)明,包括每一模塊中數(shù)據(jù)結(jié)構(gòu)說(shuō)明及加工描述。實(shí)現(xiàn)活動(dòng)把設(shè)計(jì)結(jié)果轉(zhuǎn)換為可執(zhí)行的程序代碼。確認(rèn)活動(dòng)貫穿于整個(gè)開(kāi)求、保證軟件產(chǎn)品滿足用戶(hù)的要求。信息隱蔽、局部化、一致性以及適應(yīng)性等特征。合適的設(shè)計(jì)方法有助于這些特征的實(shí)現(xiàn),以程的目標(biāo)。件工具與環(huán)境對(duì)軟件過(guò)程的支持頗為重要。軟件工程項(xiàng)目的質(zhì)量與開(kāi)銷(xiāo)直接取決于對(duì)軟件工程所提供的支撐質(zhì)量和效用。管理時(shí),才能實(shí)現(xiàn)有效的軟件工程。一個(gè)軟件工程要選取適宜的開(kāi)發(fā)范型,要采用合適的設(shè)計(jì)方法,要提供高質(zhì)量的工程支撐,軟件過(guò)程、軟件工具、軟件開(kāi)發(fā)環(huán)境、計(jì)算機(jī)輔助軟件工程(CASE)及軟件經(jīng)濟(jì)學(xué)等。作用:高效開(kāi)發(fā)高質(zhì)量軟件沒(méi)得到徹底解決,但在軟件開(kāi)發(fā)方法和技術(shù)方面已經(jīng)有了很大的進(jìn)步。尤其應(yīng)該指出的是,自80方法和工具中獲益。根據(jù)調(diào)查,中國(guó)的現(xiàn)狀幾乎和美國(guó)10多年前的情況一樣,軟件開(kāi)發(fā)過(guò)程沒(méi)有明小組的努力。這種依賴(lài)于個(gè)別人員上的成功并不能為全組織的軟件生產(chǎn)率和質(zhì)量的提高奠定。理,并在實(shí)踐中貫徹實(shí)施,才能高效地開(kāi)發(fā)出高質(zhì)量的軟件。二、軟件工程的七條基本原理家的意見(jiàn),并總結(jié)了TRW公司多年的開(kāi)發(fā)軟件的經(jīng)驗(yàn),于1983年提出了軟件工程的七條Boehm認(rèn)為,著七條原理是確保軟件產(chǎn)品質(zhì)量和開(kāi)發(fā)效率的原理的最小集合。它們是相互獨(dú)立的,是缺一不可的最小集合;同時(shí),它們又是相當(dāng)完備的。人們當(dāng)然不能用數(shù)學(xué)方法嚴(yán)格證明它們是一個(gè)完備的集合,但是可以證明,在此之前已經(jīng)提出的100多條軟件工程準(zhǔn)則都可以有這七條原理的任意組合蘊(yùn)含或派生。下面簡(jiǎn)要介紹軟件工程的七條原理:1用分階段的生命周期計(jì)劃嚴(yán)格管理原理意味著,應(yīng)該把軟件生命周期分成若干階段,并相應(yīng)制定出切實(shí)可行的計(jì)劃,然后嚴(yán)格按照計(jì)劃對(duì)軟件的開(kāi)發(fā)和維護(hù)進(jìn)行管理。Boehm認(rèn)為,在整個(gè)軟件生命周期中應(yīng)指定并嚴(yán)格執(zhí)行6類(lèi)計(jì)劃:項(xiàng)目概要計(jì)劃、里程碑計(jì)劃、項(xiàng)目控制計(jì)劃、產(chǎn)品控制計(jì)劃、驗(yàn)證計(jì)劃、運(yùn)行維護(hù)計(jì)劃。2堅(jiān)持進(jìn)行階段評(píng)審統(tǒng)計(jì)結(jié)果顯示:大部分錯(cuò)誤是在編碼之前造成的,大約占63%;<2>錯(cuò)誤發(fā)現(xiàn)的能等到編碼結(jié)束之后再進(jìn)行,應(yīng)堅(jiān)持進(jìn)行嚴(yán)格的階段評(píng)審,以便盡早發(fā)現(xiàn)錯(cuò)誤。3實(shí)行嚴(yán)格的產(chǎn)品控制證軟件的一致性。4采納現(xiàn)代程序設(shè)計(jì)技術(shù)件開(kāi)發(fā)的效率,又可以減少軟件維護(hù)的成本。5結(jié)果應(yīng)能清楚地審查軟件是一種看不見(jiàn)、摸不著的邏輯產(chǎn)品。軟件開(kāi)發(fā)小組的工作進(jìn)展情況可見(jiàn)性差,的責(zé)任和產(chǎn)品標(biāo)準(zhǔn),從而使所得到的標(biāo)準(zhǔn)能清楚地審查。6開(kāi)發(fā)小組的人員應(yīng)少而精開(kāi)發(fā)人員的素質(zhì)和數(shù)量是影響軟件質(zhì)量和開(kāi)發(fā)效率的重要因素,應(yīng)該少而精。這一條基于兩點(diǎn)原因:高素質(zhì)開(kāi)發(fā)人員的效率比低素質(zhì)開(kāi)發(fā)人員的效率要高幾倍到幾十倍,開(kāi)發(fā)工作中犯的錯(cuò)誤也要少的多;當(dāng)開(kāi)發(fā)小組為N人時(shí),可能的通訊信道為7承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性現(xiàn)有的經(jīng)驗(yàn)的總結(jié)和歸納,并不能保證趕上技術(shù)不斷前進(jìn)發(fā)展的步伐。因此,Boehm提出應(yīng)把承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性作為軟件工程的第七條原理。根據(jù)這條原理,不僅類(lèi)型和問(wèn)題報(bào)告統(tǒng)計(jì)。這些數(shù)據(jù)既可以用來(lái)評(píng)估新的軟件技術(shù)的效果,也可以用來(lái)指明必須著重注意的問(wèn)題和應(yīng)該優(yōu)先進(jìn)行研究的工具和技術(shù)。件工程的另外一個(gè)重要發(fā)展。這里的方面指的是完成一個(gè)功能的對(duì)象和函數(shù)的集合。在這一方面相關(guān)的內(nèi)容有泛型編程(GenericProgramming)和模板。程方法可以同時(shí)提高質(zhì)量與生產(chǎn)率。質(zhì)量與生產(chǎn)率的提高就指望程序員與程序經(jīng)理。對(duì)開(kāi)發(fā)人員而言,如果非得在質(zhì)量與生產(chǎn)率易使人急功近利,留下隱患。寧可進(jìn)度慢些,也要保證每個(gè)環(huán)節(jié)的質(zhì)量,以圖長(zhǎng)遠(yuǎn)利益。作全過(guò)程,如同工廠的生產(chǎn)線。常見(jiàn)的軟件工程模型有:線性模型(圖1.2),漸增式模型(圖1.3),螺最早出現(xiàn)的軟件工程模型是線性模型(又稱(chēng)瀑布模型)。線性模型太理想化,太單純,已不再適合現(xiàn)代的軟件開(kāi)發(fā)模式,幾乎被業(yè)界拋棄。偶而被人提起,都屬于被貶對(duì)象,未被留一絲惋惜。但我們應(yīng)該認(rèn)識(shí)到,“線性”是人們最容易掌握并能熟練應(yīng)用的思想方法。當(dāng)線性的精神,就不要再呆板地套用線性模型的外表,而應(yīng)該用活它。例如漸增式模型實(shí)質(zhì)就是分段的線性模型,如圖1.3所示。螺旋模型則是接連的彎曲了的線性模型。在其它模型中都能夠找到線性模型的影子。慣上總以為程序設(shè)計(jì)在先,測(cè)試在后,如圖1.4(a)所示。而對(duì)于一些復(fù)雜的程序,將測(cè)試分為同步測(cè)試與總測(cè)試更有效,如圖1.4(b)所示。,總是少不了圖1.1中的各個(gè)環(huán)節(jié)。本書(shū)擗開(kāi)具體的軟件工程其中程序設(shè)計(jì)部分以C++/C語(yǔ)言為例。四、軟件體系結(jié)構(gòu)和工具的選擇軟件體系結(jié)構(gòu)表示了一個(gè)軟件系統(tǒng)的高層結(jié)構(gòu),主要特點(diǎn)有:1)軟件系統(tǒng)結(jié)構(gòu)是一個(gè)高層次上的抽象,它并不涉及具體的系統(tǒng)結(jié)構(gòu)(比如B/S還是C/S),也不關(guān)心具體的實(shí)現(xiàn)。2)軟件體系結(jié)構(gòu)必須支持系統(tǒng)所要求的功能,在設(shè)計(jì)軟件體系結(jié)構(gòu)的時(shí)候,必須考慮系統(tǒng)的動(dòng)態(tài)行為。3)在設(shè)計(jì)軟件體系結(jié)構(gòu)的時(shí)候,必須考慮有現(xiàn)有系統(tǒng)的兼容性、安全當(dāng)前已經(jīng)有一些關(guān)于規(guī)范化軟件體系結(jié)構(gòu),比如:ISO的開(kāi)放系統(tǒng)互聯(lián)模型、XWindow系統(tǒng)等等。軟件系統(tǒng)的結(jié)構(gòu)通常被定義為兩個(gè)部分:一個(gè)是計(jì)算部件。另一個(gè)就是的交互就是節(jié)點(diǎn)之間的弧線。部件之間的連接可以被認(rèn)為是一種連接器,比如過(guò)程調(diào)用、事件廣播、數(shù)據(jù)庫(kù)查詢(xún)等等。正確的體系結(jié)構(gòu)設(shè)計(jì)是軟件系統(tǒng)成功的關(guān)鍵。一個(gè)系統(tǒng)。在需求分析和設(shè)計(jì)階段,我們需要什么樣的工具呢?分析和建立對(duì)象和對(duì)象關(guān)系的工具。在具體編碼的時(shí)候,我們需要版本控制工具,MS的的面向?qū)ο蟮木幊?,而你在用VB,PowerBuilder,Delphi時(shí)很少會(huì)有同樣的感受。至于數(shù)你也可以編譯成.chm格式,它打包了文本和圖形,只有一個(gè)文件,使用和分發(fā)比較方便。郵件系統(tǒng)討論開(kāi)發(fā)中的各項(xiàng)事宜。五、軟件開(kāi)發(fā)方法綜述國(guó)外大的軟件公司和機(jī)構(gòu)一直在研究軟件開(kāi)發(fā)方法這個(gè)概念性的東西,而且也提出種流行的開(kāi)發(fā)方法:年代使用最廣泛的軟件開(kāi)發(fā)方法。它首先用結(jié)構(gòu)化分析(SA)對(duì)軟件進(jìn)行需求分析,然后用結(jié)構(gòu)化設(shè)計(jì)(SD)方法進(jìn)行總體設(shè)計(jì),最后是結(jié)構(gòu)化編程(SP)。它給出了兩類(lèi)典型的軟件結(jié)構(gòu)(變換型和事務(wù)型)使軟件開(kāi)發(fā)的成功率大大提高。2、面向數(shù)據(jù)結(jié)構(gòu)的軟件開(kāi)發(fā)方法法也可與其它方法結(jié)合,用于模塊的詳細(xì)設(shè)計(jì)。統(tǒng)之間同樣存在著鴻溝,這一方法仍只適用于中小型問(wèn)題。4、原型化方法產(chǎn)生原型化方法的原因很多,主要隨著我們系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)的增多,我們也發(fā)現(xiàn)并非所有的需求都能夠預(yù)先定義而且反復(fù)修改是不可避免的。當(dāng)然能夠采用原型化方法是因?yàn)殚_(kāi)發(fā)工具的快速發(fā)展,比如用VB,DELPHI等工具我們可以迅速的開(kāi)發(fā)出一個(gè)可以讓用戶(hù)看己的需求。開(kāi)發(fā)原型化系統(tǒng)一般由以下幾個(gè)階段:(1)確定用戶(hù)需求(2)開(kāi)發(fā)原始模型(3)征求用戶(hù)對(duì)初始原型的改進(jìn)意見(jiàn)(4)修改原型。原型化開(kāi)發(fā)比較適合于用戶(hù)需求不清、業(yè)務(wù)理論不確定、需求經(jīng)常變化的情況。當(dāng)系統(tǒng)規(guī)模不是很大也不太復(fù)雜時(shí)采用該方法是比較好的。5、面向?qū)ο蟮能浖_(kāi)發(fā)方法當(dāng)前計(jì)算機(jī)業(yè)界最流行的幾個(gè)單詞就是分布式、并行和面向?qū)ο筮@幾個(gè)術(shù)語(yǔ)。由此可以看到面向?qū)ο筮@個(gè)概念在當(dāng)前計(jì)算機(jī)業(yè)界的地位。比如當(dāng)前流行的兩大面向?qū)ο蠹夹g(shù)DCOM和CORBA就是例子。當(dāng)然我們實(shí)際用到的還是面向?qū)ο蟮木幊陶Z(yǔ)言,比如C++。不可否認(rèn),面向?qū)ο蠹夹g(shù)是軟件技術(shù)的一次革命,在軟件開(kāi)發(fā)史上具有里程碑的意義。隨著OOP(面向?qū)ο缶幊?向OOD(面向?qū)ο笤O(shè)計(jì))和OOA(面向?qū)ο蠓治?據(jù)結(jié)構(gòu),實(shí)際上也包含了所有對(duì)象的數(shù)據(jù)結(jié)構(gòu)。所以O(shè)MT徹底實(shí)現(xiàn)了PAM沒(méi)有完全實(shí)現(xiàn)質(zhì)量指標(biāo)上有了實(shí)質(zhì)性的突破,基本地解決了在這些方面存在的嚴(yán)重問(wèn)題。這里我們需要談一下微軟的MSF(MicrosoftSolutionsFramework)的框架,它簡(jiǎn)理設(shè)計(jì)實(shí)際上就是要確定我們實(shí)際需要的組件、服務(wù)和采用的框架結(jié)構(gòu)、具體的編程語(yǔ)言等。MCF整個(gè)結(jié)構(gòu)比較清楚是基于對(duì)象開(kāi)發(fā)的一個(gè)比較好的可操作的框架6、可視化開(kāi)發(fā)方法的數(shù)據(jù)庫(kù)模式的建立,并可以導(dǎo)入到不同的數(shù)據(jù)庫(kù)中去。當(dāng)然用過(guò)S-Design的人不一定很VBDELPHICBuilder是在使用可化開(kāi)發(fā)工具。和一個(gè)非常好的數(shù)據(jù)庫(kù)可視化分析工具??梢暬_(kāi)發(fā)使我們把注意力集中在業(yè)務(wù)邏輯和業(yè)務(wù)流程上,用戶(hù)界面可以用可視化列表框和滾動(dòng)條等,由可視開(kāi)發(fā)工具自動(dòng)生成應(yīng)用軟件。六、怎樣培養(yǎng)軟件工程的思維與方法樂(lè)此不疲。我們更喜歡討論如何用靈活而簡(jiǎn)短的代碼來(lái)實(shí)現(xiàn)一個(gè)特定的功能,而忽略了對(duì)整項(xiàng)目或產(chǎn)品的總體去考慮一個(gè)軟件產(chǎn)品。1.考慮整個(gè)項(xiàng)目或者產(chǎn)品的市場(chǎng)前景。作為一個(gè)真正的系統(tǒng)分析人員,不僅要從用最好的技術(shù)實(shí)現(xiàn)了一個(gè)單進(jìn)程的操作系統(tǒng),其市場(chǎng)前景也一定是不容樂(lè)觀的。2.從用戶(hù)的角度來(lái)考慮問(wèn)題。比如一些操作對(duì)于開(kāi)發(fā)人員來(lái)講是非常顯而易見(jiàn)的,也就是說(shuō)用戶(hù)認(rèn)可的才是好的,并不是開(kāi)發(fā)人員覺(jué)的好才好。DLL或者是以源代碼存在的函數(shù)庫(kù)或者是對(duì)象。比如能夠在B/S結(jié)構(gòu)下運(yùn)行并且不影響系4.合理進(jìn)行模塊的分割。從多層模型角度來(lái)講,一般系統(tǒng)可以分成用戶(hù)層、業(yè)務(wù)層和的話再進(jìn)行重新調(diào)整。這樣就可以保證各個(gè)部分齊頭并進(jìn),開(kāi)發(fā)人員也可以各施其職。5.人員的組織和調(diào)度。這里很重要的一點(diǎn)是到考慮人員的特長(zhǎng),有的人喜歡做界面,有的人喜歡做核心。如果有可能要根據(jù)人員的具體的情況進(jìn)行具體的配置。同時(shí)要保證每一個(gè)開(kāi)發(fā)人員在開(kāi)發(fā)的時(shí)候首先完成需要和其他人員進(jìn)行交互的部分,并且對(duì)自己的項(xiàng)目進(jìn)度以及其他開(kāi)發(fā)人員的進(jìn)度有一個(gè)清晰的了解,保證不同部分的開(kāi)發(fā)人員能夠經(jīng)常進(jìn)行交6.開(kāi)發(fā)過(guò)程中文檔的編寫(xiě)。在開(kāi)發(fā)過(guò)程中會(huì)碰到各種各樣的問(wèn)題和困難,當(dāng)然還有各種各樣的創(chuàng)意和新的思路。應(yīng)該把這些東西都記錄下來(lái)并進(jìn)行及時(shí)整理,對(duì)于困難和問(wèn)各種創(chuàng)意,可以根據(jù)進(jìn)度計(jì)劃安排考慮是在本版本中實(shí)現(xiàn)還是在下一版本中實(shí)現(xiàn)。7.充分考慮實(shí)施時(shí)可能遇到的問(wèn)題。開(kāi)發(fā)是一回事情,用戶(hù)真正能夠使用好它又是另外一回事情。比如在MIS系統(tǒng)開(kāi)發(fā)中,最簡(jiǎn)單的一個(gè)問(wèn)題就是用戶(hù)如果數(shù)據(jù)輸入錯(cuò)誤作用,如何讓用戶(hù)真正利用計(jì)算機(jī)進(jìn)行協(xié)作也是成敗的關(guān)鍵。坐在計(jì)算機(jī)前面直接編碼,但是我確實(shí)認(rèn)為軟件工程對(duì)于我們系統(tǒng)開(kāi)發(fā)的指導(dǎo)作用是巨大編程規(guī)范和工具使用等方面的問(wèn)題。七、軟件開(kāi)發(fā)的發(fā)展變化碼,這也就是國(guó)外開(kāi)發(fā)很注重對(duì)項(xiàng)目的概念和邏輯分析的原因。他們的重點(diǎn)是把業(yè)務(wù)規(guī)則和需求用圖形化的方式表現(xiàn)出來(lái),然后通過(guò)CASE工具自動(dòng)生成代碼。所以當(dāng)國(guó)人還在不停的開(kāi)發(fā)一個(gè)又一個(gè)的MIS工具的時(shí)候,國(guó)外已經(jīng)把很多精力放到了CASE工具的制作上。我們很多公司人員忙著寫(xiě)具體業(yè)務(wù)過(guò)程的相關(guān)代碼,而國(guó)外很多都把精力放到對(duì)不們應(yīng)該從以代碼為核心的軟件開(kāi)發(fā)模式轉(zhuǎn)化到以模型為中心的、基于CASE的開(kāi)發(fā)上來(lái)。關(guān)于協(xié)作與個(gè)人英雄主義社會(huì)進(jìn)步的一個(gè)很明顯的現(xiàn)象就是社會(huì)分工越來(lái)越細(xì),軟件的開(kāi)發(fā)也不例外。為什么在軟件開(kāi)發(fā)的今天已經(jīng)不能出現(xiàn)象裘伯君這樣的軟件英雄的原因也在這里,單憑個(gè)人之控件或者是DLL函數(shù)庫(kù),你所做的就是一個(gè)整合的工作。第二個(gè)就是以細(xì)致取勝,也就是說(shuō)功能很多而且做的很精致,即使技術(shù)本身不是很。而真等你做出來(lái)了,它的新版本也早已經(jīng)推出。真正能夠在市面上叫得想、經(jīng)得起考驗(yàn)得產(chǎn)品都是具有這兩方面的特點(diǎn)。這兩方面的特點(diǎn)決定了你一個(gè)人絕對(duì)是不可能勝任的,也許你可以獨(dú)立的完成技術(shù)英雄,也更需要人與人之間的協(xié)作。人員。八、我們是否需要軟件工程有一點(diǎn)大家可以達(dá)成共識(shí)的就是,如果一個(gè)象Windows這樣的操作系統(tǒng),不進(jìn)行全面的規(guī)劃,不采用軟件工程的思想和方法,是絕對(duì)搞不出來(lái)的。s成為一個(gè)基于網(wǎng)絡(luò)的操作系統(tǒng)。LEOffice的產(chǎn)品。但是從整個(gè)系統(tǒng)設(shè)計(jì)概念上來(lái)講,Office顯然要比WPS高一個(gè)層次,它能夠把檔、圖表、數(shù)據(jù)庫(kù)、演示變成了一個(gè)一體化的東西。而且通過(guò)宏調(diào)用,用戶(hù)可以自己定制用戶(hù)界面并編制適當(dāng)?shù)哪0澹瑔问沁@個(gè)二次開(kāi)發(fā)功能就不是WPS現(xiàn)在所能及項(xiàng)背的,當(dāng)然限于當(dāng)前用戶(hù)的水平還很少有人使用二次開(kāi)發(fā)的功能。提供了相似的開(kāi)發(fā)界面使用戶(hù)學(xué)會(huì)一種開(kāi)發(fā)工具以后能夠很容易的學(xué)習(xí)其他的開(kāi)發(fā)工具。比別是在查詢(xún)和分析上表現(xiàn)了高度的一致性??紤]了擴(kuò)展性和伸縮性,微軟的系列產(chǎn)品能夠很快的利用新的技術(shù)并采用統(tǒng)一的結(jié)構(gòu)形式表基于網(wǎng)絡(luò)的開(kāi)發(fā)和應(yīng)用。大項(xiàng)目、還是小項(xiàng)目。它們作為一個(gè)項(xiàng)目,都需要有一個(gè)需求分析、系統(tǒng)結(jié)構(gòu)建立、設(shè)計(jì)、編碼、測(cè)試等階段。這是任何一個(gè)項(xiàng)目都不可缺少的。往往可以看到很多大公司的IT部門(mén)的人員都在不停的作各種各樣的報(bào)表,當(dāng)各個(gè)樣式結(jié)構(gòu),很少是提供了一個(gè)通用的模板,當(dāng)然提供高層API接口進(jìn)行這種操作的就更少一個(gè)原因就是沒(méi)有在系統(tǒng)開(kāi)發(fā)的前期進(jìn)行很好的調(diào)研、需求分析和系統(tǒng)體系結(jié)構(gòu)的設(shè)計(jì)。這里就我們開(kāi)發(fā)過(guò)的一些小型軟件項(xiàng)目來(lái)談一些開(kāi)發(fā)的總結(jié)和體會(huì),一般來(lái)說(shuō),小小項(xiàng)目雖然看起來(lái)比較簡(jiǎn)單,所以很多開(kāi)發(fā)人員容易犯一些錯(cuò)誤,記得我們?cè)陂_(kāi)發(fā)Internet候,有三個(gè)開(kāi)發(fā)人員:一個(gè)負(fù)責(zé)前端界面的編寫(xiě),一估計(jì)項(xiàng)目難度,比如對(duì)于通訊中多用戶(hù)并發(fā)訪問(wèn)時(shí)的多線程問(wèn)題和緩存處理問(wèn)題,用戶(hù)批量hiVCCSocket的時(shí)候?qū)?shù)據(jù)進(jìn)行了自己定義的格式化,結(jié)果服務(wù)器端數(shù)據(jù)發(fā)送模塊只好重寫(xiě)),而且其中關(guān)于一個(gè)接口雙方的理解不同,然后又返工重新修改。最編寫(xiě)的模塊需要升級(jí),新的接收的人不得不花很多時(shí)間去閱讀他的源代碼。所以在開(kāi)發(fā)小項(xiàng)目的時(shí)候也必須要建立合理的模式:而所謂合理的模式就是軟件工程告在這上面花費(fèi)相當(dāng)時(shí)間是很必要的。對(duì)于軟件要完成哪些功能已經(jīng)有了一個(gè)比較清楚的輪廓,而且往往在開(kāi)發(fā)合同中已經(jīng)大致地的方法作出一個(gè)簡(jiǎn)單的框架給用戶(hù)看。上的要求,另一方面是確定我們軟件的定位,即我們軟件具體是為哪一些用戶(hù)群體服務(wù)的。程度做一定的調(diào)研,根據(jù)調(diào)查的統(tǒng)計(jì)結(jié)果決定即將開(kāi)發(fā)的軟件的一些技術(shù)指標(biāo)。2.需求分析。需求分析需要做的事情有:高層構(gòu)思、確立系統(tǒng)目標(biāo)、劃分業(yè)務(wù)領(lǐng)域、EnterpriseModel元準(zhǔn)化與一致性控制。面向?qū)ο蟮姆椒?,通過(guò)分析用戶(hù)需求,用類(lèi)、類(lèi)之間的各種關(guān)系來(lái)表示整個(gè)系統(tǒng)。定用什么方法來(lái)完成需求的獲取,這在很大程度上影響了需求分析的做法。什么操作系統(tǒng)平臺(tái)上運(yùn)行等等。這些具體實(shí)現(xiàn)是在設(shè)計(jì)階段來(lái)完成的。CASE發(fā)就可以對(duì)分析和設(shè)某些類(lèi)結(jié)構(gòu)做一些修改,確定用戶(hù)表示層(也就是通俗所說(shuō)的界面定義)、用戶(hù)服務(wù)層、業(yè)務(wù)這時(shí)應(yīng)返回到前面的階段進(jìn)行必要的修改。同時(shí)在編碼前規(guī)定編碼的風(fēng)格并在開(kāi)發(fā)過(guò)程中保持一致的風(fēng)格。5.測(cè)試。測(cè)試是系統(tǒng)投入使用前最關(guān)鍵的一個(gè)步驟。即使是小項(xiàng)目也應(yīng)該嚴(yán)格地進(jìn)行測(cè)試。就實(shí)際上就是一個(gè)把錯(cuò)誤留給自己還是留給客戶(hù)的問(wèn)題。最后,我們知道軟件項(xiàng)目主要是由開(kāi)發(fā)人員完成的,所以對(duì)人員的合理安排和配置同時(shí)需要有一個(gè)文檔整理人員隨時(shí)整理系統(tǒng)開(kāi)發(fā)過(guò)程中相關(guān)的文檔。如果條件可能的話,要配置一個(gè)測(cè)試工程師,專(zhuān)門(mén)進(jìn)行代碼的測(cè)試工作,當(dāng)然如果條件不允許的話,也可有可能會(huì)發(fā)現(xiàn)設(shè)計(jì)模型中的漏洞,避免了各人的代碼編寫(xiě)完畢之后又要修改的后果。九、我國(guó)軟件工程發(fā)展的現(xiàn)狀不管怎么樣,我們大家還是先要來(lái)看一看國(guó)內(nèi)軟件廠商到底提供給我們多少有震撼就代表UNIX系列),但是其中到底有多少獨(dú)創(chuàng)的技術(shù)成分我們暫時(shí)還不知道,但有一點(diǎn)可群件和應(yīng)用系統(tǒng)可能還需要進(jìn)一步測(cè)試。然后就是對(duì)硬件平臺(tái)的支持也需要進(jìn)一步完善。多家公司推出了自己的Linux并且還有漢化的Linux,這就有比較疑惑的一點(diǎn),為什么不在Linux上構(gòu)架一個(gè)類(lèi)似UNICODE這樣的東西,而只做漢化這么本地化的產(chǎn)品呢?不知道是眼光還是市場(chǎng)的問(wèn)題了。S重復(fù)低效勞動(dòng)的一面。教育軟件在某一種層面上看就是電子題庫(kù),當(dāng)然也有優(yōu)點(diǎn),比如加入了多媒體教學(xué)(可視化程度不錯(cuò))和所謂寓教于樂(lè)的特點(diǎn),但是從本質(zhì)上說(shuō)還是題庫(kù)。殺毒軟件據(jù)說(shuō)是中國(guó)軟件的驕傲,由中國(guó)權(quán)威機(jī)構(gòu)評(píng)測(cè)是達(dá)到了世界領(lǐng)先水平,但是好象還沒(méi)有眾所周知,不是技術(shù)和創(chuàng)意,實(shí)在是歸功于我們悠久的歷史。字處理軟件和排版軟件客觀的說(shuō)國(guó)內(nèi)的也做的不錯(cuò),但是從系統(tǒng)的擴(kuò)展性和體系結(jié)構(gòu)上說(shuō)和MS和Adobe相比,差距也放在那里。其實(shí)這種現(xiàn)狀的原因很簡(jiǎn)單,一個(gè)是我們?nèi)鄙賱?chuàng)新的能力,另一個(gè)就是我們欠缺軟件工程的概念,系統(tǒng)開(kāi)發(fā)前期的需求分析、設(shè)計(jì)沒(méi)有做好或者做的不夠好。當(dāng)然,我們很少懷疑自己的技術(shù)能力,我們很多時(shí)候認(rèn)為這是地理環(huán)境和經(jīng)濟(jì)環(huán)境的原因造成了中國(guó)軟件業(yè)現(xiàn)在的局面。當(dāng)然中國(guó)軟件開(kāi)發(fā)人員絕對(duì)可以算是優(yōu)秀的,但是想想我們軟件行業(yè)龍頭企業(yè)到底有多少有技術(shù)創(chuàng)新和專(zhuān)利技術(shù)呢?姑且不論這個(gè),實(shí)際上把一個(gè)操它們合理的整合起來(lái)絕對(duì)是一個(gè)涉及到軟件工程的問(wèn)題。不自覺(jué)的影響著新的開(kāi)發(fā)人員。所以在頭腦中建立一個(gè)軟件工程的作用,從某種角度上講,要比會(huì)幾種開(kāi)發(fā)語(yǔ)言、幾個(gè)編程技巧實(shí)在是重要的多。但是我們又有幾個(gè)人真正去認(rèn)真分析和考慮MFC架構(gòu)的設(shè)計(jì)和原理呢?捫心自問(wèn),我們又有多少人能夠設(shè)計(jì)出MFC這樣的框架系統(tǒng)呢?下面就我們的題目談一些相關(guān)的話題。十、我有一個(gè)夢(mèng)非常短的,從第一臺(tái)計(jì)算機(jī)的研制成功到現(xiàn)在也沒(méi)有百年的歷史,但是計(jì)算機(jī)及其相關(guān)技術(shù)本上是按照摩爾定律來(lái)的,經(jīng)歷了從主機(jī)結(jié)構(gòu)到文件服務(wù)器結(jié)構(gòu),從客戶(hù)服務(wù)器系統(tǒng)到基于Internet的服務(wù)器瀏覽器結(jié)開(kāi)發(fā)系統(tǒng),從最簡(jiǎn)單的單行命令式調(diào)試器到方便靈活的多功能的調(diào)試器。但是,今天所有的軟件廠商和軟件開(kāi)發(fā)人員依然會(huì)想起當(dāng)年的黑人人權(quán)運(yùn)動(dòng)領(lǐng)袖馬一個(gè)框架的東西也沒(méi)有碰到。不管我們認(rèn)為軟件工程可能是多么的虛無(wú),但是所有學(xué)工科并且有邏輯頭腦的人都堅(jiān)信理論對(duì)實(shí)踐的指導(dǎo)意義,因?yàn)橛辛藧?ài)因斯坦及其許多偉大的科學(xué)家關(guān)于能量和質(zhì)量方面告訴我們?cè)谠O(shè)計(jì)一個(gè)系統(tǒng)的時(shí)候,我們需要進(jìn)行可行性研究、計(jì)劃制訂、需求分析、系統(tǒng)設(shè)計(jì)、編碼、測(cè)試、維護(hù)等等。并且對(duì)這些過(guò)程中應(yīng)該做什么提出了一個(gè)指導(dǎo)性的東西。但是沒(méi)有任何專(zhuān)家和標(biāo)準(zhǔn)委員會(huì)保證只要按照這些標(biāo)準(zhǔn),我們的系統(tǒng)肯定會(huì)順利完成。而且事實(shí)上,軟件開(kāi)發(fā)針對(duì)的領(lǐng)域是如此之多并不沒(méi)有一種對(duì)所有領(lǐng)域適用的萬(wàn)能框架。不管認(rèn)為軟件工程已經(jīng)到了非常成熟的階段還是認(rèn)為軟件工程依然是一個(gè)搞不懂的黑箱子,軟件工程確實(shí)已經(jīng)經(jīng)歷了三個(gè)不同的階段。第一個(gè)階段是軟件結(jié)構(gòu)化生產(chǎn)階段,期,軟件生產(chǎn)開(kāi)始進(jìn)入以過(guò)程為中心的第二階段,以提出過(guò)程成熟模型CMM、個(gè)體軟件過(guò)把斧頭出現(xiàn)的軟件工業(yè)化生產(chǎn)階段。草先行還是摸著石子過(guò)河。兵馬未動(dòng)、糧草先行當(dāng)然意味著我們?cè)陂_(kāi)發(fā)的時(shí)候先不忙著編寫(xiě)代碼做程序,我們先要制訂一個(gè)關(guān)于開(kāi)發(fā)的方法。這點(diǎn)就象元數(shù)據(jù)(meta
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年生物醫(yī)療耗材研發(fā)及臨床試驗(yàn)合作協(xié)議3篇
- 2025辦公室室內(nèi)裝修合同范本
- 電子產(chǎn)品招投標(biāo)主管職責(zé)解析
- 租賃GPS旅游導(dǎo)航設(shè)備協(xié)議
- 旅游服務(wù)商務(wù)樓租賃合同
- 高層住宅轉(zhuǎn)讓合同范本
- 足球場(chǎng)換熱站建設(shè)合同
- 醫(yī)藥行業(yè)管理制度評(píng)審技巧
- 城市道路指示牌施工勞務(wù)協(xié)議
- 高速公路項(xiàng)目保函攻略
- 2021CSCO結(jié)直腸癌診療指南
- 汕頭大學(xué)匯報(bào)模板
- 《經(jīng)濟(jì)法學(xué)》課程思政教學(xué)案例
- 山茶油知識(shí)普及課件
- 礦山行業(yè)創(chuàng)新與科技進(jìn)步
- 現(xiàn)場(chǎng)管理的協(xié)調(diào)與溝通
- 優(yōu)化獻(xiàn)血服務(wù)流程
- 雙語(yǔ)學(xué)校2023-2024一二年級(jí)上學(xué)期期末無(wú)紙化測(cè)試方案
- 史上最全變電站各類(lèi)設(shè)備講解
- 教科版三年級(jí)科學(xué)上冊(cè)全冊(cè)知識(shí)點(diǎn)+全冊(cè)單元測(cè)試【全冊(cè)】
- 2023年MCU銷(xiāo)售工程師年度總結(jié)及下年工作展望
評(píng)論
0/150
提交評(píng)論