1. 程式人生 > >面向過程 面向物件的區別以及C++與Java的區別

面向過程 面向物件的區別以及C++與Java的區別

                         面向物件和麵向過程的區別

    面向過程一種以事件為中心的程式設計思想以功能(行為)為導向,按模組化的設計,就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候一個一個依次呼叫就可以了。

    面向物件一種以事物為中心的程式設計思想,以資料(屬性)為導向,將具有相同一個或者多個屬性的物體抽象為“類”,將他們包裝起來;而有了這些資料(屬性)之後,我們再考慮他們的行為(對這些屬性進行什麼樣的操作),是把構成問題事務分解成各個物件,建立物件的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。

    例如五子棋,面向過程的設計思路就是首先分析問題的步驟:

    1、開始遊戲,

    2、黑子先走,

    3、繪製畫面,

    4、判斷輸贏,

    5、輪到白子,

    6、繪製畫面,

    7、判斷輸贏,

    8、返回步驟2,

    9、輸出最後結果。

    把上面每個步驟用分別的函式來實現,問題就解決了。 
    而面向物件的設計則是從另外的思路來解決問題。整個五子棋可以分為:

    1、黑白雙方,這兩方的行為是一模一樣的,

    2、棋盤系統,負責繪製畫面,

    3、規則系統,負責判定諸如犯規、輸贏等。

    第一類物件(玩家物件)負責接受使用者輸入,並告知第二類物件(棋盤物件)棋子佈局的變化,棋盤物件接收到了棋子的變化就要負責在螢幕上面顯示出這種變化,同時利用第三類物件(規則系統)來對棋局進行判定。

    可以明顯地看出,面向物件是以功能來劃分問題,而不是步驟。同樣是繪製棋局,這樣的行為在面向過程的設計中分散在了總多步驟中,很可能出現不同的繪製版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而面向物件的設計中,繪圖只可能在棋盤物件中出現,從而保證了繪圖的統一。

    功能上的統一保證了面向物件設計的可擴充套件性。比如我要加入悔棋的功能,如果要改動面向過程的設計,那麼從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是面向物件的話,只用改動棋盤物件就行了,棋盤系統儲存了黑白雙方的棋譜,簡單回溯就可以了,而顯示和規則判斷則不用顧及,同時整個對物件功能的呼叫順序都沒有變化,改動只是區域性的。

    舉例2:又比如我們有一臺演出,為簡單起見,假設有如下流程:主持人開場——演員一表演——演員二表演——主持人總結。

    用面向過程的思想來分析,就是先完成主持人開場,再完成演員一的表演,再完成演員二的表演,最後完成主持人的總結。

    而如果用面向物件的思想來分析,就應該是這樣的。這個演出由兩大部分組成:主持人、演員。與主持人相關的:開場、總結。與演員相關的:演員編號、所演的節目。然後這臺演出就可以這樣策劃:需要一個主持人a,需要兩個演員b、c。演出的事情可以表示為:a的開場——> b、c的編號和節目——> a的總結。

 什麼是面向物件技術?

 面向物件技術是一種以物件為基礎,以事件或訊息來驅動物件執行處理的程式設計技術。它具有封裝性、繼承性及多型性。

   傳統的面向程序式程式設計語言是以過程為中心以演算法為驅動的話,面向物件的程式語言則是以物件為中心以訊息為驅動。
 面向物件技術有哪些優點?

   面向物件技術具有程式結構清晰,自動生成程式框架,實現簡單,維護簡單,程式碼重用率高,軟體開發效率高等優點

C++與Java的區別及聯絡有以下幾點:

1、  C++和Java在語法上非常相似。

2、  Java關注的是安全性,可移植性和快速開發;C++則更多關注效能以及與C向下相容。

3、  Java被編譯成虛擬機器位元組碼,需要由虛擬機器執行;C++則被編譯成本地機器碼。這點使C++執行更快。

4、  C++是C的超集,保留了許多功能,如記憶體管理、指標和預處理,這是為了和C保持完全相容。Java去除了這些功能,它用垃圾收集代替了程式設計師釋放記憶體;它還放棄了運算子過載和多重繼承等C++的功能;但它可以利用介面實現有限制的多重繼承。

5、  Java中所有物件都是按引用傳遞的;C++中,預設行為是按值傳遞的。

6、  Java中所有的方法都是虛方法;C++中必須顯示地宣告為virtual。

7、  Java對基本資料型別有規定的位元組大小;C++中型別的位元組大小取決於C++(和C)的實現。

8、  當存在遺留的C程式碼或對效能有較大需求時,選擇C++,特別是在需要訪問底層系統時;當強調可移植性、安全性和開發速度時,應選擇Java。因為java 是執行在jvm上的,之所以說它的可移植性強,是因為jvm可以安裝到任何的系統
 c++不是不能在其他系統執行,而是c++在不同的系統上執行,需要不同的編碼(這一點不如java,只編寫一次程式碼,到處執行)

9、 C++程式要顯式地釋放所分配的記憶體,而Java具有記憶體垃圾收集機制   

    Java自動進行無用記憶體回收操作,不需要程式員進行刪除。Java中當一個物件不被再用到時,無用記憶體回收器將給它加上標籤以示刪除。JAVA裡無用記憶體回收程式是以執行緒方式在後臺執行的,利用空閒時間工作。

    而c十十中必須由程式貝釋放記憶體資源,增加了程式設計者的負扔。

  10、 JAVA語言讓程式設計者無法找到指標來直接訪問記憶體無指標,並且增添了自動的記憶體管理功能,從而有效地防止了cc++語言中指標操作失誤,如野指標所造成的系統崩潰。但也不是說JAVA沒有指標,虛擬機器內部還是使用了指標,只是外人不得使用而已。這有利於Java程式的安全。

   C++通過建構函式建立物件,可以直接使用指標來操作物件的成員,而Java通過new運算子建立物件,通過new運算子返回的物件引用來使用物件,而不是直接操作指標; 

11、Java是完全面向物件的語言,所有函式和變數部必須是類的一部分。除了基本資料型別之外,其餘的都作為類物件,包括陣列。物件將資料和方法結合起來,把它們封裝在類中,這樣每個物件都可實現自己的特點和行為。

  而C++是混合型面向物件程式設計語言,c++允許將函式和變數定義為全域性的。此外,Java中取消了cc++中的結構和聯合,消除了不必要的麻煩。