|
幾乎所有3D軟件的二次開發,基本上都是基于面向對象編程,而搞清楚幾個基本概念對理解程序是非常重要的:: p K8 l0 K, x; H
6 b" b. h( p* N
面向對象的基本概念
- T) @) R: l1 y; r對象:對象是要研究的任何事物。從一本書到一家圖書館,單的整數到整數列龐& g+ Z7 v5 o$ [/ a6 |) O J
大的數據庫、極其復雜的自動化工廠、航天飛機都可看作對象,它不僅能表示有形的實體,也能表示無形的(抽象的)規則、計劃或事件。對象由數據(描述事物的屬性)和作用于數據的操作(體現事物的行為)構成一獨立整體。從程序設計者來看,對象是一個程序模塊,從用戶來看,對象為他們提供所希望的行為。在對內的操作通常稱為方法。4 r( }& ~- ? q' Q( ~
對象的狀態用數據來表示稱為屬性3 z+ r- v( L+ O5 t ?
對象的行為用代碼來實現稱為方法
0 t' X0 w9 B+ s! C& U) C9 i類:類是對象的模板。即類是對一組有相同數據和相同操作的對象的定義,一個類所包含的方法和數據描述一組對象的共同屬性和行為。類是在對象之上的抽象,對象則是類的具體化,是類的實例。類可有其子類,也可有其它類,形成類層次結構。, c B/ K! V7 z
類與對象的關系:例如設計圖紙就是類,依據圖紙制造的零件就是對象# O4 J( u) }% U M2 Y& r4 G- G
5 Q2 z" J' k( _: ?" h面向對象編程有三大特性,封裝、繼承和多態。& q1 n4 E& H+ q3 |$ m
1. 封裝封裝是把客觀事物封裝成抽象的類,并隱藏實現細節,使得代碼模塊化。比如,我們可以把“汽車”這個客觀事物封裝成一個類,這個類有顏色、型號等屬性,有啟動、加速、剎車等方法,而這些屬性和方法的具體實現則被隱藏起來,使用者只需要知道這個類有哪些屬性和方法,不需要知道這些方法是如何實現的。
! G0 I' V% H; U' T8 e# r" x2. 繼承繼承是面向對象編程的另一個重要特性,它提供了一種無需重新編寫,使用現有類的所有功能并進行擴展的能力。比如,我們可以定義一個“電動車”類,它繼承了“汽車”類,就自動擁有了“汽車”類的所有屬性和方法,比如顏色、型號等屬性,啟動、加速、剎車等方法,然后我們還可以在“電動車”類上增加一些新的屬性和方法,比如電池容量、充電方法等。1 y# R; k1 V& c4 L
3. 多態多態是指同一操作作用于不同的對象,可以有不同的解釋,產生不同的執行結果。比如,我們定義了一個“汽車”類,它有一個“啟動”方法,然后我們又定義了一個“電動車”類,它繼承了“汽車”類,也有一個“啟動”方法,但是“電動車”類的“啟動”方法的實現可能與“汽車”類的不同,這就是多態。3 s8 Z6 X+ k& f5 {* O( B$ ?
( Z- d% c* p. z k( j/ h8 x6 s& O4 N3 y: o2 ~7 [2 g2 ]$ P
面向對象編程的理念面向對象編程有兩個主要的理念,基于接口編程和組合優于繼承。 [* }6 ]9 R7 x. G- H$ \, L! Q
1. 基于接口編程基于接口編程的理念是,使用者不需要知道數據類型、結構和算法的細節,只需要知道調用接口能夠實現功能。這就像我們使用電視遙控器一樣,我們不需要知道遙控器內部的電路設計和工作原理,只需要知道按哪個按鈕可以打開電視,按哪個按鈕可以調節音量。# n. p1 b- I5 L" y4 K
2. 組合優于繼承盡管繼承可以使我們更容易地重用和擴展代碼,但是如果繼承層次過深、繼承關系過于復雜,就會嚴重影響代碼的可讀性和可維護性。比如我們修改了基類,就可能影響到繼承它的子類,這會增加迭代的風險。因此,我們更傾向于使用組合而不是繼承。比如,我們可以定義一個“電動車”類,它包含“電池系統”、“制動系統”、“車身系統”、“轉向系統”等組件,而不是繼承“汽車”類。
$ O1 b4 x9 D8 r3 P! A+ u
9 {, r2 s! v( `* m% A( X |
評分
-
查看全部評分
|