一、接口:类的“能力契约” 📜

关键字:接口、操作集合、契约、无实现

🤔

接口是

“规定类要做什么,但不规定怎么做”的契约

——它只包含“操作(方法)”,没有属性和实现代码。比如“可拖拽接口(Draggable)”,规定类必须有“drag()”操作,但不管这个操作是怎么写的~

💡 新手类比:

接口像“手机充电协议”——只要手机支持这个协议(实现接口),不管是华为还是苹果,都能用电宝充电(调用接口操作),但充电的内部逻辑(实现)各自不同。

📊 UML中的接口表示:

  • 方式1:小圆圈+接口名(简洁版,比如“Observer”);
  • 方式2:«interface»构造型的类(详细版,显示接口里的操作,比如“«interface» Observer { update() }”)。

二、类图中的关系:类的“社交规则” 🧩

关键字:关联、泛化、依赖、实现、聚合、组合

  1. 关联关系:类的“普通朋友” 🔗

描述类之间的

“连接关系”

,比如“学生”和“学校”的关系(学生在学校上学)。

核心属性:

多重性

:表示“多少个A对应多少个B”,比如“1个学校对应多个学生”(Student端写“1..”,School端写“0..”); -

导航性

:用箭头表示“谁能找到谁”,比如“订单→产品”(订单能找到对应的产品,但产品不知道自己属于哪些订单); -

角色名

:表示类在关联中的“身份”,比如“Person”在关联中是“Worker”,“Room”是“Office”。

🌰 特殊关联:

  • 自关联:类和自己关联,比如“学生是另一些学生的班长”;
  • N元关联:三个及以上类的关联(不推荐,建议拆成多个二元关联)。
  1. 聚合&组合:类的“整体-部分”关系 🧱

都是“整体包含部分”的关系,但

紧密程度不同

聚合(Aggregation)

:“松散的包含”——部分可以脱离整体存在,比如“教室(整体)包含课桌(部分)”,课桌可以搬到其他教室;

组合(Composition)

:“紧密的包含”——部分和整体同生共死,比如“窗口(整体)包含框架(部分)”,窗口删除了,框架也必须删除。

📊 UML表示:

用“空心菱形(聚合)”或“实心菱形(组合)”放在“整体”类的一端,比如“Window ◆- Frame”(组合)。

  1. 泛化关系:类的“父子继承” 👨‍👦

就是

面向对象的“继承”

——子类(子元素)继承父类(父元素)的属性和操作,还能添加自己的内容。比如“老虎(Tiger)”和“鸟(Bird)”都继承“动物(Animal)”类。

📊 UML表示:

用“空心箭头+实线”从子类指向父类,比如“Tiger → Animal”。

  1. 依赖关系:类的“临时借用” 📤

表示一个类

“临时使用”另一个类的内容

(比如方法参数、局部变量),关系很弱。比如“客户类(Client)”的方法需要“提供者类(Supplier)”的对象作为参数。

📊 UML表示:

用“虚线+箭头”从“依赖方”指向“被依赖方”,比如“Client - - > Supplier”。

  1. 实现关系:类与接口的“履约” ✅

表示类

“实现了接口的所有操作”

,比如“墙壁类(Wall)”实现了“可测量接口(Measurable)”,必须写“getLength()”“getArea()”等操作。

📊 UML表示:

用“虚线+空心箭头”从类指向接口,比如“Wall - - > Measurable”。

三、类的高级概念:抽象类&模板类 🎯

关键字:抽象类、模板类

  1. 抽象类(Abstract Class):

不能直接创建对象的类,里面可以有“抽象操作”(只有定义,没有实现),必须由子类实现。比如“图形类(Shape)”是抽象类,“draw()”是抽象操作,“圆形(Circle)”子类实现具体的draw逻辑。

  1. 模板类(Template Class):

就是“泛型类”——类的属性/操作可以支持“任意类型”,比如Java里的“ArrayList”,T可以是String、Integer等类型。

总结:类间关系是“系统的骨架” 🛠️

🎉

类是“零件”,类间关系是“把零件组装成系统的胶水”——搞懂这些关系,就能把零散的类变成一个有逻辑的系统啦~ 要不要我帮你整理一份

类间关系的UML表示对照表

,方便你快速区分各种关系?