【程式設計素質】程式設計思想總結

兔兔西發表於2018-09-28

1,資料結構和演算法

【資料結構】排序演算法
【資料結構】查詢
【資料結構】樹
【資料結構】圖
【資料結構】陣列
【資料結構】佇列和棧
【資料結構】線性表:順序表、單連結串列
【java學習】String字串
【演算法】電梯排程演算法/磁碟掃描演算法
【演算法】劍指offer
【資料結構】斐波那契數列(Fibonacci sequence,黃金分割數列,兔子數列)

2,設計模式

【程式設計素質】多執行緒程式設計之設計模式

複合模式:三層架構、MVC、MVP、MVVM

3,程式設計方法

3.1 函數語言程式設計(functional programming)

3.1.1 概念

是結構化程式設計的一種。將電腦運算視為數學上的函式計算,並且避免使用程式狀態以及易變物件。函式程式語言最重要的基礎是λ演算(lambda calculus)。
java8引入了函數語言程式設計概念。

3.1.2 與OOP對比

物件與物件之間的關係是物件導向程式設計首要考慮的問題,而在函數語言程式設計中,所有的資料都是不可變的,不同的函式之間通過資料流來交換資訊。

3.1.3 優點

在函數語言程式設計中,由於資料全部都是不可變的,所以沒有併發程式設計的問題,是多執行緒安全的。
程式碼可讀性更強。

3.1.4 缺點

由於所有的資料都是不可變的,所以所有的變數在程式執行期間都是一直存在的,非常佔用執行資源。
雖然現代的函數語言程式設計語言使用了很多技巧比如惰性計算等來優化執行速度,但是始終無法與物件導向的程式相比,當然物件導向程式的速度也不夠快。

3.2 物件導向程式設計(Object-oriented programming,縮寫:OOP)

3.2.1 概念

具有物件概念的程式程式設計範型,同時也是一種程式開發的方法。它可能包含資料、屬性、程式碼與方法。物件則指的是類的例項。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充套件性,物件裡的程式可以訪問及經常修改物件相關連的資料。在物件導向程式程式設計裡,計算機程式會被設計成彼此相關的物件。

3.2.2 優點

系統更靈活、更容易擴充套件,而且成本較低。

3.2.3 缺點

物件導向程式設計以資料為核心,所以在多執行緒併發程式設計中,多個執行緒同時運算元據的時候可能會導致資料修改的不確定性。
物件導向雖然開發效率高但是程式碼的執行效率比起程式導向要低很多。

3.2.4 物件導向三大特性:封裝,繼承,多型

3.3 面向方面程式設計(Aspected Oriented Programming,縮寫:AOP)

3.3.1 概念

偏重業務處理過程的某個步驟或階段,強調降低模組之間的耦合度,使程式碼擁有更好的移植性。

3.3.2 特點

AOP 的一個很重要的特點是原始碼無關性,也就是說如果我們的系統中引用了 AOP 元件,即使我們把該元件去掉,系統程式碼也應該能夠編譯通過。要實現這一點,可以使用動態 proxy 模式。

3.3.3 優點

i>更易模組化
AOP將程式分解成各個方面或者說關注點。這使得可以模組化,相當橫向上分切了。它可以解決OOP和過程化方法不能夠很好解決的橫切(crosscut)問題,如:事務、安全、日誌等橫切關注
ii>AOP有助於提高系統可維護性

3.3.4 實現方式

AOP是一種設計模式,Spring提供了一種實現。
Spring 1.2版本中通過ProxyFactoryBean來實現aop,即通過動態代理來實現的,Aspect必須繼承MethodBeforeAdvice,MethodAfterAdvice等。
Spring 2.0 AOP需要改的是FBI 這個類,而且它也不需要再實現某些介面
三使用標註(@AspectJ)實現AOP

3.3.5 與OOP對比

也可以說 AOP 是面向業務中的動詞領域, OOP 面向名詞領域。
核心業務還是要OOP來發揮作用,與AOP的側重點不一樣,前者有種縱向抽象的感覺,後者則是橫向抽象的感覺, AOP只是OOP的補充,無替代關係。

4,Java編碼約定

相關文章