Java工程師成神之路筆記-面向對象、平臺無關性、值傳遞

原文地址:Java工程師成神之路

面向對象

面向過程與面向對象

什麼是面向過程?

面向過程:將問題拆解成一個一個步驟,每個步驟用函數實現,依次調用即可。

面向對象:將問題拆解成一個一個步驟,對每個步驟進行相應的抽象,形成對象,對每個對象進行組合調用來解決問題。

總結:面向過程是自頂向下的編程模式,面向對象是將事務高度抽象化的編程模式。

舉例說明:

比如寫一個五子棋程序:

面向過程:開始->黑棋走->規則判斷->白棋走->規則判斷->循環。

面向對象:拆解成棋盤、棋子、規則等幾個對象,棋盤負責渲染棋局,棋子負責創建棋子、下子等動作,規則負責演算,各個對象通過組合調用來解決問題。

從例子中可以看出,面向對象能避免重複造輪子。

優劣對比:

面向過程:佔用資源低,速度相對較快。

面向對象:佔用資源高,速度相對較慢。

面向對象三大基本特徵

封裝:將客觀存在的事物封裝成對象,事物的數據用屬性表示,事物的行爲、動作用方法來表示。

繼承:假如有兩個對象:A和B,B繼承A,則表示B可以使用A的全部功能,A稱爲父類,B稱爲子類,繼承的過程是由一般到特殊的過程,因爲子類可以重寫父類的方法。

多態:同一個類的實例在不同情況下有不同的行爲。

面向對象的五大基本原則

單一職責原則(Single-Responsibility Principle)

核心思想:一個類,最好只做一件事。

開閉原則(Open-Closed Principle)

體現在兩個方面:對擴展開放,對修改封裝。開閉原則的核心就是面向抽象(接口)編程,而不面向具體過程編程,因爲抽象相對穩定。讓具體業務依賴於固定的抽象,所以修改是封閉的,而通過繼承和多態,能實現對固定抽象功能的擴展,所以擴展是開放的。

里氏替換原則(Liskov-Substitution Principle)

核心思想:子類必須能夠替換父類。在具體編程中,父類替換成子類,程序的行爲不會發生任何改變,反之則不一定成立。

依賴倒置原則(Dependency-Inversion Principle)

核心思想:依賴於抽象。依賴於抽象,就是對接口編程,而不是對實現編程。

接口隔離原則(Interface-Segregation Principle)

核心思想:使用多個小而專的接口,而不要使用大而全的接口。體現在:接口應該是內聚的,而不是萬能的。理想的接口設計:每個接口職責單一,即接口隔離強調了接口的單一性。

面向對象的複用技術

繼承:是聯結類與類的層次模型,屬於is-a關係。

組合:體現的是整體與部分的關係,屬於has-a關係。

組合 繼承
封裝性 不破壞封裝,整體類與局部類是松耦合 破壞封裝,子類與父類緊耦合
繼承 具有良好擴展 支持擴展,但增加了代碼複雜度
動態選擇 支持動態組合,整體對象可以選擇類型不同的局部對象 不支持動態繼承,子類無法選擇不同的父類
接口調整 整體對象可以通過包裝局部對象的接口,提供新接口 子類無法修改父類的接口
接口獲取 整體類不能獲取和局部類一樣的接口 子類自動獲取父類的接口
創建開銷 創建整體類時,需要創建所有的局部類 創建子類對象,無需創建父類對象

實際開發中,一般選擇組合,只有當新類需要基於父類進行向上轉型時,才選擇繼承。

平臺無關性

Java如何實現平臺無關性

  • Java語言規範

    規定Java語言中基本數據類型的取值範圍

  • 字節碼文件(Class文件)

    所有Java文件要編譯成統一的字節碼文件

  • Java虛擬機

    通過Java虛擬機將字節碼文件轉成對應平臺的二進制文件

Java的平臺無關性是建立在Java虛擬機的平臺有關性上的,因爲Java虛擬機屏蔽了底層操作系統和硬件的差異。

值傳遞

值傳遞與引用傳遞

編程語言中,方法間進行參數傳遞,傳遞的策略叫求值策略。

求值策略有三種:

  • 值傳遞
  • 引用傳遞
  • 共享對象傳遞(值傳遞的特例,只是拷貝的副本爲對象的地址)

值傳遞和引用傳遞的區別:參數傳遞過程中有沒有複製一個副本出來,如果有複製副本,則是值傳遞,否則是引用傳遞。

在Java中,只有值傳遞,只不過對於對象來說,傳遞的內容是對象的引用。

在 《The Java™ Tutorials》中,對參數傳遞的說明:

基本類型傳遞

Primitive arguments, such as an int or a double, are passed into methods by value. This means that any changes to the values of the parameters exist only within the scope of the method. When the method returns, the parameters are gone and any changes to them are lost.

對象傳遞

Reference data type parameters, such as objects, are also passed into methods by value. This means that when the method returns, the passed-in reference still references the same object as before. However, the values of the object’s fields can be changed in the method, if they have the proper access level.

推薦文章:

爲什麼Java只有值傳遞

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