(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)