07 2008 檔案
摘要:
適應變化的能力是衡量軟件質量的重要標準
第七課剛一開堂,冒號就提了一個問題:“如果把一個Java程序中所有的private關鍵字換成public,請問該程序還能工作嗎?”。。。
軟件的難點有二:其一是邏輯的復雜,其二是需求的變化。許多程序員看重前者而看輕后者,大部分時間花在尋求解決方案上,而不是在選擇解決方案上。。。
軟件之軟,體現在適應變化的能力。。。
軟件的變化大致分兩種:一種是出于內在需求而作的結構性變化,通常以改善軟件質量為目的,即所謂的重構(refactoring);一種是出于外在需求而作的功能性變化,通常以滿足客戶需要為目的。。。
信息隱藏雖能將抽象接口與具體實現分離,但仍然封裝在同一類中。橋梁模式則讓二者徹底解耦(decouple),增強了對變化的適應力,具有更大的靈活性和可擴展性。。。
閱讀全文
摘要:
OOP中的封裝與信息隱藏
“用廣東話說,真是有型有料又有性格啊!”嘆號嘖嘖連聲,“這哪里是在設計軟件,分明是在設計心儀的對象嘛。”。。。
廣義的封裝僅僅只是一種打包,即package或bundle,是密封的但可以是透明的。。。
狹義的封裝是在打包的基礎上加上訪問控制(access control),以實現信息隱藏。。。
抽象意味著用戶可以從高層的接口來看待或使用一類對象,而不用關心它底層的實現,而黑盒封裝意味著用戶無權訪問底層的實現。。。
訪問控制不僅是一種語法限制,也是一種語義規范。。。
“通,則大處圓融合一而小處各具其妙;不通,則大處千變萬化而小處無所分別。”冒號又打起了禪語 ,“領會OOP的精髓絕非一年半載之功,但若以抽象與封裝為鑰,必可早日開啟通達之門。。。”
閱讀全文
摘要:
介紹抽象數據類型
問號搶著說:“我知道了:過程抽象的結果是函數,數據抽象的結果應該是數據類型。”。。。
數據結構強調具體實現,側重應用;抽象數據類型強調抽象接口,側重設計。。。
接口是綱,實現是目。綱若不舉,目無以張。。。
人們多采取‘整體設計以數據為中心,局部實現以算法為中心’的方針,以增強系統的可維護性。。。
數據類型的接口與實現的分離,有利于開發時間的分離以及開發人員的分離。。。
抽象——接口與實現相分離;數據——以數據為中心組織邏輯;類型——單純而定義良好的概念。。。
抽象——尤其是數據抽象——才是OOP的核心和起源,盡管它們并非OOP的專利。。。
只有貫徹ADT思想,設計出來的類才會是‘萬人迷’:有優雅的外形——抽象,有豐富的內涵——數據,有鮮明的個性——類型。。。
閱讀全文
摘要:
軟件設計中的抽象思維
冒號健步走進教室,學員們立刻正襟危坐,進入戰備狀態。。。
語言是形,范式是神,這次我們將二者融合,爭取做到形神兼備。。。
我們的重心不在知識的枝節,而在知識的本源。因此無論討論Java還是OOP,我們不追求系統和全面,但力求從不同的選點、角度和深度來展示知識的活性。。。
那么什么是抽象呢?不妨概括為:去粗取精以化繁為簡;由表及里以異中求同。再精煉些,抽象就是作減法和除法。。。
軟件設計者的任務是將復雜混沌的現實世界映射到精確嚴格的虛擬世界,要完成這種多對一的映射,抽象無疑是必由之路。。。
這種通過規范使代碼的功能與實現相分離的方法稱為規范抽象。。。
閱讀全文
摘要: 本文系《冒號課堂》(又名《冒號和他的學生們》)系列的目錄提綱,隨著寫作的深入將逐步完善。歡迎大家多提意見!
閱讀全文