1.概說

計算機語言乃是人與電腦間溝通的語言,亦稱程式語言

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

2.分類

約略可分為物件導向語言與傳統的非物件導向語言兩種

非物件導向語言

一般可以分為

機器導向語言依據程式語言對硬體設備的相依性,可分為低階語言與高階語言

問題導向語言依程式設計模式又可分為:

第五代程式語言則是以人工智慧為主的自然語言,例如PROLOGO(法、英,推理性語言),LISP(美,符號處理語言)語言等

物件導向語言

Simula是第一個物件導向語言。原本是作為「模擬」用途,但其中的物件以及類別概念,成為現今物件導向語言的主要架構。(資料來源

特性I

物件object 訊息 類別class 繼承
資料封裝 抽象資料型別 同名異元多元體 動態繫結
屬性Property 事件event 方法method  

特性II

相關名詞定義:

種類(連接外站:維基百科

SmallTalk 由全錄 (Xerox) 公司所發展出來的物件導向程式語言 (OOP) ,它將使用者介面的觀念帶入物件導向語言當中,目前有 DigiTalk 和Parcplace System 公司發展該語言的編譯器[84商教系]
有人稱他是人工智慧語言的一種,事實上,Object oritended 的 Language 都應該在AI 的範圍內,這怎麼說呢? 目前 AI 的應用範疇大多在模擬,如模擬火箭發射等等,而 Object Oritended 則是模擬真實世界中各種 Object 間的交互關係。如果以此模擬的角度來思考,那 Smalltalk 可算是 AI 的軟體,C++ or Java 也算是。另外,Prolog Language 會列入 AI 的領域,那是因為它的推理機制。所以,小弟的看法和見解,一個 Language 是否會歸類為 AI 軟體,就先由 AI 的範疇來推論。目前 AI 的範疇大多在推理機制、模擬機制、Fuzzy 等等。由這方面去判斷,應可找出脈絡。[編按:以上是編者與友站站長鄒效唐先生討論Small Talk是不是人工智慧語言的摘要]
C++ 非常具有效能的程式語言。C++ 語言是90年代才逐漸獲得重視之以物件導向(Object-Oriented) 為基礎的程式語言,它可說是C 程式語言的的延伸,用來作為通用應用軟體之開發工具。
Ada Ada語言起源介紹。Ada 是一通用之高階之程式開發語言。其特點在於能夠提供優異之資料格式管理、同時作業處理和有效之程式架構等能力。此程式語言特別適用於崁入式的即時系統、分散式作業、高可靠度之軟體發展等應用。
VB Visual Basic目前在台灣市場上常見的通用性教學程式語言
VFP Visual Foxpro 資料庫程式語言
Delphi Object Pascal由結構嚴謹的Pascal所後續開發的視窗環境下的程式語言
Java

昇陽所發展,具跨平台特性,以C++為基礎所發展

C# 念做c sharp,為MS新推出的程式語言,模仿Java功能,語法類似C語言
PL/1 通用語言(商用與科學用)
APL A Programming Language
Power Builder Sybase資料庫的4GL開發程式
SDK

軟體開發套件(Software Development Kit, 即 SDK)一般是一些被軟體工程師用於為特定的軟體包、軟體框架、硬體平台、作業系統等建立應用軟體的開發工具的集合。

它或許只是簡單的為某個程式語言提供應用程式介面的一些檔案,但也可能包括能與某種嵌入式系統通訊的複雜的硬體。一般的工具包括用於偵錯和其他用途的實用工具。SDK 還經常包括範例代碼、支援性的技術註解或者其他的為基本參考資料澄清疑點的支援文檔。

軟體工程師通常從標的系統開發者那裡獲得軟體開發包。為了鼓勵開發者使用其系統或者語言,許多 SDK 是免費提供的。SDK 經常可以直接從網際網路下載。有時也被作為行銷手段。例如,甲產品或許會免費提供設備SDK 以鼓勵人們使用它,從而會吸引更多人由於能免費為其編寫應用程式而購買其設備。

SDK 可能附帶了使其不能在不相容的許可證下開發軟體的許可證。例如一個專有的 SDK 可能與自由軟體開發抵觸。而GPL能使 SDK 與專有軟體開發近乎不相容

widget 部件工具箱(widget toolkits)亦稱為GUI工具箱(GUI toolkits),在程式設計中指的某些基本的GUI的構件元素的集合。他們一般以庫或者應用程式框架的形式出現。
API

「『電腦作業系統(Operating system)』或『程式函式庫』提供給應用程式呼叫使用的程式碼」。

其主要目的是讓應用程式開發人員得以呼叫一組常式功能,而無須考慮其底層的原始碼為何、或理解其內部工作機制的細節。API本身是抽象的,它僅定義了一個介面,而不涉入應用程式如何實現的細節。

IDE

整合開發環境(Integrated Development Environment,簡稱 IDE,也有人稱為Integration Design Environment、Integration Debugging Environment)是一種輔助程式開發人員開發軟體的應用軟體。

IDE通常包括程式語言編輯器、編譯器/直譯器、自動建立工具、通常還包括除錯器。有時還會包含版本控制系統和一些可以設計圖形用戶界面的工具。許多支援物件導向的現代化IDE還包括了類別瀏覽器、物件檢視器、物件結構圖。雖然目前有一些IDE支援多種程式語言(例如Eclipse、NetBeans、Microsoft Visual Studio),但是一般而言,IDE主要還是針對特定的程式語言而量身打造(例如Visual Basic)。

3.演進

計算機語言的演進歷史如下:
第一代 機器語言 由0與1所構成,電腦能直接執行的程式語言
第二代 組合語言 利用助憶碼取代數字碼,亦稱符號語言
第三代 程序導向語言 高階語言以1954年IBM的FORTRAN語言開始
第四代 非程序導向語言 4GL,,查詢語言SQL,應用程式產生器。1970年代萌芽,1980年大量使用主要應用在一般資訊查詢與報表列印,以事件驅動為主
第五代 自然語言 應用在人工智慧AI與所衍生的專家系統ES等特殊領域

我們可以利用圖形來代表這些語言的演進與人類的關係。

4.翻譯程序

一般程式編寫流程為:編譯,連結/載入,執行

使用者依程式語言語法規則所撰寫的文件,稱為原始碼(source code)。將原始碼轉換為機器碼以便在電腦上執行的工具軟體,一般依據該軟體的特性,此類轉換工具軟體可以分為:
組譯器Assembler 將組合語言程式翻譯為目的程式,再經過連結程式,連結為執行檔*.com(檔案小於64K)
直譯器Interpreter 將原始程式逐行翻譯為機器語言。程式每次執行,皆必須經過翻譯的手續。亦稱為解譯器
編譯器Compiler 將原始程式一次翻譯為目的程式後,再聯結函式庫或是其他目的程式為執行檔*.exe(檔案大於64K)

此類工具軟體轉換原始碼為目的碼或是可執行檔的程序,可以用下圖表示:

組譯程序

直譯程序

編譯程序

吾人可以列出如下的表格比較彼此間的不同:

 
組譯
直譯
編譯
目的程式
程式執行速度
語言處理與程式執行

編譯一次

執行n次

編譯一次

執行一次

編譯一次

執行n次

原始程式和機器的相關性 機器微處理器不同,原始程式敘述不同
與機種無關
與機種無關
語言種類 MASM

Perl,Python,REBOL,Ruby,HTML

通常亦稱為Script語言

C/C++,Delphi(Object Pascal)

除了以上三者外尚有:

在使用這些工具程式的同時,有一些特殊的工具程式必須介紹:

編輯程式 editor

編輯原始檔案的工具程式,如PE2,MS EDIT 。在視窗環境下則以Ultra Edit最有名

連結程式 linker 將一個以上的目的程式與程式庫連結合併成一個可執行檔
載入程式 loader 將可執行檔從輔助記憶體中讀入主記憶體使執行的程式
偵錯程式 debugger 協助程式設計師偵測程式錯誤點的程式

近來程式語言的開發環境已經趨向IDE整合介面,使用者只需在單一環境下,便可以撰寫程式,偵錯程式,編譯程式等開發程式的過程。

由於跨平台執行程式環境的需求日廣,程式必須在不同作業系統平台執行,在java環境下便有byte code (位元組碼)的產生,而微軟則推出.Net Framework的產生。

Byte Code位元組碼

.Net Framework

為支援XML,Web Service及跨平台等特性,微軟推出此一平台。此平台除了提供共通語言執行環境外(CLR Common Language Runtime),還提供一完整的類別程式庫(Comman Class Library),以供程式設計師可在支援此平台的程式語言中,以程式設計師熟習的語言來開發元件及應用程式,且可輕易與其他程式設計師所開發的元件相整合。任何一個VS .Net家族的程式語言經過編譯後就是一個可以在.Net Framework執行環境中執行的中介程式碼,此中介程式碼會在實際執行時經由.Net Framework中的Just In Time Compiler將其編譯成該平台下的實際執行碼,以達到跨平台的功能。.Net Framework的角色其實就和Java的VM一樣。 而此一平台則是以C#語言為最重要的語言,其後續發展值得觀察。(連結外站:維基百科

5.特性

一般來說,計算機語言的結構大同小異,但是在所有的語言中,比較需要注意的有以下各點:

指令

電腦系統接受指令執行運算,而這些指令便是電子控制訊號。指令分為兩部分:運算碼(Operation code)指揮電腦操作某一運算功能(例如加減乘除等),運算元(Operand)運算碼進行運算的對象(例如:待運算的文字或數值資料)。
依指令的功能一般可以分為:
輸入指令 由輸入裝置擷取資料
輸出指令 將處理器處理好的資料,送出到顯示裝置顯示結果
算術指令 執行算術運算。指令中運算元可為暫存器或儲存單位之位址
邏輯指令 提供處理過程中的邏輯運算,包含資料間的長度、大小、或條件測試
搬移指令 指定資料或位址的內容複製到目標位址上
控制指令 改變執行的次序或狀態

變數

可以宣告為全域變數或是區域變數

參數傳遞的方式

在撰寫程式時,通常需要呼叫其他程式或是函數進行處理。呼叫其他的程式稱為主程式,被呼叫的程式稱為副程式。彼此間透過參數進行資料傳遞。主程式的參數稱為實際參數,副程式的參數稱為形式參數

call by address 傳址呼叫(空間)。主、副程式的參數使用共同的記憶體空間,當副程式的參數改變內容值,主程式的變數亦連帶改變
call by value 傳值呼叫(數值)。主、副程式的變數各自擁有獨立記憶體空間,參數只是將內容值複製給引數,程式內的變數值改變,不會相互影響
call by name 傳名呼叫,亦稱call by reference。主程式呼叫副程式時,將主程式中實際參數的名稱,傳給副程式中對應的形式參數,副程式中的所有形式參數名稱以實際參數的名稱代替。實際參數與形式參數,佔用相同的記憶體空間
call by result-value

主程式呼叫副程式時,將主程式中實際參數的值,傳給副程式中對應的形式參數。兩者不會佔用相同的記憶體空間 

副程式

優點:可以抒解程式撰寫的壓力,並將功能適當的分散到各個模組執行

分類:程序Procedure(不一定有傳回值,或是可以傳回一個以上的值)與函數Function(只有一個傳回值)

6.演算法Algorithm

定義

由有限的步驟組成,依照這些步驟順序執行,可以完成某一特定的工作。這些步驟稱為演算法,並且同時滿足下列條件:

  1. 輸入:外界可以輸入0到多項資料
  2. 輸出:至少輸出一個結果
  3. 明確性:每一個指令或是步驟必須是簡潔的,而且不含糊(unambiguous)
  4. 有限性:驗算法必須在有限步驟後結束,不能有無窮迴圈
  5. 有效性:只要以紙或筆就可以執行該演算法

演算法均可以以程式流程圖表示,但是程式流程圖不一定能以演算法表示

如何書寫演算法

一般使用虛擬語言Pseudo-Language來書寫演算法,常見有Sparks,PASCAL-LIKE語言。其處理流程如下:

問題需求--(設計)-->演算法(Sparks)---->高階語言--(編譯器)-->目標機器語言

由於電腦是依照一定的邏輯步驟來執行運算的機器,在程式設計的時候必須將問題分解為許多小步驟,然後再依一定的次序逐步執行,我們將這個用來描述問題之解決程序的方法稱作演算法。許多同學在第一次接觸程式設計時,多半不知道如何下手。一般建議:多觀摩。多看別人寫的程式,多想一想為何他要這樣寫,自己再試著模擬一次,便可以容易上手了。而應付考試的同學,則建議把常見的考試題型,記憶起來。再看到題目時,如過能夠了解題目所代表的意義,解題便十分容易了

看一看以下這一題,你了解它的意義嗎?

S=0
FOR I=1 TO 100000
	X=INT(RND+0.5)
	IF X=0 THEN S=S+1
NEXT
P=S/100000
PRINT P
  • X=INT(RND+.5)取出的值有幾種可能性?
  • P=S/100000所代表的意義為何?
  • 想一想丟骰子,或是丟錢幣取正反面與本題的意義是否相符?

虛擬語言Pseudo-Language

利用一種結合一般文字敘述、非正確的程式語言來描述演算法的程式碼,稱為 pseudo code。以下是一個排序演算法的描述碼

排序的元素放在陣列 a 中
 for (i = 1; i <= 陣列大小-1; i 依序加一)
for (j = i+1; j <= 陣列大小; j 依序加一)
if (a[i] > a[j])
交換 a[i] 及 a[j];
完成排序動作。

利用 pseudo code 可彌補程式語言敘述的不足,而又有程式語言結構化且嚴謹的敘述能力,可相當有效率的定義出一個演算法的過程,在資料結構或演算法等領域,經常使用 pseudo code 來描述演算法。

7.流程圖Flow Chart

乃是以圖形符號來描述程式的邏輯和處理程序。符號共分為三種:

程式流程符號
輸出入   流程流向
起點、終點或中斷   連結
處理   備註
判斷  
輸入輸出媒體符號
  卡片 線上儲存
  卡片檔 磁帶檔
  打孔紙帶 報表檔
  鍵盤輸入 磁碟片
  顯示於螢幕 卡式磁帶
作業處理符號
處理 合併
排序 人工作業
流程圖符號
說明

本圖形乃是由Word中所擷取

程序(處理) 替選處理 決策(判斷) 資料(輸入與輸出)
預設處理(副程式) 內部儲存裝置 文件(報表,列印) 多重文件
開始與結束點 準備(迴圈) 人工輸入 人工作業
連接點 換頁 卡片 打孔紙帶
匯合連接點 合訂 排序
抽選 合併 儲存裝置 延遲

磁帶(循序存取儲存裝置)

磁片

磁碟(直接存取儲存裝置)

顯示
左側圖形乃是Visio的流程圖模板

 

8.各種語言筆記

MSDN網站

Basic 語言

Cobol 語言

C 語言

Pascal 語言

Visual Foxpro語言

Java語言

Android SDK Developer

Android SDK

iOS APP SDK Developer

iPAD SDK