1.1什麼是面向對象程序設計
面向過程的程序設計思想的核心是功能的分解。將數據結構和過程分離,着重點在過程,設計者首先考慮如何將功能分解,在每一個過程中安排程序的操作序列。缺點之一,當程序的數據結構需要變更的時候,需要修改與之相關的縮影模塊,造成了可重用性差,維護代價高。
面向對象程序設計中,着重點在被操作的數據而不是實現這些操作的過程。
程序=對象+消息
基本元素是對象,主要結構特點:1)程序一般由類的定義和類的使用兩部分組成,在主程序中定義各對象並規定他們之間傳遞消息的規律;2)程序中的一切操作都是通過向對象發送消息來實現的,對象接受到消息後,啓動有關方法完成相應的操作;3)類由繼承關係產生相互之間的關係。
1.2對象和類
1.2.1概念
人是一個“類”,類是具有相同的數據和相同的操作的一組對象的集合。
楊也或者劉恩平是一個實實在在的人,是人這個類的一個實例,對象是描述其屬性的數據以及對這些數據施加的一組操作封裝在一起構成的統一體。對象=屬性+方法。可以理解爲屬性是類中的數據成員,而方法是成員函數。
!類是一種新型的數據結構,只在源程序的代碼中出現,並不會在一個正在運行的程序中出現,即類只在編譯時存在;而對象作爲類的實例在運行的程序中出現,並佔有內存空間,程序的計算任務有對象完成。
1.2.2對象的交互
一個對象向另一個對象發出的請求被稱爲消息。
屬於一個類的對象具有相同的行爲,當某個行爲作用在對象時,即對象執行了一個方法。
消息的三個性質:1)同一個對象可以接收不同形式的多個消息,做出不同的響應;2)相同形式的消息可以傳遞給不同的對象,所作出的響應式可以不同的;3)接收對象對消息的響應並不是必須的,對象可以響應消息當然也可以不響應。
1.2.3類的確定和劃分
面向對象程序設計的難點:類的確定和劃分。按照實際情況合理劃分類。
1.3數據的抽象和封裝
面向對象系統突出特點:抽象與封裝、繼承和多態。
1.3.1現實世界的抽象和封裝
封裝:錄音機有很多的按鍵,我們通過按鍵操作錄音機,而其內部電路的細節對用戶是隱蔽的。
抽象:錄音機的使用說明書告訴我們讓機器播放或者是停止。抽象出來的是做什麼,而不關心怎麼去做。
1.3.2基本概念
數據的抽象通過對數據實例的分析,抽取其共同性質的的結果。
數據的封裝則是隱藏了抽象的內部實現細節的結果。
抽象和封裝時互補的,重要的是抽象先於封裝。
1)對象具有一個清楚的邊界,對象的屬性和方法被封裝在邊界內;
2)具有一個描述該對象與其他對象之間進行交互的接口;
3)對象的內部代碼和數據應該受到保護,不被輕易修改。
1.3.3對象的特性
1)封裝性
2)模塊的獨立性
3)動態鏈接性(通過消息機制)
1.4繼承性
分類:
單繼承和多繼承(從繼承源劃分)
取代繼承、包含繼承、受限繼承、特化繼承等(內容劃分)
類之間繼承關係的幾個特性:1)類間具有共享特性;2)類間具有差別或者是新增部分3)類間具有層次結構。
繼承機制的引入並不影響對象的封裝性。
1.5多態性
多態性是指不同的對象收到相同的消息時產生多種不同的行爲方式。
C++支持兩種多態性,編譯時多態(通過重載來實現)和運行時多態(通過虛函數來實現)。
重載:函數和運算符重載。
Class a{
Public:
Void print(int i);
Void print(float f);
Void print(const char *c);
//.....
};
目的:爲了更好的表達行爲共享,將相似的操作劃分在一起