C 之物件導向的簡單總結

2021-08-07 06:40:51 字數 3260 閱讀 7639

什麼是物件導向?

物件導向(object oriented,oo)是軟體開發方法。物件導向的概念和應用已超越了程式設計和軟體開發,擴充套件到如資料庫系統、互動式介面、應用結構、應用平台、分布式系統、網路管理結構、cad技術、人工智慧等領域。物件導向是一種對現實世界理解和抽象的方法,是計算機程式設計技術發展到一定階段後的產物。

物件導向的思想已經涉及到軟體開發的各個方面。如,物件導向的分析(ooa,object oriented analysis),物件導向的設計(ood,object oriented design)、以及我們經常說的物件導向的程式設計實現(oop,object oriented programming)。

⑴物件。

物件是人們要進行研究的任何事物,從最簡單的整數到複雜的飛機等均可看作物件,它不僅能表示具體的事物,還能表示抽象的規則、計畫或事件。

⑵物件的狀態和行為。

物件具有狀態,乙個物件用資料值來描述它的狀態。

物件還有操作,用於改變物件的狀態,物件及其操作就是物件的行為。

物件實現了資料和操作的結合,使資料和操作封裝於物件的統一體中

⑶類。

具有相同特性(資料元素)和行為(功能)的物件的抽象就是類。因此,物件的抽象是類,類的具體化就是物件,也可以說類的例項是物件,類實際上就是一種資料型別。

類具有屬性,它是物件的狀態的抽象,用資料結構來描述類的屬性。

類具有操作,它是物件的行為的抽象,用操作名和實現該操作的方法來描述。

⑷類的結構。

在客觀世界中有若干類,這些類之間有一定的結構關係。通常有兩種主要的結構關係,即一般--具體結構關係,整體--部分結構關係。

①一般--具體結構稱為分類結構,也可以說是「或」關係,或者是「is a」關係。

②整體--部分結構稱為組裝結構,它們之間的關係是一種「與」關係,或者是「has a」關係。

⑸訊息和方法。

物件之間進行通訊的結構叫做訊息。在物件的操作中,當乙個訊息傳送給某個物件時,訊息包含接收物件去執行某種操作的資訊。傳送一條訊息至少要包括說明接受訊息的物件名、傳送給該物件的訊息名(即物件名、方法名)。一般還要對引數加以說明,引數可以是認識該訊息的物件所知道的變數名,或者是所有物件都知道的全域性變數名。

類中操作的實現過程叫做方法,乙個方法有方法名、返回值、引數、方法體。

物件導向的三大特徵:

封裝

封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏.

繼承

物件導向程式設計 (oop) 語言的乙個主要功能就是「繼承」。繼承是指這樣一種能力:它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴充套件。

a.通過繼承建立的新類稱為「子類」或「派生類」。

b.被繼承的類稱為「基類」、「父類」或「超類」。

c.繼承的過程,就是從一般到特殊的過程。

d.要實現繼承,可以通過「繼承」(inheritance)和「組合」(composition)來實現。

在某些 oop 語言中,乙個子類可以繼承多個基類。但是一般情況下,乙個子類只能有乙個基類,要實現多重繼承,可以通過多級繼承來實現。 

繼承概念的實現方式有三類:實現繼承、介面繼承和可視繼承。

a.實現繼承是指使用基類的屬性和方法而無需額外編碼的能力;

b.介面繼承是指僅使用屬性和方法的名稱、但是子類必須提供實現的能力;

c.可視繼承是指子窗體(類)使用基窗體(類)的外觀和實現**的能力。

在考慮使用繼承時,有一點需要注意,那就是兩個類之間的關係應該是「屬於」關係。例如,employee是乙個人,manager 也是乙個人,因此這兩個類都可以繼承person 類。但是 leg 類卻不能繼承 person 類,因為腿並不是乙個人。

抽象類僅定義將由子類建立的一般屬性和方法,建立抽象類時,請使用關鍵字inte***ce 而不是 class。

oo開發正規化大致為:劃分物件→抽象類→將類組織成為層次化結構(繼承和合成)→用類與例項進行設計和實現幾個階段。

多型

多型性(polymorphisn)是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話:允許將子類型別的指標賦值給父類型別的指標。

實現多型,有二種方式,覆蓋,過載。

覆蓋,是指子類重新定義父類的虛函式的做法。

過載,是指允許存在多個同名函式,而這些函式的參數列不同(或許引數個數不同,或許引數型別不同,或許兩者都不同)。

物件導向程式設計的步驟:

物件導向是一種思想,他讓我們在分析和解決問題時,把思維和重點轉向現實中的客體中來,然後通過uml工具理清這些客體之間的聯絡,最後用物件導向的語言實現這種客體以及客體之間的聯絡。它分為物件導向的分析(ooa),物件導向的設計(ood),物件導向的程式設計實現(oop)三個大的步驟。

1、首先是分析需求,先不要思考怎麼用程式實現它,先分析需求中穩定不變的客體都是些什麼,這些客體之間的關係是什麼。

2、把第一步分析出來的需求,通過進一步擴充模型,變成可實現的、符合成本的、模組化的、低耦合高內聚的模型。

3、使用物件導向的實現模型

面向過程到物件導向思維如何轉變?

當我們習慣了面向過程程式設計時,發現在程式過程中到處找不到需要物件導向的地方,最主要的原因,是思維沒有轉變。程式設計師通常在拿到乙個需求的時候,第乙個反應就是如何實現這個需求,這是典型的面向過程的思維過程,而且很快可能就實現了它。而物件導向,面對的卻是客體,第一步不是考慮如何實現需求,而是進行需求分析,就是根據需求找到其中的客體,再找到這些客體之間的聯絡。因此面向過程和物件導向的思維轉變的關鍵點,就是在第一步設計,拿到需求後,一定先不要考慮如何實現它,而是通過uml建模,然後按照uml模型去實現它。這種思路的轉變,可能需要個過程。

「物件導向」和「面向過程」的區別

物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為;面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。

小結:關於物件導向,目前也就了解了這麼多,相信在以後的學習中,會對物件導向更加熟悉和理解,到時候再來補充。

C 之物件導向

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!話說三國時期,曹操帶領百萬大軍攻打東吳,大軍在長江赤壁駐紮,軍船連成一片,眼看就要滅掉東吳,統一天下,曹操大悅,於是晏眾文武,在酒席間,曹操詩興大發,不覺吟道 喝酒唱歌,人生真爽 眾文武其呼 丞相好詩!於是一臣子速命印刷工匠刻版印刷,以便流傳天下。...

C 之物件導向 上

物件導向 上 一,引用的應用 swap.cpp include using namespace std int main void void swap1 int a,int b 傳遞的是實參a,b的複製,也就是副本 void swap2 int a,int b 傳遞的是實參a,b的位址 void s...

C 學習雜記之 物件導向

1 物件是類的乙個例項 instance 重要的是類的設計而不是物件的設計,類要注重行為的設計而不是資料 的設計,所以類中先public 成員函式。2 繼承與程式復用性的關係 1 b繼承a,則b必須是a的一種 如果b是a的一部分,則不允許b繼承a的功能 2 通過繼承,實現了後來寫的程式可以使用以前寫...