[zz] 几种类间关系:继承、实现、依赖、关联、聚合、组合及UML实现图
繼承
指的是一個(gè)類(lèi)(稱(chēng)為子類(lèi)、子接口)繼承另外的一個(gè)類(lèi)(稱(chēng)為父類(lèi)、父接口)的功能,并可以增加它自己的新功能的能力,繼承是類(lèi)與類(lèi)或者接口與接口之間 最常見(jiàn)的關(guān)系;在Java中此類(lèi)關(guān)系通過(guò)關(guān)鍵字extends明確標(biāo)識(shí),在設(shè)計(jì)時(shí)一般沒(méi)有爭(zhēng)議性;
實(shí)現(xiàn)
指的是一個(gè)class類(lèi)實(shí)現(xiàn)interface接口(可以是多個(gè))的功能;實(shí)現(xiàn)是類(lèi)與接口之間最常見(jiàn)的關(guān)系;在Java中此類(lèi)關(guān)系通過(guò)關(guān)鍵字implements明確標(biāo)識(shí),在設(shè)計(jì)時(shí)一般沒(méi)有爭(zhēng)議性
? 繼承和實(shí)現(xiàn)又可以統(tǒng)稱(chēng)為泛化
依賴
可以簡(jiǎn)單的理解,就是一個(gè)類(lèi)A使用到了另一個(gè)類(lèi)B,而這種使用關(guān)系是具有偶然性的、、臨時(shí)性的、非常弱的,但是B類(lèi)的變化會(huì)影響到A;比如某人要過(guò) 河,需要借用一條船,此時(shí)人與船之間的關(guān)系就是依賴;表現(xiàn)在代碼層面,為類(lèi)B作為參數(shù)被類(lèi)A在某個(gè)method方法中使用;
[具體表現(xiàn)] 依賴關(guān)系表現(xiàn)在局部變量,方法的參數(shù),以及對(duì)靜態(tài)方法的調(diào)用
[現(xiàn)實(shí)例子]
比如說(shuō)你要去擰螺絲,你是不是要借助(也就是依賴)螺絲刀(Screwdriver)來(lái)幫助你完成擰螺絲(screw)的工作
[代碼表現(xiàn)]
?
?| <strong>public class Person{?? <br>??? /** 擰螺絲 */? <br>??? public void screw(Screwdriver screwdriver){?? <br>??????? screwdriver.screw();?? <br>??? }?? <br>}<br></strong> |
[UML圖]
?
關(guān)聯(lián)
他體現(xiàn)的是兩個(gè)類(lèi)、或者類(lèi)與接口之間語(yǔ)義級(jí)別的一種強(qiáng)依賴關(guān)系,比如我和我的朋友;這種關(guān)系比依賴更強(qiáng)、不存在依賴關(guān)系的偶然性、關(guān)系也不是臨時(shí)性 的,一般是長(zhǎng)期性的,而且雙方的關(guān)系一般是平等的、關(guān)聯(lián)可以是單向、雙向的;表現(xiàn)在代碼層面,為被關(guān)聯(lián)類(lèi)B以類(lèi)屬性的形式出現(xiàn)在關(guān)聯(lián)類(lèi)A中,也可能是關(guān)聯(lián) 類(lèi)A引用了一個(gè)類(lèi)型為被關(guān)聯(lián)類(lèi)B的全局變量;
[具體表現(xiàn)] 關(guān)聯(lián)關(guān)系是使用實(shí)例變量來(lái)實(shí)現(xiàn)
[現(xiàn)實(shí)例子]
比如客戶和訂單,每個(gè)訂單對(duì)應(yīng)特定的客戶,每個(gè)客戶對(duì)應(yīng)一些特定的訂單;再例如公司和員工,每個(gè)公司對(duì)應(yīng)一些特定的員工,每個(gè)員工對(duì)應(yīng)一特定的公司
[代碼表現(xiàn)]
?
?| <strong> public class Company{?? <br>???? private Employee employee;?? <br>???? public Employee getEmployee(){?? <br>???????? return employee;?? <br>???? }?? <br>???? public void setEmployee(Employee employee){?? <br>???????? this.employee=employee;?? <br>???? }?? <br>???? //公司運(yùn)作?? <br>???? public void run(){?? <br>???????? employee.startWorking();?? <br>???? }?? <br> }? <br></strong> |
[UML圖]
?
聚合
聚合是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是整體與部分、擁有的關(guān)系,即has-a的關(guān)系,此時(shí)整體與部分之間是可分離的,他們可以具有各自的生命周期, 部分可以屬于多個(gè)整體對(duì)象,也可以為多個(gè)整體對(duì)象共享;比如計(jì)算機(jī)與CPU、公司與員工的關(guān)系等;表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái) 區(qū)分;
[具體表現(xiàn)]
與關(guān)聯(lián)關(guān)系一樣,聚合關(guān)系也是通過(guò)實(shí)例變量來(lái)實(shí)現(xiàn)這樣關(guān)系的。關(guān)聯(lián)關(guān)系和聚合關(guān)系來(lái)語(yǔ)法上是沒(méi)辦法區(qū)分的,從語(yǔ)義上才能更好的區(qū)分兩者的區(qū)別。
[UML圖]
組合
組合也是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是一種contains-a的關(guān)系,這種關(guān)系比聚合更強(qiáng),也稱(chēng)為強(qiáng)聚合;他同樣體現(xiàn)整體與部分間的關(guān)系,但此 時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束;比如你和你的大腦;表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái)區(qū) 分;
[UML圖]
?
對(duì)于繼承、實(shí)現(xiàn)這兩種關(guān)系沒(méi)多少疑問(wèn),他們體現(xiàn)的是一種類(lèi)與類(lèi)、或者類(lèi)與接口間的縱向關(guān)系;其他的四者關(guān)系則體現(xiàn)的是類(lèi)與類(lèi)、或者類(lèi)與接口間的引 用、橫向關(guān)系,是比較難區(qū)分的,有很多事物間的關(guān)系要想準(zhǔn)備定位是很難的,前面也提到,這幾種關(guān)系都是語(yǔ)義級(jí)別的,所以從代碼層面并不能完全區(qū)分各種關(guān) 系;但總的來(lái)說(shuō),后幾種關(guān)系所表現(xiàn)的強(qiáng)弱程度依次為:組合>聚合>關(guān)聯(lián)>依賴;
轉(zhuǎn)載于:https://www.cnblogs.com/18fanna/p/3388682.html
總結(jié)
以上是生活随笔為你收集整理的[zz] 几种类间关系:继承、实现、依赖、关联、聚合、组合及UML实现图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Storage Options
- 下一篇: cadence spb 16.5 破解过