当前位置: 首页 > 后端技术 > Java

通过简单的例子-快速理清UML中类间的六种关系

时间:2023-04-01 23:50:34 Java

鍏充簬灏侀潰锛氭垜鎯虫垜浠兘浼氬皢绫婚棿鐨勫叚绉嶅叧绯绘硾鍖?-->琛ㄧ户鎵垮叧绯诲疄鐜帮紙Realization锛夊叧鑱旓紙Association锛夎仛鍚堬紙Aggregation锛夌粍鍚堬紙锛変緷璧栵紙Dependency锛夊墠瑷€锛氭渶杩戝鏍″湪鐮旂┒UnifiedModelingLanguageUML锛屾瘯涓氳璁′篃闇€瑕佺敤鍒帮紝鎵€浠ュ仛涓皬璁板綍銆傚笇鏈涜繖绡囨枃绔犺兘缁欎綘甯︽潵涓€浜涙敹鑾凤紝璁╀綘鍦ㄥ紑蹇冪殑鏃跺€欏洖瀹躲€?.鍗曚釜绫荤殑绫诲浘鎴戜滑鍏堝惊搴忔笎杩涘湴瀛︿範濡備綍鐢║ML鍥炬潵琛ㄧず鍗曚釜绫汇€傛垜鍏堟妸绫昏创涓嬮潰锛歱ackageuml;/***@Author:crush*@Date:2021-09-3015:00*version1.0*/publicclassPerson{privateStringname;绉佷汉鏁存暟骞撮緞锛沺rivatestaticStringschool="鏌愬皬瀛?;publicstaticStringnationality="涓浗";publicPerson(){}publicPerson(Stringname,Integerage){this.name=name;杩欎釜銆傚勾榫?骞撮緞锛泒publicStringgetName(){杩斿洖鍚嶇О锛泒publicvoidsetName(Stringname){this.name=name;}publicIntegergetAge(){杩斿洖骞撮緞锛泒publicvoidsetAge(Integerage){this.age=age;}publicstaticStringgetSchool(){杩斿洖瀛︽牎锛泒publicstaticvoidsetSchool(Stringschool){Person.school=school;}publicstaticStringgetNationality(){杩斿洖鍥界睄锛泒publicstaticvoidsetNationality(Stringnationality){Person.nationality=nationality;}publicvoidselfIntroduction(Stringname,Integerage,Stringschool){System.out.println("鑷垜浠嬬粛涓€涓嬶紝鎴戠殑鍚嶅瓧鏄細"+name+"锛屼粖骞?+age+"锛屾潵鑷?+school");}}杩欎釜绫昏繕鏄緢绠€鍗曠殑锛屾帴涓嬫潵灏辨槸濡備綍鐢ㄧ被鍥炬潵鎻忚堪瀹冧簡锛熷涓嬪浘鎵€绀猴細璇存槑锛氫笂鍗婇儴鍒嗘槸Person绫荤殑灞炴€э紝涓嬪崐閮ㄥ垎鏄疨erson绫荤殑鏂规硶銆?name:String鎻忚堪锛歱rivateStringname;琛ㄧずpublicname锛氬睘鎬у悕锛歺xx锛氳〃绀哄睘鎬х殑绫诲瀷锛岃繖閲屾槸String绫诲瀷-School:String="鏌愬辜鍎垮洯":鎻忚堪privatestaticStringschool="鏌愬皬瀛?锛?u>Underline琛ㄧず杩欎釜灞炴€ф槸闈欐€佺殑锛坰taticattribute锛夆€滀竴涓辜鍎垮洯鈥濊〃绀烘湁涓€涓粯璁ゅ€笺€傚叾浠栧悓涓娿€?u>+getNationality():String鎻忚堪publicstaticvoidsetNationality(Stringnationality){Person.nationality=nationality;}鍜屼笂闈㈠熀鏈竴鏍凤紝+琛ㄧずpublic锛屼笅鍒掔嚎琛ㄧず闈欐€佷慨楗帮紝getNationality()琛ㄧず鏂规硶鍚嶏紝String琛ㄧず杩斿洖鍊间负String绫诲瀷銆備絾鏄湪骞虫椂锛屾垜浠€氬父鏄涓彮绾т箣闂寸殑鍏崇郴锛岃€屼笉鏄竴涓鐙殑鑰佷汉銆?.琛ㄧず澶氫釜绫讳箣闂村叧绯荤殑澶氫釜绫讳箣闂寸殑鍏崇郴鏈変互涓嬪叚绉嶏細娉涘寲--->琛ㄧず缁ф壙鍏崇郴锛堜笁瑙掔澶寸殑瀹炵嚎锛岀澶存寚鍚戠埗绫伙級瀹炵幇锛圧ealization锛夛紙涓夎绠ご鐨勮櫄绾匡紝绠ご鎸囧悜鎺ュ彛锛堿ssociation锛堝叧鑱旓級锛堟櫘閫氱澶寸殑瀹炵嚎锛屾寚鍚戞墍鏈夎€咃級Aggregation锛堣仛鍚堬級锛堢┖蹇冭彵褰㈢殑瀹炵嚎锛岃彵褰㈡寚鍚戞暣浣擄級Composition锛堝疄蹇冭彵褰㈢嚎锛岃彵褰㈡寚鍚戞暣浣擄級Dependency锛堜緷璧栵級锛堣櫄绾跨澶存寚鍚戠敤鎴凤級3.缁ф壙涓庡疄鐜扮被鍥?.1锛庣户鎵縖娉涘寲鍏崇郴]锛氭槸涓€绉嶇户鎵垮叧绯伙紝琛ㄨ揪浜嗕竴鑸拰鐗规畩鐨勫叧绯伙紝瑙勫畾浜嗗瓙绫诲浣曠壒鍖栫埗绫荤殑鎵€鏈夌壒寰佸拰琛屼负銆備緥濡傦細鑰佽檸鏄姩鐗╃殑涓€绉嶏紝鍗冲叿鏈夎€佽檸鐨勭壒鐐瑰拰鍔ㄧ墿鐨勫叡鎬?锛変唬鐮佸姩鐗╃被锛歱ublicclassAnimal{privateStringname;绉佷汉鏁存暟骞撮緞锛沺ublicAnimal(){}publicAnimal(Stringname,Integerage){this.name=name;杩欎釜銆傚勾榫?骞撮緞锛泒publicStringgetName(){杩斿洖鍚嶇О锛泒publicvoidsetName(Stringname){this.name=name;}publicIntegergetAge(){杩斿洖骞撮緞锛泒publicvoidsetAge(Integerage){this.age=age;}}鐚被缁ф壙鍔ㄧ墿绫伙細publicclassCatextendsAnimal{privateStringbreeds;publicCat(Stringname,Integerage,Stringbreeds){super(name,age);this.breeds=鍝佺锛泒publicStringgetBreeds(){杩斿洖鍝佺锛泒publicvoidsetBreeds(Stringbreeds){this.breeds=breeds;}publicvoidselfIntroduction(Stringname,Integerage,Stringbreeds){System.out.println("鎴戝彨"+name+"锛屼竴鍙?+breeds+"鍝佺鐨勭尗锛屼粖骞?+age+"宀侊紝");}}鎴戜滑浣跨敤绫诲浘鏉ヨ〃绀鸿繖绉嶅叧绯汇€?锛夊浘涓殑绠ご涓€瀹氳鐢ㄥ锛屽惁鍒欏叧绯诲氨瀹屽叏涓嶄竴鏍蜂簡銆?.2.瀹炵幇[realizationrelationship]锛氭槸绫诲拰鎺ュ彛鐨勪竴绉嶅叧绯伙紝琛ㄧず绫绘槸鎺ュ彛鎵€鏈夌壒鎬у拰琛屼负鐨勫疄鐜般€?)浠g爜鍚冨拰鐫℃帴鍙o紝鎴戜滑璁╁姩鐗╃被瀹炵幇鍙﹀涓や釜銆俻ublicinterfaceEat{voideat();}publicinterfaceSleep{voidsleep();}publicclassAnimalimplementsEat,Sleep{privateStringname;绉佷汉鏁存暟骞撮緞锛沺ublicAnimal(){}publicAnimal(Stringname,Integerage){this.name=name;杩欎釜銆傚勾榫?骞撮緞锛泒publicStringgetName(){杩斿洖鍚嶇О锛泒publicvoidsetName(Stringname){this.name=name;}publicIntegergetAge(){杩斿洖骞撮緞锛泒publicvoidsetAge(Integerage){this.age=age;}@Overridepublicvoideat(){System.out.println("eat");}@Overridepublicvoidsleep(){System.out.println("Sleep");}}2)鍥?.鍏宠仈鍏崇郴绫诲浘銆愬叧鑱斿叧绯汇€戯細鏄竴绉嶆嫢鏈夊叧绯伙紝浣夸竴涓被鐭ラ亾鍙︿竴涓被鐨勫睘鎬у拰鏂规硶锛涘锛氬笀鐢熷叧绯伙紝涓堝か涓庡瀛愮殑浜ゅ線鍙互鏄弻鍚戠殑锛屼篃鍙互鏄崟鍚戠殑銆傚弻鍚戝叧鑱斿彲浠ユ湁涓や釜绠ご鎴栨病鏈夌澶达紝鍗曞悜鍏宠仈鍙互鏈変竴涓澶淬€傛垜浠坊鍔犱竴涓嚭鐢熷湴绫伙紝姣忎釜鍔ㄧ墿閮戒細鏈変竴涓嚭鐢熷湴銆傛垜浠皢杩欎釜鍑虹敓鍦颁笌鍔ㄧ墿鑱旂郴鍦ㄤ竴璧枫€?.1銆佷唬鐮?***@Author:crush*@Date:2021-09-3019:11*version1.0*鍑虹敓鍦?/publicclassBirthplace{privateStringbirthplace;publicBirthplace(Stringbirthplace){this.birthplace=birthplace;}publicStringgetBirthplace(){杩斿洖鍑虹敓鍦帮紱}publicvoidsetBirthplace(Stringbirthplace){this.birthplace=birthplace;}}涓庡姩鐗╃被鍏宠仈璧凤細publicclassAnimalimplementsEat,Sleep{privateStringname;绉佷汉鏁存暟骞撮緞锛涚浜哄嚭鐢熷湴鍑虹敓鍦帮紱publicAnimal(){}publicAnimal(Stringname,Integerage,Birthplacebirthplace){this.name=name;杩欎釜銆傚勾榫?骞撮緞锛泃his.birthplace=鍑虹敓鍦帮紱}publicBirthplacegetBirthplace(){杩斿洖鍑虹敓鍦帮紱}publicvoidsetBirthplace(Birthplacebirthplace){this.birthplace=birthplace;}publicStringgetName(){杩斿洖鍚嶇О锛泒publicvoidsetName(Stringname){杩欎釜銆傚悕瀛?鍚嶅瓧锛泒publicIntegergetAge(){杩斿洖骞撮緞锛泒publicvoidsetAge(Integerage){this.age=age;}@Overridepublicvoideat(){System.out.println("eat");}@Overridepublicvoidsleep(){System.out.println("Sleep");}}鍦ㄨ嚜鎴戜粙缁嶆柟娉曚腑娣诲姞杈撳嚭publicclassCatextendsAnimal{privateStringbreeds;publicCat(Stringname,Integerage,Birthplacebirthplace,Stringbreeds){super(name,age,birthplace);this.breeds=鍝佺锛泒publicStringgetBreeds(){杩斿洖鍝佺锛泒publicvoidsetBreeds(Stringbreeds){this.breeds=breeds;}publicvoidselfIntroduction(Stringname,Integerage,Stringbreeds,Birthplacebirthplace){System.out.println("鎴戠殑鍚嶅瓧鏄?+name+"锛屼竴鍙尗锛屽搧绉嶄负"+breeds+"锛屼粖骞?+age+"宀?鍑虹敓浜?+birthplace.getBirthplace());}}4.2銆佸浘5銆佽仛鍚堜笌缁勫悎鍏崇郴鐨勭被鍥?.1銆佽仛鍚堬紙Aggregation锛夛細鏄暣浣撲笌閮ㄥ垎鐨勫叧绯伙紝閮ㄥ垎鍙互鑴辩鏁翠綋鑰岀嫭绔嬪瓨鍦ㄣ€備緥濡傦紝姹借溅鍜岃疆鑳庢槸鏁翠綋-閮ㄥ垎鐨勫叧绯伙紝娌℃湁姹借溅杞儙浠嶇劧鍙互瀛樺湪銆傝仛鍚堝叧绯绘槸鍏宠仈鍏崇郴鐨勪竴绉嶏紝鏄竴绉嶅己鍏宠仈鍏崇郴锛沘ssociation鍜宎ggregation鍦ㄨ娉曚笂鏃犳硶鍖哄垎锛屽繀椤绘鏌ョ壒瀹氱殑閫昏緫鍏崇郴銆傚厛璇存垜鐨勪緥瀛愶紝鐒跺悗鎴戜滑鍐嶅啓浠g爜銆俒绀轰緥]姣忚締姹借溅鏈夊洓涓疆鑳庡拰涓€涓彂鍔ㄦ満銆傝疆鑳庡彲浠ョ嫭绔嬩簬姹借溅鑰屽瓨鍦紝鍙戝姩鏈轰篃鍙互銆?锛変唬鐮乸ublicclassWheel{privateStringtype;鍏叡杞紙瀛楃涓茬被鍨嬶級{this.type=type;}publicStringgetType(){杩斿洖绫诲瀷锛泒publicvoidsetType(Stringtype){this.type=type;}publicvoidmove(){System.out.println("婊氬姩锛侊紒锛?);}}publicclassEngine{绉佹湁瀛楃涓茬被鍨嬶紱鍏叡寮曟搸锛堝瓧绗︿覆绫诲瀷锛墈this.type=type;}publicStringgetType(){杩斿洖绫诲瀷锛泒publicvoidsetType(Stringtype){this.type=type;}publicvoidstart(){System.out.println("鍚姩寮曟搸锛侊紒锛?);}}publicclassCar{privateWheelwheel;绉佷汉寮曟搸寮曟搸锛沺ublicCar(Wheelwheel,Engineengine){this.wheel=wheel;this.engine=寮曟搸锛泒publicWheelgetWheel(){杩斿洖杞紱}publicvoidsetWheel(Wheelwheel){this.wheel=wheel;}publicEnginegetEngine(){杩斿洖寮曟搸锛泒姘戜紬voidsetEngine(Engineengine){this.engine=engine;}publicvoidgo(){System.out.println("椹跺嚭娴锋氮锛涘晩");}}濡備綍鐢ㄧ被鍥炬潵琛ㄨ揪锛屽啀寰€涓嬬湅馃憞2锛夊浘5.2缁勫悎锛氭槸鏁翠綋鍜岄儴鍒嗙殑鍏崇郴锛屼絾閮ㄥ垎涓嶈兘鑴辩鏁翠綋鑰岀嫭绔嬪瓨鍦ㄣ€傛瘮濡傚叕鍙稿拰閮ㄩ棬灏辨槸鏁翠綋鍜岄儴鍒嗙殑鍏崇郴銆傛病鏈夊叕鍙革紝灏辨病鏈夐儴闂ㄣ€傚彟澶栵紝浜烘槸鐢卞ご閮ㄥ拰韬綋缁勬垚鐨勩€傛病鏈変汉锛屽ご鍜岃韩浣撴€庝箞鍙兘瀛樺湪锛熺粍鍚堝叧绯绘槸涓€绉嶅叧鑱斿叧绯伙紝姣旇仛鍚堝叧绯绘洿寮恒€傚畠瑕佹眰鏅€氳仛鍚堝叧绯讳腑浠h〃鏁翠綋鐨勫璞¤礋璐d唬琛ㄩ儴鍒嗙殑瀵硅薄鐨勭敓鍛藉懆鏈熴€?锛変唬鍙穚ublicclassBody{privatedoublesize;publicBody(doublesize){this.size=size;}publicdoublegetSize(){杩斿洖澶у皬锛泒publicvoidsetSize(doublesize){this.size=size;}}publicclassHead{privatedoublesize;publicHead(doublesize){this.size=size;}publicdoublegetType(){杩斿洖澶у皬锛泒publicvoidsetType(doublesize){this.size=size;}}publicclassPerson2{绉佹湁瀛楃涓插悕绉帮紱绉佷汉澶村ご锛涚浜鸿韩浣?publicPerson2(Stringname,Headhead,Bodybody){this.name=name;this.head=澶达紱this.body=姝f枃锛泒publicStringgetName(){杩斿洖鍚嶇О锛泒publicvoidsetName(Stringname){this.name=name;}publicHeadgetHead(){杩斿洖澶达紱}publicvoidsetHead(Headhead){this.head=head;}publicBodygetBody(){杩斿洖韬綋;}publicvoidsetBody(Bodybody){this.body=body;}publicvoidsay(){System.out.println("鎴戜細璇磋瘽");}}2)Diagram6.DependencyclassesGraph渚濊禆锛圖ependency锛夛細鍏崇郴鏄竴绉嶄娇鐢ㄥ叧绯伙紝鏄璞′箣闂存渶寮辩殑鑰﹀悎銆傝繖鏄竴涓复鏃跺崗浼氥€傚湪浠g爜涓紝鏌愪釜绫荤殑鏌愪釜鏂规硶閫氳繃灞€閮ㄥ彉閲忋€佹柟娉曞弬鏁版垨闈欐€佹柟娉曠殑璋冪敤鏉ヨ闂彟涓€涓被锛堜緷璧栫被锛変腑鐨勬煇涓柟娉曟潵鎵ц鏌愪簺鑱岃矗銆傚湪UML绫诲浘涓紝渚濊禆鍏崇郴鐢卞甫鏈変粠娑堣垂绫绘寚鍚戜緷璧栫被鐨勭澶寸殑铏氱嚎琛ㄧず銆傛瘮濡備汉鍜屾墜鏈虹殑鍏崇郴鍥撅紝浜烘槸閫氳繃鎵嬫満鐨勮闊充紶杈撴柟寮忔墦鐢佃瘽鐨勩€?.浠g爜publicclassPhone{publicvoidcallUp(){System.out.println("Talkingwithaperson");}}publicclassPerson3{绉佹湁瀛楃涓插悕绉帮紱publicPerson3(Stringname){this.name=name;}publicStringgetName(){杩斿洖鍚嶇О锛泒publicvoidsetName(Stringname){this.name=name;}publicvoidcallUp(Phonephone){System.out.println("鐢ㄤ綘鐨勬墜鏈烘墦鐢佃瘽");鐢佃瘽.callUp();}//涓嬮潰杩欎釜鏂规硶涔熸槸涓€涓緷璧?/publicvoidcallUp(){//Phonephone=newPhone();//System.out.println("浣跨敤鎵嬫満鎷ㄦ墦鐢佃瘽");//phone.callUp();//}}2.Diagram7.Strengthandweaknessofclassrelationships:Generalization=Implementation>Composition>Aggregation>Association>Dependence涔嬮棿鐨勫叧绯汇€傚叓銆佺嫭鐧戒粖澶╃殑鏂囩珷灏卞埌杩欓噷銆傛枃涓鏈夌枒闂紝璇风暀瑷€鎴栫淇★紝鎴栧湪棣栭〉娣诲姞鑱旂郴鏂瑰紡锛屾垜浠細灏藉揩鍥炲銆傚鏋滄偍鍦ㄦ枃绔犱腑鍙戠幇浠讳綍闂锛屽笇鏈涙偍鑳芥寚姝o紝闈炲父鎰熻阿銆傚鏋滄偍瑙夊緱瀵规偍鏈夊府鍔╋紝璇风偣涓禐锛岃蛋璧凤紒.鐭ヤ箮|瀹佸湪娣崇畝涔瀹佸湪绾疌SDN|瀹佸湪娣虫帢閲憒瀹佸湪娣冲崥瀹㈠洯|瀹佸湪娣?/p>