1. 程式人生 > >Java之面向物件程式設計概述

Java之面向物件程式設計概述

  • 前言

       面向物件程式設計(OOP),是當今主流的程式設計方式,取代了20世紀70年代“過程化設計”程式設計。Java是純面向物件的語言,用氣進行面向物件的軟體開發非常方便、高效。


  • 面向物件術語

 

1、物件

      這裡以一個現實世界物件為例,如一隻貓,可以說貓具有許多屬性(或狀態),如貓名、貓齡和顏色;貓還具有各種行為,如睡覺,吃飯和發情。在OOP的世界裡,物件也具有許多屬性和行為,使用面嚮物件的技術,就可以一隻貓建立一個模型。

 

2、類

  類是0OP中最重要的術語。通常情況下,類被稱為模板或者藍本。物件就是由這些模板或者藍本產生的。屬於某個類的特性和行為總稱為該類的成員。這裡仍以上面提到的貓為例,貓的特性,包括貓名、貓齡和顏色稱為類的屬性,用變量表示;而貓的行為如玩、睡覺稱為類的方法,用函式表示。

 

3、繼承

       OOP的主要優點之一是使用繼承實現類之間的共享資料和方法的機制。在我們日常生活中,兒子總會繼承父親的一些特性:所有種類的汽車都需要實現汽車的基本功能:所有種類汽車都需要實現汽車的基本功能,所有種類的電腦都要實現電腦的基本功能,諸如此類的例子很多。而這些現象,都可以使用繼承來實現。新建的類稱為子類,該類需要繼承的類稱為超類或者父類。

       子類可以繼承類的所有屬性和方法。子類通常會定義其他方法和屬性或重寫超類中定義的方法和屬性,子類還可以重寫(為其提供自己的定義)在超類中定義的方法。

       利用繼承,不必重新建立兩個類共有的所有程式碼,而只需對現有類加以擴充套件即可。例如,可以構建一個名為 Animal的超類,其中包含所有動物的共有特性和行為。可以建立一個繼承 Animal類的Cat類,不必為Cat類再次重複編寫關於動物共有特性和行為的程式碼。



4.介面

       介面可以描述為類定義的模板,實現介面的類實現該模板。在貓的示例中,介面類似於貓的藍圖:通過藍圖可瞭解需要的部分,但並不一定提供關於這些部分的組裝方法或工作原理的資訊。可將介面看作是用於將兩個若沒有介面便沒有任何關係的類關聯起來的“程式設計約定”。例如,多個程式設計師一起工作,每個程式設計師開發同一個應用程式的不同部分(類)。設計應用程式時,約定不同的類使用一組方法進行通訊。因此,建立一個介面用以宣告這些方法、方法的引數及其返回型別。任何實現此介面的類都必須提供這些方法的定義,否則將出現編譯錯誤。

 

5、封裝

       封裝是OOP中另一個非常重要的概念,也稱為資料隱藏。在完美的面向物件的設計中,物件被看作包含或封裝功能的“黑匣子”。程式設計師應當能夠在僅知道物件的屬性、方法和事件的情況下與物件進行互動,而不需知道其實現的詳細資訊。此方法使程式設計師可以在更高的抽象層次上思考,並能提供可用於構建複雜系統的組織框架。同時利用封裝可以進行成員訪問控制。成員的詳細資訊對於物件外的程式碼是私有的和不可見的。物件外程式碼只能與物件的程式設計介面互動,而不是與實現詳細資訊互動。只要程式設計介面不變,物件的建立者就可以在不對物件外程式碼做任何更改的情況下,更改物件的具體實現。


  • 面向物件程式設計方法的優缺點

 

        利用面向物件的思想求解問題,使人們的程式設計與實際的世界更加接近,所有的物件被賦予屬性和方法,使程式設計更加富有人性化。同時利用OOP求解問題,具有更好的重用性、可擴充套件性、更易管理和維護。


1、可重用性

       軟體由各個模組組成,可重用性就是該軟體的模組可以被重複利用,不僅用於該專案,還可用於其他專案。對於程式碼級,可重用性指類或者方法的重複使用,避免對於同一功能多次實現產生多餘程式碼。可重用性是OOP的一個核心思想。OOP中的抽象、繼承、封裝等都可服務於可重用性,利用可重用性構建程式,優點是顯而易見,不僅減少工作量,提高工作效率;利用已有的塊進行開發,更能夠提高程式質量。


2、可擴充套件性

       可擴充套件性即軟體或者程式能夠很方便地進行修改和擴充。對於軟體產品來說,修改和擴充是必不可少的,一是不斷地修訂保證程式穩定;二是可以不斷滿足使用者新的需求。由於繼承、封裝、多型等特性,面向物件方法可以設計出高內聚、低耦合的系統結構,使得系統更靈活,更容易擴充套件,而且成本較低。

 

3、易於管理和維護

       面向過程的開發方法,都是以函式為基本單元。所以當開發專案不斷擴大時,這樣的函式單元將變得不計其數,這樣時不利於管理和維護的。而使用OOP後,以類作為開發的基本模組,由於繼承的存在,即使改變需求,那麼維護也只是在區域性模組,所以維護起來是非常方便的,成本也較低。


Ps:要考試了,什麼都不會,前面的東西跟C語言差不多,跳過了,直接上手面向物件這一章,把書上的概念的敲到blog上,加深理解吧。