计算机二级Python公共基础部分
計算機二級Python公共基礎(chǔ)部分
1. 基本數(shù)據(jù)結(jié)構(gòu)與算法
1.1 算法的基本概念
算法是一種設(shè)計好的計算序列,用來解決一類問題。
算法復(fù)雜的包括:時間復(fù)雜度和空間復(fù)雜度。時間復(fù)雜度指計算工作量,空間復(fù)雜度指內(nèi)存空間的要求。
綜合起來:如果一個算法的執(zhí)行次數(shù)是 T(n),那么只保留最高次項,同時忽略最高項的系數(shù)后得到函數(shù) f(n),此時算法的時間復(fù)雜度就是 O(f(n))。為了方便描述,下文稱此為 大O推導(dǎo)法。
- 對于一個循環(huán),假設(shè)循環(huán)體的時間復(fù)雜度為 O(n),循環(huán)次數(shù)為 m,則這個
循環(huán)的時間復(fù)雜度為 O(n×m)。
此時時間復(fù)雜度為 O(n × 1),即 O(n)。
- 對于多個循環(huán),假設(shè)循環(huán)體的時間復(fù)雜度為 O(n),各個循環(huán)的循環(huán)次數(shù)分別是a, b, c…,則這個循環(huán)的時間復(fù)雜度為 O(n×a×b×c…)。分析的時候應(yīng)該由里向外分析這些循環(huán)。
此時時間復(fù)雜度為 O(n × n × 1),即 O(n^2)。
- 對于順序執(zhí)行的語句或者算法,總的時間復(fù)雜度等于其中最大的時間復(fù)雜度。
此時時間復(fù)雜度為 max(O(n^2), O(n)),即 O(n^2)。
- 對于條件判斷語句,總的時間復(fù)雜度等于其中 時間復(fù)雜度最大的路徑 的時間復(fù)雜度。
此時時間復(fù)雜度為 max(O(n^2), O(n)),即 O(n^2)。
空間復(fù)雜度(Space Complexity)
S(n)定義為該算法所耗費的存儲空間,它也是問題規(guī)模n的函數(shù)。漸近空間復(fù)雜度也常常簡稱為空間復(fù)雜度。
空間復(fù)雜度(Space Complexity)是對一個算法在運行過程中臨時占用存儲空間大小的量度。一個算法在計算機存儲器上所占用的存儲空間,包括:
- 存儲算法本身所占用的存儲空間
- 算法的輸入輸出數(shù)據(jù)所占用的存儲空間
- 算法在運行過程中臨時占用的存儲空間
算法的輸入輸出數(shù)據(jù)所占用的存儲空間是由要解決的問題決定的,是通過參數(shù)表由調(diào)用函數(shù)傳遞而來的,它不隨本算法的不同而改變。存儲算法本身所占用的存儲空間與算法書寫的長短成正比,要壓縮這方面的存儲空間,就必須編寫出較短的算法。算法在運行過程中臨時占用的存儲空間隨算法的不同而異,有的算法只需要占用少量的臨時工作單元,而且不隨問題規(guī)模的大小而改變,我們稱這種算法是“就地"進行的,是節(jié)省存儲的算法,如這一節(jié)介紹過的幾個算法都是如此;有的算法需要占用的臨時工作單元數(shù)與解決問題的規(guī)模n有關(guān),它隨著n的增大而增大,當n較大時,將占用較多的存儲單元,例如將在第九章介紹的快速排序和歸并排序算法就屬于這種情況。
1.2 數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)的定義
程序=數(shù)據(jù)結(jié)構(gòu)+算法
在計算機科學中,數(shù)據(jù)結(jié)構(gòu)(datastructure)是計算機中存儲、組織數(shù)據(jù)的方式。指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來更高的運行或者存儲效率。
反映數(shù)據(jù)元素之間的關(guān)系的數(shù)據(jù)元素集合的表示。數(shù)據(jù)的邏輯結(jié)構(gòu)包括集合、線形結(jié)構(gòu)、樹形結(jié)構(gòu)和圖形結(jié)構(gòu)四種。
數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機存儲空間種的存放形式稱為數(shù)據(jù)的存儲結(jié)構(gòu)。常用的存儲結(jié)構(gòu)有順序、鏈接、索引等存儲結(jié)構(gòu)。
常見的數(shù)據(jù)結(jié)構(gòu):
數(shù)組(Array)
堆棧(Stack)
隊列(Queue)
鏈表(Linked List)
樹(Tree)
圖(Graph)
堆(Heap)
散列表(Hash)
線性結(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)。
1.3 線性表
線性表的定義
線性表(Linear List)是由n(n≥0)個數(shù)據(jù)元素(結(jié)點)a[0],a[1],a[2]…,a[n-1]組成的有限序列。
- 數(shù)據(jù)元素的個數(shù)n定義為表的長度 = “l(fā)ist”.length() (“l(fā)ist”.length() = 0(表里沒有一個元素)時稱為空表)
- 將非空的線性表(n>=0)記作:(a[0],a[1],a[2],…,a[n-1])
- 數(shù)據(jù)元素a[i](0≤i≤n-1)只是個抽象符號,其具體含義在不同情況下可以不同
常見的線性表有順序表和鏈表
順序表是線性表的順序存儲結(jié)構(gòu),指的是用一組地址連續(xù)的存儲單元依次存儲線性表的數(shù)據(jù)元素。
順序表常見操作*(括號中為算法平均時間復(fù)雜度,沒有寫明的具體復(fù)雜度依賴不同算法和運算規(guī)則)*:
插入(O(n))、刪除(O(n))、查找、排序、分解、合并、復(fù)制(O(n))、逆轉(zhuǎn)(O(n))
1.4 棧和隊列
棧
棧實際上也是一個線性表,只不過是一種特殊的線性表。棧是只能在表的一端進行插入和刪除運算的線性表,通常稱插入、刪除這一端為棧頂(TOP),另一端為棧底(BOTTOM)。當表中沒有元素時稱為棧空。 棧頂元素總是后被插入(入棧)的元素,從而也是最先被移除(出棧)的元素;棧底元素總是最先被插入的元素,從而也是最后才能被移除的元素。所以棧是個**后進先出(LIFO)**的數(shù)據(jù)結(jié)構(gòu)
棧的基本運算有三種:入棧、出棧與讀棧頂,時間復(fù)雜度都是O(1)
隊列
隊列是只允許在一端刪除,在另一端插入的順序表,允許刪除的一端叫做隊頭,用對頭指針 front 指向?qū)︻^元素的下一個元素,允許插入的一端叫做隊尾,用隊尾指針 rear 指向隊列中的隊尾元素,因此,從排頭指針 front 指向的下一個位置直到隊尾指針 rear 指向的位置之間所有的元素均為隊列中的元素。隊列的修改是 先進先出(FIFO) 。往隊尾插入一個元素稱為入隊運算。從對頭刪除一個元素稱為退隊運算。
隊列主要有兩種基本運算:入隊運算和退隊運算,復(fù)雜度都是O(1)
1.5 鏈表
鏈表指線性表的鏈式存儲結(jié)構(gòu)。
- 單鏈表
一組任意的存儲單元存儲線性表的數(shù)據(jù)元素,因此,為了表示每個數(shù)據(jù)元素 ai 與其直接后繼數(shù)據(jù)元素 ai+1 之間的邏輯關(guān)系,對數(shù)據(jù)元素 ai 來說,除了存儲其本身的信息(數(shù)據(jù)域)之外,還需存儲一個變量指示其直接后繼的信息(指針域)。這兩部分信息組成數(shù)據(jù)元素 ai 的存儲映象,稱為結(jié)點。N 個結(jié)點鏈結(jié)成一個鏈表。該鏈表就是傳統(tǒng)的單向鏈表。
有時,我們在單鏈表的第一個結(jié)點之前附設(shè)一個結(jié)點,稱之為頭結(jié)點,它指向表中第一個結(jié)點。頭結(jié)點的數(shù)據(jù)域可 以不存儲任何信息,也可存儲如線性表的長度等類的附加信息,頭結(jié)點的指針域存儲指向第一個結(jié)點的指針。在單鏈表中,取得第 I 個數(shù)據(jù)元素必須從頭指針出發(fā)尋找,因此,鏈表是非隨機存取的存儲結(jié)構(gòu)。
-
循環(huán)鏈表
以上提到的鏈表指針域只包括一個指針,指向下一個數(shù)據(jù)的地址,如果我們將鏈表最后一個結(jié)點指針域的指針指向鏈表的頭結(jié)點地址,就構(gòu)成了一個環(huán)狀的存儲結(jié)構(gòu),我們稱作循環(huán)鏈表。 -
雙向鏈表
當然我們可以給每個結(jié)點的指針域再添加一個指針,使其指向前一個數(shù)據(jù)結(jié)點的地址,這樣就構(gòu)成了雙向鏈表,而將頭結(jié)點的前一個結(jié)點指向尾結(jié)點,同時將尾結(jié)點的下一個結(jié)點指向頭結(jié)點就構(gòu)成了雙向循環(huán)鏈表。
如果鏈表的尾結(jié)點的指針域指向了該鏈表之前的任意一個結(jié)點,我們稱該鏈表為有環(huán)鏈表。環(huán)形鏈表就是其中一個特例
常見操作:
插入(O(n))、刪除(O(n))、查找、排序、分解、合并、復(fù)制(O(n))、逆轉(zhuǎn)
1.6 樹和二叉樹
-
樹
樹是一種簡單的非線性結(jié)構(gòu)。在樹這種數(shù)據(jù)結(jié)構(gòu)中,所有數(shù)據(jù)元素之間的關(guān)系具有明顯的層次特性。 在樹結(jié)構(gòu)中,每一個結(jié)點只有一個前件,稱為父結(jié)點。沒有前件的結(jié)點只有一個,稱為樹的根結(jié)點,簡稱樹的根。每一個結(jié)點可以有多個后件,稱為該結(jié)點的子結(jié)點。沒有后件的結(jié)點稱為葉子結(jié)點。 在樹結(jié)構(gòu)中,一個結(jié)點所擁有的后件的個數(shù)稱為該結(jié)點的度,所有結(jié)點中最大的度稱為樹的度。樹的最大層次稱為樹的深度。 -
二叉樹
每一個結(jié)點最多有兩棵子樹,且分別稱為該結(jié)點的左子樹與右子樹。
二叉樹性質(zhì)
-
二叉樹的儲存結(jié)構(gòu)
與線性鏈表類似,用于存儲二叉樹中各元素的存儲結(jié)點也由兩部分組成:數(shù)據(jù)域和指針域。但在二叉樹中,由于每一個元素可以有兩個后件(即兩個子結(jié)點),因此,用于存儲二叉樹的存儲結(jié)點的指針域有兩個:一個用于指向該結(jié)點的左子結(jié)點的存儲地址,稱為左指針域;另一個用于指向該結(jié)點的右子結(jié)點的存儲地址,稱為右指針域。 -
二叉樹的遍歷
二叉樹的遍歷是指不重復(fù)地訪問二叉樹中的所有結(jié)點。二叉樹的遍歷可以分為以下三種:
若二叉樹為空,則結(jié)束返回。否則:首先訪問根結(jié)點,然后遍歷左子樹,最后遍歷右子樹;并且,在遍歷左右子樹時,仍然先訪問根結(jié)點,然后遍歷左子樹,最后遍歷右子樹。
若二叉樹為空,則結(jié)束返回。否則:首先遍歷左子樹,然后訪問根結(jié)點,最后遍歷右子樹;并且,在遍歷左、右子樹時,仍然先遍歷左子樹,然后訪問根結(jié)點,最后遍歷右子樹。
若二叉樹為空,則結(jié)束返回。否則:首先遍歷左子樹,然后遍歷右子樹,最后訪問根結(jié)點,并且,在遍歷左、右子樹時,仍然先遍歷左子樹,然后遍歷右子樹,最后訪問根結(jié)點。
1.7 查找
- 順序查找
從表中的第一個元素開始,將給定的值與表中逐個元素的關(guān)鍵字進行比較,直到兩者相符,查到所要找的元素為止。否則就是表中沒有要找的元素,查找不成功。 - 二分查找
先確定待查找記錄所在的范圍,然后逐步縮小范圍,直到找到或確認找不到該記錄為止。注意二分法應(yīng)用的前提是有順序儲存結(jié)構(gòu)的有序表
- 交換類排序
- 選擇類排序
- 插入類排序
二 程序設(shè)計基礎(chǔ)
2.1 程序設(shè)計方法與風格
程序的設(shè)計風格強調(diào)清晰第一,效率第二
w=input('please input your weight/Kg: ')#輸入用戶體重和身高 h=input('please input your height/m: ') weight=float(w)#input函數(shù)默認為輸入字符串,因此需要轉(zhuǎn)化為浮點數(shù) height=float(h) bmi=round((weight/height**2),2)#計算公式,同時用round函數(shù)控制小數(shù)位 #bmi_str=str(bmi) #print('your BMI value is :'+bmi_str)#兩種不同的輸出字符串和數(shù)字組合的方法 print ("your BMI value is : ",bmi) if bmi<18.5:#循環(huán)過程中依然強調(diào)冒號和縮進print('you are too light!')#注意python語言不能層層縮進 elif bmi<25:print ('you are very healthy!') elif bmi<28:print('you are over weight.') elif bmi<32:print('you are obesity.') else :print('Severe obesity!!!')需要考慮到的因素:
- 符號化的命名
- 程序的注釋:包括序言性注釋和功能性注釋
- 視覺組織:利用空格、空行、縮進使得代碼層次更為清晰
- 數(shù)據(jù)說明的次序規(guī)范化;
- 說明語句中變量安排有序化;
- 使用注釋來說明復(fù)雜數(shù)據(jù)的結(jié)構(gòu)。
- 在一行內(nèi)只寫一條語句;
- 程序編寫應(yīng)優(yōu)先考慮清晰性
- 避免過多的臨時變量,提高可讀性;
- 盡量使用庫函數(shù);
- 盡量實現(xiàn)模塊化,且保持模塊功能單一;
2.2 結(jié)構(gòu)化程序設(shè)計
后考慮局部目標。不要一開始就過多追求眾多的細節(jié),先從最上層總目標開始設(shè)
計,逐步使問題具體化。
序要解決的總目標分解為分目標,再進一步分解為具體的小目標,把每個小目標
稱為一個模塊。
基本結(jié)構(gòu)
- 順序結(jié)構(gòu):一種簡單的程序設(shè)計,即按照程序語句行的自然順序,一條語句
一條語句地執(zhí)行程序,它是最基本、最常用的結(jié)構(gòu)。 - 選擇結(jié)構(gòu):又稱分支結(jié)構(gòu),包括簡單選擇和多分支選擇結(jié)構(gòu),可根據(jù)條件,
判斷應(yīng)該選擇哪一條分支來執(zhí)行相應(yīng)的語句序列。 - 重復(fù)結(jié)構(gòu):又稱循環(huán)結(jié)構(gòu),可根據(jù)給定的條件,判斷是否需要重復(fù)執(zhí)行某一
相同的或類似的程序段。
2.3 面向?qū)ο蟮某绦蛟O(shè)計方法,對象,方法,屬性及繼承與多態(tài)性
客觀世界中任何一個事物都可以被看成是一個對象,面向?qū)ο蠓椒ǖ谋举|(zhì)就是主
張從客觀世界固有的事物出發(fā)來構(gòu)造系統(tǒng),提倡人們在現(xiàn)實生活中常用的思維來
認識、理解和描述客觀事物,強調(diào)最終建立的系統(tǒng)能夠映射問題域。也就是說,
系統(tǒng)中的對象及對象之間的關(guān)系能夠如實地反映問題域中固有的事物及其關(guān)系。
面向?qū)ο蠓椒ǖ闹饕獌?yōu)點:
- 與人類習慣的思維方法一致;
- 穩(wěn)定性好;
- 可重用性好;
- 易于開發(fā)大型軟件產(chǎn)品;
- 可維護性好
面向?qū)ο蟮某绦蛟O(shè)計主要考慮的是提高軟件的可重用性。
對象
一個對象由對象名、屬性和操作三部分組一個對象由對象名、屬性和操作三部分組成
1) 對象是面向?qū)ο蠓椒ㄖ凶罨镜母拍?#xff0c;可以用來表示客觀世界中的任何實體,對象是實體的抽象。面向?qū)ο蟮某绦蛟O(shè)計方法中的對象是系統(tǒng)是構(gòu)成系統(tǒng)的一個基本單位,由一組表示其靜態(tài)特征的屬性和它可執(zhí)行的一組操作組成。對象是屬性和方法的封裝體。
2) 屬性即對象所包含的信息,它在設(shè)計對象時確定,一般只能通過執(zhí)行對象的操作來改變。
3) 操作描述了對象執(zhí)行的功能,操作也稱為方法或服務(wù)。操作是對象的動態(tài)屬性。
對象的特點
1)標識惟一性。指對象是可區(qū)分的,并且由對象的內(nèi)在本質(zhì)來區(qū)分,而不是
通過描述來區(qū)分;
2)分類性。指可以將具有相同屬性的操作的對象抽象成類;
3)多態(tài)性。指同一個操作可以是不同對象的行為;
4)封裝性。從外面看只能看到對象的外部特性,即只需知道數(shù)據(jù)的取值范圍
和可以對該數(shù)據(jù)施加的操作,根本無需知道數(shù)據(jù)的具體結(jié)構(gòu)以及實現(xiàn)操作的算
法。對象的內(nèi)部,即處理能力的實行和內(nèi)部狀態(tài),對外是不可見的。從外面不能
直接使用對象的處理能力,也不能直接修改其內(nèi)部狀態(tài),對象的內(nèi)部狀態(tài)只能由
其自身改變。通過對象的封裝性可以實現(xiàn)信息隱蔽。
5)模塊獨立性好。對象是面向?qū)ο蟮能浖幕灸K,它是由數(shù)據(jù)及可以對
這些數(shù)據(jù)施加的操作所組成的統(tǒng)一體,而且對象是以數(shù)據(jù)為中心的,操作圍繞對
其數(shù)據(jù)所需做的處理來設(shè)置,沒有無關(guān)的操作。從模塊的獨立性考慮,對象內(nèi)部
各種元素彼此結(jié)合得很緊密,內(nèi)聚性強。
其他
1)類是指具有共同屬性、共同方法的對象的集合。所以類是對象的抽象,對象是對應(yīng)類的一個實例。
2)消息是一個實例與另一個實例之間傳遞的信息。消息的組成包括:
接收消息的對象的名稱;
消息標識符,也稱消息名;
零個或多個參數(shù)*
P.S. 在面向?qū)ο蠓椒ㄖ?#xff0c;一個對象請求另一個對象為其服務(wù)的方式是通過發(fā)送消息。
3)繼承是指能夠直接獲得已有的性質(zhì)和特征,而不必重復(fù)定義他們。繼承分單繼承和多重繼承。單繼承指一個類只允許有一個父類,多重繼承指一個類允許有多個父類。
三 軟件工程基礎(chǔ)
3.1 軟件工程基本概念,軟件生命周期概念,軟件工具與軟件開發(fā)環(huán)境
軟件
計算機軟件是包括程序、數(shù)據(jù)及相關(guān)文檔的完整集合
1)軟件是一種邏輯實體,而不是物理實體,具有抽象性;
2)軟件的生產(chǎn)與硬件不同,它沒有明顯的制作過程;
3)軟件在運行、使用期間不存在磨損、老化問題;
4)軟件的開發(fā)、運行對計算機系統(tǒng)具有依賴性,受計算機系統(tǒng)的限制,這導(dǎo)致了軟件移植的問題;
5)軟件復(fù)雜性高,成本昂貴;
軟件工程
軟件工程是應(yīng)用于計算機軟件的定義、開發(fā)和維護的一整套方法、工具、文檔、實踐標準和工序。
軟件工程的主要思想是將工程化原則運用到軟件開發(fā)過程,它包括 3 個要素:方法、工具和過程。方法是完成軟件工程 項目的技術(shù)手段;工具是支持軟件的開發(fā)、管理、文檔生成;過程支持軟件開發(fā)的各個環(huán)節(jié)的控制、管理。
軟件生命周期
*軟件產(chǎn)品從提出、實現(xiàn)、使用維護到停止使用退役的過程。*軟件生命周期分為軟件定義、軟件開發(fā)及軟件運行維護三個階段:
1)軟件定義階段:包括制定計劃和需求分析。
制定計劃:確定總目標;可行性研究;探討解決方案;制定開發(fā)計劃。
需求分析:對待開發(fā)軟件提出的需求進行分析并給出詳細的定義。
2)軟開發(fā)階段:
軟件設(shè)計:分為概要設(shè)計和詳細設(shè)計兩個部分。
軟件實現(xiàn):把軟件設(shè)計轉(zhuǎn)換成計算機可以接受的程序代碼。
軟件測試:在設(shè)計測試用例的基礎(chǔ)上檢驗軟件的各個組成部分。
3)軟件運行維護階段:軟件投入運行,并在使用中不斷地維護,進行必要的擴
充和刪改。
軟件開發(fā)工具
軟件開發(fā)工具的完善和發(fā)展將促使軟件開發(fā)方法的進步和完善,促進軟件開發(fā)的高速度和高質(zhì)量。軟件開發(fā)工具的發(fā)展是從單項工具的開發(fā)逐步向集成工具發(fā)展的,軟件開發(fā)工具為軟件工程方法提供了自動的或半自動的軟件支撐環(huán)境。同時,軟件開發(fā)方法的有效應(yīng)用也必須得到相應(yīng)工具的支持,否則方法將難以有效的實施。
軟件開發(fā)環(huán)境
軟件開發(fā)環(huán)境(或稱軟件工程環(huán)境)是全面支持軟件開發(fā)全過程的軟件工具集合。計算機輔助軟件工程(CASE,Computer Aided Software Engineering)將各種軟件工具、開發(fā)機器和一個存放開發(fā)過程信息的中心數(shù)據(jù)庫組合起來,形成軟件工程環(huán)境它將極大降低軟件開發(fā)的技術(shù)難度并保證軟件開發(fā)的質(zhì)量。
3.2 結(jié)構(gòu)化分析方法,數(shù)據(jù)流圖,數(shù)據(jù)字典,軟件需求規(guī)格說明書
結(jié)構(gòu)化方法的核心和基礎(chǔ)是結(jié)構(gòu)化程序設(shè)計理論包括1)結(jié)構(gòu)化需求分析方法;2)面向?qū)ο蟮姆治龇椒ā?br /> 結(jié)構(gòu)化分析方法的實質(zhì):著眼于數(shù)據(jù)流,自頂向下,逐層分解,建立系統(tǒng)的處理流程,以數(shù)據(jù)流圖、數(shù)據(jù)字典和判定樹為主要工具,建立系統(tǒng)的邏輯模型。
數(shù)據(jù)流圖
以圖形的方式描繪數(shù)據(jù)在系統(tǒng)中流動和處理的過程,它反映了系統(tǒng)必須完成的邏輯功能,是結(jié)構(gòu)化分析方法中用于表示系統(tǒng)邏輯模型的一種工具。
加工(轉(zhuǎn)換):輸入數(shù)據(jù)經(jīng)加工變換產(chǎn)生輸出。(圓形)
數(shù)據(jù)流:沿箭頭方向傳送數(shù)據(jù)的通道,一般在旁邊標注數(shù)據(jù)流名。(箭頭)
存儲文件(數(shù)據(jù)源):表示處理過程中存放各種數(shù)據(jù)的文件。(雙下劃線)
源,潭:表示系統(tǒng)和環(huán)境的接口,屬系統(tǒng)之外的實體。(方框)
數(shù)據(jù)字典
對所有與系統(tǒng)相關(guān)的數(shù)據(jù)元素的一個有組織的列表,以及精確的、嚴格的定義,使得用戶和系統(tǒng)分析員對于輸入、輸出、存儲成分和中間計算結(jié)果有共同的理解。
- 數(shù)據(jù)字典的作用是對數(shù)據(jù)流圖中出現(xiàn)的被命名的圖形元素的確切解釋。
- 數(shù)據(jù)字典是結(jié)構(gòu)化分析方法的核心。
3.3 結(jié)構(gòu)化設(shè)計方法,總體設(shè)計與詳細設(shè)計
軟件設(shè)計基礎(chǔ)
結(jié)構(gòu)設(shè)計:定義軟件系統(tǒng)各主要部件之間的關(guān)系。
數(shù)據(jù)設(shè)計:將分析時創(chuàng)建的模型轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)的定義。
接口設(shè)計:描述軟件內(nèi)部、軟件和協(xié)作系統(tǒng)之間以及軟件與人之間如何通信。
過程設(shè)計:把系統(tǒng)結(jié)構(gòu)部件轉(zhuǎn)換成軟件的過程性描述。從工程角度來看,軟件設(shè)計分兩步完成,即概要設(shè)計和詳細設(shè)計。
概要設(shè)計:又稱結(jié)構(gòu)設(shè)計,將軟件需求轉(zhuǎn)化為軟件體系結(jié)構(gòu),確定系統(tǒng)級接口、全局數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)庫模式。
詳細設(shè)計:確定每個模塊的實現(xiàn)算法和局部數(shù)據(jù)結(jié)構(gòu),用適當方法表示算法和數(shù)據(jù)結(jié)構(gòu)的細節(jié)
基本原理
軟件設(shè)計的基本原理包括:抽象、模塊化、信息隱蔽和模塊獨立性。
1)抽象:一種思維工具,就是把事物本質(zhì)的共同特性提取出來而不考慮其他細節(jié)。
2)模塊化:解決一個復(fù)雜問題時自頂向下逐步把軟件系統(tǒng)劃分成一個個較小的、相對獨立但又不相互關(guān)聯(lián)的模塊的過程。
3)信息隱蔽:每個模塊的實施細節(jié)對于其他模塊來說是隱蔽的。
4)模塊獨立性:軟件系統(tǒng)中每個模塊只涉及軟件要求的具體的子功能,而和軟件系統(tǒng)中其他的模塊的接口是簡單的。
模塊的耦合性和內(nèi)聚性是衡量軟件的模塊獨立性的兩個定性指標。
總體設(shè)計
軟件概要設(shè)計的基本任務(wù)是:1)設(shè)計軟件系統(tǒng)結(jié)構(gòu);2)數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計;
3)編寫概要設(shè)計文檔;4)概要設(shè)計文檔評審。
詳細設(shè)計
詳細設(shè)計是為軟件結(jié)構(gòu)圖中的每一個模塊確定實現(xiàn)算法和局部數(shù)據(jù)結(jié)構(gòu),用某種選定的表達工具表示算法和數(shù)據(jù)結(jié)構(gòu)的細節(jié)。
3.4 軟件測試的方法,白盒測試與黑盒測試,測試用例設(shè)計,軟件測試的實施,單元測試、集成測試和系統(tǒng)測試
使用人工或自動手段來運行或測定某個系統(tǒng)的過程,其目的在于檢驗它是否滿足規(guī)定的需求或是弄清預(yù)期結(jié)果與實際結(jié)果之間的差別。
軟件測試方法
- 靜態(tài)測試:包括代碼檢查、靜態(tài)結(jié)構(gòu)分析、代碼質(zhì)量度量。不實際運行軟件,主要通過人工進行。
- 動態(tài)測試:是基于計算機的測試,主要包括白盒測試方法和黑盒測試方法。
白盒測試
白盒測試方法也稱為結(jié)構(gòu)測試或邏輯驅(qū)動測試。它是根據(jù)軟件產(chǎn)品的內(nèi)部工作過程,檢查內(nèi)部成分,以確認每種內(nèi)部操作符合設(shè)計規(guī)格要求。
白盒測試的基本原則:保證所測模塊中每一獨立路徑至少執(zhí)行一次;保證所測模塊所有判斷的每一分支至少執(zhí)行一次;保證所測模塊每一循環(huán)都在邊界條件和一般條件下至少各執(zhí)行一次;驗證所有內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性。
黑盒測試
黑盒測試方法也稱為功能測試或數(shù)據(jù)驅(qū)動測試。黑盒測試是對軟件已經(jīng)實現(xiàn)的功能是否滿足需求進行測試和驗證。黑盒測試主要診斷功能不對或遺漏、接口錯誤、數(shù)據(jù)結(jié)構(gòu)或外部數(shù)據(jù)庫訪問錯誤、性能錯誤、初始化和終止條件錯誤。黑盒測試不關(guān)心程序內(nèi)部的邏輯,只是根據(jù)程序的功能說明來設(shè)計測試用例。
測試用例
測試用例是指對一項特定的軟件產(chǎn)品進行測試任務(wù)的描述,體現(xiàn)測試方案、方法、技術(shù)和策略。一個好的測試用例能找到迄今為止尚未發(fā)現(xiàn)的錯誤。
- 單元測試
- 集成測試
- 確認測試
- 系統(tǒng)測試
四種測試方法詳細解釋
3.5 程序的調(diào)試,靜態(tài)調(diào)試與動態(tài)調(diào)試
程序調(diào)試的任務(wù)是診斷和改正程序中的錯誤,主要在開發(fā)階段進行,調(diào)試程序應(yīng)該由編制源程序的程序員來完成。程序調(diào)試的基本步驟:
(1)錯誤定位;(2)糾正錯誤;(3)回歸測試(防止引入新的錯誤)
靜態(tài)調(diào)試:程序在運行到某一個狀態(tài)的時候,讓它暫停,用工具查看程序此時的運行信息,比如某個變量的數(shù)值;查看完成后,讓程序繼續(xù)運行,恢復(fù)到正常的工作。
動態(tài)調(diào)試:在程序中,添加日志信息(log),在程序運行的時候,將log指定的信息輸出到調(diào)試的電腦上。整個過程不會打斷程序的運行。
四、 數(shù)據(jù)庫設(shè)計基礎(chǔ)
4.1 數(shù)據(jù)庫的基本概念:數(shù)據(jù)庫,數(shù)據(jù)庫管理系統(tǒng),數(shù)據(jù)庫系統(tǒng)
數(shù)據(jù)庫(database)
數(shù)據(jù)的集合,具有統(tǒng)一的結(jié)構(gòu)形式并存放于統(tǒng)一的存儲介質(zhì)內(nèi),是多種應(yīng)用數(shù)據(jù)的集成,并可被各個應(yīng)用程序所共享。數(shù)據(jù)庫存放數(shù)據(jù)是按數(shù)據(jù)所提供的數(shù)據(jù)模式存放的,具有集成與共享的特點,亦即是數(shù)據(jù)庫集中了各種應(yīng)用的數(shù)據(jù),進行統(tǒng)一的構(gòu)造和存儲,而使它們可被不同應(yīng)用程序所使用。
數(shù)據(jù)庫管理系統(tǒng)(DBMS)
一種系統(tǒng)軟件,負責數(shù)據(jù)庫中的數(shù)據(jù)組織、數(shù)據(jù)操縱、數(shù)據(jù)維護、控制及保護和數(shù)據(jù)服務(wù)等,是數(shù)據(jù)庫的核心。
數(shù)據(jù)庫系統(tǒng)(DBS)
由數(shù)據(jù)庫(數(shù)據(jù))、數(shù)據(jù)庫管理系統(tǒng)(軟件)、數(shù)據(jù)庫管理員(人員)、硬件平臺(硬件)、軟件平臺(軟件)五個部分構(gòu)成的運行實體。
4.2 數(shù)據(jù)模型,實體聯(lián)系模型及 E-R 圖,從 E-R 圖導(dǎo)出關(guān)系數(shù)據(jù)模型
數(shù)據(jù)模型的概念:是數(shù)據(jù)特征的抽象,它從抽象層次上描述了系統(tǒng)的靜態(tài)特征、動態(tài)行為和約束條件,為數(shù)據(jù)庫系統(tǒng)的信息表示與操作提供一個抽象的框架。主要內(nèi)容包括:
1)數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)是所研究的對象類型的集合,包括與數(shù)據(jù)類型、內(nèi)容、性質(zhì)有關(guān)的對象,以及與數(shù)據(jù)之間聯(lián)系有關(guān)的對象。它用于描述系統(tǒng)的靜態(tài)特性。
2)數(shù)據(jù)操作:數(shù)據(jù)操作是對數(shù)據(jù)庫中各種對象(型)的實例(值)允許執(zhí)行的操作的集合,包括操作的含義、符號、操作規(guī)則及實現(xiàn)操作的語句等。它用于描述系統(tǒng)的動態(tài)特性。
3)數(shù)據(jù)的約束條件:數(shù)據(jù)的約束條件是一組完整性規(guī)則的集合。完整性規(guī)則是給定的數(shù)據(jù)模型中數(shù)據(jù)及其聯(lián)系所具有的制約和依存規(guī)則,用以限定符號數(shù)據(jù)模型的數(shù)據(jù)庫狀態(tài)及狀態(tài)的變化,以保證數(shù)據(jù)的正確、有效和相容。
實體聯(lián)系模型及 E-R 圖
1)實體:現(xiàn)實世界中的事物。(矩形)
2)屬性:事物的特性。(橢圓形)
3)聯(lián)系:現(xiàn)實世界中事-間的關(guān)系。(菱形)
數(shù)據(jù)庫管理系統(tǒng)常見的數(shù)據(jù)模型有層次模型、網(wǎng)狀模型和關(guān)系模型三種。
4.3 關(guān)系代數(shù)運算,包括集合運算及選擇、投影、連接運算,數(shù)據(jù)庫規(guī)范化理論
關(guān)系代數(shù)
1、關(guān)系的數(shù)據(jù)結(jié)構(gòu)
關(guān)系是由若干個不同的元組所組成,因此關(guān)系可視為元組的集合。n 元關(guān)系是一個 n 元有序組的集合。
關(guān)系模型的基本運算:1)插入;2)刪除;3)修改;4)查詢(包括投影、選擇、笛卡爾積運算)。
2、關(guān)系操縱
關(guān)系模型的數(shù)據(jù)操縱即是建立在關(guān)系上的數(shù)據(jù)操縱,一般有查詢、增加、刪除和
修改四種操作。
集合運算及選擇、投影、連接運算
(1)并(∪):關(guān)系 R 和 S 具有相同的關(guān)系模式,R 和 S 的并是由屬于 R 或?qū)儆?S 的元組構(gòu)成的集合。
(2)差(-):關(guān)系 R 和 S 具有相同的關(guān)系模式,R 和 S 的差是由屬于 R 但不屬于 S 的元組構(gòu)成的集合。
(3)交(∩):關(guān)系 R 和 S 具有相同的關(guān)系模式,R 和 S 的交是由屬于 R 且屬于 S 的元組構(gòu)成的集合。
(4)廣義笛卡爾積(×):設(shè)關(guān)系 R 和 S 的屬性個數(shù)分別為 n、m,則 R 和 S 的廣義笛卡爾積是一個有(n+m)列的元組的集合。每個元組的前 n 列來自 R 的一個元組,后m 列來自 S的一個元組,記為 R×S。
4. 數(shù)據(jù)庫設(shè)計方法和步驟:需求分析、概念設(shè)計、邏輯設(shè)計和物理設(shè)計的相關(guān)策略
數(shù)據(jù)庫設(shè)計階段包括:需求分析、概念分析、邏輯設(shè)計、物理設(shè)計。
數(shù)據(jù)庫設(shè)計的每個階段都有各自的任務(wù):
1)需求分析階段:這是數(shù)據(jù)庫設(shè)計的第一個階段,任務(wù)主要是收集和分析數(shù)據(jù),這一階段收集到的基礎(chǔ)數(shù)據(jù)和數(shù)據(jù)流圖是下一步設(shè)計概念結(jié)構(gòu)的基礎(chǔ)。
2)概念設(shè)計階段:分析數(shù)據(jù)間內(nèi)在語義關(guān)聯(lián),在此基礎(chǔ)上建立一個數(shù)據(jù)的抽象模型,即形成 E-R 圖。(數(shù)據(jù)庫概念設(shè)計的過程包括選擇局部應(yīng)用、視圖設(shè)計和視圖集成)
3)邏輯設(shè)計階段:將 E-R 圖轉(zhuǎn)換成指定 RDBMS 中的關(guān)系模式。
4)物理設(shè)計階段:對數(shù)據(jù)庫內(nèi)部物理結(jié)構(gòu)作調(diào)整并選擇合理的存取路徑,以提高數(shù)據(jù)庫訪問速度及有效利用存儲空間。
總結(jié)
以上是生活随笔為你收集整理的计算机二级Python公共基础部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(1057):面向对象目标
- 下一篇: python3.7 获取网络时间