1. 資料結構耦合性極強
一旦父類中增加或刪除某個字段,可能要影響到所有子類,影響到所有子類相關的邏輯。這顯得非常不靈活,在一套複雜的繼承體系中,往父類中改變欄位會變得越來越麻煩,比方說abc是d的子類,某天發現需要增加乙個ab都有的資料,但是c沒有,那麼這個資料肯定不好放到父類中,只能將ab抽象出來乙個父類e,e繼承於d,ab共有的字段加到e中,一旦繼承結構發生了變化,可能介面也要改變,比方說之前有個介面傳入引數型別是e,當ab不再需要共用的那個字段,那麼需要調整繼承關係,讓ab重新繼承d,那麼這個介面的傳入引數型別需要改成d,其中的邏輯**很可能也要發生調整。更可怕的是遊戲邏輯變化非常複雜,非常頻繁,可能今天加了個字段,明天又刪掉了,假如每次都要去調整繼承結構,這簡直就是噩夢。繼承結構面對頻繁的資料結構調整感覺很無力。
2. 難以熱插拔繼承結構無法執行時增加刪除字段,比如玩家player平常是走路,使用坐騎後就騎馬。問題是坐騎的相關資訊就需要一直掛在player物件上面。這就顯得很不靈活,我不騎馬的時候記憶體中為啥要有馬的資料?介面也有同樣的問題,乙個類實現了乙個介面,那麼這個介面就永遠粘在了這個類身上,你想甩掉她都不行,還是以騎馬為例,玩家player可以進行騎行,那麼可能繼承乙個騎行的介面,問題是,當我這個player從坐騎上下來時,玩家player身上還是有騎行的介面,根本沒法動態刪掉這個介面!可能例子舉得不是很對,但是道理表述的應該很清楚了。
使用物件導向可能導致災難性後果,遊戲開發中有新人有老人,有技術好的,有技術差的。人都是喜歡偷懶的,當你發現調整繼承關係麻煩的時候,有可能ab中增加乙個字段為了省事直接就放到父類d中去了。導致c莫名奇妙的多了乙個無用的字段。關鍵還沒法發現,最後導致父類d越來越大,到最後有可能乾脆就不用abc了,直接讓所有物件都變成d,方便嘛!是的,很多遊戲就是這麼幹的,開發到最後根本就不管繼承關係了,因為想管也管不了了。
物件導向在面對複雜的遊戲邏輯時很無力,所以很多遊戲開發者又倒退了回去,使用面向過程進行開發遊戲,面向過程,簡單粗暴,不考慮複雜的繼承,不考慮抽象,不考慮多型,是開發屆的freestyle,挽起袖子就開擼,但同時,**邏輯的復用性,資料的復用性也大大降低。面向過程也不是一種好的遊戲開發模式。
元件模式很好的解決了物件導向以及面向過程的種種缺陷,在遊戲客戶端中使用非常廣泛,unity3d,虛幻4,等等都使用了元件模式。元件模式的特點:
1.高度模組化,乙個元件就是乙份資料加一段邏輯
2.元件可熱插拔,需要就加上,不需要就刪除
3.型別之間依賴極少,任何型別增加或刪除元件不會影響到其它型別。
但是目前只有極少有服務端使用了元件的設計,守望先鋒服務端應該是使用了元件的設計,守望先鋒的開發人員稱之為ecs架構,其實就是元件模式的乙個變種,e就是entity,c就是component,s是system,其實就是將元件component的邏輯與資料剝離,邏輯部分叫system
物件導向內部類的優缺點
1 內部類的優缺點 什麼是內部類 在類裡面還有乙個類,這個類叫內部類 我有乙個類叫outer,然後在這個類裡面還有乙個類叫inner,那麼這個inner類叫內部類 定義 許可權 class 外部類的類名 2 內部類的使用格式 publicclassouterpublic voidfun public...
物件導向程式設計和面向過程程式設計的理解及優缺點
面向過程程式設計 pop process oriented programming 面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步步實現 使用的時候再乙個乙個的依 次呼叫就可以了。物件導向程式設計oop object oriented programming 物件導向是把事務分解成...
面向過程和物件導向程式設計的區別和優缺點11 14
面向於誰,就更看重於誰 面向過程 當需要實現乙個功能的時候,每乙個具體的步驟都要親力親為,詳細處理每乙個細節。更看重的就是乙個過程 物件導向 當需要實現乙個功能的時候不關心具體的步驟,而是找乙個已經具備該功能的人來幫我們做事。面向過程 強調過程 物件導向 強調物件,這裡的物件泛指現實中一切事物 面向...