每日一題:詳解面向對象

面向對象與面向過程

最初,軟件開發所使用的思想都是面向過程,面向過程的模式更適合計算機運算,或者說更貼近於人類大腦的理解模式。然而隨着時代的發展,軟件系統也愈來愈複雜,規模愈來愈大,面向過程的弊端逐漸顯現出來,最關鍵的在於面向過程開發出的軟件系統更難維護,代碼耦合度較高,當需求變動後,每次都須要修改大量的代碼。html

面向對象的出現則解決了這些問題,固然有付出纔有回報,相比與面向過程,面向對象思想下的代碼也有如下缺點:java

  • 可讀性相對於面向過程更差一些,主要是由於面向對象的代碼較爲零散
  • 性能比面向過程的代碼要低,由於面向對象的代碼執行過程當中須要不斷的處理類的建立和銷燬之類的操做,資源佔用比面向過程要大。

總而言之,面向過程和麪向對象並無誰優誰劣,只是適用範圍不一樣,若是說項目比較簡單,也不太須要關心後期變動的問題,面向過程可讓你更快的構建項目,若是說項目規模比較大,後期項目會有較長的維護期,那從需求分析開始,你就須要以面向對象的思想來處理。性能

面向對象的三個特色

  • 封裝
    以前提到須要以面向對象的思想來處理問題,首先的第一步就是抽象,將這個花花世界中咱們關心的東西抽象爲一個類,一個能夠描述咱們關心的東西的類。任何一件物品從不一樣角度來看都能抽象出不一樣的屬性,由於關注點不同,一我的若是從醫生的角度去抽象,咱們可能關心的是身高、體重、身體情況、睡眠狀況、飲食狀況等等,而從一個設計師的角度去抽象,咱們關心的可能就是身高、體重、性別、性格、喜歡的顏色、三圍等等

抽象就是以某一個視角來看待這個世界中的東西並將其封裝爲類,將咱們關心的屬性做爲類的屬性,咱們關心的動做做爲方法,而後經過控制其屬性和方法是否爲私有來控制是否能夠被外界訪問設計

  • 繼承
    繼承實如今封裝的基礎之上,咱們在封裝類時會遇到多個類擁有重複的屬性或方法,而繼承可讓一個類徹底擁有另外一個類的公共屬性和公共方法,這樣咱們能夠減小封裝時的重複內容,也能夠在不修改類代碼的狀況下對類進行擴展。

被繼承的類咱們通常稱之爲超類、基類或父類,而繼承父類的類咱們通常稱之爲子類。繼承在設計中通常都是大類到小類的過程,父類和子類的關係爲「is a」,例如封裝一個動物類,而後經過繼承實現一個子類,例如狗,這樣狗擁有動物的全部特徵,以後即可在子類中繼續編寫狗特有的屬性和方法,父子類的關係可描述爲狗是一種動物。htm

注:雖說繼承是衆多開發語言都具有的功能,但繼承也存在很大的代碼耦合問題,父類的代碼一旦變動則會致使全部子類都會跟着改變,因此開發過程當中儘量的使用接口來代替繼承。對象

  • 多態
    多態是在繼承基礎之上衍生出的,變量所引用的對象類型在運行期間由程序決定。多態的必要條件爲繼承,多態雙方必須爲父子類,父類在運行期間決定由哪一個子類來執行具體操做,換句話說父類變量在程序運行期間決定指向哪一個子類對象。一樣,由於子類繼承了父類的全部方法且存在自定義方法的可能,因此多態的狀況下父類沒法獲取或執行只存在於子類中的屬性或方法。

詳細瞭解可參考《java提升篇(四)-----理解java的三大特性之多態blog

相關文章
相關標籤/搜索