程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java編程那些事兒61—面向對象設計方法

Java編程那些事兒61—面向對象設計方法

編輯:關於JAVA

前面介紹了面向對象技術的兩個最基本、最重要的概念——類和對象,下面介紹一下面向對象技術的設計思路。

對於初學者來說,面向對象是學習Java語言時的第一個難點,其實面向對象只是一種思考問題的方式,或者理解為組織數據和功能的方式而已,當系統中的數據和功能都實現以後,按照數據和功能的相關性進行組織。

在使用面向對象技術設計項目時,一般的步驟如下:

1、抽象類

2、抽象類的屬性和方法

3、通過對象的關聯構造系統

其中步驟1和2是設計需要實現的功能,步驟3更多的和業務邏輯相關,體現設計的結構不是很多。

l 抽象類

抽象類最基本的方式是——將名詞轉換為類。

在一個系統中會存在很多的名詞,如果這些名詞需要頻繁的在系統中進行使用時,則可以將這些名詞抽象成類,便於後續的時候。例如在一個學生成績管理系統中,則名詞:學生、課程等則可以抽象成類。

而實際在抽象時,由於有一定的主觀性,所以在系統設計時,不同人設計的系統會存在一些不同。

l 抽象類的屬性和方法

把系統中的類抽象出來了以後,就可以設計每個類的內部結構了,而每個類內部最重要的結構就是屬性和方法了。

抽象屬性最基本的方式是——將數據抽象為屬性。

抽象方法最基本的方式是——將功能抽象為方法。

在一個類內部會存在很多的數據和功能,在實際抽象時,只需要抽象自己需要的數據和功能即可。例如在學生成績管理系統中,學生的姓名、班級和各個科目的成績都是系統中需要使用的數據,而學生的家庭住址,聯系電話則不會必須的屬性,可以根據實際的需要取捨數據的值。

抽象功能時,只需要把該類在系統中需要執行的動作提取出來,然後使用方法的語法進行描述即可。

當然,面向對象設計還涉及很多其它的知識,這裡講解的只是一些基礎的入門知識,更多的有關面向對象的知識可以閱讀關於面向對象技術的專門書籍,並且在項目開發中逐步體會這些知識。

8.5 面向對象三大特性

面向對象技術在實際開發中有很多的特性,總結起來最核心的特性主要有三個:封裝、繼承和多態。

8.5.1 封裝性

封裝性指在實際實現時,將復雜的內部結構隱藏起來,並為這組復雜的結構取一個統一的名稱進行使用。在現實世界中,大量的存在封裝的例子,例如電腦的硬盤,將多組復雜的線路和存儲信息的磁片封裝起來,並將該組結構取名為硬盤,以後就可以使用硬盤來代表該結構,而不需要更多的了解內部的信息。

在面向對象技術中,類是典型的封裝性的體現,類將一組屬性和功能組合成一個統一的結構,並使用類名來代表該結構。

封裝性的最大優勢在於隱藏每個類的內部實現(內部結構),從而既方便項目的分解也降低了項目的難度。

例如以設計汽車為例,我們可以把汽車看作是軟件開發中的整個項目,在實際設計時,首先可以將設計汽車分解為設計汽車的每個組件,然後具體對每個組件進行設計,而組件和組件的設計之間關聯性很小,例如設計發動機的設計小組不需要很詳細的了解輪胎設計小組的工作。而這裡的每個組件可以看作實際面向對象設計中的類,每個類都把自己的內部實現隱藏起來,只通過名稱使其它類了解該類的作用,並開放一些基本的功能供其它的類使用即可。

這樣可以在實際設計時,每個類都更注重自身的實現,而對於其它類的實現不需要深入了解,這樣可以在總體上降低交流的頻率,從而降低整個項目的復雜度。

通常情況下,一般把類和類之間的關聯性又稱作耦合性,類和類之間的關聯性比較低也稱作耦合性比較低。在實際設計項目時,低耦合的項目是程序設計人員設計系統的目標之一。

8.5.2 繼承性

在我們認知現實世界時,一般會把事物進行分類,而每一類內部又劃分出很多的小類,生物學中將該方式體現的很徹底。例如猩猩屬於動物中的哺乳類靈長目,這裡的動物、哺乳類和靈長目都是一個特定的類別,和以前不同的是這些類別之間存在包含關系(is-a),換句話說,也就是哺乳類是動物類的一種,靈長目是哺乳類的一種。

其實在程序設計中,很多設計出來的類也存在這樣的包含關系,這樣一個類的內部會包含和其它類類似的特征和屬性,如果在設計時可以以另外一個類為基礎進行設計,那將是多麼激動人心的特性,這個特性就是面向對象設計中的繼承性。

在一個項目中,如果類和類之間存儲包含關系,即一個類是另外一個類的一種,就可以使用繼承。

繼承性提供了全新的類設計方式,可以充分利用了已有類內部的結構和功能,極大的降低了類內部的代碼重復,是設計類的一種顯著的變革,對於大型的項目設計十分有用。另外很多技術的應用中也包含大量的繼承成分,使整個技術體系比較固定。

8.5.2.1 繼承語法

在Java語言中,繼承的語法格式比較簡單,如下所述:

訪問控制符 [修飾符] class 類名 extends 父類名{
  ……
}

在聲明類時,聲明該類的繼承關系,使用extends關鍵字實現,其中extends關鍵字前面是聲明出的新類名,extends關鍵字後面的類名是被繼承的類名,要求被繼承的類名已存在。Java語言采用的是單重繼承,也就是說一個類只能有一個直接父類。在類聲明時,如果沒有使用extends關鍵字聲明父類,則自動繼承Object類。說明:Object類是系統提供的類,該類已存在。

示例代碼如下:

//Animal.java
public class Animal {
 /**類型名稱*/
 String name;
 /**移動方式*/
 int moveType;
}

//Mammalia.java
public class Mammalia extends Animal{
 /**哺育時間*/
 int fosterTime;
}

這裡Mammalia類就是Animal類的子類,Animal類就是Mammalia類的父類,子類和父類具有相對性,正如一個祖孫三代的家庭內部,每個人相對於不同的人扮演不同的角色一樣。同時類和類之間的繼承具備傳遞性,就如現實中的血緣關系一樣。

8.5.2.2 繼承說明

兩個類之間如果存在了繼承關系以後,將帶來哪些不同呢?下面依次來進行說明:

l 子類擁有父類的所有屬性

子類中繼承父類中所有的屬性,在父類中聲明的屬性在子類內部可以直接調用。說明:如果訪問控制符限制則無法訪問。

l 子類擁有父類的所有方法

子類中繼承父類中所有的方法,在父類中聲明的方法在子類內部可以直接調用。說明:如果訪問控制符限制則無法訪問。

l 子類不擁有父類的構造方法

子類不繼承父類的構造方法,如果需要在子類內部使用和父類傳入參數一樣的構造方法,則需要在子類內部重新聲明這些構造方法。

l 子類類型是父類類型

子類類型的對象可以自動轉換為父類類型的對象,父類類型的對象則需要強制轉換為子類的對象,轉換的語法個基本數據類型轉換的語法相同。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved