1. 程式人生 > >面向物件基本思想概述

面向物件基本思想概述

面向物件的基本思想
  面向物件是一種新興的程式設計方法,或者是一種新的程式設計規範(paradigm),其基本思想是使用物件、類、繼承、封裝、訊息等基本概念來進行程式設計。從現實世界中客觀存在的事物(即物件)出發來構造軟體系統,並且在系統構造中儘可能運用人類的自然思維方式。開發一個軟體是為了解決某些問題,這些問題所涉及的業務範圍稱作該軟體的問題域。其應用領域不僅僅是軟體,還有計算機體系結構和人工智慧等。
1. 物件的基本概念
  物件是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個物件由一組屬性和對這組屬性進行操作的一組服務組成。從更抽象的角度來說,物件是問題域或實現域中某些事物的一個抽象,它反映該事物在系統中需要儲存的資訊和發揮的作用;它是一組屬性和有權對這些屬性進行操作的一組服務的封裝體。客觀世界是由物件和物件之間的聯絡組成的。
  主動物件是一組屬性和一組服務的封裝體,其中至少有一個服務不需要接收訊息就能主動執行(稱作主動服務)。
2. 類的基本概念


  把眾多的事物歸納、劃分成一些類是人類在認識客觀世界時經常採用的思維方法。分類的原則是抽象。類是具有相同屬性和服務的一組物件的集合,它為屬於該類的所有物件提供了統一的抽象描述,其內部包括屬性和服務兩個主要部分。在面向物件的程式語言中,類是一個獨立的程式單位,它應該有一個類名幷包括屬性說明和服務說明兩個主要部分。類與物件的關係就如模具和鑄件的關係,類的例項化結果就是物件,而對一類物件的抽象就是類。
3. 面向物件的基本特徵
 1.封裝性
  封裝性就是把物件的屬性和服務結合成一個獨立的相同單位,並儘可能隱蔽物件的內部細節,包含兩個含義:
  ◇ 把物件的全部屬性和全部服務結合在一起,形成一個不可分割的獨立單位(即物件)。
  ◇ 資訊隱蔽,即儘可能隱蔽物件的內部細節,對外形成一個邊界〔或者說形成一道屏障〕,只保留有限的對外介面使之與外部發生聯絡。
  封裝的原則在軟體上的反映是:要求使物件以外的部分不能隨意存取物件的內部資料(屬性),從而有效的避免了外部錯誤對它的"交叉感染",使軟體錯誤能夠區域性化,大大減少查錯和排錯的難度。
 2.繼承性
  特殊類的物件擁有其一般類的全部屬性與服務,稱作特殊類對一般類的繼承。例如,輪船、客輪;人、大人。一個類可以是多個一般類的特殊類,它從多個一般類中繼承了屬性與服務,這稱為多繼承。例如,客輪是輪船和客運工具的特殊類。
 3.多型性
  物件的多型性是指在一般類中定義的屬性或服務被特殊類繼承之後,可以具有不同的資料型別或表現出不同的行為。這使得同一個屬性或服務在一般類及其各個特殊類中具有不同的語義。例如:"幾何圖形"的"繪圖"方法,"橢圓"和"多邊形"都是"幾何圖"的子類,其"繪圖"方法功能不同。
  

  類是java中的一種重要的複合資料型別,是組成java程式的基本要素。它封裝了一類物件的狀態和方法,是這一類物件的原形。一個類的實現包括兩個部分:類宣告和類體。
  成員變數
  成員變數的宣告方式如下:
  [public | protected | private ] [static]
  [final] [transient] [volatile] type
  variableName;                 //成員變數
  其中,
  static: 靜態變數(類變數);相對於例項變數
  final: 常量
  transient: 暫時性變數,用於物件存檔
  volatile: 貢獻變數,用於併發執行緒的共享
  在這裡插入圖片描述

  成員方法
  方法的實現包括兩部分內容:方法宣告和方法體。
  [public | protected | private ] [static]
  [final | abstract] [native] [synchronized]
  returnType methodName([paramList])
  [throws exceptionList]            //方法宣告
   {statements}                //方法體
   在這裡插入圖片描述
  方法過載
  方法過載是指多個方法享有相同的名字,但是這些方法的引數必須不同,或者是引數的個數不同,或者是引數型別不同。返回型別不能用來區分過載的方法。
  引數型別的區分度一定要足夠,例如不能是同一簡單型別的引數,如int與long。
  在這裡插入圖片描述
   構造方法
  ◇ 構造方法是一個特殊的方法。Java 中的每個類都有構造方法,用來初始化該類的一個物件。
  ◇ 構造方法具有和類名相同的名稱,而且不返回任何資料型別。
  ◇ 過載經常用於構造方法。
  ◇ 構造方法只能由new運算子呼叫