每個Java程式設計師都應該學習10條編碼原則

源碼時代 發佈 2020-06-03T03:16:27+00:00

面向對象的設計原則 是OOP編程的核心。儘管如此,我還是看到大多數Java程式設計師都在追逐設計模式,比如單例模式, 裝飾圖案,或觀測器模式,而且沒有把足夠的注意力放在學習上面向對象的分析與設計.學習面向對象編程的基礎知識(如抽象、封裝、多態性和繼承)是至關重要的。

面向對象的設計原則 是OOP編程的核心。儘管如此,我還是看到大多數Java程式設計師都在追逐設計模式,比如單例模式, 裝飾圖案,或觀測器模式,而且沒有把足夠的注意力放在學習上面向對象的分析與設計.

學習面向對象編程的基礎知識(如抽象、封裝、多態性和繼承)是至關重要的。但是,同時,了解面向對象的設計原則也同樣重要。

它們將幫助您創建一個乾淨和模塊化的設計,這將是很容易測試,調試,並在未來的維護。


我經常看到具有不同經驗級別的Java程式設計師和開發人員,他們要麼從未聽說過這些面向對象的設計原則,要麼從未聽說過可靠的設計原則。,或者不知道特定的設計原則有什麼好處,以及如何在編碼中應用這些設計原則。

為了完成我的工作,我已經記下了所有重要的面向對象的設計原則,並把它們放在這裡供快速參考。這些至少會讓你知道他們是什麼,他們提供了什麼好處。

如果你不能理解一個設計原則,你應該嘗試做一個以上的例子,因為有時我們連接到另一個模型或作者更好;不過,您必須遵循這些設計原則,並學習如何在代碼中使用它。您可以做的另一件事是參加一門全面的面向對象的設計課程,如面向對象設計的堅實原則史提夫·史密斯在「普盧拉明」上。這對我理解和應用這些原則有很大幫助。

面向對象和面向對象的程序設計原則

雖然學習任何設計原則或模式的最好方法是一個真實世界的例子,並理解違反該設計原則的後果,但本文的主題是介紹。面向對象設計原則對於Java程式設計師來說,他們要麼沒有公開,要麼處於學習階段。



我覺得這些OOP和實體設計原則需要一篇文章來解釋清楚,我將在這裡嘗試這樣做,但就目前而言,請做好準備,在設計原則上快速騎自行車,城鎮:)

1.DRY(不要重複)

我們的第一個面向對象的設計原則是枯燥的,顧名思義。DRY(不要重複)意思是不要寫重複的代碼,而是使用抽象在一個地方抽象日常事物。

如果在兩個以上的地方有一個代碼塊,可以考慮將其作為一個單獨的方法,或者如果您多次使用硬編碼的值,則將它們設置為一個單獨的方法。公共終常數。這種面向對象的設計原則的好處在於維修.

重要的是不要濫用它,複製不是為了代碼,而是為了功能。

這意味著如果您使用了標準代碼來驗證OrderId 和SSN這並不意味著他們是一樣的,否則他們將在未來保持不變。

通過為兩種不同的功能或事物使用標準代碼,您可以永遠地將它們緊密結合在一起,當OrderId更改其格式時,您的SSN驗證代碼就會中斷。

因此,要小心這種耦合,不要組合使用類似代碼但不相關的任何東西。您可以進一步查看軟體體系結構基礎與設計模式在關於Udemy的Java課程中,學習更多關於編寫正確的代碼和在設計系統時應遵循的最佳實踐的知識。

2.封裝變化

在軟體領域,只有一件事是不變的,那就是「更改」,因此封裝您期望或懷疑將來會更改的代碼。

這種面向對象的設計原則的好處是很容易測試和維護正確的封裝代碼。

如果您使用Java編寫代碼,那麼遵循默認情況下使變量和方法私有並逐步增加訪問權限的原則。

幾個Java中的設計模式使用封裝;工廠設計模式是封裝的一個例子,它封裝了對象創建代碼,並提供了在不影響現有代碼的情況下引入新產品的靈活性。

順便說一句,如果您有興趣了解更多關於java和面向對象編程中的設計模式的知識,那麼您必須檢查以下內容:設計模式庫關於普魯拉視野的課程。它是關於如何在現實世界中使用它們的設計模式和建議的最佳集合之一。

3.開放式封閉設計原則

根據這一面向對象設計原則,「類、方法或函數應開放以供擴展(新功能),並關閉以進行修改。」

這是鮑勃叔叔在他的經典作品中提出的另一個漂亮的堅實的設計原則。清潔碼本,這樣可以防止某人更改已經嘗試和測試過的代碼。

這個設計原則的主要好處是嘗試過並測試過的代碼不受影響。這意味著他們不會崩潰。

下面是一個Java代碼示例違反開放式程序設計原則:

在此代碼中,GraphicEditor與形狀緊密耦合,如果需要新形狀,則需要在drawShape(Shape s)方法,這既容易出錯,也不可取。

理想情況下,如果您只添加新功能,那麼您的代碼應該進行測試,這就是開放封閉設計原則的目標。

順便說一句,開閉原則是固體縮略詞的「O」。如果您想更多地了解這個原則,面向對象設計與體系結構的堅實原則關於Udemy的課程是最好的參考資源之一。

4.單一責任原則

單責任原則是另一個堅實的設計原則,在實體字縮寫中代表「S」。根據SRP,不應該有一個以上的原因來改變一個類,或者一個級別應該始終處理單個功能。

這個原則的主要好處是它減少了軟體的各個組件與代碼之間的耦合。

例如,如果您在Java中的一個類中放置了多個功能,那麼它將引入耦合在兩個功能之間,即使您更改了一個特性,也有可能破壞耦合功能,這需要進行另一輪測試,以避免對生產環境產生任何意外。

你還可以看到從0到1:設計模式-24 關於Udemy的課程,學習基於這個原則的模式。

5.依賴注入或反轉原則

不要要求依賴,它將由框架提供給您。這在Spring框架中得到了很好的實現,Spring框架是編寫真正有價值的應用程式的最流行的Java框架之一。

這種設計原則的優點在於,任何由DI框架注入的類都很容易用模擬對象進行測試,而且易於維護,因為對象創建代碼集中在框架中,並且客戶端代碼中並不散落著這些代碼。

有多種實現方法依賴注入,比如使用字節碼工具,一些AOP(面向方面編程)框架就像AspectJ那樣,或者像Spring一樣使用代理。

您可以進一步看到面向對象設計與體系結構的堅實原則關於Udemy的課程,以了解更多關於這個有用的原則。它還代表固體縮略詞的「D」。

下面是一個違背依賴反轉原則或Java中DIP的代碼示例:

你可以看到AppManager 取決於EventLogWriter 與AppManager。如果您需要使用其他方式通知客戶端,比如發送推送通知、SMS或電子郵件,則需要更改AppManager 班級。

這個問題可以用依賴反轉原理來解決。AppManager 索要EventLogWriter,它將由框架注入或提供給AppManager。

你還可以看到用紮實的原則編寫更好的代碼--速成課程對Udemy更多地了解依賴反演原理以及如何解決這些問題。

6.有利於組合而不是繼承

重用您已經編寫的代碼的一般方法有兩種,即繼承和組合;兩者各有優缺點,但一般來說,如果可能的話,您應該總是傾向於組合而不是繼承。

你們中的一些人可能會這麼說,但我發現構圖是不是比繼承.

通過在運行時設置屬性,組合允許在運行時更改類的行為,通過使用接口組合類,我們使用多態,它提供了在任何時候以更好的實現代替的靈活性。

甚至約書亞·布洛赫有效Java建議傾向於組合而不是繼承。如果你還沒有被說服,那麼你也可以了解為什麼組合比繼承更適合重用代碼和功能。

而且,如果你總是忘記這條規則,這是一個很好的卡通放在你的桌子上:-)

如果您對學習更多關於面向對象編程概念(如組合、繼承、關聯、聚合等)感興趣,也可以查看Java中的面向對象編程關於古瑟拉的課程。

它可以自由探索和學習但是,如果你也想參加練習、作業、評估,並且需要在你的LinkedIn個人資料中顯示證書,你將被收取費用。

7.Liskov替代原則

根據Liskov替換原則,子類型必須是超級類型的替代I指使用超類類型的方法或函數必須能夠使用對象子類,沒有任何問題「。

LSP關係密切對單一責任原則介面分離原理.

如果類具有比子類更多的功能,則可能不支持某些功能,並且確實違反了LSP。

為了跟隨LSP實體設計原理,派生類或子類必須增強功能,而不是減少它們。LSP代表固體縮略詞的「L」。

下面是一個違背Java中Liskov替換原則的代碼示例:

Liskov替換原理在Java中的應用

如果你有辦法area(Rectangle r),它計算矩形的面積,然後當您傳遞Square 因為Square 不是真正的長方形。

如果您對一個更真實的示例感興趣,那麼面向對象設計的堅實原則Pluralsight課程是一門非常好的課程。

8.接口隔離原則(ISP)

接口隔離原則說明客戶端不應實現介面如果它不使用這個的話。

這種情況主要發生在一個接口包含多個功能時,而客戶機只需要一個功能,而不需要其他功能。

毫無疑問,接口設計是一項棘手的工作,因為一旦您釋放了您的接口,您就無法在不破壞所有實現的情況下更改它。當然,Java 8的默認或保護方法功能確實為接口的發展提供了一種方式,但並不是所有的程式語言都支持這些特性。

這種設計原則在Java中的另一個好處是,接口的缺點是在任何類都可以使用它之前實現所有方法,因此擁有單一的功能意味著實現的方法更少。

如果您在編寫代碼時得不到接口的好處,那麼我建議您閱讀我的博客文章,Java中接口的實際使用了解更多。

9.接口方案編制-不執行

程式設計師應該總是用於接口的程序,而不是用於實現的;將導致靈活的代碼,它可以與接口的任何新實現一起工作。

具體而言,您應該對變量使用接口類型,返回方法的類型。類Java中的參數類型SuperClass類型來存儲對象,而不是使用SubClass.

我是說

List numbers= getNumbers();

而不是

ArrayList numbers = getNumbers();

這也在許多Java書籍中得到了建議,包括有效Java頭第一設計模式書。

如果您對提高程序的代碼質量感興趣,我還建議您看看重構設計模式關於Udemy的課程,它將幫助您使用C#中的重構技術和設計模式來改進內部設計。

10.授權原則

不要自己做所有的事情,把它委託給相應的班級。委託設計原則的經典例子是java中的equals()和hashCode()方法.

為了比較兩個對象是否相等,我們要求類本身進行比較,而不是進行比較。Client 做那個檢查。

這個設計原則的主要好處是沒有重複代碼而且很容易改變行為。事件委託是此原則的另一個示例,其中將事件委託給處理程序進行處理。

總結

所有這些面向對象設計原則通過努力實現高內聚性和低耦合性,幫助您編寫靈活和更好的代碼。

理論是第一步,但最重要的是培養發現何時應用這些設計原則的能力.

一旦掌握了這一點,下一步就是學習Java中的設計模式,它使用這些設計模式來解決應用程式開發和軟體工程中常見的問題。

為感謝您對我們的認可,特意準備了一些IT入門和進階的乾貨

包括:Java、UI設計、H5前端、Python+人工智慧、軟體測試和新媒體運營六大學科視頻資料。以及IT就業大禮包。

線上視頻、音頻,隨時學習觀看

關注我們並私信「資料」即可獲取。

關鍵字: