程式發展

51
程程程程 程程程程 程程程程 程程程程程程程 程程程程程程程程

description

程式發展. 程式語言 參數傳遞 結構化程式設計 物件導向程式設計. 作業系統. 組譯程式. 系統軟體. 程式語言 處理工具. 直譯程式. 編譯程式. 編輯程式. 計算機軟體. 連結程式. 工具程式. 載入程式. 偵錯程式. 套裝軟體. 應用軟體. 使用者自行開發的程式. 計算機軟體的分類. 程式 語言. 程式語言的定義. 又稱計算機語言 是人與電腦間溝通的語言  程式語言並非一經撰寫即可在電腦上執行,而是必須經過一定程序的轉換,轉換為電腦所能辨識的執行指令,方可執行。 - PowerPoint PPT Presentation

Transcript of 程式發展

Page 1: 程式發展

程式發展

程式語言 參數傳遞 結構化程式設計 物件導向程式設計

Page 2: 程式發展

計算機軟體的分類

計算機軟體

系統軟體

應用軟體

作業系統

程式語言處理工具

工具程式

套裝軟體

使用者自行開發的程式

組譯程式直譯程式編譯程式

編輯程式連結程式載入程式偵錯程式

Page 3: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 程式語言的定義

又稱計算機語言是人與電腦間溝通的語言

程式語言並非一經撰寫即可在電腦上執行,而是必須經過一定程序的轉換,轉換為電腦所能辨識的執行指令,方可執行。程式語言轉換的過程亦可稱為翻譯。最終轉換的結果為機器語言,只有機器語言才能在電腦上執行

Page 4: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 程式語言

程式語言的分類 語言編譯程式 常見的程式語言

Page 5: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 程式語言的分類

第一代:機器語言 (Machine Language) 第二代:組合語言 (Assembly Language) 第三代:編譯語言 (Compile Language) 第四代:極高階語言 (Very High Level L.) 第五代:自然語言 (Natural Language)

Page 6: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 第一代語言

機器語言 (Machine Language) 由 0 與 1 等二進碼所構成的語言 可直接為計算機接受執行 極不方便撰寫及理解

因為每編寫一行指令, 便須查表以找出所對應的運算碼

人們並不直接學習或使用機器語言 屬低階語言 (Low Level Language)

Page 7: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 第二代語言

組合語言 (Assembly Language) 利用簡單易懂的英文或數字符號 ( 助憶碼 )

來取代機器語言二進碼的程式語言 亦稱符號語言 與機器語言指令成一對一的關係 此程式電腦無法直接執行,必須透過組譯

程式 (Assembler) 轉成機器語言才行 仍似機器語言不具移植性,因此須對機器

的組成構造有相當了解才能撰寫程式 屬低階語言 (Low Level Language)

Page 8: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 第三代語言

編譯語言 (Compile Language) 又稱高階語言 (High Level Language) 或程序

導向語言 (Procedure-Oriented Language; POL) 語法接近人類日常所使用的語言 盡量不與電腦的構造相關,以增加可攜性 需透過編譯程式將其編譯為機器語言 程式中的每一句稱為一道敘述 (Statement) 每一道敘述通常對應多個指令 目的在促使電腦的普及

Page 9: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 第四代語言 (4GL)

極高階語言 (Very High Level Language) 屬於問題導向語言 (Problem Oriented Lang.)

或稱非程序導向語言 (Nonprocedure Lang.)

指示電腦去「做什麼」,而不像第一、二、三代語言 ( 它們屬程序導向語言 ) ,必須指示電腦「如何去做」 程式的敘述與電腦的執行步驟沒有關連 例如:資料庫查詢語言、應用程式產生器

Select * from person

Page 10: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 第五代語言

自然語言 (Nature Language) 又稱知識庫語言 (Knowledge-Based Lang.)

使用者以一般英文語句直接和電腦對話 最近似於人類日常生活所使用的語言 使不懂電腦的人更方便進行資料存取 處理較為複雜,目前尚無法處理複雜邏輯 應用在人工智慧 (AI) 與專家系統 (ES) 等領域 Ex : Tell Me All Data In Person Table

Page 11: 程式發展

計算機語言演進與人類的關係

低階語言

高階語言

極高階語言

中央處理器 電腦

組合語言

機器語言

3 GL科學導向語言

商務導向語言

4GL( 第四代語言 )

自然語言 ( 第五代語言 )

人類

Page 12: 程式發展

程式語言分類總覽

非物件導向語言

物件導向語言

一般分法

依對硬體設備的相依性來分

低階語言

高階語言

通用程式語言

特殊問題導向語言

機器導向語言

問題導向語言

機器語言

組合語言

程序導向語言

非程序導向語言

一般結構化高階語言

4GL 、第五代語言

機器語言

組合語言

機器導向語言

問題導向語言

接右上

Page 13: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 程式語言

程式語言的分類 語言編譯程式 常見的程式語言

Page 14: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 語言編譯程式

組譯器 (Assembler)將組合語言程式翻譯為目的程式,

再經過連結程式,連結為執行檔 *.com 檔案大小小於 64K

編譯器 (Compiler)將原始程式一次翻譯為目的程式後,

再聯結函式庫或是其他目的程式為執行檔 *.exe 檔案大小大於 64K

直譯器 (Interpreter)將原始程式逐行翻譯為機器語言

程式每次執行,皆必須經過翻譯的手續 亦稱為解譯器

Page 15: 程式發展

語言編譯程式的比較

比較項目 組譯 直譯 編譯

目的程式 有 無 有

程式執行速度 快 慢 快

語言處理與程式執行

編譯一次執行 n次

編譯一次執行一次

編譯一次執行 n次

原始程式和機器的相關性

機器微處理器不同,原始程式敘述就不同

與機種無關 與機種無關

Page 16: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 程式編譯工具程式

編輯程式 (editor)編輯原始檔案的工具程式如 PE2 , MS EDIT

連結程式 linker將一個以上的目的程式與程式庫連結合併成一個可執行檔

載入程式 loader將可執行檔從輔助記憶體中讀入主記憶體使執行的程式

偵錯程式 debugger協助程式設計師偵測程式錯誤點的程式

Page 17: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 程式語言

程式語言的分類 語言編譯程式 常見的程式語言

Page 18: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 常見的程式語言 -- 1

FORTRAN 為 FORmula TRANslation 的縮寫 由 IBM 公司於 1954年所開發出來 是世界上第一種開發成功的高階語言 適合於解決工程與科學上的問題

COBOL COmmon Business Oriented Language 的縮寫 1959年由美國政府、用戶及廠商所組成的

CODASYL 機構所制定 目前在國內仍有很多中小企業使用

Page 19: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 常見的程式語言 -- 2

ALGOL 為 ALGOrithmic Language 的縮寫 於 1957-1960年間被設計出來 以前在歐洲頗為風行 在學術界及國際發表的刊物上,常被用來當作表

達演算法的程式語言 PL/1

為 Program Language/One 的縮寫 1964年由 IBM 公司所發展出來的一種多用途語言 能用於工程、科學、商業等各種應用領域

Page 20: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 常見的程式語言 -- 3

RPG 為 Report Program Generator 的縮寫 為一種表格化的程式語言 主要的功能在提供大量報表印出之用 1960年由 IBM 所發展出來 廣泛地應用於小型商業電腦上

BASIC Beginner’s All Purpose Symbolic Instruction Code 1965年由 Dartmouth 學院發展出來 易學易懂,適用於初學者的入門學習 隨個人電腦的推出而風行,中文譯為「培基」

Page 21: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 常見的程式語言 -- 4

PASCAL 為紀念十七世紀的大數學家 Blaise Pascal 而命名 由瑞典 Institut fur Informatik in Zurich 的電腦科學家

Niklaus Wirth 在 1968年所發展出來 承襲 ALGOL 的優點,並簡化繁複的語法、擴充許

多頗具彈性的資料型式與資料結構 是一種優良的結構化程式 (Structural Program) 語言 結構化、易學易懂、可讀性高 適合商業及學術領域使用,常作為教學語言 亦適合一般使用者學習程式語言之用

Page 22: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 常見的程式語言 -- 5

C 修改 B 語言而來,故得名

B 語言是 Ken Thopson 在 1970年於 PDP-7 電腦的 UNIX作業系統上所建立的

Dennis Ritchie 於 1972年在 AT&T貝爾實驗室的 PDP-11 電腦的 UNIX 作業系統上發展出來

最早被發展來撰寫系統軟體,但其在一般的應用 上亦可應付裕如

因和組合語言間有良好的溝通能力,故又被稱為 中階語言 (Mid-Level Language)

具有相當強的可攜性 (Portability)

Page 23: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 常見的程式語言 -- 6

ADA 為紀念 1800年代的數學家 Augusta Ada Byron 而命名,此人被許多電腦科學界的人士認定為第一位電腦程式設計師 為美國國防部基於國防需要所開發的語言 用在處理大型程式和複雜專案 程式很複雜,但可攜性 (Portable)十分良好

Page 24: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 常見的程式語言 -- 7

LISP 為人工智慧 (Artificial Intelligence) 常用語言 效率高,但不好懂

PROLOG 為人工智慧常用語言,由法國人發明 經英國人改良,成為一種具推理性的語言 效率低,但易學習

Scheme

Page 25: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 常見的程式語言 -- 8

GPSS 為 General Purpose Simulation System 的縮寫 專門應用於模擬工作上

APL 為 A Programming Language 的縮寫 由 K. Lverson 所發展出來 專門處理數學方面的求解問題,其中以陣列與向量的處理最有用

Page 26: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 常見的程式語言 -- 9

SNOBOL StriNg Oriented symBOlic Language 的縮寫 1962年由美國貝爾實驗室所發展出來 專門應用在字串資料的處理上

PILOT Programmed Inquiry, Learning Or Teaching 1970年代初發展出來 為電腦輔助教學 (CAI) 的語言 可幫助老師編寫教材

Page 27: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 常見的程式語言 -- 10

FORTH 於 1975年由 Charles Moore 所發展出來 目的為最佳化電腦記憶體使用及處理速度 在微電腦中的使用比 BASIC 更具威力 但使用方法較複雜,不易普及

Modula-2 與 PASCAL 語言一樣,

是由 Wirth教授所發展出來的程式語言 PASCAL 常使用於教學上,

而 Modula-2 常使用於系統軟體的開發上

Page 28: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 其他程式語言小常識 -- 1

具有遞迴 (recursive) 能力的語言 ALGOL PASCAL C PL/1 QUICK BASIC LISP

模擬專用的語言 GPSS SIMSCRIPT DYNAMO

Page 29: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 其他程式語言小常識 -- 2

物件導向的程式語言 SMALLTALK

由全錄 (Xerox) 公司所發展出來的物件導向程式語言 C++

ADA

Visual Basic (VB)

Visual Foxpro (VFP)

Delphi (Visual PASCAL)

JAVA具跨平台特性,以 C++ 為基礎所發展另發展有 JavaScript 可直接撰寫於網頁中

Page 30: 程式發展

程式語言

參數傳遞

結構程式

物件程式

程式語言 程式語言

程式語言的分類 語言編譯程式 常見的程式語言

Page 31: 程式發展

程式語言

參數傳遞

結構程式

物件程式

主副程式的參數串列

主副程序間的資料傳輸,透過參數串列 (Parameter List) 來進行

主程式 或稱呼叫程式 (Calling Program)

擁有實際參數串列 (Actual Parameter List)

副程式 或稱被呼叫程式 (Called Program)

擁有形式參數串列 (Formal Parameter List)

參數傳遞

Page 32: 程式發展

程式語言

參數傳遞

結構程式

物件程式

參數傳遞方式

傳值呼叫 (Call By Value) 傳址呼叫 (Call By Address) 傳名呼叫 (Call By Name) 傳值兼傳結果呼叫 (Call By Value-Resul

t)

參數傳遞

Page 33: 程式發展

程式語言

參數傳遞

結構程式

物件程式

傳值呼叫 (Call By Value)

主程式呼叫副程式時,僅將主程式的實際參數串列值(Value) 傳給副程式對應的形式參數串列

副程式開始執行時,作業系統會分配額外的記憶體位址給副程式的形式參數串列使用;因此,主副程式的參數串列並未佔用相同的記憶體位址,所以副程式在執行過程中並不會去改變主程式相對變數的值。

副程式執行完畢時,其結果並不傳回主程式,因此主程式的對應參數串列值不會改變。

由於副程式執行時,參數串列須額外分配記憶體,因此其繫結 (Binding)時間最慢。

PASCAL 的 Procedure宣告時,若為使用 VAR ,以及ALGOL 程序輸入參數均使用傳值呼叫。

參數傳遞

Page 34: 程式發展

程式語言

參數傳遞

結構程式

物件程式

傳址呼叫 (Call By Address)

又稱 Call By Reference 、 Call By Sharing 、 Call By Location 、Call By Variable

主程式呼叫副程式時,僅將主程式的實際參數串列位址 (Address) 傳給副程式對應的形式參數串列。

副程式執行時,主副程式的參數串列佔用相同的記憶體位址,因此副程式在執行過程中,若參數值改變了,則其對應的主程式參數值也會跟著改變,此現象常稱為副作用 (Side Effect) 。

副程式執行完畢時,主副程式間的參數串列對應關係結束,亦即副程式的形式參數又恢復為位址未定。

因主副程式間共用相同記憶體位址,故其繫結 (Binding)時間最快

PASCAL 的 Procedure宣告時,若為使用 VAR ,以及 FORTRAN 的陣列 (Array) 參數均使用傳址呼叫。

參數傳遞

Page 35: 程式發展

程式語言

參數傳遞

結構程式

物件程式

傳名呼叫 (Call By Name)

主程式呼叫副程式時,除了將實際參數串列的名稱(Name) 傳給副程式外,並取代整個副程式內所有對應的參數名稱。

主副程式間對應的參數佔用相同的記憶體位址;因此,副程式執行過程中,若參數值改變了,其對應的主程式參數值亦隨之改變。

此方法除了主副程式間對應參數佔用相同的記憶體位置外,還須改變副程式內所有的對應參數名稱,因此其繫結 (Binding)時間慢於傳值呼叫 (Call By Value) 。

ALGOL 的參數通常採此法做傳輸,但此法在某些情況下,常會有問題發生,故目前已甚少被程式語言所採用。

參數傳遞

Page 36: 程式發展

程式語言

參數傳遞

結構程式

物件程式

傳值兼傳結果呼叫 (Call By Value-Result)

主程式呼叫副程式時,僅將主程式的實際參數串列值 (Value) 傳給副程式對應的形式參數串列

副程式開始執行時,作業系統會分配額外的記憶體位址給副程式的形式參數串列使用;因此,主副程式的參數串列並未佔用相同的記憶體位址,所以副程式在執行過程中並不會去改變主程式相對變數的值。

副程式執行完畢時,將副程式的形式參數串列結果值傳回給對應的主程式參數串列。

參數傳遞

Page 37: 程式發展

程式語言

參數傳遞

結構程式

物件程式

實際演練 1— 傳值 & 傳址呼叫

Begin integer m,n; integer array a[1:2];

PROCEDURE P(x,y) Begin integer m,n; m:=1; n:=2; a[m]=3; x :=x+2; y :=y+4; End

a[1] := a[2] :=m :=2; n:=1; P(a[m] ,a[n] ); Print(a[1] , a[2]);End

參數傳遞

Page 38: 程式發展

程式語言

參數傳遞

結構程式

物件程式

實際演練 2— 傳值 & 傳址呼叫

PROCEDURE P(X,Y,Z)BEGIN Y = Y + 1 ; Z = X + Y ;END

BEGIN A = 1 ; B = 1 ; P(A+B, A, A); PRINT A;END

參數傳遞

Page 39: 程式發展

程式語言

參數傳遞

結構程式

物件程式

實際演練 3— 傳值 & 傳址呼叫

PROGRAM MAINA, B, C : Integer; A 5 ; B 4 ; C PASS(B, A, B);END.

FUNCTION PASS(X,Y,Z)X, Y, Z : Integer ; X Y ; Y (Z-1) ; Return(Z);End.

參數傳遞

Page 40: 程式發展

程式語言

參數傳遞

結構程式

物件程式

結構化程式設計

常見的程式設計方法 結構化程式的特點 流程圖

結構程式

Page 41: 程式發展

程式語言

參數傳遞

結構程式

物件程式

常見的程式設計方法

由上而下法 (Top-Down Approach)將整個問題邏輯性地分解成數個次單元,這些次單元又可再細分為更小的單元;依此類推,直到分解成程式語言很容易編寫的最小單元為止。

由下而上法 (Bottom-Up Approach)程式設計者先將整個問題中最簡單部份的程式編寫起來,然後再逐漸的組合各部份成完整的程式。

結構程式

Page 42: 程式發展

程式語言

參數傳遞

結構程式

物件程式

結構化程式的特點

由上而下程式設計方法 模組化程式設計方法

一個程式可分為多個具有獨立功能的單元模組 具有四種控制結構

順序結構 (Sequence Structure)由上而下,依序逐一執行

反覆結構 (Iteration ; Repetition Structure)DO-WHILE 、 FOR-NEXT 、 REPEAT-UNTIL….

選擇結構 (Selection ; Condition Structure)IF-THEN-ELSE

個案結構 (Case Structure)ON CASE

少用 Go To 程式設計方法

結構程式

Page 43: 程式發展

程式語言

參數傳遞

結構程式

物件程式

流程圖 (Flowchart)

流程圖係以特定的圖形符號來取代以文字敘述某系統或程式的處理流程

系統流程圖 (System Flowchart)重點在表達整個資料處理過程的每個處理步驟及所需使用的人力、設備及相關資料通常由系統設計師繪製

程式流程圖 (Program Flowchart)說明如何使用電腦來處理問題的程式以說明程式內的流程為主通常由程式設計師來繪製

結構程式

Page 44: 程式發展

程式語言

參數傳遞

結構程式

物件程式

物件導向程式設計的四大特色

抽象化 (Abstraction)具相同特性的事物可抽象化成一類別

封裝 (Encapsulation)將所需要的變數及函式結合成一個資料體,並給予良好的保密性

繼承 (Inheritance)將原先已定義好的類別做擴充

同名異式 ( 多形性; Polymorphism)隸屬於同或不同類別的物件﹐由於支持同一介面而產生可互相替換的效果。

物件程式

Page 45: 程式發展

程式語言

參數傳遞

結構程式

物件程式

JAVA 簡介

Java 係由 Sun Microsystem 所發展出來,為一種新的物件導向程式語言

Java 的語法與 C 、 C++ 及 Object C 類似 Java 的特色

物件導向 (Object-Oriented)垃圾蒐集 (Garbage Collection)直譯式程式 (Interpreted Language)強韌性 (Robust)安全性 (Security)多重線索 (Multithread)

物件程式

Page 46: 程式發展

程式語言

參數傳遞

結構程式

物件程式

JAVA 的特色一

物件導向 (Object-Oriected)Java 以類別 (Class) 來組織程式程式中僅存在類別,而無一般獨立的函數式 (Function)每一種類別包含一群成員方法 (Member Method) ,藉由這些成員方法來定義物件的行為任一類別的成員方法均可藉由繼承從另一個類別取得Java僅允許單一繼承,不允許多重繼承

物件程式

Page 47: 程式發展

程式語言

參數傳遞

結構程式

物件程式

JAVA 的特色二

垃圾蒐集 (Garbage Collection)Java 語言中提供了一個內建的程式 Garbage Collection ,它會主動的去分析記憶體狀況,並釋放不再使用的記憶體部份,使程式設計師可以專心於程式的設計問題,而不需要去考慮意義體的管理問題。

物件程式

Page 48: 程式發展

程式語言

參數傳遞

結構程式

物件程式

JAVA 的特色三

直譯式語言 (Interpreted Language)Java 程式的執行,必須透過一個直譯程式 (Interpreter) 來完成,但其處理模式與傳統的 Basic 語言不同,傳統的 Basic程式撰寫完畢後,可以直接利用 Basic 的直譯程式執行,並立即可獲得執行結果;但 Java 在執行前必須先進行編譯 (Compilation) 過程,將 Java 程式轉換成另一種中間碼 (Intermediate Code) ,稱為 Byte-Code 。之後再將此 Byte-Code交由 Java 的直譯程式予以執行。此處的 Byte-Code 係針對虛擬機器 (Pseudo Machine) 所設計,亦即其具有機器獨立性 (Machine Independence) ,一個被編譯過的 Java 程式可以在任何機器上使用 Java 直譯程式執行,不需要再重新編譯。物件

程式

Page 49: 程式發展

程式語言

參數傳遞

結構程式

物件程式

JAVA 的特色四

強韌性 (Robust)Java 在設計上會仔細的檢查每一個記憶體存取的動作,以確保存取的合法性,因此不會使 Java 程式有意無意的去破壞電腦系統。為確保安全性無虞, Java 並未提供指標 (Pointer) ,使得 Java 程式的存取範圍能被有效的掌控。物件

程式

Page 50: 程式發展

程式語言

參數傳遞

結構程式

物件程式

JAVA 的特色五

安全性 (Security)Java 語言的程式設計允許其一段 Java 程式能經由網路到另一部機器上執行,而在存取或執行的過程中是否會存取到不被允許的資料,以確保程式或系統的安全性,可藉由瀏覽器 (Browser) 來偵測。

物件程式

Page 51: 程式發展

程式語言

參數傳遞

結構程式

物件程式

JAVA 的特色六

多重線索 (Multithread)線索 (thread) 係指一個執行單元或指令的執行流程多重線索則表示一個程式執行時,可以有多個執行單元,亦即具備同步的功能 (Synchronization) ,以使程式更具彈性、功能更強。

例:一個「線索」正在播音樂 另一個「線索」則同時在顯示動畫

物件程式