抽象程度思考

2021-04-06 21:18:11 字數 1531 閱讀 6287

「軟體設計的重點在於抽象」,不記得這句話是哪位說的了,我想改正一下:「保證軟體靈活性設計的重點是抽象」,由此可知,抽象的作用是「保證軟體的靈活性設計」。越來越多的語言、平台構建在oo思想之上,這充分說明了oo的正確性。oo,一種思想,一種談到軟體設計時必須涉及的思想,越來越多的人開始追捧它,當然,我也是其中之一。有了它,軟體設計可以提公升到乙個「美」的境界;有了它,軟體的可讀性、可維護性、靈活性、可擴充套件性等等一大堆的「性」得到了很大的提高。為什麼會這樣?因為物件導向思想把軟體跟現實更緊密地聯絡了起來,便得一些現實物理世界中的思想可以很容易的運用到軟體中去。這幾年,「設計模式」、「架構」等等一系列的名詞越來越受到人們的關注。所有這些東西,其實就是為了實現乙個抽象層次的程式設計,以保證軟體的靈活性。

那什麼是抽象?引用一位網友的話:「抽象就是有選擇的忽略」,中國有句真理,叫「太極生兩儀,兩儀生四象,四象生八卦,八卦生萬物」。從太極到萬物,這種金字塔式的結構在複雜的軟體工程中也是存在的,越接近金字塔的頂端,越要有選擇的忽略掉更多的東西,從而具有更高的抽象程度。舉個例子,兩個功能a、b都是實現對資料的增刪改,a是針對「客戶」的,b是針對「產品」的,我們可以做乙個增刪改服務或者容器之類的東西來支援所有的增刪改功能,a、b功能**只用對使用這些服務然後再實現一些各自特殊的東西就可以了。這樣做就把「增刪改邏輯」給抽象了出來。再比如說o/r對映工具,它其實就是把資料操作抽象了出來。「抽象」的反義詞應該是「具體」,我們可以把抽象理解為活的,具體理解為死的。各個具體的事物之間肯定會有重複,比如男人和女人都會走路,都會吃飯;比如你沒有使用o/r對映工具的資料層的各個類都要實現一些相同的邏輯。軟體設計中有乙個原則:「don't  repeat」,就是不要重複。理想狀態下,乙個系統的任何**、邏緝、概念在這個系統中都是唯一的,這樣的系統肯定是非常靈活,因為「抽象」對應「活」。唯一性很容易保證,但是邏緝、概念的唯一性就很難保證,應該說是根本保證不了,概念這東西抽象到最上層什麼都沒有了。什麼事情都有個度,只能說是軟體的靈活性會隨抽象程度的提高而提高。

這麼說,是不是就意味著抽象程度越高越好?不是!剛才說了,任何事物抽象到最上層就是叫「事物」,還從哪來軟體?一些書目中或明或暗地提到軟體設計肯定有個最好的抽象程度,而且我們應該去努力達到這個抽象程度。不錯,說得很對。但是,專案與專案之間是不同的,不存在適用於所有專案的最好抽象程度。 我的乙個同事給我說過一句話:「軟體專案的成功標誌是什麼?有三點:客戶滿意,公司滿意,員工滿意」。客戶怎麼滿意?軟體按照預算工期、成本完成,並為為他們創造價值;公司怎麼滿意?軟體按照預算工期、成本完成,並為公司創造利益;員工怎麼滿意?軟體按照預算工期、成本完成,開發過程順利,自已的利益得到保證。得到的結論就是軟體專案順利的按照預算工期、成本完成,就算是成功了。運用抽象的最終目的肯定是促使專案成功,並不是讓你搞「科研」。乙個專案的所有因素決定了這個專案最好的抽象程度,專案經理、架構師需要反覆思考,軟體設計時究竟抽象到什麼程度最好?這肯定要根據現有的資源(開發人員、工具等)來確定,如果過於抽象,你水平到位,可以理解,那麼下面的開發人員呢?你必須要考慮培訓成本、溝通成本,過於抽象,會延長工期,甚至讓專案遙遙無期。

說了這麼多,並沒有給出一套權衡的方法,在下實在水平有限,其實在自已帶領的專案中也並沒有把這些東西把握得很好,希望認真思考過這個問題的人能留下你的只言片語。

培養抽象思考能力

數學被視為科學之母,可以被廣泛的應用其它學科,要討論為何數學這麼乙個純綷的學科具有什麼樣的特質,使其可以被使用於各個領域,其實乙個最簡單的回答就是 抽象 抽象這兩個字,究其字面意義要行解釋,本身就很 抽象 我們舉個實際的例子 1 1 2 就是抽象,您可以具體的在數字後面加上單位,像是蘋果 狗 人等具...

培養抽象思考能力

數學被視為科學之母,可以被廣泛的應用其它學科,要討論為何數學這麼乙個純綷的學科具有什麼樣的特質,使其可以被使用於各個領域,其實乙個最簡單的回答就是 抽象 抽象這兩個字,究其字面意義要行解釋,本身就很 抽象 我們舉個實際的例子 1 1 2 就是抽象,您可以具體的在數字後面加上單位,像是蘋果 狗 人等具...

教育程度用詞

education 學歷 educational url background url 教育程度 educational url history url 學歷 curriculum 課程 major 主修 minor 副修 educational url highlights url 課程重點部分 ...