編程範式 淺析

編程範式(Programming Paradigm)是某種編程語言典型的編程風格或者說是編程方式。隨着編程方法學和軟件工程研究的深刻,特別是OO思想的普及,範式(Paradigm)以及編程範式等術語漸漸出如今人們面前。面向對象編程(OOP)經常被譽爲是一種革命性的思想,正由於它不一樣於其餘的各類編程範式。編程範式也許是學習任何一門編程語言時要理解的最重要的術語。程序員

托馬斯.庫恩提出「科學的革命」的範式論以後,Robert Floyd在1979年圖靈獎的頒獎演說中使用了編程範式一詞。編程範式通常包括三個方面,以OOP爲例:算法

  1. 學科的邏輯體系——規則範式:如類/對象、繼承、動態綁定、方法改寫、對象替換等等機制。
  2. 心理認知因素——心理範式:按照面向對象編程之父Alan Kay的觀點,「計算就是模擬」。OO範式極其重視隱喻(metaphor)的價值,經過擬人化,按照天然的方式模擬天然。
  3. 天然觀/世界觀——觀念範式:強調程序的組織技術,視程序爲鬆散耦合的對象/類的集合,以繼承機制將類組織成一個層次結構,把程序運行視爲相互服務的對象們之間的對話。

簡單的說,編程範式是程序員看待程序應該具備的觀點。編程

爲了進一步加深對編程範式的認識,這裏介紹幾種最多見的編程範式。 設計模式

須要再次提醒注意的是:編程範式是編程語言的一種分類方式,它並不針對某種編程語言。就編程語言而言,一種編程語言也能夠適用多種編程範式。 架構

過程化(命令式)編程 

過程化編程,也被稱爲命令式編程,應該是最原始的、也是咱們最熟悉的一種傳統的編程方式。從本質上講,它是「馮.諾伊曼機「運行機制的抽象,它的編程思惟方式源於計算機指令的順序排列。編程語言

(也就是說:過程化語言模擬的是計算機機器的系統結構,而並非基於語言的使用者的我的能力和傾向。這一點咱們應該都很清楚,好比:咱們最先曾經使用過的單片機的彙編語言。)函數式編程

過程化編程的步驟是:函數

首先,咱們必須將待解問題的解決方案抽象爲一系列概念化的步驟。而後經過編程的方式將這些步驟轉化爲程序指令集(算法),而這些指令按照必定的順序排列,用來講明如何執行一個任務或解決一個問題。這就意味着,程序員必需要知道程序要完成什麼,而且告訴計算機如何來進行所需的計算工做,包括每一個細節操做。簡言之,就是將計算機看做一個有始有終服從命令的裝置。學習

因此在過程化編程中,把待解問題規範化、抽象爲某種算法是解決問題的關鍵步驟。其次,纔是編寫具體算法和完成相應的算法實現問題的正確解決。固然,程序員對待解問題的抽象能力也是很是重要的因素,但這自己已經與編程語言無關了。.net

 程序流程圖是過程化語言進行程序編寫的有效輔助手段。 

儘管現存的計算機編程語言不少,可是人們把全部支持過程化編程範式的編程語言都被概括爲過程化編程語言。例如機器語言、彙編語言、BASIC、COBOL、C 、FORTRAN、語言等等許多第三代編程語言都被概括爲過程化語言。 

過程化語言特別適合解決線性(或者說循序漸進)的算法問題。它強調「自上而下(自頂向下)」「精益求精」的設計方式。這種方式很是相似咱們的工做和生活方式,由於咱們的平常活動都是循序漸進的順序進行的。 

 過程化語言趨向於開發運行較快且對系統資源利用率較高的程序。過程化語言很是的靈活並強大,同時有許多經典應用範例,這使得程序員能夠用它來解決多種問題。 

過程化語言的不足之處就是它不適合某些種類問題的解決,例如那些非結構化的具備複雜算法的問題。問題出如今,過程化語言必須對一個算法加以詳盡的說明,而且其中還要包括執行這些指令或語句的順序。實際上,給那些非結構化的具備複雜算法的問題給出詳盡的算法是極其困難的。 

普遍引發爭議和討論的地方是:無條件分支,或goto語句,它是大多數過程式編程語言的組成部分,反對者聲稱:goto語句可能被無限地濫用;它給程序設計提供了製造混 亂的機會。目前達成的共識是將它保留在大多數語言中,對於它所具備的危險性,應該經過程序設計的規定將其最小化。 

事件驅動編程 

其實,基於事件驅動的程序設計在圖形用戶界面(GUI)出現好久前就已經被應用於程序設計中,但是隻有當圖形用戶界面普遍流行時,它才逐漸形演變爲一種普遍使用的程序設計模式。 

在過程式的程序設計中,代碼自己就給出了程序執行的順序,儘管執行順序可能會受到程序輸入數據的影響。

在事件驅動的程序設計中,程序中的許多部分可能在徹底不可預料的時刻被執行。每每這些程序的執行是由用戶與正在執行的程序的互動激發所致。 

  • 事件。就是通知某個特定的事情已經發生(事件發生具備隨機性)。 
  • 事件與輪詢。輪詢的行爲是不斷地觀察和判斷,是一種無休止的行爲方式。而事件是靜靜地等待事情的發生。事實上,在Windows出現以前,採用鼠標輸入字符模式的PC應用程序必須進行串行輪詢,並以這種方式來查詢和響應不一樣的用戶操作。 
  • 事件處理器。是對事件作出響應時所執行的一段程序代碼。事件處理器使得程序可以對於用戶的行爲作出反映。 

事件驅動經常用於用戶與程序的交互,經過圖形用戶接口(鼠標、鍵盤、觸摸板)進行交互式的互動。固然,也能夠用於異常的處理和響應用戶自定義的事件等等。

事件的異常處理比用戶交互更復雜。 

事件驅動不只僅侷限在GUI編程應用。可是實現事件驅動咱們還須要考慮更多的實際問題,如:事件定義、事件觸發、事件轉化、事件合併、事件排隊、事件分派、事件處理、事 件連帶等等。

其實,到目前爲止,咱們尚未找到有關純事件驅動編程的語言和相似的開發環境。全部關於事件驅動的資料都是基於GUI事件的。 

屬於事件驅動的編程語言有:VB、C#、Java(Java Swing的GUI)等。它們所涉及的事件絕大多數都是GUI事件。 

面向對象編程 

過程化範式要求程序員用循序漸進的算法看待每一個問題。很顯然,並非每一個問題都適合這種過程化的思惟方式。這也就致使了其它程序設計範式出現,包括咱們如今介紹的面向對象的程序設計範式。 

面向對象的程序設計模式已經出現二十多年,通過這些年的發展,它的設計思想和設計模式已經穩定的進入編程語言的主流。來自TIOBE Programming Community2010年11月份編程語言排名的前三名Java、C、C++中,Java和C++都是面向對象的編程語言。 

面向對象的程序設計包括了三個基本概念:封裝性、繼承性、多態性。面向對象的程序語言經過類、方法、對象和消息傳遞,來支持面向對象的程序設計範式。 

1. 對象

世間萬事萬物都是對象。

面向對象的程序設計的抽象機制是將待解問題抽象爲面向對象的程序中的對象。利用封裝使每一個對象都擁有個體的身份。程序即是成堆的對象,彼此經過消息的傳遞,請求其它對象 進行工做。 

2. 類

每一個對象都是其類中的一個實體。

物以類聚——就是說明:類是類似對象的集合。類中的對象能夠接受相同的消息。換句話說:類包含和描述了「具備共同特性(數據元素)和共同行爲(功能)」的一組對象。

好比:蘋果、梨、橘子等等對象都屬於水果類。 

3. 封裝

封裝(有時也被稱爲信息隱藏)就是把數據和行爲結合在一個包中,並對對象的使用者隱藏數據的實現過程。信息隱藏是面向對象編程的基本原則,而封裝是實現這一原則的一種方 式。

封裝使對象呈現出「黑盒子」特性,這是對象再利用和實現可靠性的關鍵步驟。 

4. 接口

每一個對象都有接口。接口不是類,而是對符合接口需求的類所做的一套規範。接口說明類應該作什麼但不指定如何做的方法。一個類能夠有一個或多個接口。 

5. 方法

方法決定了某個對象究竟可以接受什麼樣的消息。面向對象的設計有時也會簡單地概括爲「將消息發送給對象」。 

6. 繼承

繼承的思想就是容許在已存在類的基礎上構建新的類。一個子類可以繼承父類的全部成員,包括屬性和方法。

繼承的主要做用:經過實現繼承完成代碼重用;經過接口繼承完成代碼被重用。繼承是一種規範的技巧,而不是一種實現的技巧。 

7. 多態

多態提供了「接口與實現分離」。多態不但能改善程序的組織架構及可讀性,更利於開發出「可擴充」的程序。

繼承是多態的基礎。多態是繼承的目的。

合理的運用基於類繼承的多態、基於接口繼承的多態和基於模版的多態,能加強程序的簡潔性、靈活性、可維護性、可重用性和可擴展性。

面向對象技術一方面借鑑了哲學、心理學、生物學的思考方式,另外一方面,它是創建在其餘編程技術之上的,是之前的編程思想的天然產物。

若是說結構化軟件設計是將函數式編程技術應用到命令式語言中進行程序設計,面向對象編程不過是將函數式模型應用到命令式程序中的另外一途徑,此時,模塊進步爲對象,過程龜縮到class的成員方法中。OOP的不少技術——抽象數據類型、信息隱藏、接口與實現分離、對象生成功能、消息傳遞機制等等,不少東西就是結構化軟件設計所擁有的、或者在其餘編程語言中單獨出現。但只有在面嚮對象語言中,他們才共同出現,以一種獨特的合做方式互相協做、互相補充。

 

 

參考連接:http://www.nowamagic.net/librarys/veda/detail/2488

相關文章
相關標籤/搜索