玩積木的程式設計師

2021-04-16 18:40:07 字數 1838 閱讀 9931

自從我學習程式設計開始,就不斷地聽到大家談論物件導向。在最開始接觸c++時,確實被它的oo特性迷住了,相比之前用過的c語言更加豐富多彩。想當初,經常因為寫出了乙個類而暗自自豪半天。

現在做程式設計師也有些年頭了,回過頭來看以前似乎領悟到的oo思想又有了一些新的感悟。

提起oo,大家都會想到class關鍵字。以前老師這麼教的,平時自己也是這麼用的。雖然有些語言中的表現不一樣,但本質上都是差不多的。剛開始時,說oo是一種技術;後來說oo是一種潮流;再後來說oo是一種信仰;後來的後來說oo是一種思想,總之是越說越玄。

不過有一點卻是肯定的,我們可以將oo思想用在不支援oo特性的語言中。比如說,學了c++的人去寫c程式,很可能寫出來的還是c++風格的。

進一步推理,oo思想可以在語言之外體現出來。

外掛程式分為**和配置兩個部分,**實現外掛程式的業務,配置檔案處理外掛程式特性和外掛程式之間的互動關係。可以說,在外掛程式系統中,**加配置組成的那個東西也能叫做「物件」,也就是**之外的物件。

當我們能將oo思想擺脫**的侷限時,那麼就能擁有更加廣闊的思考空間了。

封裝、繼承、多型是物件導向的三大特性。對於外掛程式來說,封裝是能很好地表現出來,但對於繼承和多型卻非常難實現了。至少我現在還沒有看到有人將外掛程式做成支援繼承的。

以前有人問我覺得物件導向的三個特性中哪乙個最有意思。當時我回答是多型,因為它最靈活。多型是和繼承繫結的,繼承是一種強耦合,也就是說派生類和基類不 可解耦。在有些時候繼承和多型能帶來意想不到的好處,但更多時候我們需要用組合來代替繼承,以此獲得更大的靈活性,尤其是站在系統的層面。

比如說有兩個模組功能非常接近,如果按照派生的思路,在這兩個模組之上提出乙個基類,繼承兩個子類來完成具體的功能。對於**之中的物件這樣做沒什麼問 題,但對於**之外的物件,只能採用組合來代替派生的思路了。做法是將兩個模組的公用部分做成乙個公用子模組c,不同部分做成a、b兩個模組。a與c組合 起來生成第乙個模組,b與c組合起來生成第二個模組。

還有一種解決方法就是用配置來處理模組特性,大家可以參考我以前寫過的文章。

在設計模式中也強調「組合優於繼承」。

將軟體模組比作積木,我們程式設計師就是玩積木的人了。各種各樣的類庫和框架、加上形形色色的控制項,都是我們玩的積木。在外掛程式系統中,外掛程式就是積木。本文的著重點是外掛程式系統。

好的「積木」需要具備以下的幾點:

1、可插拔性,動態載入

2、外觀可調

3、顯示位置可配置指定

4、統一的列表管理

5、元素之間可通訊

上面介紹一些基本的要點,也是外掛程式系統需要解決的若干個問題。上面的這些問題在以前的文章中已經簡單介紹過。解決上述問題的方法多種多樣,很感謝那些和我分享自己解決方法的朋友們:)

在現在的專案中,最關鍵的一點就是「配置」,這就要求滿足1、2、3點,而4、5點則是將外掛程式組裝成完整系統的必備因素。

粗略地可以將程式設計師分成兩類:做積木、與玩積木的人。

做積木的人指的就是那些自己寫控制項、外掛程式的人,玩積木的人指的就是將各種各樣控制項或外掛程式組裝成系統的人。在業界大多數人都會認可那些自己寫控制項的,對於「只會拖拖控制項」的程式設計師則不屑一顧。

我們很難說做積木與玩積木的人哪乙個水平高,因為需要的是兩種不同的能力。做積木的人需要對底層計算機技術有深刻的了解,而玩積木的人則需要對業務、使用者需求和整體框架有清楚的認識。兩個層面的人都需要有優化的意識。

很多學生的眼中,技術含量指的就是學習系統底層知識,掌握計算機原理;但工作過一段時間,尤其是做行業軟體的程式設計師則會有不同的看法,他們更加關注怎樣來「玩積木」,同樣是一門學問。這也就是設計模式在學生中很少有人知道,而演算法等基礎理論離職業化程式設計師越來越遠的原因。

我們不能僅僅按照做積木和玩積木兩種型別來區分技術含量,不同的工作對技術的側重點不一樣。不過在我看來,玩積木才是我真正想做的事情,也可以說是架構設計了。當然,成為乙個優秀的架構師還是相當困難的。 

玩積木的程式設計師

自從我學習程式設計開始,就不斷地聽到大家談論物件導向。在最開始接觸c 時,確實被它的oo特性迷住了,相比之前用過的c語言更加豐富多彩。想當初,經常因為寫出了乙個類而暗自自豪半天。現在做程式設計師也有些年頭了,回過頭來看以前似乎領悟到的oo思想又有了一些新的感悟。提起oo,大家都會想到class關鍵字...

玩積木的程式設計師

自從我學習程式設計開始,就不斷地聽到大家談論物件導向。在最開始接觸c 時,確實被它的oo特性迷住了,相比之前用過的c語言更加豐富多彩。想當初,經常因為寫出了乙個類而暗自自豪半天。現在做程式設計師也有些年頭了,回過頭來看以前似乎領悟到的oo思想又有了一些新的感悟。提起oo,大家都會想到class關鍵字...

玩積木的程式設計師

自從我學習程式設計開始,就不斷地聽到大家談論物件導向。在最開始接觸c 時,確實被它的oo特性迷住了,相比之前用過的c語言更加豐富多彩。想當初,經常因為寫出了乙個類而暗自自豪半天。現在做程式設計師也有些年頭了,回過頭來看以前似乎領悟到的oo思想又有了一些新的感悟。提起oo,大家都會想到class關鍵字...