From 187cfacfcf0ba8d806850f6e05427c3692da4754 Mon Sep 17 00:00:00 2001 From: aRoming Date: Fri, 4 Apr 2025 10:06:31 +0800 Subject: [PATCH] improve(docs): update usecase, class and activity diagram in uml... --- .../visualization/diagrams/uml/README.md | 13 ++++ .../diagrams/uml/behaviors/activity/README.md | 59 +++++++++------ .../diagrams/uml/behaviors/usecase/README.md | 23 ++++-- .../uml/interactions/sequence/README.md | 10 ++- .../class/.assets/images/s1074361.jpg | Bin 0 -> 44637 bytes .../diagrams/uml/structures/class/README.md | 70 ++++++++++++------ 6 files changed, 119 insertions(+), 56 deletions(-) create mode 100644 docs/documentation/modelings/visualization/diagrams/uml/structures/class/.assets/images/s1074361.jpg diff --git a/docs/documentation/modelings/visualization/diagrams/uml/README.md b/docs/documentation/modelings/visualization/diagrams/uml/README.md index bf4cd98..0c58584 100644 --- a/docs/documentation/modelings/visualization/diagrams/uml/README.md +++ b/docs/documentation/modelings/visualization/diagrams/uml/README.md @@ -52,6 +52,19 @@ 3. `Interaction Overview Diagram` - Interactions:顺序图 + 活动图 4. `Timing Diagram` - Interactions:描述消息跨越不同对象或参与者的实际时间,而不仅仅只关心消息的相对顺序 +❗❗❗ + +`sequence diagram`和`communication diagram`是同构的 + +1. 联系: + 1. 两者都用于描述对象之间的交互,关注如何通过消息传递来协同完成某个功能 + 2. 理论上,任何一个顺序图都可以转换成等价的通信图,反之亦然 +2. 区别: + 1. 顺序图:强调时间顺序,纵向排列消息,展示消息的调用顺序 + 2. 通信图:强调对象之间的结构关系,用连接线表示对象间的关联,而消息则标注在这些连接线上 + +❗❗❗ + Jt(KW?AVY+w`i=DDOI2k+ZCbLzjoo{>HCVry4K?4E8b@0kt^ zUQCPT{AVbU-NUzIo$I>D8zd-vS;7#4T zHr+q<>z{J*zUSeErKxL{K7AwhK6}+6kD2AudcOzfXnM*j2S7O8jKE5~U zlE-S@MdtAZdPgsuVb$i<#jwR zuGHGQZ;CU&W%SIbv-Z*2We!hD=IL>iY6Psfm;2D}$ETwi6>cu(=9zMwv35a@Z%_T3 zdf0pA9lt_N=V^C$DDci-A2m(Z?~z1GXe#6FLe}ER(R++5+}rnU+fZD6=h)^~FLMRk z{rgN=R$HoD7FZvtUr+ITIhc*X0C<$5}K{{m0S z?-335+dbfMNpVqjWwfH~7r2ZLi7SDbwC%R{6rrKwz50du`r+?bBN1gpgrTxsM zAHM$B`?0k5jHkwb2KPy(MLWVcIRl&jxc60utCgO-^)j#Kcx1x?=Ei}$1Vc>4Oi`*VH!)T?W_qQ#$HTQ}>YZtV9XDLr}-b7vm&kbG5}y{&qt z^rMh%&%zY`E|~K5NKE*2vxS;_`d;XGtE7nDYT)@b@pahs=zZD!77|C!EcI!qIU={y z@~qYk`^+Udd#~-wyVa7KoOL{K!@7%PuKzbsP5fS}qQY z(L5>pvQc@_o|I{MR@GOFl^HkI1@_ctRrVcP7`}b2n?!oC#5ylnq`1j!^<5yaHq8_v{O^jINzH#FIilPHkZ6?24{OPTaoI?GU zwWn{l?>eb(SQo7o^6^5!-E2Ltllubiipd|Y->obAYj^F;<)MO)RU=mOJYOy&75d@o zY2W<3>s;%Vk8I-Cd1P;pQv4_4vBe9IRUdzJF4l0}sHmLL{=U9(#ztAIC-X9sucrtd zEL359mt3l?Z11p_%__aYs8(Z}a;&q{-R13zvb&RYFHX7_v1~%eb$OGl86n2!63h7oOuU6$^PGp>o?QtSRpt52>x zu;Gp?@4WM-Wj!aS%D)xti@rA}H05jk)%!0KGyK^)O}?!xQtdFAXfx5Jcv=XL=lT2{ z2Wo9!o!gzAoSDudaG)tz#Ag$q#8c53+plc*|FGsYZAWW|}aJh?Io+eFyTIX<4Z z{IkjH+wb4HckD7c)gfH=rip>e!0-io)l#WR^Y?D}B`f_>Og~5VP41%Yzgc`Px7~7C z*X8*7_2kR)OB3r8&nWgDx!7+Q=IX>(vn_Ywu4LPf*JZ9;&R#l`>Bw)JiFq#~L^BSx zGE2Pv)K|M|&#ZlkA%-W;3b8b7*}=7V*#o zX}vo0igQ<9A9s8mcqfx7Bli|-AH%eXr)~P8CG*%X7H)tPTU4=-axYGIyAM6<;c zyEjiB|6TUyoOPiDVlo_}7N_44K4tp5y-ciHAI{dw!kwCOG_ zO_r*)z2C1gS_Ho+?D-Y)HaoXEedS5k4XtmU^q;(_6sD_n8!?|xgCS*Bah zn!hQ&Gdo!7w(7<1q!ULLsBU}S*P{8(UzGP-zfsIxjuwGMo+^nvOWI3f&j>3oU`e)k z8@O$&*n;nclaeNV^EaL4BfxQv;rP1f$*;0CpOZnr>6bwyJ^! zU!R1yg+`xo*v)Ss9Cj_at5siZiWi>8Z6iAEdSFWv|(K)+stW z=cRN;%sp5xz~=G3iE}w`iS!9mPUW<{t&5fCPk3{TQ`Ymq@vPphyE`2F&P4|CK62di z?~p3ba#W(1UKs|fiOeu ztv|23BHm2ncJ?&oiW7NrEi8WpKfk_snliU^qZHexJ$p1&H+k6IRQYvfbN0m;cjMd% zHf`$1E;d|jVt9Sw`K<8uo8qtkF~|tp`Qhw|{X4sEdCZbnCa`4E36b4G1^bRXws>Q8 zWma8-Z_jn{6^(J%&osKUSXf_RQ@+f5|4Puw^{Y=>&9_zBG5xKO$g!uz6P*4tZ0@r> z`PjsHy}QE1<&n-NOm}i6Z#ArBpL{woq;9MI{;X?nqy#c%rC7CYeRj3)(ND9VX6N;% z?-3|+|K6ckalY6um#g}|k++7^Ax?))`>x$vtkXTu&ni?pQ#X*wFQv~>qjZ`o>&BN? zs->>`3%Xrjt*kTgAWOfF*D7vfgM;Vo_FVN04a&1xaG`d6`!0vS7Ca_=i?DS3+frekF6IFGk&Z2WXXgX-=44*{IonD z_)N~W)iHZr?eufeMMuL@rwJ?dG#@CcTTrrOYQ??#*ZwnnV0N7LOZUk^mTbP~%xNzj z?oXV3<(>8S||gKs3H{Pj&;A0Hfb@Z{37J7y|b%TG61 z^5l20k&$iYZSx}Dh=zpz8DHM|B=IxLgtU6FJU5kKFt^n-kf?oGcyG>+_l<5L0tTM1 zuT9|EQ~Pe-mVkF=k7X+twY@P)o_p6SXoCXJW$vnHbIzD)EbA1m;BL}vR(T>&x8>UF zzRWofE*7ZC8$R!;y5f8N)||DClYay}c>db?2HW!$k$Dklz4k>X&S4iOm(oE9~&!!LCL>Rt>wkHX8182 zvoQInS7G03AY?diPVlxiRsTSDHw8Xk<=(|@*8NcoOb<#W&RTK=NfvP|D^a&)c-%Eb z>y6FlTP;kM)*E}0w;IlP@cZ()h??We{iAw2bSjn|@QZmYtI7V*t4myEzlni$qlNPA zy$ZrA0{q+#wuN&pn@v0}v7CSU<#}5g;tK3$E)6L1eA0N-LS6FPQE5L;2?^Vk4cAx- zuLxdRd@!b5ZRyD{l_Jf+(Al;xHV8~O@MYyx!G^mBzpOZASY%N3b?L))^*LXcG)y?c z^zrho3F|Iinlm%_#N%bv!SigstYX@n@_}8{s9>?&R8AH-%_DD>uPtTx$;=}>Y5%EN z&Up+>byKYbI;Tk%Ur3v!=l8*Bf#n;`8|n-ADik+jHm9%v0t12X#>j~xw%?`cdoPuEtiqXVEm?e ztZqs09IX`xS8z=zsyu5`wBwwi*8>GDJ_(s1meUNHXD@v8cPitvlyA#yxO-opeWG)E zp8I1jrU})}M@>6|4-089o~rZD_X@SNd~VWpfTyqcR-=OC1Fi)7Is=L4SNgWBTllZQ zQGK5El?atT%kNEfJP}lTl)+SKQY6>0p0_X9y=o?$W%&EXXWmTFyyT5Z+xa&}I@|wt zx#T1gEA6N-Ns{lLmAv!6T5WOj{mv@`dVgBI*q490ex_^LP=5&xfQx+e%iE0{(A3=j;t}LS!b6cIFHS$$UR0XJHe98;^(er zzlZKK4%BbrwR8P+cgix3B(CjQ>z-^p`7YCzp>WFNd7j^wC@*~J%dGIZt5~1m`GQ9i z+WP!>B_E4?nE7Ci+?7iP1sM_wEJ4W|S0+1HeLiZ~zTo7d1IFsM70Xv1^L*{${_w5W z-jA0}6#3Y-&$1RBpZrDSYm8b|(xSWP)n-e)oe}d~Zc5{ZdcG~Io=#t@KP~#T2dA>{ zo#q2iy8Jj)3OzV`Wd1((N!~Km=C1~0|G@(b%-D>71U;TNMU=I}R6%QldY5MNT9Fv; zRTf_kJettJ8)3uqXhF{8TPr!7j4}_;$~^hlVmafd&moNSGPF2eo;4|5%G<@zd+c&g z;kDJ<3Jp8YkIJ z`Cyi;)Y331x68q2l9upiO`A&wmTFUEo^SuO?A`*yX!gdS2g$N4%NWm#O0b)#Fwb;Q z&iqxIIalQ4`I^gD@}@A~DRfTQD9e6%7DI-mgK@Lp$p;^b9l6AB-|AzkS**OwV*%$a zM-whdzAq09EFNFD+{{saV&b32Ejdqkz8?)cnP0o*!f}gphPOp!x|2gA@BIy|_do1j z*wXu)p|Wtl+v~}FPx$UVzqDoT3n}{=U3Yk%kxe5ZY_WMxPQ;RJ-SL!F8S-Hr4^MiEFMK_|+;WZ6 zfsel~8#x@Sc;PC}ywogg(rJ#??GC>~yK;Zl#l>#EG4D?D{Df@J?0hDhP1;s#qNg4R zP_ft7KECtoe+HhZPs<+fkE(2t*e-sYS>#xb|MJ^z4|GpS8a#~9dXRh1(LQ$dfv?N` zGeyeHCZ1JD)IH(;)8XFi2K_mF9O~C!M+DB-=ABpk`l#}W6iapGTN9+aS$of{ec~nB zsO8`%(W=|Zu6v##{r<}!wJDqQYMv?BS$6O(Uaq|HRdx9R%XJl+LMvr8&m0kAJg|V_ z@frPtC!QqD-ePgfU3tf{ebEv&)j{pAG8p^i?pgI+S-4qF`ubXnjmjz^>C4z-iapq5 z+E$jcJ-Je$Qg2nYF67CBAO}qry~1mAZb$I&6KrjP1gDQJZGC)7i6Sq8*zL&m#3uCBAd^bXU&;2kMXRFyZ!Sn U3EqRRGM4Wvur+jbX8wN@0Pv(7<^TWy literal 0 HcmV?d00001 diff --git a/docs/documentation/modelings/visualization/diagrams/uml/structures/class/README.md b/docs/documentation/modelings/visualization/diagrams/uml/structures/class/README.md index 5d44ea5..3cf12ed 100644 --- a/docs/documentation/modelings/visualization/diagrams/uml/structures/class/README.md +++ b/docs/documentation/modelings/visualization/diagrams/uml/structures/class/README.md @@ -1,42 +1,68 @@ # Class Diagram类图 -## 类图的关系 +- [1. Introduction](#1-introduction) + - [1.1. What is Class Diagram](#11-what-is-class-diagram) +- [2. How to Draw Class Diagram](#2-how-to-draw-class-diagram) + - [2.1. 类图元素的关系](#21-类图元素的关系) +- [3. Examples](#3-examples) - +## 1. Introduction -|关系|代码表现|实体|语义|备注| +### 1.1. What is Class Diagram + +`Class Diagram类图`用于描述系统的类、类之间的关系以及类的内部结构。类图主要用于建模系统的静态视图,即系统的结构,而不是用于建模系统的动态行为。 + +类图主要用于总体设计阶段,用于定义系统的整体架构和类的层次结构(即,描述类之间的关系)。 + +完整地建模类图是一个复杂的、庞大的工程,其工作量不亚于编写代码,并且跟综类图与代码的变更也是一项复杂的工程,代码才是软件的最终交付物,因此,并不是所有的类(及其属性、方法)都需要被完整建模。 + +实际应用中,仅绘制核心类及其相关的类、且不必细化所有属性和方法,例如,[Design Patterns: Elements of Reusable Object-Oriented Software](https://www.google.com/books/edition/_/tmNNfSkfTlcC?hl=en&sa=X&ved=2ahUKEwijxKOdoL2MAxUNK0QIHcepKIcQ7_IDegQIGhAC)是使用类图的经典书籍,类图中仅包含了核心类及其相关的类,但完整地阐述、表达了各个设计模式的实现方式。 + +![Design Patterns: Elements of Reusable Object-Oriented Software](./.assets/images/s1074361.jpg) + +## 2. How to Draw Class Diagram + +### 2.1. 类图元素的关系 + +|关系|代码表现(`Java`)|对应实体|语义|备注| |--|--|--|--|--| |`generalization泛化`|继承`extends`|`class - class`|`is-a`|---| |`realization实现`|实现`implements`|`class - interface`|`be-a`/`can-be-a`|---| |`composition组合`|成员变量|`variable - instance`|`owns-a`|删除整体后,个体没有存在的意义| |`aggregation聚合`|成员变量|`variable - instance`|`contains-a`|删除整体后,个体仍有存在的意义| |`association关联`|成员变量|`variable - instance`|`has-a`|平等关联| -|`dependency依赖`|形参或局部变量或静态方法调用|`variable - instance`|`use-a`|---| +|`dependency依赖`|形参或局部变量或静态方法调用|`variable - static`|`use-a`|---| -1. 各种关系的强弱顺序:$泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖$ +1. 各种关系的强弱顺序:**泛化 == 实现 > 组合 > 聚合 > 关联 > 依赖** 2. 组合、聚合、关联在语法上无法区分,需要在语义上区分(即,逻辑关系) -3. 关联也称为"强依赖",依赖也称为"弱依赖" -4. 聚合是一个个有独立完整生命周期的个体,聚在一起 -5. 组合是一个个组成部分,组成一个有新的生命周期的整体 +3. 关联也称为`"strong dependency强依赖"`,依赖也称为`"weak dependency弱依赖"` +4. 聚合是多个部分聚合在一起,形成一个集合,部分 **有独立的生命周期**,部分的生命周期与整体的生命周期不同(部分对象可以脱离整体对象独立存在,整体对象销毁时,部分对象仍然可以存在) + - 例如,班级(Class) 和 学生(Student):一个班级由多个学生组成,但学生可以转学到另一个班级或毕业后仍然存在 + - 例如,图书馆(Library) 和 书籍(Book):图书馆中有很多书籍,但书籍本身可以存在于不同的图书馆或个人书架中,不依赖于某个特定的图书馆 + - 例如,公司(Company) 和 员工(Employee):员工属于某个公司,但员工可以离职或换工作,不会因公司的消失而消失 +5. 组合是多个部分组合在一起,形成一个整体,部分 **无独立的生命周期**,部分的生命周期与整体的生命周期一致(部分部分不能脱离整体对象单独存在,整体对象销毁时,部分对象也会随之销毁) + - 例如,人(Person)和心脏(Heart):心脏是人体的一部分,不能单独存在,一旦人死亡,心脏也会失去作用 + - 例如,房屋(House)和房间(Room):房间属于房屋的一部分,不能独立于房屋存在。如果房屋被拆除,房间也不复存在 + - 例如,汽车(Car)和引擎(Engine):引擎是汽车的重要组成部分,不能脱离汽车单独存在,汽车报废后,通常引擎也会随之报废(在特定的场景语义中,汽车和引擎表示为"聚合关系",如,"汽车制造和供应链管理") + +## 3. Examples ```plantuml @startuml -class A -class B -class C -class D -class E +class AClass +class BClass +Interface CInterface +class DClass +class EClass -A <|-- B: generalization -A .right.|> C: realization +AClass <|-- BClass: generalization +AClass .right.|> CInterface: realization -B -left-* D: composition -B -right-o E: aggregation -D -- F: association\n(bidirectional) -E --> G: association\n(unidirectional) -B ..> H: dependency +BClass -left-* DClass: composition +BClass -right-o EClass: aggregation +DClass -- FClass: association\n(bidirectional) +EClass --> GClass: association\n(unidirectional) +BClass ..> HClass: dependency @enduml ``` -- GitLab