計算機二級公共基礎(chǔ)知識(全)_第1頁
計算機二級公共基礎(chǔ)知識(全)_第2頁
計算機二級公共基礎(chǔ)知識(全)_第3頁
計算機二級公共基礎(chǔ)知識(全)_第4頁
計算機二級公共基礎(chǔ)知識(全)_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論