




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章
計(jì)算機(jī)軟件開發(fā)
(第8、9講)講授:黃瑞興12/1/20221第5章
計(jì)算機(jī)軟件開發(fā)
(第8、9講)講授:黃瑞興1第5章計(jì)算機(jī)軟件開發(fā)5.1算法與數(shù)據(jù)結(jié)構(gòu)5.2程序設(shè)計(jì)的基本概念5.3結(jié)構(gòu)化程序設(shè)計(jì)5.4面向?qū)ο蟪绦蛟O(shè)計(jì)5.5軟件工程5.6數(shù)據(jù)庫系統(tǒng)概述12/1/20222第5章計(jì)算機(jī)軟件開發(fā)5.1算法與數(shù)據(jù)結(jié)構(gòu)12/1/5.1算法與數(shù)據(jù)結(jié)構(gòu)算法與數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)程序的兩個最基本的概念。瑞士著名計(jì)算機(jī)科學(xué)家尼可萊沃思在1976年曾提出算法與數(shù)據(jù)結(jié)構(gòu)二者的關(guān)系:
算法+數(shù)據(jù)結(jié)構(gòu)=程序準(zhǔn)確地說,一個程序規(guī)定了某個數(shù)據(jù)結(jié)構(gòu)上的一個算法。失算起床穿衣沖涼吃飯上課12/1/202235.1算法與數(shù)據(jù)結(jié)構(gòu)算法與數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)程序的兩個最基本5.1.1算法的基本概念“算法(algorithms)”是什么?韋氏新世界詞典將“算法”定義為:解決某種問題的任何專門的方法。如公元前300年歐幾里得在其著作《幾何原本》中關(guān)于求兩個數(shù)的最大公約數(shù)的輾轉(zhuǎn)相除法就是著名的歐幾里德算法。12/1/202245.1.1算法的基本概念“算法(algorithms)”是歐幾里德算法給定兩個正整數(shù)m和n求它們的最大公因子(即能同時整除m和n
的最大正整數(shù))步驟:以n除m并令所得余數(shù)為r,r必小于n;若r=0算法結(jié)束,輸出結(jié)果n,否則繼續(xù)步驟3;將n置換為m,r置換為n并返回步驟1。歐幾里德算法既表述了一個數(shù)的求解過程,同時又表述了一個判定過程。12/1/20225歐幾里德算法給定兩個正整數(shù)m和n求它們的最大公因子(即能同時
漢諾塔問題每次只能移動一個盤子只能在三根柱子上移動,不能放在其他地方移動時必須始終保持大盤在下,小盤在上當(dāng)這64個盤子全部移到第三根柱子上,世界末日就要到了。漢諾塔問題只能用遞歸方法而不能用其他方法來求解。所謂遞歸就是將一個較大的問題歸結(jié)為一個或多個比原問題簡單,且在結(jié)構(gòu)上與原問題相同的子問題的求解方法。12/1/20226漢諾塔問題每次只能移動一個盤子12/1/202265.1.1算法的基本概念著名計(jì)算機(jī)科學(xué)家克努特把算法的性質(zhì)歸納為有窮性:算法必須在執(zhí)行有限步之后結(jié)束。即必須在有限時間內(nèi)完成。確定性:算法中的每個步驟都必須有明確的定義,不允許存在多義性和模棱兩可。能行性:算法中描述的每步操作都應(yīng)是可執(zhí)行的。例如,當(dāng)B=0時A/B就無法執(zhí)行,不符合能行性的要求。輸入:一個算法必須有0個(自動生成初始數(shù)據(jù))或多個輸入。輸出:一個算法必須產(chǎn)生一個或多個輸出12/1/202275.1.1算法的基本概念著名計(jì)算機(jī)科學(xué)家克努特把算法的性質(zhì)自然語言是人們?nèi)粘K玫恼Z言,如英語、漢語等優(yōu)點(diǎn):自然語言所描述的算法通俗易懂、靈活自由。缺點(diǎn):①歧義性,容易導(dǎo)致算法執(zhí)行的不確定性;②串行性,一個算法中循環(huán)和分支較多時就很難清晰地表示出來;③不便轉(zhuǎn)換成用計(jì)算機(jī)程序設(shè)計(jì)語言表示。5.1.2算法的表示-自然語言12/1/20228自然語言是人們?nèi)粘K玫恼Z言,如英語、漢語等5.1.2算法流程圖是采用一些的圖框符號來描述算法的邏輯結(jié)構(gòu),每個圖框符號表示不同性質(zhì)的操作。ANSI在上世紀(jì)60年代頒布流程圖的標(biāo)準(zhǔn),規(guī)定用來表示程序中各種操作的流程圖符號。5.1.2算法的表示-流程圖起止框輸入/輸出框判斷框處理框注釋框連接線連接點(diǎn)12/1/20229流程圖是采用一些的圖框符號來描述算法的邏輯結(jié)構(gòu),每個圖框符號5.1.2算法的表示例3.2求5!步驟1:令p=1步驟2:令i=2步驟3:使pXi,成績依然存入p中,可表示為p←pxi步驟4:使i的值加1,可表示為i←i+1步驟5:如果i≤5,則返回步驟3的位置,從步驟3開始再次執(zhí)行本算法。如果i>5,則算法結(jié)束。流程圖開始i>5p←1i←2p←pxii←i+1結(jié)束FT12/1/2022105.1.2算法的表示例3.2求5!流程圖開始i>5p偽代碼是一種非正式的語言,它是用介于自然語言和計(jì)算機(jī)語言之間的文字和符號來描述算法比真正的程序代碼更簡明,更貼近自然語言書寫方便、格式緊湊、易于理解,便于轉(zhuǎn)化為計(jì)算機(jī)語言算法(即程序)5.1.2算法的表示-偽代碼12/1/202211偽代碼是一種非正式的語言,它是用介于自然語言和計(jì)算機(jī)語言之間5.1.2算法的表示用偽代碼表示例3.2
求5!的算法Begin
置p的初值為1 置i的初值為2
while
i≤5
p←pxi
i←i+1
endwhile 打印p的值End12/1/2022125.1.2算法的表示用偽代碼表示例3.2求5!的算法125.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念數(shù)據(jù):是描述客觀事物的數(shù)字、字符及所有能輸入到計(jì)算機(jī)中并被計(jì)算機(jī)程序處理的符號的集合。數(shù)據(jù)元素:組成數(shù)據(jù)的基本單位稱為數(shù)據(jù)元素。通常將數(shù)據(jù)元素作為一個整體進(jìn)行處理。數(shù)據(jù)元素由若干個數(shù)據(jù)項(xiàng)組成,稱數(shù)據(jù)元素為記錄。數(shù)據(jù)項(xiàng)是數(shù)據(jù)的不可分割的最小單位。最簡單的數(shù)據(jù)元素僅含有一個數(shù)據(jù)項(xiàng)。12/1/2022135.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念數(shù)據(jù):是描述客觀事物的數(shù)字、字5.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念數(shù)據(jù)結(jié)構(gòu):是指數(shù)據(jù)之間的相互關(guān)系,即數(shù)據(jù)的組織形式。數(shù)據(jù)結(jié)構(gòu)的研究內(nèi)容:程序設(shè)計(jì)中計(jì)算機(jī)所操作的對象及相互間的關(guān)系和運(yùn)算,即數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)以及數(shù)據(jù)結(jié)構(gòu)的運(yùn)算。數(shù)據(jù)的邏輯結(jié)構(gòu)是指數(shù)據(jù)元素之間的邏輯關(guān)系。邏輯結(jié)構(gòu)有:線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖狀結(jié)構(gòu)(或稱網(wǎng)狀結(jié)構(gòu))。12/1/2022145.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念數(shù)據(jù)結(jié)構(gòu):是指數(shù)據(jù)之間的相互關(guān)5.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念數(shù)據(jù)的存儲結(jié)構(gòu)是指數(shù)據(jù)在存儲器中的存儲方式。順序存儲結(jié)構(gòu)借助元素在存儲器中的相對位置來表示數(shù)據(jù)元素的邏輯關(guān)系鏈?zhǔn)酱鎯Y(jié)構(gòu)借助指針來表示數(shù)據(jù)元素之間的邏輯關(guān)系,通常在數(shù)據(jù)元素上增加一個或多個指針類型的屬性來實(shí)現(xiàn)這種表示方式。12/1/2022155.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念數(shù)據(jù)的存儲結(jié)構(gòu)是指數(shù)據(jù)在存儲器數(shù)據(jù)結(jié)構(gòu)的基本運(yùn)算(操作)①建立數(shù)據(jù)結(jié)構(gòu)②撤消數(shù)據(jù)結(jié)構(gòu)③插入數(shù)據(jù)元素。在一個給定的數(shù)據(jù)結(jié)構(gòu)中,在指定位置上增添一個新的元素。④刪除數(shù)據(jù)元素。對一個給定的數(shù)據(jù)結(jié)構(gòu),刪除某個指定節(jié)點(diǎn)。⑤更新數(shù)據(jù)元素。在一個給定的數(shù)據(jù)結(jié)構(gòu)中,改變某個元素的值,它等于插入和刪除兩個操作的組合。12/1/202216數(shù)據(jù)結(jié)構(gòu)的基本運(yùn)算(操作)①建立數(shù)據(jù)結(jié)構(gòu)12/1/2022數(shù)據(jù)結(jié)構(gòu)的基本運(yùn)算(操作)⑥查找數(shù)據(jù)元素。在一個給定的數(shù)據(jù)結(jié)構(gòu)中,找出滿足指定條件的元素。⑦排序。對給定的數(shù)據(jù)結(jié)構(gòu)中的所有的元素按照一定的條件將它們重新排列順序⑧遍歷。在一個給定的數(shù)據(jù)結(jié)構(gòu)中,從第一個結(jié)點(diǎn)開始,依次訪問各個結(jié)點(diǎn)。每個結(jié)點(diǎn)只能被訪問一次。⑨判定某個數(shù)據(jù)結(jié)構(gòu)是否為空或是否已達(dá)到最大允許的容量。⑩統(tǒng)計(jì)數(shù)據(jù)元素的個數(shù)。12/1/202217數(shù)據(jù)結(jié)構(gòu)的基本運(yùn)算(操作)⑥查找數(shù)據(jù)元素。在一個給定的數(shù)據(jù)5.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的目的可簡化算法節(jié)省空間提高效率程序設(shè)計(jì)中選擇適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)12/1/2022185.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的目的可簡化算法5.1.4線性表定義:線性表的邏輯結(jié)構(gòu)是n個數(shù)據(jù)元素的有限序列:(a1,a2,a3,…,an)邏輯結(jié)構(gòu)特征:數(shù)據(jù)元素之間呈線性關(guān)系第1個:無前驅(qū),有1個后繼;最后一個:有1個前驅(qū),無后繼;其它:有1個前驅(qū),有1個后繼。存儲結(jié)構(gòu),一類是順序(靜態(tài)存儲結(jié)構(gòu)),另一類是鏈?zhǔn)?動態(tài)存儲結(jié)構(gòu))除書上所列舉的26個英文字母、0-9數(shù)字字符組成線性表。還能舉出其他的線性表嗎?12/1/2022195.1.4線性表定義:線性表的邏輯結(jié)構(gòu)是n個數(shù)據(jù)元素的有限5.1.4線性表順序存儲結(jié)構(gòu)線性表的插入、刪除過程1518222526291112插入2012/1/2022205.1.4線性表順序存儲結(jié)構(gòu)線性表的插入、刪除過程15185.1.4線性表順序存儲結(jié)構(gòu)線性表的插入、刪除過程1518222526291112插入2020刪除1212/1/2022215.1.4線性表順序存儲結(jié)構(gòu)線性表的插入、刪除過程15185.1.4線性表順序存儲結(jié)構(gòu)線性表的插入、刪除過程11刪除121518222526292012/1/2022225.1.4線性表順序存儲結(jié)構(gòu)線性表的插入、刪除過程11刪除5.1.4線性表鏈?zhǔn)酱鎯€性表的插入、刪除插入c刪除d12/1/2022235.1.4線性表鏈?zhǔn)酱鎯€性表的插入、刪除插入c刪除d125.1.5棧與隊(duì)列棧是限定僅在表尾進(jìn)行插入和刪除操作的線性表。因此,對棧來說,表尾端有其特殊的含義,稱為棧頂,相應(yīng)的表頭端稱為棧底。不含元素的空表稱為空棧棧又稱后進(jìn)先出(LastInFirstOut)的線性表,簡稱LIFO。12/1/2022245.1.5棧與隊(duì)列棧是限定僅在表尾進(jìn)行插入和刪除操作的線性5.1.5棧與隊(duì)列棧的示意圖棧底棧頂進(jìn)棧出棧a1a2…an-1an12/1/2022255.1.5棧與隊(duì)列棧的示意圖棧底棧頂進(jìn)棧出棧a1a2…an5.1.5棧與隊(duì)列棧頂指針和數(shù)據(jù)元素間的關(guān)系top=0top=1top=2top=3top=4top=5ABCDE12/1/2022265.1.5棧與隊(duì)列棧頂指針和數(shù)據(jù)元素間的關(guān)系top=0to5.1.5棧與隊(duì)列棧的鏈?zhǔn)酱鎯Y(jié)構(gòu)——鏈棧示意圖棧頂指針…棧頂棧底12/1/2022275.1.5棧與隊(duì)列棧的鏈?zhǔn)酱鎯Y(jié)構(gòu)——鏈棧示意圖棧頂指針…5.1.5棧與隊(duì)列隊(duì)列是一種先進(jìn)先出(FirstInFirstOut)的線性表,簡稱為FIFO。隊(duì)列只允許在表的一端進(jìn)行插入操作,而在表的另一端進(jìn)行刪除操作。允許插入元素的表端稱為隊(duì)尾,允許刪除元素的表端稱為隊(duì)頭。類似于日常生活中的排隊(duì),刪除元素從隊(duì)頭進(jìn)行、插入元素從隊(duì)尾進(jìn)行,最早進(jìn)入隊(duì)列的元素最早離開。12/1/2022285.1.5棧與隊(duì)列隊(duì)列是一種先進(jìn)先出(FirstInF5.1.5棧與隊(duì)列隊(duì)列示意圖a1a2…an隊(duì)頭隊(duì)尾入隊(duì)列出隊(duì)列12/1/2022295.1.5棧與隊(duì)列隊(duì)列示意圖a1a2…an隊(duì)頭隊(duì)尾入隊(duì)列出5.1.6樹與圖樹:非線性結(jié)構(gòu)(有樹和二叉樹)。非空樹有且僅有一個根結(jié)點(diǎn)。結(jié)點(diǎn)擁有子結(jié)點(diǎn)的個數(shù)稱結(jié)點(diǎn)的度。ABFLKEDGHIJMC層次1234ABC的度是多少?12/1/2022305.1.6樹與圖樹:非線性結(jié)構(gòu)(有樹和二叉樹)。非空樹有且5.1.6樹與圖圖:數(shù)據(jù)元素之間的關(guān)系可以是任意的13214526有向圖無向圖412/1/2022315.1.6樹與圖圖:數(shù)據(jù)元素之間的關(guān)系可以是任意的13215.1.7算法的設(shè)計(jì)算法的設(shè)計(jì)目標(biāo)正確性:能無誤地處理合法輸入數(shù)據(jù),得到滿足要求的結(jié)果??勺x性:便于人們閱讀和交流。健壯性:對非法輸入的數(shù)據(jù)能作出適當(dāng)?shù)姆磻?yīng)和處理。效率與存儲量:衡量算法的執(zhí)行時間及所需的最大存儲空間。12/1/2022325.1.7算法的設(shè)計(jì)算法的設(shè)計(jì)目標(biāo)12/1/2022325.1.7算法的設(shè)計(jì)算法設(shè)計(jì)的基本策略思想分割求解法:把一個大問題劃分為原問題的較小子問題,先求出各子問題的解答,然后把各子問題的解答合并成整個問題的解。動態(tài)規(guī)劃法:對所有的子問題都進(jìn)行解答,每個子問題的解決依賴于一系列子問題的結(jié)果。如何找出后面的子問題,要依賴于前面一系列子問題的遞推關(guān)系式,這就是動態(tài)規(guī)劃策略的核心。12/1/2022335.1.7算法的設(shè)計(jì)算法設(shè)計(jì)的基本策略思想12/1/2025.1.7算法的設(shè)計(jì)算法設(shè)計(jì)的基本策略思想子目標(biāo)法(倒推法):從某個已知的特定解出發(fā),反過來求這個解與已知條件之間存在的關(guān)系,以得到一般解的方法圖的搜索法:把問題的求解過程用圖或樹這種結(jié)構(gòu)來描述。回溯法:先試一試某一操作,如果以后發(fā)現(xiàn)這個操作不適合,則允許退回去,另選一個操作來進(jìn)行。本質(zhì)是一種搜索算法。12/1/2022345.1.7算法的設(shè)計(jì)算法設(shè)計(jì)的基本策略思想12/1/202習(xí)題(p69)1.什么是算法,算法應(yīng)具備哪些特性,為什么?(p70)3.幾種常用的算法表示方法是什么,各有什么特點(diǎn)?10.試比較線性表、棧和隊(duì)列三種數(shù)據(jù)結(jié)構(gòu)。14.好的算法應(yīng)滿足哪些主要的設(shè)計(jì)目標(biāo)?12/1/202235習(xí)題(p69)12/1/2022355.2程序設(shè)計(jì)的基本概念什么是程序設(shè)計(jì)Programming?程序設(shè)計(jì)是給出解決特定問題程序的過程,是指設(shè)計(jì)、編制、調(diào)試程序的方法和過程。是軟件構(gòu)造活動中的重要組成部分。程序設(shè)計(jì)往往以某種程序設(shè)計(jì)語言為工具,給出這種語言下的程序。程序設(shè)計(jì)過程應(yīng)當(dāng)包括分析、設(shè)計(jì)、編碼、測試、排錯等不同階段。專業(yè)的程序設(shè)計(jì)人員常被稱為程序員。12/1/2022365.2程序設(shè)計(jì)的基本概念什么是程序設(shè)計(jì)Programmin5.2程序設(shè)計(jì)的基本概念5.2.1程序設(shè)計(jì)語言的分類機(jī)器語言(1GL)優(yōu)點(diǎn):可以被計(jì)算機(jī)直接理解和執(zhí)行,執(zhí)行速度快,且占用內(nèi)存少。缺點(diǎn):通用性差、程序可讀性很差、不易于調(diào)試和維護(hù)。12/1/2022375.2程序設(shè)計(jì)的基本概念5.2.1程序設(shè)計(jì)語言的分類125.2.1程序設(shè)計(jì)語言的分類匯編語言(2GL)用助記符表示機(jī)器指令操作碼和地址碼。助記符是一些有意義的英文單詞的縮寫和符號。如用ADD表示加法addition、用MOV表示數(shù)據(jù)的傳送move等優(yōu)點(diǎn):可用匯編語言寫出語句少、質(zhì)量高、執(zhí)行速度快的程序缺點(diǎn):匯編語言仍是一種面向機(jī)器的語言,通用性差。12/1/2022385.2.1程序設(shè)計(jì)語言的分類匯編語言(2GL)12/1/25.2.1程序設(shè)計(jì)語言的分類高級語言(3GL)按照一定的“語法規(guī)則”構(gòu)建程序。用英語單詞表示的關(guān)鍵字和數(shù)學(xué)符號組成。簡化開發(fā)應(yīng)用程序的過程。高級語言是面向算法過程的語言。即不但要告訴計(jì)算機(jī)“做什么”,還要告訴計(jì)算機(jī)“怎么做”優(yōu)點(diǎn):程序表達(dá)直觀,可讀性好,與具體機(jī)器無關(guān),便于移植,通用性好12/1/2022395.2.1程序設(shè)計(jì)語言的分類高級語言(3GL)12/1/2高級語言與翻譯系統(tǒng)通常把用高級語言編寫的程序稱為源程序,把用二進(jìn)制代碼表示的程序稱為機(jī)器代碼程序或者目標(biāo)程序.計(jì)算機(jī)只能識別和執(zhí)行由二進(jìn)制代碼組成的機(jī)器語言,因此源程序必須經(jīng)過語言處理程序
翻譯成目標(biāo)程序才能被計(jì)算機(jī)執(zhí)行.具有翻譯功能的語言處理程序:編譯程序(又稱編譯器)和解釋程序(又稱解釋器)12/1/202240高級語言與翻譯系統(tǒng)通常把用高級語言編寫的程序稱為源程序,把用第四代語言4GL是一種非過程化的語言。只需說明所要完成的加工和條件,給出輸入數(shù)據(jù)并指明輸出形式,就能得到所需結(jié)果。優(yōu)點(diǎn):簡單易學(xué),編程省時省力,無需很多程序設(shè)計(jì)知識就能開發(fā)應(yīng)用程序應(yīng)用:目前流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)結(jié)構(gòu)化查詢語言SQL,具有數(shù)據(jù)的查詢、定義、操縱和控制功能。如Oracle、Sybase、MSSQLServer、Access等5.2.1程序設(shè)計(jì)語言的分類12/1/202241第四代語言4GL是一種非過程化的語言。只需說明所要完成的加工非過程化語言高級語言(過程化語言)解決問題時,必須詳細(xì)描述解決問題的每一步,既要解決“做什么”,又要解決“怎么做”。非過程化語言不必描述繁瑣的解決問題過程,只需告訴計(jì)算機(jī)"做什么"而不必指明"怎么做"特點(diǎn):只指定哪些數(shù)據(jù)被操縱,至于對這些數(shù)據(jù)要執(zhí)行哪些操作,以及這些操作是如何執(zhí)行的,則未被指定。5.2.1程序設(shè)計(jì)語言的分類12/1/202242非過程化語言高級語言(過程化語言)解決問題時,必須詳細(xì)描述解5.2.1程序設(shè)計(jì)語言的分類第五代語言5GL也是非過程化的語言,它們提供了可視化的圖形界面來生成源代碼。通常第五代語言使用第三代語言或第四代語言的編譯程序來轉(zhuǎn)換得到相應(yīng)的機(jī)器語言程序。有些面向?qū)ο蟮拈_發(fā)工具和網(wǎng)頁開發(fā)工具,如VisualBasic、VisualC++、Java等就屬于第五代語言。12/1/2022435.2.1程序設(shè)計(jì)語言的分類第五代語言5GL12/1/20程序設(shè)計(jì)分類按照結(jié)構(gòu)性質(zhì)分,有結(jié)構(gòu)化程序設(shè)計(jì)與非結(jié)構(gòu)化程序設(shè)計(jì)。前者是指具有結(jié)構(gòu)性的程序設(shè)計(jì)方法與過程。它具有由基本結(jié)構(gòu)構(gòu)成復(fù)雜結(jié)構(gòu)的層次性,后者反之。按照用戶要求分,有過程式程序設(shè)計(jì)與非過程式程序設(shè)計(jì)。前者是指使用過程式程序設(shè)計(jì)語言的程序設(shè)計(jì),后者指非過程式程序設(shè)計(jì)語言的程序設(shè)計(jì)。按照設(shè)計(jì)的成分性質(zhì)分,有順序程序設(shè)計(jì)、并發(fā)程序設(shè)計(jì)、并行程序設(shè)計(jì)、分布式程序設(shè)計(jì)。按照程序設(shè)計(jì)風(fēng)格分,有邏輯式程序設(shè)計(jì)、函數(shù)式程序設(shè)計(jì)、對象式程序設(shè)計(jì)。12/1/202244程序設(shè)計(jì)分類按照結(jié)構(gòu)性質(zhì)分,有結(jié)構(gòu)化程序設(shè)計(jì)與非結(jié)構(gòu)化程序設(shè)JavaDelphiVisualBASIC、C#、C++C、C++PASCAL5.2.2幾種常見的高級語言COBOLFORTRANBASIC12/1/202245JavaDelphiVisualBASIC、C#、C++C5.3結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)的思想:任何程序都只依靠三種基本結(jié)構(gòu)的組合實(shí)現(xiàn):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。選擇結(jié)構(gòu)又稱分支結(jié)構(gòu)。由這三種基本結(jié)構(gòu)組成的程序稱為結(jié)構(gòu)化程序強(qiáng)調(diào)程序的結(jié)構(gòu)和可讀性,為緩解軟件危機(jī)作出了重要的貢獻(xiàn)12/1/2022465.3結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)的思想:任何程序都只依靠5.3結(jié)構(gòu)化程序設(shè)計(jì)控制結(jié)構(gòu)表達(dá)式語句1If語句:單分支結(jié)構(gòu)表達(dá)式語句1If-else語句:雙分支結(jié)構(gòu)語句2FTFT一位老學(xué)者曾經(jīng)說過:順續(xù)執(zhí)行的程序都是簡單的;程序的復(fù)雜性往往都體現(xiàn)在條件判斷與循環(huán)控制上。12/1/2022475.3結(jié)構(gòu)化程序設(shè)計(jì)控制結(jié)構(gòu)表達(dá)式語句1If語句:單分支結(jié)5.3結(jié)構(gòu)化程序設(shè)計(jì)控制結(jié)構(gòu)表達(dá)式語句while語句的執(zhí)行流程表達(dá)式2計(jì)算表達(dá)式3for語句的執(zhí)行流程語句FTFT計(jì)算表達(dá)式1For語句的下一條語句比較while、for與do-while12/1/2022485.3結(jié)構(gòu)化程序設(shè)計(jì)控制結(jié)構(gòu)表達(dá)式語句while語句的執(zhí)行5.3結(jié)構(gòu)化程序設(shè)計(jì)函數(shù)是C語言程序的基本組成單位。它不僅可以實(shí)現(xiàn)程序的模塊化,使程序設(shè)計(jì)變得簡單和直觀,提高易讀性和可維護(hù)性,而且還可以把程序中普通用到的一些計(jì)算或操作編成通用的函數(shù),以供隨時調(diào)用,這樣可以大大地減輕程序員的代碼工作量。C語言=主函數(shù)main()+若干個函數(shù)組成函數(shù)可被任意調(diào)用;函數(shù)調(diào)用自己則產(chǎn)生遞歸12/1/2022495.3結(jié)構(gòu)化程序設(shè)計(jì)函數(shù)是C語言程序的基本組成單位。它不僅5.3結(jié)構(gòu)化程序設(shè)計(jì)指針point學(xué)習(xí)C語言,如不能用指針編寫有效、正確和靈活的程序,可以認(rèn)為沒有學(xué)好C語言指針、地址、數(shù)組及其相互關(guān)系是C語言中最有特色的部分。規(guī)范地使用指針,可使程序達(dá)到簡單明了不但要學(xué)會如何正確地使用指針,而且要學(xué)會在各種情況下正確地使用指針變量12/1/2022505.3結(jié)構(gòu)化程序設(shè)計(jì)指針point12/1/2022505.3結(jié)構(gòu)化程序設(shè)計(jì)數(shù)組數(shù)組是有序數(shù)據(jù)的集合。數(shù)組中的元素具有相同的數(shù)據(jù)類型和名字,以不同的下標(biāo)相區(qū)分,稱為數(shù)組元素。使用數(shù)組時,先要進(jìn)行定義,然后才能使用。a[0]a[1]a[2]a[3]a[4]數(shù)組a的示意圖12/1/2022515.3結(jié)構(gòu)化程序設(shè)計(jì)數(shù)組a[0]a[1]a[2]a[3]a5.4面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο缶哂腥缦聝?yōu)勢:抽象性,能很好地表達(dá)任何復(fù)雜的數(shù)據(jù)類型,亦允許用戶靈活地定義自己所需的數(shù)據(jù)類型。封裝性,對象作為編程中的單元,滿足模塊獨(dú)立性高的要求,再加上繼承性和多態(tài)性,更有助于簡化大型軟件重復(fù)定義的模塊??芍赜眯裕蟠筇岣吡舜笮蛙浖目煽啃院烷_發(fā)效率。12/1/2022525.4面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο缶哂腥缦聝?yōu)勢:12/1/20什么是面向?qū)ο??Coad和Yourdon給出了一個定義:“面向?qū)ο?對象+類+繼承+消息”如果一個軟件系統(tǒng)是使用這樣4個概念設(shè)計(jì)和實(shí)現(xiàn)的,則認(rèn)為這個軟件系統(tǒng)是面向?qū)ο蟮?。一個面向?qū)ο蟮某绦虻拿恳怀煞輵?yīng)是對象,計(jì)算是通過新的對象的建立和對象之間的消息傳送來執(zhí)行的。12/1/202253什么是面向?qū)ο??Coad和Yourdon給出了一個定義:“面對象object對象是面向?qū)ο箝_發(fā)模式的基本成份每個對象可用它本身的一組屬性和它可以執(zhí)行的一組操作來定義。屬性一般只能通過執(zhí)行對象的操作來改變。操作又稱為方法或服務(wù),它描述了對象執(zhí)行的功能,若通過消息傳遞,還可以為其它對象使用。12/1/202254對象object對象是面向?qū)ο箝_發(fā)模式的基本成份12/1/2類class類是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對象的集合。類的定義包括一組數(shù)據(jù)屬性和在數(shù)據(jù)上的一組合法操作。類定義可以視為一個具有類似特性與共同行為的對象的模板,可用來產(chǎn)生對象在一個類中,每個對象都是類的實(shí)例Instance,它們都可使用類中的函數(shù)12/1/202255類class類是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對象的集合。對象實(shí)現(xiàn)了數(shù)據(jù)與操作的結(jié)合行為Behavior——說明這個對象能做什么,就是對象能進(jìn)行什么操作,由方法或函數(shù)描述。狀態(tài)State——當(dāng)對象施加方法時對象的反映,通常用數(shù)據(jù)描述。標(biāo)識Identity——區(qū)別于其它對象標(biāo)志,每一個對象有唯一的ID。12/1/202256對象實(shí)現(xiàn)了數(shù)據(jù)與操作的結(jié)合行為Behavior——說明這個對對象實(shí)現(xiàn)了數(shù)據(jù)與操作的結(jié)合(續(xù))改變傳統(tǒng)方法中將數(shù)據(jù)與操作(亦稱函數(shù)或過程)相分離的做法,實(shí)現(xiàn)了將數(shù)據(jù)與操作封裝在對象的統(tǒng)一體中。對象具有獨(dú)立性和自治性,其內(nèi)部狀態(tài)不受或很少受外界的影響。12/1/202257對象實(shí)現(xiàn)了數(shù)據(jù)與操作的結(jié)合(續(xù))改變傳統(tǒng)方法中將數(shù)據(jù)與操作(每架飛機(jī)都是一個具體的對象,如飛豹。對象與類de示例12/1/202258每架飛機(jī)都是一個具體的對象,如飛豹。對象與類de示例12/1抽取飛機(jī)共同的特性,形成類:凡是飛機(jī)都能在空中飛行,具有改變飛行方向、控制飛行高度和速度的操作特性;凡是飛機(jī)都有機(jī)名、機(jī)型、飛行高度、飛行速度等數(shù)據(jù),用以描述飛機(jī)的結(jié)構(gòu)性能飛機(jī)還有嚴(yán)格的飛行安全約束規(guī)則,如飛行條件、起飛與降落條件等。12/1/202259抽取飛機(jī)共同的特性,形成類:12/1/202259封裝面向?qū)ο缶幊讨心K的基本單元是類。類將數(shù)據(jù)和處理數(shù)據(jù)的過程封裝為一個有機(jī)的整體。相比之下,面向過程編程中模塊的基本單元是過程,數(shù)據(jù)處理在過程中進(jìn)行,通過給函數(shù)傳遞參數(shù)然后獲得一個函數(shù)返回值。12/1/202260封裝面向?qū)ο缶幊讨心K的基本單元是類。類將數(shù)據(jù)和處理數(shù)據(jù)的過概念封裝和信息隱蔽概念封裝和信息隱蔽,使得類具有更大的獨(dú)立性。在任一時刻都可以在類的界面上增加新的操作,并能夠修改實(shí)現(xiàn),以改進(jìn)性能,或引入原來設(shè)計(jì)中沒有的新服務(wù)為便于類的調(diào)整,應(yīng)盡量做到定義與實(shí)現(xiàn)分離。對一個類的共有界面的實(shí)現(xiàn)所做的多次修改不應(yīng)影響利用它的那些類。12/1/202261概念封裝和信息隱蔽概念封裝和信息隱蔽,使得類具有更大的獨(dú)立性5.4面向?qū)ο蟪绦蛟O(shè)計(jì)繼承Inheritance一個類可以有父類superclass,也可以有子類subclass。每個“子類”都可以繼承“類”的屬性和方法。這種低層類繼承高層類的屬性和方法就叫做繼承繼承是指在類中,基于層次的關(guān)系共享屬性和操作。一個類可以被細(xì)化為子類,每個子類繼承父類的所有屬性,也可以增加它獨(dú)有的屬性。12/1/2022625.4面向?qū)ο蟪绦蛟O(shè)計(jì)繼承Inheritance12/1/類層次的結(jié)構(gòu)繼承人身份證號:整數(shù)姓名:字符串學(xué)生學(xué)號:整數(shù)校名:字符串大學(xué)生專業(yè):字符串入學(xué)年月:整數(shù)作為人作為學(xué)生作為大學(xué)生身份證號:12345姓名:張三學(xué)號:08001校名:軟件學(xué)院專業(yè):軟件技術(shù)入學(xué)年月:2008.9實(shí)例:一位大學(xué)生12/1/202263類層次的結(jié)構(gòu)繼承人學(xué)生大學(xué)生作為人身份證號5.4面向?qū)ο蟪绦蛟O(shè)計(jì)繼承12/1/2022645.4面向?qū)ο蟪绦蛟O(shè)計(jì)繼承12/1/2022645.5軟件工程softwareengineering弗里茲.鮑爾定義:“軟件工程是為了經(jīng)濟(jì)地獲得能夠在實(shí)際機(jī)器上有效運(yùn)行的可靠軟件而建立和使用的一系列完善的工程化原則”1983年IEEE定義:“軟件工程是開發(fā)、運(yùn)行、維護(hù)和修復(fù)軟件的系統(tǒng)方法”“軟件”定義:計(jì)算機(jī)程序、方法、規(guī)則、相關(guān)的文檔資料以及在計(jì)算機(jī)上運(yùn)行時所必需的數(shù)據(jù)。強(qiáng)調(diào)工程化重要性12/1/2022655.5軟件工程softwareengineering弗里軟件工程三要素:方法、工具和過程方法強(qiáng)調(diào)“如何做”。包括諸如項(xiàng)目計(jì)劃與估算、需求分析、數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)總體結(jié)構(gòu)的設(shè)計(jì)、算法過程的設(shè)計(jì)、編碼、測試以及維護(hù)等。工具為方法提供自動的或半自動的軟件支撐環(huán)境。計(jì)算機(jī)輔助軟件工程CASE將各種軟件工具、開發(fā)機(jī)器和一個存放開發(fā)過程信息的工程數(shù)據(jù)庫組合成一個軟件開發(fā)支撐系統(tǒng),即軟件工程環(huán)境。12/1/202266軟件工程三要素:方法、工具和過程方法強(qiáng)調(diào)“如何做”。包括諸軟件工程三要素:方法、工具和過程過程則是將軟件工程的方法和工具綜合起來以達(dá)到合理、及時地進(jìn)行計(jì)算機(jī)軟件開發(fā)的目的。過程定義了方法使用的順序、要求交付的文檔資料、為保證質(zhì)量和協(xié)調(diào)變化所需要的管理、及軟件開發(fā)各個階段完成的里程碑。12/1/202267軟件工程三要素:方法、工具和過程過程則是將軟件工程的方法和工5.5軟件工程軟件的生命周期的瀑布模型計(jì)劃需求分析設(shè)計(jì)編碼測試運(yùn)行維護(hù)定義階段維護(hù)階段開發(fā)階段12/1/2022685.5軟件工程軟件的生命周期的瀑布模型計(jì)劃需求分析設(shè)計(jì)編碼演化模型由于在項(xiàng)目開發(fā)的初始階段人們對軟件的需求認(rèn)識常常不夠清晰,因而使得開發(fā)項(xiàng)目難于做到一次開發(fā)成功,出現(xiàn)返工再開發(fā)在所難免,做兩次。第一次只是試驗(yàn)開發(fā),其目標(biāo)只是在于探索可行性,弄清軟件需求;第二次則在此基礎(chǔ)上獲得較為滿意的軟件產(chǎn)品。12/1/202269演化模型由于在項(xiàng)目開發(fā)的初始階段人們對軟件的需求認(rèn)識常常不夠螺旋模型螺旋模型沿著螺線旋轉(zhuǎn),在四個象限上分別表達(dá)四個方面的活動:制定計(jì)劃:確定軟件目標(biāo),選定實(shí)施方案,弄清項(xiàng)目開發(fā)的限制風(fēng)險分析:分析所選方案,考慮如何識別和消除風(fēng)險實(shí)施工程:實(shí)施軟件開發(fā)客戶評估:評價開發(fā)工作,提出修正建議。12/1/202270螺旋模型螺旋模型沿著螺線旋轉(zhuǎn),在四個象限上分別表達(dá)四個方面的
12/1/20227112/1/202271噴泉模型主要支持面向?qū)ο箝_發(fā)。系統(tǒng)某個部分常常重復(fù)工作多次,相關(guān)功能在每次迭代中隨之加入演進(jìn)的系統(tǒng)重復(fù)演進(jìn)無間隙分析、設(shè)計(jì)和編碼各階段間無明顯界限12/1/202272噴泉模型主要支持面向?qū)ο箝_發(fā)。系統(tǒng)某個部分常常重復(fù)工作多次,12/1/20227312/1/202273軟件工程的原則可驗(yàn)證性:易于檢查、測試、評審?fù)陚湫裕翰粊G失任何重要成分一致性:保持概念、符號、術(shù)語、接口一致確定性無歧義局部化:模塊間松散;強(qiáng)內(nèi)聚模塊化:有助于封裝和抽象信息隱蔽(封裝)與實(shí)現(xiàn)分離,采用接口抽象:抽取事物最基本的特性和行為12/1/202274軟件工程的原則可驗(yàn)證性:易于檢查、測試、評審?fù)陚湫裕翰粊G失任軟件過程管理和
能力成熟度模型Level1InitialLevel2RepeatableLevel3DefinedLevel4ManagedLevel5Optimizing改進(jìn)過程規(guī)程改進(jìn)過程定義改進(jìn)過程度量標(biāo)準(zhǔn)改進(jìn)過程變化管理特征:依賴當(dāng)前的員工不可預(yù)測和無規(guī)則的過程特征:可重復(fù)的項(xiàng)目管理,對同類的項(xiàng)目有一致的時間和工作預(yù)測特征:管理和工程化過程都得到規(guī)范和遵守特征:用于控制過程的度量標(biāo)準(zhǔn)特征:適當(dāng)時候的連續(xù)過程改進(jìn)12/1/202275軟件過程管理和
能力成熟度模型Level1Level2L習(xí)題(p96)6.什么是結(jié)構(gòu)化程序,結(jié)構(gòu)化程序包含幾種基本結(jié)構(gòu),分別是什么,為什么要提倡結(jié)構(gòu)化程序設(shè)計(jì)?13.說明對象、類和類結(jié)構(gòu)、封裝、繼承等面向?qū)ο蟮母拍睢?9.簡述軟件生命周期包含的幾個階段及其主要任務(wù)。12/1/202276習(xí)題(p96)6.什么是結(jié)構(gòu)化程序,結(jié)構(gòu)化程序包含幾種基本第5章計(jì)算機(jī)軟件開發(fā)主要內(nèi)容:算法與數(shù)據(jù)結(jié)構(gòu);程序設(shè)計(jì)基本概念;結(jié)構(gòu)化程序設(shè)計(jì);面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念;軟件工程;數(shù)據(jù)庫系統(tǒng)概述。重點(diǎn):算法與數(shù)據(jù)結(jié)構(gòu);面相對向程序設(shè)計(jì);軟件工程;數(shù)據(jù)庫設(shè)計(jì)與查詢。難點(diǎn):算法與數(shù)據(jù)結(jié)構(gòu),類與對象,封裝與繼承,軟件工程的思想,數(shù)據(jù)模型,SQL12/1/202277第5章計(jì)算機(jī)軟件開發(fā)主要內(nèi)容:算法與數(shù)據(jù)結(jié)構(gòu);程序設(shè)計(jì)基本5.6數(shù)據(jù)庫系統(tǒng)概述數(shù)據(jù)庫系統(tǒng)的基本概念數(shù)據(jù)模型數(shù)據(jù)庫管理系統(tǒng)結(jié)構(gòu)化查詢語言SQL常用關(guān)系式數(shù)據(jù)庫管理系統(tǒng)ODBC信息系統(tǒng)12/1/2022785.6數(shù)據(jù)庫系統(tǒng)概述數(shù)據(jù)庫系統(tǒng)的基本概念12/1/2022精品課件!12/1/202279精品課件!12/1/202279精品課件!12/1/202280精品課件!12/1/202280類與工廠的類比方法實(shí)例變量類工廠新實(shí)例創(chuàng)建新對象的請求(初始輸入?yún)?shù))其含義是調(diào)用“new”操作符,在Company類中創(chuàng)建新對象Lenovo公司,Lenovo公司的地址是“海淀區(qū)科學(xué)院南路6號。通過這個操作后,就建立起“公司”類的一個新實(shí)例。12/1/202281類與工廠的類比方法類工廠新實(shí)例創(chuàng)建新對象的請求其含義第5章
計(jì)算機(jī)軟件開發(fā)
(第8、9講)講授:黃瑞興12/1/202282第5章
計(jì)算機(jī)軟件開發(fā)
(第8、9講)講授:黃瑞興1第5章計(jì)算機(jī)軟件開發(fā)5.1算法與數(shù)據(jù)結(jié)構(gòu)5.2程序設(shè)計(jì)的基本概念5.3結(jié)構(gòu)化程序設(shè)計(jì)5.4面向?qū)ο蟪绦蛟O(shè)計(jì)5.5軟件工程5.6數(shù)據(jù)庫系統(tǒng)概述12/1/202283第5章計(jì)算機(jī)軟件開發(fā)5.1算法與數(shù)據(jù)結(jié)構(gòu)12/1/5.1算法與數(shù)據(jù)結(jié)構(gòu)算法與數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)程序的兩個最基本的概念。瑞士著名計(jì)算機(jī)科學(xué)家尼可萊沃思在1976年曾提出算法與數(shù)據(jù)結(jié)構(gòu)二者的關(guān)系:
算法+數(shù)據(jù)結(jié)構(gòu)=程序準(zhǔn)確地說,一個程序規(guī)定了某個數(shù)據(jù)結(jié)構(gòu)上的一個算法。失算起床穿衣沖涼吃飯上課12/1/2022845.1算法與數(shù)據(jù)結(jié)構(gòu)算法與數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)程序的兩個最基本5.1.1算法的基本概念“算法(algorithms)”是什么?韋氏新世界詞典將“算法”定義為:解決某種問題的任何專門的方法。如公元前300年歐幾里得在其著作《幾何原本》中關(guān)于求兩個數(shù)的最大公約數(shù)的輾轉(zhuǎn)相除法就是著名的歐幾里德算法。12/1/2022855.1.1算法的基本概念“算法(algorithms)”是歐幾里德算法給定兩個正整數(shù)m和n求它們的最大公因子(即能同時整除m和n
的最大正整數(shù))步驟:以n除m并令所得余數(shù)為r,r必小于n;若r=0算法結(jié)束,輸出結(jié)果n,否則繼續(xù)步驟3;將n置換為m,r置換為n并返回步驟1。歐幾里德算法既表述了一個數(shù)的求解過程,同時又表述了一個判定過程。12/1/202286歐幾里德算法給定兩個正整數(shù)m和n求它們的最大公因子(即能同時
漢諾塔問題每次只能移動一個盤子只能在三根柱子上移動,不能放在其他地方移動時必須始終保持大盤在下,小盤在上當(dāng)這64個盤子全部移到第三根柱子上,世界末日就要到了。漢諾塔問題只能用遞歸方法而不能用其他方法來求解。所謂遞歸就是將一個較大的問題歸結(jié)為一個或多個比原問題簡單,且在結(jié)構(gòu)上與原問題相同的子問題的求解方法。12/1/202287漢諾塔問題每次只能移動一個盤子12/1/202265.1.1算法的基本概念著名計(jì)算機(jī)科學(xué)家克努特把算法的性質(zhì)歸納為有窮性:算法必須在執(zhí)行有限步之后結(jié)束。即必須在有限時間內(nèi)完成。確定性:算法中的每個步驟都必須有明確的定義,不允許存在多義性和模棱兩可。能行性:算法中描述的每步操作都應(yīng)是可執(zhí)行的。例如,當(dāng)B=0時A/B就無法執(zhí)行,不符合能行性的要求。輸入:一個算法必須有0個(自動生成初始數(shù)據(jù))或多個輸入。輸出:一個算法必須產(chǎn)生一個或多個輸出12/1/2022885.1.1算法的基本概念著名計(jì)算機(jī)科學(xué)家克努特把算法的性質(zhì)自然語言是人們?nèi)粘K玫恼Z言,如英語、漢語等優(yōu)點(diǎn):自然語言所描述的算法通俗易懂、靈活自由。缺點(diǎn):①歧義性,容易導(dǎo)致算法執(zhí)行的不確定性;②串行性,一個算法中循環(huán)和分支較多時就很難清晰地表示出來;③不便轉(zhuǎn)換成用計(jì)算機(jī)程序設(shè)計(jì)語言表示。5.1.2算法的表示-自然語言12/1/202289自然語言是人們?nèi)粘K玫恼Z言,如英語、漢語等5.1.2算法流程圖是采用一些的圖框符號來描述算法的邏輯結(jié)構(gòu),每個圖框符號表示不同性質(zhì)的操作。ANSI在上世紀(jì)60年代頒布流程圖的標(biāo)準(zhǔn),規(guī)定用來表示程序中各種操作的流程圖符號。5.1.2算法的表示-流程圖起止框輸入/輸出框判斷框處理框注釋框連接線連接點(diǎn)12/1/202290流程圖是采用一些的圖框符號來描述算法的邏輯結(jié)構(gòu),每個圖框符號5.1.2算法的表示例3.2求5!步驟1:令p=1步驟2:令i=2步驟3:使pXi,成績依然存入p中,可表示為p←pxi步驟4:使i的值加1,可表示為i←i+1步驟5:如果i≤5,則返回步驟3的位置,從步驟3開始再次執(zhí)行本算法。如果i>5,則算法結(jié)束。流程圖開始i>5p←1i←2p←pxii←i+1結(jié)束FT12/1/2022915.1.2算法的表示例3.2求5!流程圖開始i>5p偽代碼是一種非正式的語言,它是用介于自然語言和計(jì)算機(jī)語言之間的文字和符號來描述算法比真正的程序代碼更簡明,更貼近自然語言書寫方便、格式緊湊、易于理解,便于轉(zhuǎn)化為計(jì)算機(jī)語言算法(即程序)5.1.2算法的表示-偽代碼12/1/202292偽代碼是一種非正式的語言,它是用介于自然語言和計(jì)算機(jī)語言之間5.1.2算法的表示用偽代碼表示例3.2
求5!的算法Begin
置p的初值為1 置i的初值為2
while
i≤5
p←pxi
i←i+1
endwhile 打印p的值End12/1/2022935.1.2算法的表示用偽代碼表示例3.2求5!的算法125.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念數(shù)據(jù):是描述客觀事物的數(shù)字、字符及所有能輸入到計(jì)算機(jī)中并被計(jì)算機(jī)程序處理的符號的集合。數(shù)據(jù)元素:組成數(shù)據(jù)的基本單位稱為數(shù)據(jù)元素。通常將數(shù)據(jù)元素作為一個整體進(jìn)行處理。數(shù)據(jù)元素由若干個數(shù)據(jù)項(xiàng)組成,稱數(shù)據(jù)元素為記錄。數(shù)據(jù)項(xiàng)是數(shù)據(jù)的不可分割的最小單位。最簡單的數(shù)據(jù)元素僅含有一個數(shù)據(jù)項(xiàng)。12/1/2022945.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念數(shù)據(jù):是描述客觀事物的數(shù)字、字5.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念數(shù)據(jù)結(jié)構(gòu):是指數(shù)據(jù)之間的相互關(guān)系,即數(shù)據(jù)的組織形式。數(shù)據(jù)結(jié)構(gòu)的研究內(nèi)容:程序設(shè)計(jì)中計(jì)算機(jī)所操作的對象及相互間的關(guān)系和運(yùn)算,即數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)以及數(shù)據(jù)結(jié)構(gòu)的運(yùn)算。數(shù)據(jù)的邏輯結(jié)構(gòu)是指數(shù)據(jù)元素之間的邏輯關(guān)系。邏輯結(jié)構(gòu)有:線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖狀結(jié)構(gòu)(或稱網(wǎng)狀結(jié)構(gòu))。12/1/2022955.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念數(shù)據(jù)結(jié)構(gòu):是指數(shù)據(jù)之間的相互關(guān)5.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念數(shù)據(jù)的存儲結(jié)構(gòu)是指數(shù)據(jù)在存儲器中的存儲方式。順序存儲結(jié)構(gòu)借助元素在存儲器中的相對位置來表示數(shù)據(jù)元素的邏輯關(guān)系鏈?zhǔn)酱鎯Y(jié)構(gòu)借助指針來表示數(shù)據(jù)元素之間的邏輯關(guān)系,通常在數(shù)據(jù)元素上增加一個或多個指針類型的屬性來實(shí)現(xiàn)這種表示方式。12/1/2022965.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念數(shù)據(jù)的存儲結(jié)構(gòu)是指數(shù)據(jù)在存儲器數(shù)據(jù)結(jié)構(gòu)的基本運(yùn)算(操作)①建立數(shù)據(jù)結(jié)構(gòu)②撤消數(shù)據(jù)結(jié)構(gòu)③插入數(shù)據(jù)元素。在一個給定的數(shù)據(jù)結(jié)構(gòu)中,在指定位置上增添一個新的元素。④刪除數(shù)據(jù)元素。對一個給定的數(shù)據(jù)結(jié)構(gòu),刪除某個指定節(jié)點(diǎn)。⑤更新數(shù)據(jù)元素。在一個給定的數(shù)據(jù)結(jié)構(gòu)中,改變某個元素的值,它等于插入和刪除兩個操作的組合。12/1/202297數(shù)據(jù)結(jié)構(gòu)的基本運(yùn)算(操作)①建立數(shù)據(jù)結(jié)構(gòu)12/1/2022數(shù)據(jù)結(jié)構(gòu)的基本運(yùn)算(操作)⑥查找數(shù)據(jù)元素。在一個給定的數(shù)據(jù)結(jié)構(gòu)中,找出滿足指定條件的元素。⑦排序。對給定的數(shù)據(jù)結(jié)構(gòu)中的所有的元素按照一定的條件將它們重新排列順序⑧遍歷。在一個給定的數(shù)據(jù)結(jié)構(gòu)中,從第一個結(jié)點(diǎn)開始,依次訪問各個結(jié)點(diǎn)。每個結(jié)點(diǎn)只能被訪問一次。⑨判定某個數(shù)據(jù)結(jié)構(gòu)是否為空或是否已達(dá)到最大允許的容量。⑩統(tǒng)計(jì)數(shù)據(jù)元素的個數(shù)。12/1/202298數(shù)據(jù)結(jié)構(gòu)的基本運(yùn)算(操作)⑥查找數(shù)據(jù)元素。在一個給定的數(shù)據(jù)5.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的目的可簡化算法節(jié)省空間提高效率程序設(shè)計(jì)中選擇適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)12/1/2022995.1.3數(shù)據(jù)結(jié)構(gòu)的基本概念學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的目的可簡化算法5.1.4線性表定義:線性表的邏輯結(jié)構(gòu)是n個數(shù)據(jù)元素的有限序列:(a1,a2,a3,…,an)邏輯結(jié)構(gòu)特征:數(shù)據(jù)元素之間呈線性關(guān)系第1個:無前驅(qū),有1個后繼;最后一個:有1個前驅(qū),無后繼;其它:有1個前驅(qū),有1個后繼。存儲結(jié)構(gòu),一類是順序(靜態(tài)存儲結(jié)構(gòu)),另一類是鏈?zhǔn)?動態(tài)存儲結(jié)構(gòu))除書上所列舉的26個英文字母、0-9數(shù)字字符組成線性表。還能舉出其他的線性表嗎?12/1/20221005.1.4線性表定義:線性表的邏輯結(jié)構(gòu)是n個數(shù)據(jù)元素的有限5.1.4線性表順序存儲結(jié)構(gòu)線性表的插入、刪除過程1518222526291112插入2012/1/20221015.1.4線性表順序存儲結(jié)構(gòu)線性表的插入、刪除過程15185.1.4線性表順序存儲結(jié)構(gòu)線性表的插入、刪除過程1518222526291112插入2020刪除1212/1/20221025.1.4線性表順序存儲結(jié)構(gòu)線性表的插入、刪除過程15185.1.4線性表順序存儲結(jié)構(gòu)線性表的插入、刪除過程11刪除121518222526292012/1/20221035.1.4線性表順序存儲結(jié)構(gòu)線性表的插入、刪除過程11刪除5.1.4線性表鏈?zhǔn)酱鎯€性表的插入、刪除插入c刪除d12/1/20221045.1.4線性表鏈?zhǔn)酱鎯€性表的插入、刪除插入c刪除d125.1.5棧與隊(duì)列棧是限定僅在表尾進(jìn)行插入和刪除操作的線性表。因此,對棧來說,表尾端有其特殊的含義,稱為棧頂,相應(yīng)的表頭端稱為棧底。不含元素的空表稱為空棧棧又稱后進(jìn)先出(LastInFirstOut)的線性表,簡稱LIFO。12/1/20221055.1.5棧與隊(duì)列棧是限定僅在表尾進(jìn)行插入和刪除操作的線性5.1.5棧與隊(duì)列棧的示意圖棧底棧頂進(jìn)棧出棧a1a2…an-1an12/1/20221065.1.5棧與隊(duì)列棧的示意圖棧底棧頂進(jìn)棧出棧a1a2…an5.1.5棧與隊(duì)列棧頂指針和數(shù)據(jù)元素間的關(guān)系top=0top=1top=2top=3top=4top=5ABCDE12/1/20221075.1.5棧與隊(duì)列棧頂指針和數(shù)據(jù)元素間的關(guān)系top=0to5.1.5棧與隊(duì)列棧的鏈?zhǔn)酱鎯Y(jié)構(gòu)——鏈棧示意圖棧頂指針…棧頂棧底12/1/20221085.1.5棧與隊(duì)列棧的鏈?zhǔn)酱鎯Y(jié)構(gòu)——鏈棧示意圖棧頂指針…5.1.5棧與隊(duì)列隊(duì)列是一種先進(jìn)先出(FirstInFirstOut)的線性表,簡稱為FIFO。隊(duì)列只允許在表的一端進(jìn)行插入操作,而在表的另一端進(jìn)行刪除操作。允許插入元素的表端稱為隊(duì)尾,允許刪除元素的表端稱為隊(duì)頭。類似于日常生活中的排隊(duì),刪除元素從隊(duì)頭進(jìn)行、插入元素從隊(duì)尾進(jìn)行,最早進(jìn)入隊(duì)列的元素最早離開。12/1/20221095.1.5棧與隊(duì)列隊(duì)列是一種先進(jìn)先出(FirstInF5.1.5棧與隊(duì)列隊(duì)列示意圖a1a2…an隊(duì)頭隊(duì)尾入隊(duì)列出隊(duì)列12/1/20221105.1.5棧與隊(duì)列隊(duì)列示意圖a1a2…an隊(duì)頭隊(duì)尾入隊(duì)列出5.1.6樹與圖樹:非線性結(jié)構(gòu)(有樹和二叉樹)。非空樹有且僅有一個根結(jié)點(diǎn)。結(jié)點(diǎn)擁有子結(jié)點(diǎn)的個數(shù)稱結(jié)點(diǎn)的度。ABFLKEDGHIJMC層次1234ABC的度是多少?12/1/20221115.1.6樹與圖樹:非線性結(jié)構(gòu)(有樹和二叉樹)。非空樹有且5.1.6樹與圖圖:數(shù)據(jù)元素之間的關(guān)系可以是任意的13214526有向圖無向圖412/1/20221125.1.6樹與圖圖:數(shù)據(jù)元素之間的關(guān)系可以是任意的13215.1.7算法的設(shè)計(jì)算法的設(shè)計(jì)目標(biāo)正確性:能無誤地處理合法輸入數(shù)據(jù),得到滿足要求的結(jié)果??勺x性:便于人們閱讀和交流。健壯性:對非法輸入的數(shù)據(jù)能作出適當(dāng)?shù)姆磻?yīng)和處理。效率與存儲量:衡量算法的執(zhí)行時間及所需的最大存儲空間。12/1/20221135.1.7算法的設(shè)計(jì)算法的設(shè)計(jì)目標(biāo)12/1/2022325.1.7算法的設(shè)計(jì)算法設(shè)計(jì)的基本策略思想分割求解法:把一個大問題劃分為原問題的較小子問題,先求出各子問題的解答,然后把各子問題的解答合并成整個問題的解。動態(tài)規(guī)劃法:對所有的子問題都進(jìn)行解答,每個子問題的解決依賴于一系列子問題的結(jié)果。如何找出后面的子問題,要依賴于前面一系列子問題的遞推關(guān)系式,這就是動態(tài)規(guī)劃策略的核心。12/1/20221145.1.7算法的設(shè)計(jì)算法設(shè)計(jì)的基本策略思想12/1/2025.1.7算法的設(shè)計(jì)算法設(shè)計(jì)的基本策略思想子目標(biāo)法(倒推法):從某個已知的特定解出發(fā),反過來求這個解與已知條件之間存在的關(guān)系,以得到一般解的方法圖的搜索法:把問題的求解過程用圖或樹這種結(jié)構(gòu)來描述。回溯法:先試一試某一操作,如果以后發(fā)現(xiàn)這個操作不適合,則允許退回去,另選一個操作來進(jìn)行。本質(zhì)是一種搜索算法。12/1/20221155.1.7算法的設(shè)計(jì)算法設(shè)計(jì)的基本策略思想12/1/202習(xí)題(p69)1.什么是算法,算法應(yīng)具備哪些特性,為什么?(p70)3.幾種常用的算法表示方法是什么,各有什么特點(diǎn)?10.試比較線性表、棧和隊(duì)列三種數(shù)據(jù)結(jié)構(gòu)。14.好的算法應(yīng)滿足哪些主要的設(shè)計(jì)目標(biāo)?12/1/2022116習(xí)題(p69)12/1/2022355.2程序設(shè)計(jì)的基本概念什么是程序設(shè)計(jì)Programming?程序設(shè)計(jì)是給出解決特定問題程序的過程,是指設(shè)計(jì)、編制、調(diào)試程序的方法和過程。是軟件構(gòu)造活動中的重要組成部分。程序設(shè)計(jì)往往以某種程序設(shè)計(jì)語言為工具,給出這種語言下的程序。程序設(shè)計(jì)過程應(yīng)當(dāng)包括分析、設(shè)計(jì)、編碼、測試、排錯等不同階段。專業(yè)的程序設(shè)計(jì)人員常被稱為程序員。12/1/20221175.2程序設(shè)計(jì)的基本概念什么是程序設(shè)計(jì)Programmin5.2程序設(shè)計(jì)的基本概念5.2.1程序設(shè)計(jì)語言的分類機(jī)器語言(1GL)優(yōu)點(diǎn):可以被計(jì)算機(jī)直接理解和執(zhí)行,執(zhí)行速度快,且占用內(nèi)存少。缺點(diǎn):通用性差、程序可讀性很差、不易于調(diào)試和維護(hù)。12/1/20221185.2程序設(shè)計(jì)的基本概念5.2.1程序設(shè)計(jì)語言的分類125.2.1程序設(shè)計(jì)語言的分類匯編語言(2GL)用助記符表示機(jī)器指令操作碼和地址碼。助記符是一些有意義的英文單詞的縮寫和符號。如用ADD表示加法addition、用MOV表示數(shù)據(jù)的傳送move等優(yōu)點(diǎn):可用匯編語言寫出語句少、質(zhì)量高、執(zhí)行速度快的程序缺點(diǎn):匯編語言仍是一種面向機(jī)器的語言,通用性差。12/1/20221195.2.1程序設(shè)計(jì)語言的分類匯編語言(2GL)12/1/25.2.1程序設(shè)計(jì)語言的分類高級語言(3GL)按照一定的“語法規(guī)則”構(gòu)建程序。用英語單詞表示的關(guān)鍵字和數(shù)學(xué)符號組成。簡化開發(fā)應(yīng)用程序的過程。高級語言是面向算法過程的語言。即不但要告訴計(jì)算機(jī)“做什么”,還要告訴計(jì)算機(jī)“怎么做”優(yōu)點(diǎn):程序表達(dá)直觀,可讀性好,與具體機(jī)器無關(guān),便于移植,通用性好12/1/20221205.2.1程序設(shè)計(jì)語言的分類高級語言(3GL)12/1/2高級語言與翻譯系統(tǒng)通常把用高級語言編寫的程序稱為源程序,把用二進(jìn)制代碼表示的程序稱為機(jī)器代碼程序或者目標(biāo)程序.計(jì)算機(jī)只能識別和執(zhí)行由二進(jìn)制代碼組成的機(jī)器語言,因此源程序必須經(jīng)過語言處理程序
翻譯成目標(biāo)程序才能被計(jì)算機(jī)執(zhí)行.具有翻譯功能的語言處理程序:編譯程序(又稱編譯器)和解釋程序(又稱解釋器)12/1/2022121高級語言與翻譯系統(tǒng)通常把用高級語言編寫的程序稱為源程序,把用第四代語言4GL是一種非過程化的語言。只需說明所要完成的加工和條件,給出輸入數(shù)據(jù)并指明輸出形式,就能得到所需結(jié)果。優(yōu)點(diǎn):簡單易學(xué),編程省時省力,無需很多程序設(shè)計(jì)知識就能開發(fā)應(yīng)用程序應(yīng)用:目前流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)結(jié)構(gòu)化查詢語言SQL,具有數(shù)據(jù)的查詢、定義、操縱和控制功能。如Oracle、Sybase、MSSQLServer、Access等5.2.1程序設(shè)計(jì)語言的分類12/1/2022122第四代語言4GL是一種非過程化的語言。只需說明所要完成的加工非過程化語言高級語言(過程化語言)解決問題時,必須詳細(xì)描述解決問題的每一步,既要解決“做什么”,又要解決“怎么做”。非過程化語言不必描述繁瑣的解決問題過程,只需告訴計(jì)算機(jī)"做什么"而不必指明"怎么做"特點(diǎn):只指定哪些數(shù)據(jù)被操縱,至于對這些數(shù)據(jù)要執(zhí)行哪些操作,以及這些操作是如何執(zhí)行的,則未被指定。5.2.1程序設(shè)計(jì)語言的分類12/1/2022123非過程化語言高級語言(過程化語言)解決問題時,必須詳細(xì)描述解5.2.1程序設(shè)計(jì)語言的分類第五代語言5GL也是非過程化的語言,它們提供了可視化的圖形界面來生成源代碼。通常第五代語言使用第三代語言或第四代語言的編譯程序來轉(zhuǎn)換得到相應(yīng)的機(jī)器語言程序。有些面向?qū)ο蟮拈_發(fā)工具和網(wǎng)頁開發(fā)工具,如VisualBasic、VisualC++、Java等就屬于第五代語言。12/1/20221245.2.1程序設(shè)計(jì)語言的分類第五代語言5GL12/1/20程序設(shè)計(jì)分類按照結(jié)構(gòu)性質(zhì)分,有結(jié)構(gòu)化程序設(shè)計(jì)與非結(jié)構(gòu)化程序設(shè)計(jì)。前者是指具有結(jié)構(gòu)性的程序設(shè)計(jì)方法與過程。它具有由基本結(jié)構(gòu)構(gòu)成復(fù)雜結(jié)構(gòu)的層次性,后者反之。按照用戶要求分,有過程式程序設(shè)計(jì)與非過程式程序設(shè)計(jì)。前者是指使用過程式程序設(shè)計(jì)語言的程序設(shè)計(jì),后者指非過程式程序設(shè)計(jì)語言的程序設(shè)計(jì)。按照設(shè)計(jì)的成分性質(zhì)分,有順序程序設(shè)計(jì)、并發(fā)程序設(shè)計(jì)、并行程序設(shè)計(jì)、分布式程序設(shè)計(jì)。按照程序設(shè)計(jì)風(fēng)格分,有邏輯式程序設(shè)計(jì)、函數(shù)式程序設(shè)計(jì)、對象式程序設(shè)計(jì)。12/1/2022125程序設(shè)計(jì)分類按照結(jié)構(gòu)性質(zhì)分,有結(jié)構(gòu)化程序設(shè)計(jì)與非結(jié)構(gòu)化程序設(shè)JavaDelphiVisualBASIC、C#、C++C、C++PASCAL5.2.2幾種常見的高級語言COBOLFORTRANBASIC12/1/2022126JavaDelphiVisualBASIC、C#、C++C5.3結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)的思想:任何程序都只依靠三種基本結(jié)構(gòu)的組合實(shí)現(xiàn):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。選擇結(jié)構(gòu)又稱分支結(jié)構(gòu)。由這三種基本結(jié)構(gòu)組成的程序稱為結(jié)構(gòu)化程序強(qiáng)調(diào)程序的結(jié)構(gòu)和可讀性,為緩解軟件危機(jī)作出了重要的貢獻(xiàn)12/1/20221275.3結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)的思想:任何程序都只依靠5.3結(jié)構(gòu)化程序設(shè)計(jì)控制結(jié)構(gòu)表達(dá)式語句1If語句:單分支結(jié)構(gòu)表達(dá)式語句1If-else語句:雙分支結(jié)構(gòu)語句2FTFT一位老學(xué)者曾經(jīng)說過:順續(xù)執(zhí)行的程序都是簡單的;程序的復(fù)雜性往往都體現(xiàn)在條件判斷與循環(huán)控制上。12/1/20221285.3結(jié)構(gòu)化程序設(shè)計(jì)控制結(jié)構(gòu)表達(dá)式語句1If語句:單分支結(jié)5.3結(jié)構(gòu)化程序設(shè)計(jì)控制結(jié)構(gòu)表達(dá)式語句while語句的執(zhí)行流程表達(dá)式2計(jì)算表達(dá)式3for語句的執(zhí)行流程語句FTFT計(jì)算表達(dá)式1For語句的下一條語句比較while、for與do-while12/1/20221295.3結(jié)構(gòu)化程序設(shè)計(jì)控制結(jié)構(gòu)表達(dá)式語句while語句的執(zhí)行5.3結(jié)構(gòu)化程序設(shè)計(jì)函數(shù)是C語言程序的基本組成單位。它不僅可以實(shí)現(xiàn)程序的模塊化,使程序設(shè)計(jì)變得簡單和直觀,提高易讀性和可維護(hù)性,而且還可以把程序中普通用到的一些計(jì)算或操作編成通用的函數(shù),以供隨時調(diào)用,這樣可以大大地減輕程序員的代碼工作量。C語言=主函數(shù)main()+若干個函數(shù)組成函數(shù)可被任意調(diào)用;函數(shù)調(diào)用自己則產(chǎn)生遞歸12/1/20221305.3結(jié)構(gòu)化程序設(shè)計(jì)函數(shù)是C語言程序的基本組成單位。它不僅5.3結(jié)構(gòu)化程序設(shè)計(jì)指針point學(xué)習(xí)C語言,如不能用指針編寫有效、正確和靈活的程序,可以認(rèn)為沒有學(xué)好C語言指針、地址、數(shù)組及其相互關(guān)系是C語言中最有特色的部分。規(guī)范地使用指針,可使程序達(dá)到簡單明了不但要學(xué)會如何正確地使用指針,而且要學(xué)會在各種情況下正確地使用指針變量12/1/20221315.3結(jié)構(gòu)化程序設(shè)計(jì)指針point12/1/2022505.3結(jié)構(gòu)化程序設(shè)計(jì)數(shù)組數(shù)組是有序數(shù)據(jù)的集合。數(shù)組中的元素具有相同的數(shù)據(jù)類型和名字,以不同的下標(biāo)相區(qū)分,稱為數(shù)組元素。使用數(shù)組時,先要進(jìn)行定義,然后才能使用。a[0]a[1]a[2]a[3]a[4]數(shù)組a的示意圖12/1/20221325.3結(jié)構(gòu)化程序設(shè)計(jì)數(shù)組a[0]a[1]a[2]a[3]a5.4面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο缶哂腥缦聝?yōu)勢:抽象性,能很好地表達(dá)任何復(fù)雜的數(shù)據(jù)類型,亦允許用戶靈活地定義自己所需的數(shù)據(jù)類型。封裝性,對象作為編程中的單元,滿足模塊獨(dú)立性高的要求,再加上繼承性和多態(tài)性,更有助于簡化大型軟件重復(fù)定義的模塊。可重用性,大大提高了大型軟件的可靠性和開發(fā)效率。12/1/20221335.4面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο缶哂腥缦聝?yōu)勢:12/1/20什么是面向?qū)ο??Coad和Yourdon給出了一個定義:“面向?qū)ο?對象+類+繼承+消息”如果一個軟件系統(tǒng)是使用這樣4個概念設(shè)計(jì)和實(shí)現(xiàn)的,則認(rèn)為這個軟件系統(tǒng)是面向?qū)ο蟮?。一個面向?qū)ο蟮某绦虻拿恳怀煞輵?yīng)是對象,計(jì)算是通過新的對象的建立和對象之間的消息傳送來執(zhí)行的。12/1/2022134什么是面向?qū)ο??Coad和Yourdon給出了一個定義:“面對象object對象是面向?qū)ο箝_發(fā)模式的基本成份每個對象可用它本身的一組屬性和它可以執(zhí)行的一組操作來定義。屬性一般只能通過執(zhí)行對象的操作來改變。操作又稱為方法或服務(wù),它描述了對象執(zhí)行的功能,若通過消息傳遞,還可以為其它對象使用。12/1/2022135對象object對象是面向?qū)ο箝_發(fā)模式的基本成份12/1/2類class類是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對象的集合。類的定義包括一組數(shù)據(jù)屬性和在數(shù)據(jù)上的一組合法操作。類定義可以視為一個具有類似特性與共同行為的對象的模板,可用來產(chǎn)生對象在一個類中,每個對象都是類的實(shí)例Instance,它們都可使用類中的函數(shù)12/1/2022136類class類是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對象的集合。對象實(shí)現(xiàn)了數(shù)據(jù)與操作的結(jié)合行為Behavior——說明這個對象能做什么,就是對象能進(jìn)行什么操作,由方法或函數(shù)描述。狀態(tài)State——當(dāng)對象施加方法時對象的反映,通常用數(shù)據(jù)描述。標(biāo)識Identity——區(qū)別于其它對象標(biāo)志,每一個對象有唯一的ID。12/1/2022137對象實(shí)現(xiàn)了數(shù)據(jù)與操作的結(jié)合行為Behavior——說明這個對對象實(shí)現(xiàn)了數(shù)據(jù)與操作的結(jié)合(續(xù))改變傳統(tǒng)方法中將數(shù)據(jù)與操作(亦稱函數(shù)或過程)相分離的做法,實(shí)現(xiàn)了將數(shù)據(jù)與操作封裝在對象的統(tǒng)一體中。對象具有獨(dú)立性和自治性,其內(nèi)部狀態(tài)不受或很少受外界的影響。12/1/2022138對象實(shí)現(xiàn)了數(shù)據(jù)與操作的結(jié)合(續(xù))改變傳統(tǒng)方法中將數(shù)據(jù)與操作(每架飛機(jī)都是一個具體的對象,如飛豹。對象與類de示例12/1/2022139每架飛機(jī)都是一個具體的對象,如飛豹。對象與類de示例12/1抽取飛機(jī)共同的特性,形成類:凡是飛機(jī)都能在空中飛行,具有改變飛行方向、控制飛行高度和速度的操作特性;凡是飛機(jī)都有機(jī)名、機(jī)型、飛行高度、飛行速度等數(shù)據(jù),用以描述飛機(jī)的結(jié)構(gòu)性能飛機(jī)還有嚴(yán)格的飛行安全約束規(guī)則,如飛行條件、起飛與降落條件等。12/1/2022140抽取飛機(jī)共同的特性,形成類:12/1/202259封裝面向?qū)ο缶幊讨心K的基本單元是類。類將數(shù)據(jù)和處理數(shù)據(jù)的過程封裝為一個有機(jī)的整體。相比之下,面向過程編程中模塊的基本單元是過程,數(shù)據(jù)處理在過程中進(jìn)行,通過給函數(shù)傳遞參數(shù)然后獲得一個函數(shù)返回值。12/1/2022141封裝面向?qū)ο缶幊讨心K的基本單元是類。類將數(shù)據(jù)和處理數(shù)據(jù)的過概念封裝和信息隱蔽概念封裝和信息隱蔽,使得類具有更大的獨(dú)立性。在任一時刻都可以在類的界面上增加新的操作,并能夠修改實(shí)現(xiàn),以改進(jìn)性能,或引入原來設(shè)計(jì)中沒有的新服務(wù)為便于類的調(diào)整,應(yīng)盡量做到定義與實(shí)現(xiàn)分離。對一個類的共有界面的實(shí)現(xiàn)所做的多次修改不應(yīng)影響利用它的那些類。12/1/2022142概念封裝和信息隱蔽概念封裝和信息隱蔽,使得類具有更大的獨(dú)立性5.4面向?qū)ο蟪绦蛟O(shè)計(jì)繼承Inheritance一個類可以有父類superclass,也可以有子類subclass。每個“子類”都可以繼承“類”的屬性和方法。這種低層類繼承高層類的屬性和方法就叫做繼承繼承是指在類中,基于層次的關(guān)系共享屬性和操作。一個類可以被細(xì)化為子類,每個子類繼
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 前臺工作的職業(yè)發(fā)展路徑計(jì)劃
- 財(cái)務(wù)資金分配計(jì)劃
- 通信行業(yè)月度個人工作計(jì)劃
- 《六盤水市東風(fēng)煤業(yè)有限公司水城區(qū)東風(fēng)煤礦(優(yōu)化重組)礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》評審意見
- 攀枝花駿恒礦業(yè)有限責(zé)任公司爐房箐鐵礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案情況
- 保健植物知識培訓(xùn)課件
- 蛋白還原酸護(hù)理教程
- 小學(xué)信息技術(shù)四年級上冊第5課《 精彩游戲-軟件的下載》教學(xué)設(shè)計(jì)001
- 2025年銅川貨運(yùn)從業(yè)資格證考試模擬考試題庫下載
- 2025年新鄉(xiāng)貨運(yùn)從業(yè)資格證怎么考試
- 2025年中國土木工程集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 2025廣西壯族自治區(qū)考試錄用公務(wù)員(4368人)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 神經(jīng)病 《神經(jīng)病學(xué)》習(xí)題集學(xué)習(xí)課件
- 2025年四川綿陽市科技城新區(qū)下屬國有企業(yè)新投集團(tuán)招聘筆試參考題庫附帶答案詳解
- 教科版三年級下冊科學(xué)全冊單元教材分析
- 2025年國家鐵路局工程質(zhì)量監(jiān)督中心招聘歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《S中學(xué)宿舍樓工程量清單計(jì)價編制(附三維圖)》30000字
- 全國運(yùn)動員注冊協(xié)議書范本(2篇)
- 2024年03月浙江南潯銀行春季招考筆試歷年參考題庫附帶答案詳解
- 執(zhí)行立案申請書模版
- 智能建筑外掛電梯安裝方案
評論
0/150
提交評論