最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計(jì)模式UML之類圖精解

 更新時(shí)間:2022年02月07日 16:41:18   作者:張起靈-小哥  
在UML類圖中,類使用包含類名、屬性(field) 和方法(method) 且?guī)в蟹指罹€的矩形來(lái)表示,比如下圖表示一個(gè)Employee類,它包含name,age和email這3個(gè)屬性,以及modifyInfo()方法

1.UML基本介紹

  • UML——Unified modeling language UML (統(tǒng)一建模語(yǔ)言),是一種用于軟件系統(tǒng)分析和設(shè)計(jì)的語(yǔ)言工具,它用于幫助軟件開(kāi)發(fā)人員進(jìn)行思考和記錄思路的結(jié)果。
  • UML本身是一套符號(hào)的規(guī)定,就像數(shù)學(xué)符號(hào)和化學(xué)符號(hào)一樣,這些符號(hào)用于描述軟件模型中的各個(gè)元素和他們之間的關(guān)系,比如類、接口、實(shí)現(xiàn)、泛化、依賴、組合、聚合等,如下圖:

上面的截圖就是一個(gè)UML類圖的案例,只不過(guò)這是在eclipse中的,下面的類圖我會(huì)在IDEA中使用。

畫(huà)UML圖與寫(xiě)文章差不多,都是把自己的思想描述給別人看,關(guān)鍵在于思路和條理,UML圖分類:??????

  • 用例圖 (use case)
  • 靜態(tài)結(jié)構(gòu)圖:? 類圖、對(duì)象圖、包圖、組件圖、部署圖
  • 動(dòng)態(tài)行為圖:? 交互圖(時(shí)序圖與協(xié)作圖)、狀態(tài)圖、活動(dòng)圖

類圖是描述類與類之間的關(guān)系的,是UML圖中最核心的。

2.UML類圖

用于描述系統(tǒng)中的類(對(duì)象)本身的組成和類(對(duì)象)之間的各種靜態(tài)關(guān)系。

類之間的關(guān)系:? 依賴、泛化(繼承)、實(shí)現(xiàn)、關(guān)聯(lián)、聚合與組合。

2.1 類關(guān)系——依賴

只要是在類中用到了對(duì)方,那么他們之間就存在依賴關(guān)系。?? 來(lái)看下面的代碼

package com.szh.uml.dependence;
 
public class PersonServiceBean {
	private PersonDao personDao;
 
	public void save(Person person) {
	}
 
	public IDCard getIDCard(Integer personId) {
		return null;
	}
 
	public void modify() {
		Department department = new Department();
	}
}
package com.szh.uml.dependence;
 
public class PersonDao {
}
package com.szh.uml.dependence;
 
public class Person {
}
package com.szh.uml.dependence;
 
public class IDCard {
}
package com.szh.uml.dependence;
 
public class Department {
}

上面的代碼中,PersonServiceBean類中用到了Department、Person等這幾個(gè)類,那么我們就可以說(shuō)PersonServiceBean類與它們幾個(gè)類之間存在依賴關(guān)系。

  • 類中用到了對(duì)方
  • 類的成員屬性
  • 方法的返回類型
  • 方法接收的參數(shù)類型
  • 方法體內(nèi)部使用到

依賴的符號(hào)就是 虛線 + 一個(gè)箭頭。

2.2 類關(guān)系——泛化

泛化實(shí)際上就是繼承,它是依賴關(guān)系的一種特例。

如果A類繼承了B類,那么我們就可以說(shuō) A和B 之間存在泛化關(guān)系。

package com.szh.uml.generalization;
 
public abstract class DaoSupport {
 
	public void save(Object entity) {
	}
 
	public void delete(Object id) {
	}
}
package com.szh.uml.generalization;
 
public class PersonServiceBean extends DaoSupport {
}

繼承就不再多說(shuō)了,這里需要指出的一點(diǎn)是:IDEA中的泛化符號(hào)不太一樣,一般來(lái)說(shuō),泛化的符號(hào)應(yīng)該是 實(shí)線 + 一個(gè)空心三角形,而IDEA中則是下圖這樣。

2.3 類關(guān)系——實(shí)現(xiàn)

實(shí)現(xiàn)關(guān)系其實(shí)就是面向接口而言,它和泛化一樣,也是依賴關(guān)系的一種特例。

如果A類實(shí)現(xiàn)了接口B,那么我們就可以說(shuō)A和B之間存在實(shí)現(xiàn)關(guān)系。

package com.szh.uml.implementation;
 
public interface PersonService {
 
	public void delete(Integer id);
 
}
package com.szh.uml.implementation;
 
public class PersonServiceBean implements PersonService{
 
	@Override
	public void delete(Integer id) {
		System.out.println("delete..");
	}
 
}

實(shí)現(xiàn)接口這個(gè)也不再多說(shuō)了。 這里需要指出的一點(diǎn)是:IDEA中的實(shí)現(xiàn)符號(hào)不太一樣,一般來(lái)說(shuō),實(shí)現(xiàn)的符號(hào)應(yīng)該是 虛線 + 一個(gè)空心三角形,而IDEA中則是下圖這樣。

2.4 類關(guān)系——關(guān)聯(lián)

關(guān)聯(lián)關(guān)系 實(shí)際上就是類與類之間的聯(lián)系,他是依賴關(guān)系的特例。關(guān)聯(lián)具有導(dǎo)航性:? 即雙向關(guān)系或單向關(guān)系。

關(guān)系具有多重性:? 如“1”(表示有且僅有一個(gè)),“0...”(表示0個(gè)或者多個(gè)),“0,1”(表示0個(gè)或者一個(gè)),“n.….m”(表示n到 m個(gè)都可以), "m.….*”(表示至少m個(gè))

package com.szh.uml.association1;
 
/**
 *
 */
public class Person {
    private IDCard card;
}
package com.szh.uml.association1;
 
/**
 *
 */
public class IDCard {
}

這里我們的理解就是Person類表示人,IDCard類表示身份證類,一個(gè)人只有一個(gè)身份證號(hào)、一個(gè)身份證號(hào)只屬于一個(gè)人,所以它倆之間就存在著一對(duì)一的關(guān)聯(lián)關(guān)系。? 關(guān)聯(lián)的符號(hào)就是 實(shí)線 + 一個(gè)箭頭。

下圖是單向的關(guān)聯(lián)關(guān)系,當(dāng)我們?cè)贗DCard類中聲明了Person類的成員變量時(shí),這二者之間的關(guān)聯(lián)關(guān)系就轉(zhuǎn)換成了雙向。(圖中還有組合符號(hào),我們后面會(huì)說(shuō))

2.5 類關(guān)系——聚合

聚合關(guān)系(Aggregation)表示的是整體和部分的關(guān)系,整體與部分可以分開(kāi)。聚合關(guān)系是關(guān)聯(lián)關(guān)系的特例,所以他具有關(guān)聯(lián)的導(dǎo)航性與多重性。

如:? 一臺(tái)電腦由鍵盤(keyboard)、顯示器(monitor),鼠標(biāo)等組成;組成電腦的各個(gè)配件是可以從電腦上分離出來(lái)的,使用帶空心菱形的實(shí)線來(lái)表示。

package com.szh.uml.aggregation;
 
public class Computer {
 
	private Mouse mouse;
	private Monitor monitor;
 
	public void setMouse(Mouse mouse) {
		this.mouse = mouse;
	}
	public void setMonitor(Monitor monitor) {
		this.monitor = monitor;
	}
	
}
package com.szh.uml.aggregation;
 
public class Monitor {
}
package com.szh.uml.aggregation;
 
public class Mouse {
}

聚合的符號(hào)一般來(lái)說(shuō)應(yīng)該是 實(shí)線 + 空心菱形,組合的符號(hào)則是 實(shí)線 + 實(shí)心菱形,IDEA中聚合、組合的符號(hào)都是下圖這樣。

2.6 類關(guān)系——組合

組合關(guān)系:? 也是整體與部分的關(guān)系,但是整體與部分不可以分開(kāi)。

再看一個(gè)案例:在程序中我們定義實(shí)體: Person與IDCard、Head,那么 Head和 Person 就是組合, IDCard 和Person就是聚合。

但是如果在程序中 Person實(shí)體中定義了對(duì)IDCard進(jìn)行級(jí)聯(lián)刪除,即刪除Person時(shí)連同IDCard 一起刪除,那么IDCard和 Person就是組合了。

package com.szh.uml.composition;
 
public class Computer {
 
	private Mouse mouse = new Mouse();
	private Monitor monitor = new Monitor();
 
	public void setMouse(Mouse mouse) {
		this.mouse = mouse;
	}
 
	public void setMonitor(Monitor monitor) {
		this.monitor = monitor;
	}
	
}
package com.szh.uml.composition;
 
public class Monitor {
}
package com.szh.uml.composition;
 
public class Mouse {
}
package com.szh.uml.composition;
 
public class Person {
    private IDCard card;
    private Head head = new Head();
}
package com.szh.uml.composition;
 
public class Head {
}
package com.szh.uml.composition;
 
public class IDCard {
}

到此這篇關(guān)于Java設(shè)計(jì)模式UML之類圖精解的文章就介紹到這了,更多相關(guān)Java 設(shè)計(jì)模式類圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解Spring中bean的生命周期介紹

    深入理解Spring中bean的生命周期介紹

    本篇文章主要介紹了深入理解Spring中bean的生命周期介紹,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • JAVA輸出流與輸入流代碼實(shí)例

    JAVA輸出流與輸入流代碼實(shí)例

    這篇文章主要介紹了JAVA輸出流與輸入流代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 簡(jiǎn)單了解Java編程中拋出異常的方法

    簡(jiǎn)單了解Java編程中拋出異常的方法

    這篇文章主要介紹了Java編程中拋出異常的方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • 解決JAVA遍歷List集合,刪除數(shù)據(jù)時(shí)出現(xiàn)的問(wèn)題

    解決JAVA遍歷List集合,刪除數(shù)據(jù)時(shí)出現(xiàn)的問(wèn)題

    這篇文章主要介紹了解決JAVA遍歷List集合時(shí),刪除數(shù)據(jù)出現(xiàn)的問(wèn)題,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Java8?Stream流多字段求和、匯聚的實(shí)例

    Java8?Stream流多字段求和、匯聚的實(shí)例

    這篇文章主要介紹了Java8?Stream流多字段求和、匯聚的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • java實(shí)現(xiàn)對(duì)Hadoop的操作

    java實(shí)現(xiàn)對(duì)Hadoop的操作

    這篇文章主要介紹了java實(shí)現(xiàn)對(duì)Hadoop的操作,通過(guò)非常完整詳細(xì)的代碼展示了如何去進(jìn)行一系列操作,包括基本操作,文件讀寫(xiě),需要的朋友可以參考下
    2021-07-07
  • 詳解java內(nèi)部類的訪問(wèn)格式和規(guī)則

    詳解java內(nèi)部類的訪問(wèn)格式和規(guī)則

    在本文里我們給大家詳細(xì)分享了關(guān)于java內(nèi)部類的訪問(wèn)格式和規(guī)則知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2018-10-10
  • Intellij IDEA解析jacoco結(jié)果文件的方法

    Intellij IDEA解析jacoco結(jié)果文件的方法

    這篇文章主要介紹了Intellij IDEA解析jacoco結(jié)果文件的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java Iterator接口實(shí)現(xiàn)代碼解析

    Java Iterator接口實(shí)現(xiàn)代碼解析

    這篇文章主要介紹了Java Iterator接口實(shí)現(xiàn)代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • springboot使用消息中間件

    springboot使用消息中間件

    這篇文章主要介紹了springboot使用消息中間件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評(píng)論

大城县| 和静县| 永德县| 封开县| 文登市| 镇坪县| 上高县| 中阳县| 青浦区| 基隆市| 无极县| 界首市| 宁武县| 冷水江市| 平原县| 临朐县| 南澳县| 高阳县| 陵川县| 溆浦县| 黄龙县| 巴林左旗| 利津县| 梁山县| 青川县| 元谋县| 南开区| 抚州市| 黎川县| 阿鲁科尔沁旗| 禄丰县| 墨玉县| 怀仁县| 宁强县| 韶关市| 津南区| 筠连县| 海门市| 佛坪县| 连江县| 巢湖市|