1. 程式人生 > >C++學習(二) C++面向物件程式設計方法概述

C++學習(二) C++面向物件程式設計方法概述

(1)面向過程與面向物件的比較

面向過程程式設計方法(C語言)

分析出要解決所需要的步驟,然後用函式把各步驟逐個實現,執行時依次呼叫各個函式即可。

程式 = 演算法 + 資料結構

面向物件程式設計方法(C++語言)

把問題分解成各個物件,描述各個物件的屬性和行為,通過物件的相互作用來解決問題。

物件 = 演算法 + 資料結構
程式 = 物件s + 訊息
(訊息的作用就是對物件的控制)

(2)面向物件程式設計方法的介紹

一般步驟

定義類 –> 建立物件 –> 向物件傳送訊息,使物件行動起來

-------------------------------------
面向物件的基本概念     面向物件系統的特性
-------------------------------------
    基類         |      抽象性
------------------------------------- 
    物件         |      封裝性
-------------------------------------   
    訊息         |      繼承性
-------------------------------------
    方法         |      多型性
-------------------------------------

面向物件程式設計是程式設計的新思維,它既吸收了結構化程式設計的一切優點,又考慮了現實世界與面向物件空間的對映關係,它所追求的目標是將現實世界問題的求解儘可能簡單化。

面向物件程式設計將資料以及對資料的操作放在一起,作為一個相互依存、不可分割的整體來處理,它採用了資料抽象和資訊隱藏技術。它將物件及對物件的操作抽象成一種新的資料型別——類,並且考慮不同物件之間的聯絡和物件所在類的重用性。

面向物件程式設計優於傳統的結構化程式設計,其優越性表現在,它有希望解決軟體工程的兩個主要的問題——軟體複雜性控制和軟體生產率的提高,此外它還符合人類的思維習慣,能夠自然地表現現實世界的實體和問題,它對軟體開發過程具有很重要的意義。

面向物件的基本概念: 基類物件訊息方法

物件

物件是現實世界中一個實際存在的事物,它是有形的,也可以是無形的或無法整體觸及的抽象事件。物件是構成世界的一個獨立單位,它具有自己的靜態特徵(靜態特徵是可以用某種資料來描述)和動態特徵(動態特徵即物件所表現的行為或物件所具有的功能)。一個物件可以包含多個屬性(屬性是一組資料結構的集合,表示物件的一種狀態,物件的狀態只供物件自身使用,用來描述靜態特性)和多個服務(服務是用來描述物件動態特徵或行為的一個操作序列,是物件一組功能的體現,包括自操作和它操作。自操作是物件對其內部資料屬性進行的操作,它操作是對其他物件進行的操作),物件的屬性值只能由這個物件的服務存取和修改。物件是其自身所具有的狀態特徵及可以對這些狀態施加的操作結合在一起所構成的獨立實體。

物件具有如下的特性:

(1)具有唯一標識名,可以區別於其他物件;

(2)具有一個狀態,由與其相關聯的屬性值集合所表徵;

(3)具有一組操作方法即服務,每個操作決定物件的一種行為;

(4)一個物件的成員仍可以是一個物件;

(5)模組獨立性;

(6)動態連線性;

(7)易維護性;

類(基類)

在面向物件系統中,並不是將各個具體的物件都進行描述,而是忽略其非本質的特性,找出其共性,將物件劃分成不同的類,這一過程稱為抽象過程。類是物件的抽象及描述,是具有共同屬性和操作的多個物件的相似特性的統一描述體。在類的描述中,每個類要有一個名字標識,用以標識一組物件的共同特徵。類的每個物件都是該類的例項。類提供了完整的解決特定問題的能力,因為類描述了資料結構(物件屬性)、演算法(服務方法)和外部介面(訊息協議),是一種使用者自定義的資料型別。

訊息

訊息是面向物件系統中實現物件間的通訊和請求任務的操作,是要求某個物件執行其中某個功能操作的規格說明。傳送訊息的物件稱為傳送者,接受訊息的物件稱為接收者。物件間的聯絡,只能通過訊息來進行。物件在接收到訊息時才被啟用。

訊息具有三個性質:

(1)同一物件可接收不同形式的多個訊息,產生不同的響應;

(2)相同形式的訊息可以傳送給不同物件,所做出的響應可以是截然不同的;

(3)訊息的傳送可以不考慮具體的接收者,物件可以響應訊息,也可以對訊息不予理會,對訊息的響應並不是必需的。

方法

在面向物件程式設計中,要求某一物件完成某一操作時,就向物件傳送一個相應的訊息,當物件接收到發向它的訊息時,就呼叫有關的方法,執行相應的操作。方法就是物件所能執行的操作。方法包括介面(介面就是訊息的模式,它給出了方法的呼叫協議)和方法體(方法體則是實現這種操作的一系列計算步驟,也就是一段程式)兩部分;訊息和方法的關係是:物件根據接收到的訊息,呼叫相應的方法;反過來,有了方法,物件才能響應相應的訊息。

面向物件系統特性:抽象性封裝性繼承性多型性

抽象性

程式是由一組物件組成的。程式設計師可以將一組物件的共同特徵進一步抽象出來,進而形成“類”的概念。抽象是一種從一般觀點看待事物的方法,它要求程式設計師集中於事物的本質特徵,而不是具體細節或具體實現。

封裝性

資料封裝就是指一組資料和與這組資料有關的操作集合組裝在一起,形成一個能動的實體,也就是物件。資料封裝就是給資料提供了與外界聯絡的標準介面,無論是誰,只有通過這些介面並使用規範的方式,才能訪問這些資料。

繼承性

從已有的物件型別出發建立一種新的物件型別,使它繼承原物件的特點和功能,這種思想是面向物件設計方法的主要貢獻。繼承是對許多問題中分層特性的一種自然描述,因而也是類的具體化和實現重用的一種手段,它所表達的就是一種不同類之間的繼承關係。它使得某類物件可以繼承另外一類物件的特徵和能力。繼承所具有的作用有兩個方面:一方面可以減少冗餘程式碼,另一方面可以通過協調性減少介面和介面

從繼承源上劃分繼承可以分為單繼承(子類對單個直接父類的繼承稱為單一繼承)和多繼承(子類多於一個直接父類的繼承稱為多重繼承)。父類也稱為基類或超類,子類也稱為派生類。

從繼承內容上可以分為取代繼承包含繼承受限繼承特化繼承

多型性

不同的物件接收到相同的訊息時產生完全不同的行為的現象稱為多型性。C++語言支援兩種多型性,即編譯時的多型性(通過過載函式實現)和執行時的多型性(通過虛擬函式實現)。使用多型性可以大大提高人們解決複雜問題的能力。

面向物件程式設計能支援的軟體開發策略有:

(1)編寫可重用程式碼;

(2)編寫可維護程式碼;

(3)共享程式碼;

(4)精減已有程式碼;

面向物件的軟體開發:

1、面向物件分析(object oriented analysis , OOA)

2、面向物件設計(object oriented design , OOD)

3、面向物件程式設計(object oriented programming , OOP)

4、面向物件測試(object oriented test , OOT)

5、面向物件維護(object oriented soft maintenance , OOSM)

相關推薦

no