认识程式设计_第1页
认识程式设计_第2页
认识程式设计_第3页
认识程式设计_第4页
认识程式设计_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

认识程式设计程式(Program)是由合乎程式語言語法規則的指令所組成,而程式設計的目的就是透過程式的撰寫與執行來達到使用者的需求。讀者認為程式設計的主要目的只是要「跑」出正確結果,而忽略了包括執行績效或者日後的維護成本,其實這是不清楚程式設計的真正意義。由於程式設計不只是討論編寫程式的功夫而已,而是期望學習到如何組織眾多程式設計師共同參與設計一套大型且符合使用者需求的複雜程式系統。第2页,共60页,2024年2月25日,星期天9-1程式語言簡介「程式語言」人類用來和電腦溝通的語言。程式語言發展的歷史已有半世紀之久,早期的機器語言發展至今,已經邁入到第五代自然語言。每一代的語言都有其特色,並且一直朝著容易使用、除錯與維護功能更強的目標來發展。第3页,共60页,2024年2月25日,星期天演進過程分類不論任何一種語言都有其專有語法、特性、優點及相關應用的領域。依照其演進過程分類如:第4页,共60页,2024年2月25日,星期天機械語言機械語言(MachineLanguage)是由1和0兩種符號構成,是最早期的程式語言,也是電腦能夠直接閱讀與執行的基本語言,也就是任合程式或語言在執行前都必須被轉換為機械語言。10111001(設定變數A)00000010(將A設定為數值2)第5页,共60页,2024年2月25日,星期天組合語言組合語言(AssemblyLanguage)是一種介於高階語言及機械語言間的符號語言,比起機械語言來說,組合語言要易編寫和學習。機械語言0和1的符號定義為「指令」(statement)是由運算元和運算碼組合而成,只可以在特定機型上執行,不同CPU要使用不同的組合語言。MOVA,2(變數A的數值內容為2)ADDA,2(將變數A加上2後,將結果再存回變數A中,如A=A+2)SUBA,2(將變數A減掉2後,將結果再存回變數A中,如A=A-2)第6页,共60页,2024年2月25日,星期天組合語言雖然比機械語言符合人類的需求,但電腦卻無法直接辨示。必須經過「組譯」(Assembling)過程,將組合語言轉換成機械語言,轉換成的機械語言會產生一個檔案稱為「執行檔」,才可在電腦上執行。第7页,共60页,2024年2月25日,星期天高階語言高階語言(High-levelLanguage)接近人類使用語言的程式語言,執行較慢,本身易學易用。特點是必須經過編譯(Compile)或解譯(Interprete)的過程,才能轉換成機器語言碼。所謂編譯,用編譯器來將程式碼翻譯為目的程式(objectcode),編譯必須原始程式碼完全正確,編譯的動作才會成功,高階語言經過編譯後,會產生「目的檔」(.obj)和「執行檔」(.exe)兩個檔案。第8页,共60页,2024年2月25日,星期天非程序性語言非程序性語言(Non-proceduralLanguage)也稱為第四代語言,特點是它的敘述和程式與真正的執行步驟沒有關連。程式設計者只須將自己打算做什麼表示出來即可,而不須去理解電腦是如何執行的。資料庫的結構化查詢語言(StructuralQueryLanguage,簡稱SQL)就是第四代語言的一個頗具代表性的例子。第9页,共60页,2024年2月25日,星期天人工智慧語言稱為第五代語言,或稱為自然語言,其特性宛如和另一個人對話一般。因為自然語言使用者口音、使用環境、語言本身的特性(如一詞多義)都會造成電腦在解讀時產生不同的結果與自然語言辨識上的困難度。因此自然語言的發展必須搭配人工智慧(ArtificialIntelligence:AI)來進行。第10页,共60页,2024年2月25日,星期天程式設計程式設計時必須利用何種程式語言表達,可根據主客觀環境的需要,並無特別規定。一個程式的產生過程,基本上可分為以下五個設計步驟

第11页,共60页,2024年2月25日,星期天五個設計步驟程式設計步驟

特色與說明

需求認識了解程式所要解決的問題是什麼,有那些輸入及輸出資料等。

設計規劃根據需求,選擇適合的資料結構,並以任何的表示方式寫一個演算法以解決問題。

分析討論思考其他可能適合的演算法及資料結構,最後再選出最適當的標的。

編寫程式把分析的結論,利用程式語言寫成初步的程式碼。

測試檢驗最後必需確認程式的輸出是否符合需求,這個步驟得細步的執行程式並進行許多的相關測試與除錯。第12页,共60页,2024年2月25日,星期天程式設計的五大步驟第13页,共60页,2024年2月25日,星期天9-2程式設計模式簡介

程式設計模式的兩種主要依循原則,分別為「結構化程式設計」(StructuredProgramming)及「物件導向程式設計」(Object-OrientedProgramming)。第14页,共60页,2024年2月25日,星期天結構化程式設計在傳統程式設計的方法中,主要是以「由下而上法」與「由上而下法」為主。「由下而上法」是指程式設計師將整個程式需求最容易的部份先編寫,再逐步擴大來完成整個程式。「由上而下法」則是將整個程式需求從上而下、由大到小逐步分解成較小的單元,或稱為「模組」(module),這樣使得程式設計師可針對各模組分別開發,不但減輕設計者負擔、可讀性較高,對於日後維護也容易許多。第15页,共60页,2024年2月25日,星期天結構化程式設計的核心精神,是「由上而下設計」與「模組化設計」。例如在Pascal語言中,這些模組稱為「程序」(procedure),C/C++稱為「函式」(function)。每一個模組會個別完成特定的功能,主程式則組合每個模組後,完成最後要求的功能。不過一旦主程式要求的功能變動時,則可能許多模組內的資料與演算法都需要同步變動,而這也是程序導向設計無法有效使用程式碼的主因。通常「結構化程式設計」具備以下三種控制流程,對於一個結構化程式,不管其結構如何複雜第16页,共60页,2024年2月25日,星期天[循序結構]逐步的撰寫敘述。第17页,共60页,2024年2月25日,星期天[選擇結構]依某些條件做邏輯判斷。第18页,共60页,2024年2月25日,星期天[重複結構]依某些條件決定是否重複執行某些敘述。第19页,共60页,2024年2月25日,星期天物件導向程式設計「物件導向程式設計」(Object-OrientedProgramming,OOP)則是近年來相當流行的一種新興程式設計理念。在設計程式時,能以一種更生活化、可讀性更高的設計觀念來進行,並且所開發出來的程式也較容易擴充、修改及維護。屬性與使用方法是在廠商製造時所提供,我們在使用時只要懂得如何正確使用它即可,而不需要曉得它的製造過程。以下是有關物件導向設計的元件相關簡介第20页,共60页,2024年2月25日,星期天

物件導向元件

特色與說明

物件物件是一個存在的個體,在VB視窗軟體中,物件可以是一個圖形、文字檔案等。

類別同一類物件的集合體就是類別。類別好比是一個設計圖,它定義了這類物件的集合體應有的屬性或功能,而物件就是依據這份藍圖所產生的實體。也就是說,定義好類別後,可以實作許多物件實體。第21页,共60页,2024年2月25日,星期天

屬性屬性就是指類別所擁有的靜態特性。

方法屬性就是指類別所具有的功能。

事件物件該於何時啟動什麼樣的工作,必須由事件來觸發。例如當在某區域「按下滑鼠左鍵」時,就會產生「按下滑鼠左鍵」的事件,而視窗軟體本身也會依物件的功能進行該事件的處理。第22页,共60页,2024年2月25日,星期天物件導向程式設計三種特性另外物件導向程式設計還具備以下三種特性:第23页,共60页,2024年2月25日,星期天封裝(Encapsulation)就是利用「類別」來實作「抽象化資料型態」(ADT)。封裝(Encapsulation)「繼承」是接近現實生活中的遺傳,例如你的父母生下你,那麼你一定會遺傳到父母的某些特徵,當物件導向技術以這種生活實例去定義其功能時,則稱為「繼承」。多形(Polymorphism)「多形」也是物件導向設計的重要特性,也稱為「同名異式」。第24页,共60页,2024年2月25日,星期天遺傳關係圖:子類別(福特汽車與BMW)與父類別(汽車)第25页,共60页,2024年2月25日,星期天9-3參數與變數程式設計而言,模組化(module)是基本而且非常重要的觀念,而副程式就是表現模組化最重要的設計方法。對如何在程式設計中正確的使用副程式,關鍵就是在了解參數傳遞的正確方法。第26页,共60页,2024年2月25日,星期天參數種類參數傳遞,在模組化設計中,會將常數或變數當作參數傳遞給副程式,讓副程式能夠依據我們所提供的數值進行運算。並將結果傳回給呼叫的程式。實際參數(ActualParameter):呼叫副程式的參數稱為實際參數,如Math、Chinese。形式參數(FormalParameter):被呼叫副程式中的參數稱為形式參數,如Score1、Score2。第27页,共60页,2024年2月25日,星期天C語言的範例圖說main(){ intMath,Chinese;

Average_Score=Average(Math,Chinese);實際參數

}boolAverage(intScore1,Score2){形式參數

}實際參數形式參數第28页,共60页,2024年2月25日,星期天參數傳遞方式參數傳遞方式往往因為程式語言的不同而有差異,例如C/C++語言中參數傳遞方式有兩種:傳值呼叫(CallByValue)傳址呼叫(CallByAddress)或稱為傳參考呼叫(CallByReference)。第29页,共60页,2024年2月25日,星期天傳值呼叫(CallByValue)傳值呼叫(CallByValue)主程式的參數值,傳送給副程式的參數,由於實際參數與形式參數分別佔用不同的記憶體位址,無論副程式的值如何改變,並不會影響主程式的參數值。第30页,共60页,2024年2月25日,星期天傳址呼叫(CallByAddressorCallByReference)傳址呼叫(CallByAddressorCallByReference)主程式呼叫副程式時,將主程式的參數位址傳給對應副程式參數。實際參數與形式參數佔用相同的記憶體位址,此時如果改變副程式的參數值,則主程式的參數值也會跟著變動。第31页,共60页,2024年2月25日,星期天兩種目前較少見的參數傳遞方式

參數傳遞名稱

特色與說明傳名呼叫法(CallByName)主程式呼叫副程式時,將主程式的參數名稱(Name)傳給副程式的參數,並取代副程式中相對應的所有參數名稱。特點是以以呼叫前環境為計值來求得值或位址,作為副程式參數的值或位址。例如ALGOL60語言中,就是使用此傳名法。本文呼叫早期法(CallByText)類似CallByName的方式,不過卻是以被呼叫者的環境為計值環境。例如LISP語言有種參數傳遞的方式就是CallByText。第32页,共60页,2024年2月25日,星期天變數簡介變數(Variable)是程式語言中不可或缺的部份,代表資料儲存的記憶空間。變數宣告的作用在告知電腦,變數需要多少的記憶空間。使用變數前,必須以資料的型態來作為宣告變數的依據及設定變數名稱。第33页,共60页,2024年2月25日,星期天變數具備了四個形成要名稱:變數本身在程式中的名字值:程式中變數所賦予的值。參考位置:變數在記憶體中儲存的位置。屬性:變數在程式的性質,如所謂的整數或實數。第34页,共60页,2024年2月25日,星期天從程式語言的範圍來看,變數的種類有兩種:1.全域變數(GlobalVariable):在主程式中所定義的變數,且壽命與主程式一樣的,稱為全域變數,也就是只有在主程式結束執行時,全域變數在記憶體中才會消失。2.區域變數(LocalVariable)在某個區塊(Block)內,如副程式內所定義的變數。例如在C++語言中,區域變數的值在副程式結束時,儲存這些值的位址也會歸還給系統,等到下一次呼叫時,這些值也已經重新定義了。第35页,共60页,2024年2月25日,星期天變數儲存位址變數儲存位址的方法則有兩種

儲存配置名稱

特色與說明動態儲存配置法變數儲存區配置的過程是在程式執行時(RunningTime)處理,如Basic、VisualBasic、LISP語言等。而執行時才決定變數的型態,稱為「動態檢驗」(DynamicChecking),變數的型態與名稱可在執行時,可隨時改變。靜態儲存配置法變數儲存區配置的過程是在程式編譯時(CompilingTime)處理,如C/C++、PASCAL語言等。而編譯時才決定變數的型態,則稱為「靜態檢驗」(StaticChecking),變數的型態與名稱在編譯時才決定。第36页,共60页,2024年2月25日,星期天Tips所謂內隱式變數型態宣告(ImplicitTypeDeclaration)是指系統會自行定義某些變數的資料型態,使用者不需要再宣告變數型態。顯露式型態宣告(ExplicitTypeDeclaration)則是一般由使用者自行定義或宣告型態的變數。第37页,共60页,2024年2月25日,星期天變數,各位還必須要了解到「繫結」(Binding)的意義。「繫結」是指將一個變數的名稱、位址屬性與值作某種程度的關連,而所發生的時間就稱為「繫結時間」(BindingTime)。進入一個副程式區段、執行時解決變數參考的時間、程式涉及定義變數的時間都算是「繫結」情況出現的時間。第38页,共60页,2024年2月25日,星期天

領域法名稱

方法說明

動態領域法在程式編譯時,決定變數所參考的物件。做法是如果變數在程式中某個區塊中未定義,則往上層區塊尋找,直到找到第一次開始宣告此變數的區塊為止,如果一直未發現此變數宣告,則認定此變數未宣告。如Fortran、Pascal、C/C++都是使用此種方法。

靜態領域法在程式執行時,決定變數所參考的物件。做法是依照副程式呼叫的相反順序尋找變數的宣告。如LISP、Basic、Prolog都是使用此種方法。第39页,共60页,2024年2月25日,星期天9-4遞迴式「遞迴」(Recursion)在程式設計上是相當好用而且重要的概念。遞迴函可使得程式變得相當簡潔。簡單的說,如果一個程式能被自己所定義或呼叫的,就稱為遞迴程式。學習的程式語言,例如Fortran、Basic、COBOL等並不具備遞迴功能。是這些語言在編譯(compile)時就得決定所有相關資訊。像PASCAL、LISP、C、PROLOG、C++等語言可以使用遞迴功能,則是因為它們的繫結時間(Bindingtime)可以延遲至執行時才動態決定。第40页,共60页,2024年2月25日,星期天遞迴的定義程式設計的角度而言,「函式」(或稱副程式)不單純只是能夠被其它函式呼叫(或引用)的程式單元,在某些語言還提供了自身引用的功能,這種功用就是所謂的「遞迴」。第41页,共60页,2024年2月25日,星期天遞迴式必須具備以下兩個要件一個可以反覆執行的過程一個跳出反覆執行過程中的出口第42页,共60页,2024年2月25日,星期天階乘函數是數學上很有名的函式,對遞迴式而言,也可以看成是很典型的範例。3階乘等於3×2×1=6,而0階乘則定義為1。我們一般以符號"!"來代表階乘。如4階乘可寫為4!。任何問題想以遞迴式來表示,n!可以寫成n!=n×(n-1)×(n-2)……×1第43页,共60页,2024年2月25日,星期天C++語言來表示階乘函數「n×fact(n-1)」就是一個反覆的過程,而n等於0時,就是遞迴式的「出口」。intfact(intn){if(n==0)return(1);elsereturn(n*fact(n-1);//尾歸遞迴的應用}第44页,共60页,2024年2月25日,星期天遞迴運作原理遞迴的運作原理,以C/C++語言而言,用所謂的暫存堆疊(Stack)。每一次遞迴過程在進入自身所定義的函式時,對於函式內的區域變數和相關參數多會重新配置位址。而且呼叫它的過程中,只有最近的一組才可被引用。由函式返回上一次呼叫的地方時,最近配置的哪一組變數所佔的記憶區被釋放,而且最新的拷貝重新恢復作用。第45页,共60页,2024年2月25日,星期天由於遞迴式並未事先定義可執行次數,暫存堆疊的功用就是為了解決這個問題。暫存堆疊是由系統來控制,當每次進入一個遞迴函數時,該函式中相關變數的新配置拷貝就以活動記錄表的形態置於暫存堆疊的頂端。對於區域變數或參數的引用都必須經由目前暫存堆疊的頂端。一旦函式返回時,堆疊頂端配置的拷貝被釋放。而前一次配置的拷貝則成為目前暫存堆疊的頂端,以供下一次引用區域變數值使用。第46页,共60页,2024年2月25日,星期天9-5常見的程式語言簡介隨著程式開發的原理與電腦硬體的高度發展,新一代的程式語言也不斷推陳出新。以下我們將為您介紹目前相當流行的幾種程式語言。第47页,共60页,2024年2月25日,星期天C語言C語言的起源是1972年貝爾實驗室的DennisRitchie以B語言為基礎,結合了B語言前身的BCPL語言的觀念,再加上資料型態的概念,設計出C語言,並和B語言的發明者KenThompson以C語言寫出新版本的UNIX作業系統。運算速度而言,C語言稱得上是介於高階語言與低階語言之間的中階語言(middle-levellanguage),它在組合語言與高階語言間取得了一個平衡的位置,有高階語言的結構化語法也有組合語言的高效率表現。第48页,共60页,2024年2月25日,星期天C語言具備有以下的特色和優點程式設計是由上到下(top-down)的結構化程式設計,它包含了循序(sequential)、重複(iteration)和選擇(selection)等結構,程式設計上,具有層次清楚、條理分明和維護的優點。ANSI的標準化之後,ANSIC所定義的C語言來編寫程式,經過編譯器的重新編譯,可跨平台執行,程式可攜性高。語法格式較其他高階語言來的寬鬆(loosely),允許程式碼中出現空格或空行等,為了可讀性的考慮,通常還是會依照普遍的格式風格來編寫。允許直接存取記憶體上的位址作運算、修改等,也就是指標(Pointer)的觀念,是動態記憶體結構的應用。在函式庫(library)中定義許多功能性函式,視程式需求而直接呼叫使用。函式庫的使用可以節省程式設計師編寫程式的時間和提升效率,可以讓程式碼更精簡與方便維護。第49页,共60页,2024年2月25日,星期天C++語言

C++語言同樣也是源自於貝爾實驗室,原創者BjarneStroustrup以C語言作為基本的架構,再導入物件導向(ObjectOriented)的觀念,而形成最初的C++語言。C++不是一套絕對的物件導向語言。C++以C語言為基礎平台,保有全部C語言的優點外,更與C語言相容,使得大部份在C語言上所撰寫的程式碼,C++仍然可以繼續使用。C++中所增加的物件導向功能,更適時的解決大型軟體開發時所面臨的困境,再加上ISO(InternationalStandardizationOrganization)為其制定標準化,使得C++不論在擴充與移植上,都獲得更大的彈性。第50页,共60页,2024年2月25日,星期天VisualC++Microsoft公司所推出的VisualC++程式語言就是C++語言,不論在程式架構與指令用法,都是採用標準的C++格式。其間的差別,僅在於VisualC++已經為程式設計員提供更多實用的類別庫,例如最有名的MFC(MicrosoftFoundationClasses)類別庫,更是開發Windows作業環境程式的最佳選擇。第51页,共60页,2024年2月25日,星期天

VisualBasic語言VisualBasic是Microsoft公司於西元1991年,以BASIC語言(一種適合初學者的直譯式高階語言)為基礎,開發的一套全新概念程式語言設計環境。所謂的VisualBasic簡單來說,就是視覺化的Basic程式開發環境。第52页,共60页,2024年2月25日,星期天VisualBasic是以BASIC為基礎所開發出來的語言環境,因此它包含了BASIC語言的原有優點:直譯式模組化與結構化物件導向設計概念多工處理模式第53页,共60页,2024年2月25日,星期天直譯式BASIC語言是以方便初學者學習為出發點,所開發出來的一套高階程式語言系統。它的使用語法及數學邏輯運算方式,十分接近人類的語言結構(以英文文法為基礎),因此使用者只需下達各種簡單的指令,即可命令電腦執行相關運算工作。第54页,共60页,2024年2月25日,星期天模組化與結構化早期BASIC語言僅著重於方便初學者的學習使用,因此並不注重結構化以及模組化的設計概念,而導致並不受到當時專業程式開發人員的重視。Microsoft公司為推廣BASIC語言,加強了BASIC語言的整體程式結構。可以透過各種結構化與模組化語法,將一個大型的應用程式劃分為多個功能區段。不僅能方便程式開發人員,進行程式碼判讀與維護的工作,更可以重複利用這些模組化的程式碼內容。第55页,共

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论