程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java語言入門教程(十):Java語言中的關聯與依賴關系

Java語言入門教程(十):Java語言中的關聯與依賴關系

編輯:關於JAVA

在開始本文的學習前,先總結一下已經學習過的內容。在前面9篇文章中,主 要是介紹Java類中的基本語法,是按照先概括,再具體的循序漸進的方式進行的 。先介紹了Java類的主要組成部分:數據成員,方法成員,構造方法。然後對一 些通用的知識點進行了較詳細介紹,如權限訪問修飾符,包,靜態修飾符,數據 類型等。了解了這些通用的知識點後,對於類的三個組成部分分別詳細介紹,如 介紹了類中各種數據的相關問題,介紹了構造方法的相關問題,介紹了方法會使 用到的操作符,流程控制,以及調用方法會使用到的值傳遞等知識點。在了解了 這些以後,初學者應該可以比較清楚的理解一個獨立的Java類,。但是,在Java 應用中,不可能只有一個Java類,而是會有很多Java類。這很多個Java類之間, 不可能是老死不相往來的,而會是彼此協作,完成復雜功能。所以,在了解了基 本知識點後,接下來,初學者應該著重學習Java語言中類與類的關系。

在本文中,將使用簡單的Java類,展示Java語言中類與類之間常見的兩種關 系:關聯關系,和依賴關系

1、關聯關系

類A關聯類B的意思是,如果實例化一個A類的對象,同時,會有一個B類的對 象被實例化。簡言之,B作為A的屬性存在。如下:

class A{
       private B b;
}
class B{
}

2、依賴關系

類A依賴類B的意思是,如果A的對象要完成某一操作,必須使用B的對象的某 些操作來幫忙,才能完成。簡言之,B作為A的某個方法的方法參數存在。如下:

class A{
       public void f(B b){
}
}
class B{
}

關聯和依賴,是面向對象編程中,最常見的兩種關系。假設有這樣一個場景 描述:某培訓中心提供免費培訓課程,每門課程都有其名字以及原價。學員最多 每人可以選擇一門課程,學員只要登記姓名,就可以選擇一門課程來學習。

通過分析這個簡單場景,可以很容易分析出,有兩種對象:學員,課程。也 就是說,我們應該創建兩個類,Student,Course。

Course類有兩個屬性,課程名稱和原始價格。如下:

package com.csst.relation;
public class Course {
       private String title;
       private double price;
       public Course(String title, double price) {
              super();
              this.title = title;
              this.price = price;
       }
       public Course(String title) {
              super();
              this.title = title;
       }
       public Course() {
              super();
       }
       public String getTitle() {
              return title;
       }
       public void setTitle(String title) {
              this.title = title;
       }
       public double getPrice() {
              return price;
       }
       public void setPrice(double price) {
              this.price = price;
       }
}

然後創建另外一個類,Student,該類有一個學員姓名屬性name,另外,因為 每個學員可以選擇一門課程學習,那麼就是說,每個Student對象,會有一個 Course對象,即Course應該作為Student的一個屬性存在,即Student關聯了 Course。那麼,會有如下聲明:

package com.csst.relation;
public class Student {
    private String name;
    //1.關聯關系:Student關聯Course
    private Course course;
    public Student(String name) {
       super();
       this.name = name;
    }
//TBD
}

繼續分析,Student應該有1個行為,就是選擇課程。要完成選擇課程這個操 作,必須得接受一個課程的對象,也就是說,Student選課這個行為,必須依賴 於Course的一個對象,才能完成,所以Student和Course之間還存在依賴關系, 繼續完善上邊代碼:

package com.csst.relation;
public class Student {
       private String name;
       //1.關聯關系:Student關聯Course
       private Course course;
       public Student(String name) {
              super();
              this.name = name;
       }
       //2.依賴關系:Student依賴Course
       public void chooseCourse(Course course){
              this.course=course;
       }
       public Course getCourse(){
              return this.course;
       }
}

很多初學者,對於Course作為Student的一個屬性,以及Course類型作為方法 參數,作為方法返回值的類型,不能接受。總覺得只有String,int之類才是數 據類型,而Course作為一個類型存在,有些不倫不類。Java是面向對象的語言, 任何一個類,就是一個類型,都可以作為數據類型存在,我們自己聲明的類也不 例外。也就是說,如果能理解String作為一個類型存在,就應該坦然接受Course 作為一個類型存在,因為它們是一樣的,都是一個類型而已,只不過String是 API中聲明的,Course是我們自己聲明的。

學習本文內容後,初學者應該又上了一個台階,就是不再僅僅關注某個Java 類的語法,而是從更高的角度去看待Java應用,去關注類與類的關系。總結一下 關聯和依賴關系:

1、關聯和依賴都是面向對象編程中,常用的關系。

2、關聯表示has-a關系,如學生擁有一個課程,往往表現為B作為A的屬性存 在(A關聯B)

3、依賴表示要做一件事情,離不開某個對象。往往表現為B作為A的方法參數 存在(A依賴B)

4、當開始了解類與類的關系後,就需要對類型有更深入的了解。切記,任何 類都可以作為類型使用。

在本文例子中,學生只能選擇一門免費課程學習,如果培訓中心加大優惠力 度,每個學生最多可以選擇3門課程學習,應該如何維護這種關系哪?我們就不 得不去了解Java語言中的一些“數據容器”對象:數組、集合。

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