當前位置:吉日网官网 - 傳統節日 - 面向過程編程和面向對象編程各有什麽優缺點?

面向過程編程和面向對象編程各有什麽優缺點?

面向對象編程

作者:匿名文章來源:未知點擊量:11677更新時間:2005-10-14

作者:拉姆錢德拉·加爾格

軟件危機(軟件危機)

軟件技術總是處於不斷的發展變化中,新的工具和技術層出不窮。這就要求軟件行業和軟件工程師不斷尋求軟件設計和開發的新途徑。由於軟件系統的日益復雜和軟件行業內部競爭的日益激烈,這壹要求變得更加迫切。為了克服由這壹要求引起的軟件危機,必須解決以下問題:

1,在系統設計中,如何表示問題的真實實體?

2.如何設計具有開放接口的系統?

3.如何保證模塊的復用性和擴展性?

4.如何開發能夠容忍未來可能發生的變化的模塊?

5.如何提高軟件生產率,降低軟件開銷?

6.如何管理時間表?

7.如何提高軟件質量?

8.軟件開發過程如何產業化?

當軟件產品沒有完成,沒有被使用,或者發布時帶有各種錯誤,問題就出現了。此外,用戶需求的變化也成為壹個重要的問題。許多關於軟件實現的報告表明,在軟件產品發布和使用之前,需要對其質量進行仔細的評估。壹般來說,條件評估中應考慮的質量因素包括:

1,正確性(正確性)

2、可維護性(maintenance)

3、可重用性(reuse ability)

4.開放性和可解釋性。

5.輕便

6、安全(保安)

7、誠信(Integrity)

8、用戶友好性(User friendship)

軟件進化(軟件進化)

人工智能領域的著名作家歐內斯特·泰洛將軟件技術的發展比作樹木的生長。像樹壹樣,軟件的進化有明顯的階段,這些階段被稱為層。在過去的四十年裏,這幾層逐漸建立起來,每壹層都是從前壹層發展起來的。圖1顯示了這個過程。但是當談到層的壽命時,關於樹的比喻就失效了。在壹個軟件系統中,每壹層都在不斷地發揮作用,而在壹棵樹中,只有頂層是有用的。

面向對象編程是壹種新的編程方法。自從計算機發明以來,為了適應日益復雜的程序,編程的方法發生了巨大的變化。匯編語言發明以後,程序員終於可以用符號來表示那些機器指令了,這樣就可以編寫更長更復雜的程序了。當程序的規模不斷增長時,高級語言被引入,為程序員提供了更多的工具來處理日益增加的復雜性。第壹種普遍使用的語言是FORTRAN。然而,盡管FORTRAN邁出了重要的第壹步,但用它編寫的代碼卻很難清晰易懂。

結構化編程的思想誕生於1960。C和Pascal等語言強烈提倡這種編程方式。結構化編程語言使得編寫更復雜的程序變得容易。但是,壹旦項目達到壹定規模,即使使用結構化編程方法,情況也會變得不可控。

在編程方法的發展中,每壹次重大突破都使程序員能夠應對更大的復雜性。在這條道路上的每壹步,新方法都使用並發展了以前方法中的最佳思想。今天,許多項目的規模有了進壹步的發展。為了解決這個問題,面向對象的編程方法應運而生。

在詳細介紹面向對象編程之前,我們先簡單了解壹下面向過程編程的方法。在面向過程的程序設計方法中,問題被看作是壹系列要完成的任務,如閱讀、計算和打印。許多功能用於完成這些任務。問題的焦點在函數上。圖2顯示了壹個典型的面向過程的程序結構。層次分解技術用於確定解決特定問題需要完成的壹系列任務。

面向過程編程的基本任務是編寫計算機執行的指令序列,並以函數的方式組織這些指令。通常我們使用流程圖來組織這些動作,並描述從壹個動作到另壹個動作的控制流。

我們在專心開發函數的時候,很少關註多個函數所使用的數據。這些數據怎麽了?使用這些數據的函數對它們有什麽影響?

在壹個多功能程序中,許多重要的數據都放在全局數據區,以便所有的函數都可以訪問它們。每個函數都可以有自己的本地數據。圖3顯示了面向過程的程序中功能和數據之間的關系。

面向對象編程模式

發明面向對象編程方法的主要出發點是為了彌補面向過程編程方法中的壹些缺點。OOP將數據視為程序開發的基本元素,不允許數據在系統中自由流動。它將數據與操作數據的函數緊密地聯系在壹起,並保護數據免受外部函數的意外更改。OOP允許我們將問題分解成壹系列實體——這些實體被稱為對象,然後圍繞這些實體構建數據和功能。面向對象編程中數據和功能的組織結構如圖4所示。

壹個對象的數據不能訪問其他對象的函數,而壹個對象的函數可以訪問其他對象的函數。

面向對象編程的壹些顯著特征包括:

編程的重點是數據而不是過程;

程序分為所謂的對象;

數據結構被設計成表達對象的特征;

函數作為對對象數據的操作,與數據結構緊密結合;

數據是隱藏的,不能被外部函數訪問;

對象可以通過函數進行通信;

需要時可以方便地添加新的數據和功能;

在編程過程中遵循自底向上的設計方法。

面向對象編程是編程模式中的新概念,對不同的人可能有不同的含義。因此,在我們繼續下面的內容之前,最好先給出壹個面向對象編程的定義。我們對面向對象編程的定義是“面向對象編程是壹種為數據和函數提供獨立內存空間的方法,必要時可以作為模板創建類似模塊的副本。”。這樣的編程方法被稱為面向對象編程。"

從上面的定義可以看出,壹個對象被看作是計算機內存中壹個獨立的區間,在這個區間中存儲著數據和壹組可以訪問數據的操作。因為內存間隔是相互獨立的,所以對象無需修改就可以在許多不同的程序中使用。

什麽是面向對象編程?

面向對象編程(OOP)技術從結構化編程中吸收好的思想,並將這些思想與壹些新的、強大的思想相結合,從而為妳的編程工作提供了壹種全新的方法。通常,在面向對象的編程風格中,妳會將壹個問題分解成壹些相互關聯的子集,每個子集包含相關的數據和函數。同時,妳會以某種方式把這些子集分成不同的層次,壹個對象就是某個類型的定義變量。當您定義壹個對象時,您隱式地創建了壹個新的數據類型。

面向對象編程的基本概念

作為壹個術語,“面向對象”在不同的人之間有不同的解釋。因此,有必要了解壹些在面向對象編程中廣泛使用的概念。在本節中,我們將討論以下內容:

1,對象

2.班級

3.數據抽象

4.遺產

5.動態綁定

6.數據封裝

7.多態性

8.信息傳遞

目標

在面向對象的系統中,對象是運行時的基本實體。它可以用來表示壹個人或壹個銀行賬戶、壹個數據表或任何需要程序處理的東西。它還可以用來表示用戶定義的數據,如向量、時間或列表。在面向對象編程中,對問題的分析壹般是基於對象以及對象之間的自然關系。如前所述,壹個對象在內存中占據壹定的空間,並有壹個與之相關聯的地址,就像Pascal和c中record中的結構壹樣。

當程序運行時,對象通過相互發送消息來進行交互。例如,程序包含壹個“客戶”對象和壹個“帳戶”對象,客戶對象可以向帳戶對象發送消息以查詢其銀行帳戶。每個對象都包含數據和操作數據的代碼。即使不知道對方數據和代碼的細節,對象之間仍然可以進行交互。妳只需要知道對象可以接受的消息類型和對象返回的響應類型,盡管不同的人會用不同的方式實現它們。

種類

正如我們前面提到的,對象包含數據和操作數據的代碼。壹個對象包含的所有數據和代碼都可以通過類形成壹個用戶自定義的數據類型。事實上,對象是壹個類類型的變量。壹旦定義了壹個類,我們就可以創建這個類的多個對象,每個對象都與壹組數據相關,而這組數據的類型是在類中定義的。因此,類是具有相同類型的對象的抽象。例如,芒果、蘋果和橘子都是水果類的對象。類是用戶定義的數據類型,但在編程語言中,它的行為與內置數據類型相同。例如,創建類對象的語法與創建整數對象的語法完全相同。如果水果被定義為壹個類,則語句

水果芒果;

創建了壹個水果類的對象mango。

數據抽象和封裝

將數據和功能包裝在壹個單元(稱為類)中的行為稱為封裝。數據封裝是壹個類最典型的特征。數據不能被外界訪問,只能被封裝在同壹個類中的函數訪問。這些函數提供了對象數據和程序之間的接口。防止數據被程序直接訪問的概念被稱為“數據隱藏”。

抽象是指只表達核心的特征而不描述背景細節的行為。類使用抽象概念,並被定義為壹系列抽象屬性,如尺寸、重量和價格,以及操縱這些屬性的函數。類封裝了要創建的對象的所有核心屬性。因為類使用數據抽象的概念,所以它們被稱為抽象數據類型(ADT)。

包裝

封裝機制將數據和代碼綁定在壹起,避免了外部幹擾和不確定性。它還允許創建對象。簡單地說,對象是封裝數據和對數據進行操作的代碼的邏輯實體。

在壹個對象中,壹些代碼和/或壹些數據可以是私有的,不能被外界訪問。通過這種方式,對象為內部數據提供了不同級別的保護,以防止程序中不相關的部分意外更改或誤用對象的私有部分。

繼承

繼承是壹種允許壹種類型的對象獲得另壹種類型的對象的屬性的方法。它支持層次分類的概念。比如知更鳥,既屬於鳥,也屬於鳥。如圖5所示,這種分類的原則是每個子類都具有父類的共同特征。

在OOP中,繼承的概念很好地支持了代碼的可重用性,也就是說,我們可以在不改變類的情況下向現有的類添加新的特性。這可以通過從這個現有的類派生壹個新的類來實現。這個新的類將具有原始類的特征,以及新的特征。繼承機制的魅力和強大之處在於,它允許程序員利用現有的類(接近需求的類,而不是完全滿足需求的類),並且可以在不影響其他東西的情況下,以某種方式修改這個類。

請註意,每個子類只定義了該類獨有的特性。如果沒有層次分類,每個類必須明確定義其所有特征。

多態的

多態性是OOP的另壹個重要概念。多態意味著事物有不同形式的能力。例如,對於不同的實例,操作可能會有不同的行為。這種行為取決於要操作的數據類型。比如加法運算,如果運算的數據是壹個數,它將兩個數相加。如果操作的數據是壹個字符串,它將連接兩個字符串。

圖6展示了壹個函數處理不同數量和類型的參數。就像壹個詞在不同的語境中有不同的含義。

多態機制使得不同內部結構的對象可以享受相同的外部接口。這意味著盡管不同對象的具體操作是不同的,但它們(那些操作)可以通過公共類以相同的方式調用。多態性在實現繼承的過程中被廣泛使用。

面向對象編程語言支持多態,稱為“壹個接口多個方法”。簡單地說,多態允許通過同壹個接口觸發壹組相關但不同的動作,這可以降低代碼的復雜性。在特定的情況下應該采取什麽樣的行動是由編譯器決定的,而不需要程序員的人工幹預。

在多功能程序中,許多重要數據被聲明為全局變量,以便所有函數都可以訪問它們。每個函數都可以有自己的局部變量。全局變量很容易被函數無意中改變。在大型程序中,很難區分每個函數中使用了哪些變量。如果我們需要修改壹個外部數據的結構,我們需要修改所有訪問這個數據的函數。這很容易導致bug。

結構化編程的另壹個嚴重缺陷是它不能很好地模擬現實世界。這是因為函數是面向過程的,而不是實際對應問題中的每個元素。

面向過程編程的壹些特征如下:

強調做(算法);

大程序分成很多小程序,叫做函數;

大多數函數* * *享受全局數據;

開放數據從壹個功能流向另壹個功能。函數將數據從壹種形式轉換成另壹種形式。

采用自頂向下的編程方法。

動態綁定

綁定是指將過程調用與相應的代碼鏈接起來的行為。動態綁定意味著與給定過程調用相關聯的代碼只有在運行時才是已知的。它與多態性和遺傳密切相關。多態引用的函數調用取決於引用的動態類型。

考慮圖6中的“draw”方法。通過繼承,每個對象都有這個過程。但是它的算法對於不同的對象是不壹樣的,所以繪制過程必須在每個類中重新定義。在運行時,將調用與當前引用的對象對應的代碼。

信息傳遞

壹個面向對象的程序由許多對象組成,這些對象需要相互通信。因此,在面向對象編程語言中,編程的主要步驟如下:

1.創建定義對象及其行為的類;

2.通過類定義創建對象;

3.在對象之間建立通信。

物體之間通過發送和接收信息進行交流,類似於人與人之間的信息傳遞。信息傳遞的概念使得直接模擬現實世界,建立系統通信變得更加容易。

對於壹個特定的對象來說,消息是執行某個過程的請求,所以消息的接收對象會調用壹個函數(過程)來產生預期的結果。傳遞的消息的內容包括接收消息的對象的名稱、要調用的函數的名稱以及必要的信息。

壹個對象有壹個生命周期。它們可以被創造和毀滅。只要對象還在生命周期中,就可以與它進行通信。

面向對象的優勢

OOP有很多優點,對程序員和用戶都是如此。面向對象為軟件產品擴展和質量保證中的許多問題提供了解決方案。這項技術可以大大提高程序員的工作效率,提高軟件質量,降低其維護成本。其主要優點如下:

1,通過繼承,可以大大減少冗余代碼,擴展現有代碼的用途;

2.我們可以在壹個標準模塊(這裏所謂的“標準”是指程序員之間達成的協議)上構建我們的程序,而不必從頭開始。這樣可以減少軟件開發時間,提高生產效率;

3.數據隱藏的概念有助於程序員保護程序免受外部代碼的攻擊;

4.允許壹個對象的多個實例同時存在而互不幹擾;

5.允許將問題空間中的對象直接映射到程序中;

6.基於對象的工程可以很容易地分成獨立的部分;

7.以數據為中心的設計方法可以讓我們掌握可實現模型的更多細節;

8.面向對象的系統可以很容易地從小升級到大;

9.對象與外部系統接口通信中使用的消息傳遞技術的描述更簡單;

10,更方便控制軟件復雜度。

當上面提到的所有特性都需要在壹個面向對象的系統中有機結合時,它們的相對重要性取決於工程的類型和程序員的偏好。為了獲得上述壹些優點,必須考慮許多事情。例如,對象庫必須是可重用的。技術是不斷發展的,現有的產品會更新很快。如果沒有實現復用,那麽就需要嚴格的控制和管理。

易於使用的開發軟件通常很難編寫。面向對象的編程工具有望解決這個問題。

面向對象的編程語言

面向對象技術不是特定語言的特權。像結構化編程壹樣,OOP概念可以用許多語言實現,比如C和Pascal。但是當程序越做越大的時候,程序設計工作就會變得笨拙和混亂。而壹門支持OOP理念的編程語言,可以讓壹切變得簡單。

壹門語言必須支持幾個主要的OOP概念,才能稱之為面向對象。根據支持的OOP特性,語言可以分為以下兩類:

1,基於對象的編程語言;

2.面向對象編程語言。

基於對象的編程語言只支持封裝和對象標識。

面向對象編程語言支持的重要特性如下:

數據封裝

數據隱藏和訪問機制

對象的自動初始化和移除

運算符重載

支持對象式編程的語言稱為基於對象的編程語言。它們不支持繼承和動態綁定。

Ada是壹種典型的基於對象的編程語言。

面向對象編程不僅包含了基於對象編程的特點,還支持繼承和動態綁定。

面向對象的應用

OOP最有前途的應用領域如下:

1,實時系統;

2.模擬和建模;

3.對象數據庫;

4.超文本、超媒體和擴展文本;

5.人工智能和專家系統;

6.神經網絡和並行編程;

7、決策支持和辦公自動化系統;

8.CIM/CAM/CAD系統

  • 上一篇:如何在閱讀教學中實施語言訓練
  • 下一篇:馬如何進行保定?
  • copyright 2024吉日网官网