Java面向對象設計最佳實踐 - 概述


根據筆者的經驗,計劃編寫 Java 面向對象設計最佳實踐” 專題,通過 用理論和實戰的方法,試圖介紹Java 面向對象設計,希望大家喜歡。本文是開章概述,由於經驗和精力有限,歡迎大家指正和共同交流學習。


言歸正傳,Java 語言作爲一門“ 全面 ”面向對象的編程語言,提供了面向對象的四種基本性質: 抽象性 封裝性 繼承性 多態性 。同時,不得不指出的是,這裏的“全面”是狹義的,緣於Java 編程語言沒有放棄面向過程語言的原生類型,並且有限性地支持 AOP (在 JDK API 層次,僅支持接口攔截)。綜上所述,對於這種狹義的“全面”,在面向對象設計的時,儘量全面地考慮。


通常來說,軟件設計質量的標註可以通過“ 高內聚- 低耦合 ”來衡量。內聚(Cohesion )是一個模塊內部各成分之間相關聯程度的度量 。而 耦合是對某元素與其它元素之間的連接、感知和依賴的量度。 在設計階段,開發人員和系統架構師應該考慮。


通常地偏好“實現接口”,而非“繼承類”。接口作爲一種契約,規約了類與類或者模塊和模塊之間的通訊語義,而不關心具體實現。主要體現以下設計的原則,分別是: 易讀性 易用性 擴張性 單一性 安全性 易測性 容錯性。


易讀性:簡單地來說,容易閱讀,方便理解。無論是面向實現(過程)編程,還是面向接口編程,如果把握好良好的名稱設計和文檔,都不難做到易讀性。不過面向接口關注的是契約- 語義,而不是實現。因此儘量地利用面向接口。題外話, 不要過度迷信面向對象 務實大於花哨


易用性:在易讀性的前提上,對象結構方便開發和維護。三分開發,七分維護。因此,在開發階段應該爲方便後期維護做好鋪墊。


擴張性:也可以稱爲彈性(靈活性或者易變性),彈性的實現,可以利用編程語言的特性,比如Java 中的 接口編程 ( 多態和抽象 )和 泛型設計 Java5 以上支持)。


單一性:通常,一個類或者模塊只做“份內”之事,增強內聚性,減少耦合。在政治制度上,“三權分立”很好地詮釋了這種思想。在面向對象上,具體體現在, 結構單一 (系統架構角度), 職責單一 (需求角度), 行爲單一 (實現角度), 依賴單一 (通訊角度)等。


安全性:隸屬於非功能之一,是設計和開發人員較容易忽略的方面。主要分爲,操作系統安全、應用程序安全和社會工程學安全(不是討論的重點)。Java 編程語言,一般保證了操作系統安全(除非惡意修改安全沙箱),主要是落到應用程序安全。常見的應用程序安全性問題, 類型安全 (錯誤類型轉換、動態合成類等)、 線程安全 (數據一致性和死鎖等) 資源安全 (內存、外存和CPU 等資源) 數據安全 (數據封裝、零時和持久數據、單一和分佈式事務,通訊數據轉換和丟失等)等


易測性:結構易於測試。在面向對象編程中,一般來說,方法作用於對象狀態行爲表現和控制,構造器則是對象狀態初始設定。在測試中,良好的上下文設計至關重要,比如: 合理的參數數量和類型 參數職能單一 (參數類型和狀態不要太複雜)、 參數依賴簡單 (儘量不要依賴第三方API )和 易於構造 (或模擬)、 返回值明確並且規約 模塊內部結構簡單 。良好粒度的設計是便於測試的基礎。同時,測試優先(TDD) 的方法可以重構模塊。


容錯性:一般的過程:錯誤事件產生,錯誤處理,現場(數據或者狀態)恢復。目前,許多框架提供了統一便捷的錯誤(異常)處理方式,而大多數公司也有自己的處理流程。其目的是,對於少數系統界別和大多數應用級別錯誤(異常)發生,不影響系統整體運行,提高系統可用性和友好性。在JVM 應用程序中,主要是不中斷主線程的運行。在設計時,可以考慮 分發式 (利用異步或者多線程)方法來處理錯誤(異常),恢復現場等。 容錯性設計是非常苦難的,其原因是 正確運行通路是少數 ,而 異預測常情況是困難的 尤其在現場恢復體現 TDD開發模式和契約編程可以提升系統容錯性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章