<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>UML 建模图 on 扎塔-Zata</title><link>https://www.zata.cc/tags/uml-%E5%BB%BA%E6%A8%A1%E5%9B%BE/</link><description>Recent content in UML 建模图 on 扎塔-Zata</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>扎塔-Zata</copyright><lastBuildDate>Thu, 24 Sep 2026 17:09:06 +0800</lastBuildDate><atom:link href="https://www.zata.cc/tags/uml-%E5%BB%BA%E6%A8%A1%E5%9B%BE/index.xml" rel="self" type="application/rss+xml"/><item><title>数据流图</title><link>https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E6%B5%81%E5%9B%BE/</link><pubDate>Mon, 24 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E6%B5%81%E5%9B%BE/</guid><description>&lt;img src="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E6%B5%81%E5%9B%BE/images/index/index.png" alt="Featured image of post 数据流图" />&lt;h1 id="数据流图">数据流图
&lt;/h1>&lt;p>&lt;img src="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E6%B5%81%E5%9B%BE/images/%E6%95%B0%E6%8D%AE%E6%B5%81%E5%9B%BE/image.png"
width="750"
height="368"
srcset="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E6%B5%81%E5%9B%BE/images/%E6%95%B0%E6%8D%AE%E6%B5%81%E5%9B%BE/image_hu4619770938531770692.png 480w, https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E6%B5%81%E5%9B%BE/images/%E6%95%B0%E6%8D%AE%E6%B5%81%E5%9B%BE/image_hu5875801080698908303.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="203"
data-flex-basis="489px"
>&lt;/p></description></item><item><title>类图</title><link>https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/</link><pubDate>Thu, 20 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/</guid><description>&lt;img src="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/index/index.png" alt="Featured image of post 类图" />&lt;h1 id="类图">类图
&lt;/h1>&lt;h2 id="类图的概念笔记">类图的概念笔记
&lt;/h2>&lt;h3 id="1-什么是类图">1. 什么是类图？
&lt;/h3>&lt;ul>
&lt;li>类图是 UML（统一建模语言）中最常用的一种静态结构图。&lt;/li>
&lt;li>作用：展示系统中类的结构、属性、方法以及类与类之间的关系。&lt;/li>
&lt;li>应用场景：软件设计、系统建模，帮助开发者理解和规划代码结构。&lt;/li>
&lt;/ul>
&lt;h3 id="2-类的基本组成">2. 类的基本组成
&lt;/h3>&lt;p>&lt;img src="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image.png"
width="379"
height="256"
srcset="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image_hu13235966263381512116.png 480w, https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image_hu3402905089824024269.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="148"
data-flex-basis="355px"
>&lt;/p>
&lt;p>一个类通常用一个矩形框表示，分为三部分：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>顶部：类名&lt;/strong>
&lt;ul>
&lt;li>写类的名称（通常首字母大写）。&lt;/li>
&lt;li>如果是抽象类，类名用&lt;em>斜体&lt;/em>表示。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>中间：属性&lt;/strong>
&lt;ul>
&lt;li>
&lt;p>表示类的特性或数据（成员变量）。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>格式：&lt;code>[可见性] 属性名 : 类型 [默认值]&lt;/code>&lt;/p>
&lt;ul>
&lt;li>可见性：&lt;code>+&lt;/code>（public）、&lt;code>-&lt;/code>（private）、&lt;code>#&lt;/code>（protected）、&lt;code>~&lt;/code>（package）。&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-1.png"
width="285"
height="196"
srcset="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-1_hu4677531634427514055.png 480w, https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-1_hu6430094819785333916.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="145"
data-flex-basis="348px"
>&lt;/p>
&lt;ul>
&lt;li>示例：&lt;code>-age : int = 18&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>底部：方法（操作）&lt;/strong>
&lt;ul>
&lt;li>表示类的行为或功能（成员函数）。&lt;/li>
&lt;li>格式：&lt;code>[可见性] 方法名(参数) : 返回类型&lt;/code>
&lt;ul>
&lt;li>示例：&lt;code>+getAge() : int&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h3 id="3-类与类之间的关系">3. 类与类之间的关系
&lt;/h3>&lt;p>来源：https://juejin.cn/post/6844903893327937550&lt;/p>
&lt;p>类图的核心是描述类之间的关系，常见的有以下几种：&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-3.png"
width="904"
height="872"
srcset="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-3_hu13250733071156308290.png 480w, https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-3_hu13928915357400703694.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="103"
data-flex-basis="248px"
>&lt;/p>
&lt;ol>
&lt;li>继承关系（Generalization/extends）&lt;/li>
&lt;/ol>
&lt;p>继承关系也叫泛化关系，指的是一个类（称为子类、子接口）继承另外的一个类（称为父类、父接口）的功能，并可以增加它自己的新功能的能力，继承是类与类或者接口与接口之间最常见的关系。
继承用实线空心箭头表示，由子类指向父类。
下面写两个子类，Fish和Cat分别继承自Animal。
&lt;img src="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-4.png"
width="756"
height="961"
srcset="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-4_hu4613961026339582353.png 480w, https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-4_hu15769347914199156650.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="78"
data-flex-basis="188px"
>&lt;/p>
&lt;ol start="2">
&lt;li>实现关系（implements）&lt;/li>
&lt;/ol>
&lt;p>指的是一个class类实现interface接口（可以是多个）的功能；实现是类与接口之间最常见的关系；在Java中此类关系通过关键字implements明确标识，在iOS中我将其理解成代理的实现。
写一个洋娃娃类Doll，该类遵循了ToyAction协议，实现了玩具移动的方法。
&lt;img src="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-5.png"
width="756"
height="835"
srcset="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-5_hu3396595097139593337.png 480w, https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-5_hu11297709041384878193.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="90"
data-flex-basis="217px"
>&lt;/p>
&lt;ol start="3">
&lt;li>依赖关系（Dependency）&lt;/li>
&lt;/ol>
&lt;p>可以简单的理解，就是一个类A使用到了另一个类B，而这种使用关系是具有偶然性的、、临时性的、非常弱的，但是B类的变化会影响到A；比如某人要过河，需要借用一条船，此时人与船之间的关系就是依赖；表现在代码层面，为类B作为参数被类A在某个method方法中使用。
在我们的上述代码中Cat的playToy方法中参数引用了Doll，因此他们是依赖关系。
&lt;img src="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-6.png"
width="874"
height="266"
srcset="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-6_hu11704694191483919447.png 480w, https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-6_hu5758575312181192172.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="328"
data-flex-basis="788px"
>&lt;/p>
&lt;ol start="4">
&lt;li>关联关系（Association）&lt;/li>
&lt;/ol>
&lt;p>他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系，比如我和我的朋友；这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的，一般是长期性的，而且双方的关系一般是平等的、关联可以是单向、双向的；表现在代码层面，为被关联类B以类属性的形式出现在关联类A中，也可能是关联类A引用了一个类型为被关联类B的全局变量；
写一个Person类，他拥有一个宠物猫，他们之间的关系是关联。
&lt;img src="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-7.png"
width="756"
height="686"
srcset="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-7_hu11272320388337830763.png 480w, https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-7_hu15326361838124087092.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="110"
data-flex-basis="264px"
>&lt;/p>
&lt;ol start="5">
&lt;li>聚合关系（Aggregation）
聚合是关联关系的一种特例，他体现的是整体与部分、拥有的关系，即has-a的关系，此时整体与部分之间是可分离的，他们可以具有各自的生命周期，部分可以属于多个整体对象，也可以为多个整体对象共享；比如计算机与CPU、公司与员工的关系等；表现在代码层面，和关联关系是一致的，只能从语义级别来区分；&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-8.png"
width="756"
height="677"
srcset="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-8_hu6686645750057382010.png 480w, https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-8_hu14660679097470859118.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="111"
data-flex-basis="268px"
>&lt;/p>
&lt;ol start="6">
&lt;li>组合关系（Composition）
组合也是关联关系的一种特例，他体现的是一种contains-a的关系，这种关系比聚合更强，也称为强聚合；他同样体现整体与部分间的关系，但此时整体与部分是不可分的，整体的生命周期结束也就意味着部分的生命周期结束；比如你和你的大脑；表现在代码层面，和关联关系是一致的，只能从语义级别来区分；
上述代码中的Person拥有Head，并且这个整体和部分是不可分割的。&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-9.png"
width="766"
height="224"
srcset="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-9_hu844725690583967431.png 480w, https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-9_hu15078543426319998628.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="341"
data-flex-basis="820px"
>&lt;/p>
&lt;p>最后来看看这个例子中的整体关系：&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-10.png"
width="1726"
height="944"
srcset="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-10_hu17240506101887387161.png 480w, https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-10_hu4679307890386820978.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="182"
data-flex-basis="438px"
>&lt;/p>
&lt;p>其实理解了之后我们发现还是很简单的，学会了之后就可以投入实践中了，举一个简单第三方库的类图例子，下图是Masonry的类图整理，可以看到项目结构很清晰的展示了出来。&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-11.png"
width="1416"
height="759"
srcset="https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-11_hu10080896141775018548.png 480w, https://www.zata.cc/p/%E7%B1%BB%E5%9B%BE/images/%E7%B1%BB%E5%9B%BE/image-11_hu15081855724984045319.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="186"
data-flex-basis="447px"
>&lt;/p>
&lt;h3 id="4-类图的符号速查">4. 类图的符号速查
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>矩形框&lt;/strong>：类&lt;/li>
&lt;li>&lt;strong>实线&lt;/strong>：关联&lt;/li>
&lt;li>&lt;strong>空心菱形+实线&lt;/strong>：聚合&lt;/li>
&lt;li>&lt;strong>实心菱形+实线&lt;/strong>：组合&lt;/li>
&lt;li>&lt;strong>空心三角+实线&lt;/strong>：继承&lt;/li>
&lt;li>&lt;strong>空心三角+虚线&lt;/strong>：实现&lt;/li>
&lt;li>&lt;strong>虚线箭头&lt;/strong>：依赖&lt;/li>
&lt;/ul></description></item></channel></rss>