面向對象到底是什麼

面向對象編程

  • OOP,全稱 Object Oriented Programming
  • 兩個基礎概念:類(class)和對象(object)
  • 一種編程範式或編程風格。它以類或對象作爲組織代碼的基本單元,並將封裝、抽象、繼承、多態四個特性,作爲代碼設計和實現的基石

 

面向對象編程語言

  • OOPL,全稱 Object Oriented Programming Language
  • 支持類或對象的語法機制,並有現成的語法機制,能方便地實現面向對象編程四大特性(封裝、抽象、繼承、多態)的編程語言

 

對象分析(OOA)Object Oriented Analysis

面向對象設計(OOD)Object Oriented Design

 

面向對象編程和麪向對象編程語言之間的關係

  • 不用面向對象編程語言,照樣可以進行面向對象編程
  • 使用面向對象編程語言,寫出來的代碼也不一定是面向對象編程風格

 

面向對象編程的優勢

  • 更能應對大規模複雜程序的開發,程序的處理流程並非單一的一條主線,而是錯綜複雜的網狀結構
  • 具有更加豐富的特性(封裝、抽象、繼承、多態)。利用這些特性編寫出來的代碼,更加易擴展、易複用、易維護
  • OOP 語言更加人性化、更加高級、更加智能

 

三大特性 or 四大特性

封裝、抽象、多態  or  封裝、抽象、繼承、多態

 

封裝

也叫作信息隱藏或者數據訪問保護。類通過暴露有限的訪問接口,授權外部僅能通過類提供的方式來訪問內部信息或者數據。它需要編程語言提供權限訪問控制語法來支持,例如 Java 中的 private、protected、public 關鍵字。封裝特性存在的意義,一方面是保護數據不被隨意修改,提高代碼的可維護性;另一方面是僅暴露有限的必要接口,提高類的易用性。

 

抽象

主要講如何隱藏信息、保護數據,那抽象就是講如何隱藏方法的具體實現,讓使用者只需要關心方法提供了哪些功能,不需要知道這些功能是如何實現的。抽象可以通過接口類或者抽象類來實現,但也並不需要特殊的語法機制來支持。抽象存在的意義,一方面是提高代碼的可擴展性、維護性,修改實現不需要改變定義,減少代碼的改動範圍;另一方面,它也是處理複雜系統的有效手段,能有效地過濾掉不必要關注的信息。

 

繼承

表示類之間的 is-a 關係,爲了實現繼承這個特性,編程語言需要提供特殊的語法機制來支持,繼承主要是用來解決代碼複用的問題。

 

多態

子類可以替換父類,在實際的代碼運行過程中,調用子類的方法實現。多態這種特性也需要編程語言提供特殊的語法機制來實現,比如繼承、接口類、duck-typing。多態可以提高代碼的擴展性和複用性,是很多設計模式、設計原則、編程技巧的代碼實現基礎。

 

典型的非面向對象代碼

  • 濫用 getter、setter 方法
  • 濫用全局變量和全局方法,Constants 類、Utils 類
  • 將類的數據和方法分離,基於貧血模型的開發模式

 

爲什麼容易寫出面向過程風格的代碼?

  • 完成一個任務,一般都會思考,應該先做什麼、後做什麼,如何一步一步地順序執行一系列操作,最後完成整個任務
  • 面向過程編程風格符合這種流程化思維方式
  • 面向對象的編程的底層方法就是面向過程的,去完成什麼功能

 

抽象類和接口存在的意義

  • 抽象類是對成員變量和方法的抽象,是一種 is-a 關係,是爲了解決代碼複用問題
  • 接口僅僅是對方法的抽象,是一種 has-a 關係,表示具有某一組行爲特性,是爲了解決解耦問題,隔離接口和具體的實現,提高代碼的擴展性

 

基於接口而非實現編程

  • 意圖是將接口和實現相分離,封裝不穩定的實現,暴露穩定的接口
  • 不需要把每個類設計成接口
  • 在定義接口的時候,一方面,命名要足夠通用,不能包含跟具體實現相關的字眼;另一方面,與特定實現有關的方法不要定義在接口中

 

多用組合少用繼承

  • 繼承是面向對象的四大特性之一,用來表示類之間的 is-a 關係,可以解決代碼複用的問題。雖然繼承有諸多作用,但繼承層次過深、過複雜,也會影響到代碼的可維護性。在這種情況下,我們應該儘量少用,甚至不用繼承
  • 通過組合、接口、委託三個技術手段來達成繼承的作用,還能解決層次過深、過複雜的繼承關係影響代碼可維護性的問題
  • 類之間的繼承結構穩定,層次比較淺,關係不復雜,使用繼承即可

 

摘自:http://gk.link/a/10iey

圖:思維導圖

 

 


【Java學習資源】整理推薦

 

 


【Java面試題與答案】整理推薦

 

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