一、类是啥?—— 现实概念的“代码化身” 🧠
关键字:类、对象模板、属性、操作
🤔
类是
面向对象的“基本单元”
——它像一个“模板”,描述了一组具有相同特征(属性)和行为(操作)的对象。比如“学生类”,就定义了所有学生都有的“姓名、学号”(属性)和“选课、查成绩”(操作)。
💡 新手类比:
类就像“蛋糕模具”——模具(类)规定了蛋糕的形状(属性)和“可以加奶油”(操作),而每个用模具做出来的蛋糕(对象),都是这个类的具体实例~
📊 UML中的类长这样:
类在UML里是一个“三格矩形”: - 第一格:类名(比如“Student”); - 第二格:属性(比如“name:String”); - 第三格:操作(比如“getContactInfo()”)。 也可以隐藏属性/操作,只显示类名(简化版)。
二、类名:类的“身份证” 🔖
关键字:类名、UpperCamelCase
📌
每个类必须有
唯一的名字
,得从“业务术语”里选(比如“学生”“课程”),别用模糊的词~
✍️ 命名规则:
用
UpperCamelCase(大驼峰)
:每个单词首字母大写,比如“Student”“ClassRoom”,别用数字/特殊符号~
🌰 两种类名:
- 简单名:比如“Person”(单独的类名);
- 路径名:比如“java.awt.Rectangle”(带包名,说明类属于哪个“文件夹”)。
三、属性:类的“特征数据” 📝
关键字:属性、可见性、类型、多重性、初始值
📌 UML属性的语法:
可见性
opt
属性名 [: 类型]
opt
[多重性]
opt
[=初始值]
opt
[{特性}]
opt
- 可见性:谁能“碰”这个属性 🔒
UML用符号表示属性的“访问权限”: -
+
(公有public):其他类都能访问; -
-
(私有private):只有自己类能访问; -
#
(保护protected):自己和子类能访问。 比如“- name:String”表示“name是私有属性,只有Student类自己能用”~
- 类型:属性的“数据格式” 📊
指定属性的“数据类型”,比如String(字符串)、int(整数)、double(小数),也可以是自定义的类(比如“address:ContactInfo”)。
- 多重性:属性的“数量” 📦
用“[数字]”表示属性是“单个”还是“数组”: - 不写:默认是1(单个); -
nums:int[10]
:表示nums是“长度为10的int数组”。
- 初始值:属性的“默认值” ⚙️
用“=值”给属性设默认值,比如
age:int=18
表示“新建学生对象时,age默认是18”~
- 特性:属性的“规则” 📜
UML定义了3种特性: -
可变(changeable)
:可以随便改(默认); -
只增(addOnly)
:只能加,不能减/改; -
冻结(frozen)
:初始化后不能改(对应C++的const),比如
PI:double=3.1415926{frozen}
。
四、操作:类的“行为能力” 🎮
关键字:操作、方法、可见性、参数、返回类型
📌 UML操作的语法:
可见性
opt
操作名([参数列表])
opt
[: 返回类型]
opt
[{特性}]
opt
- 操作名:行为的“名字” ✍️
用
动词/动词短语
命名(比如“getContactInfo()”“submitOrder()”),命名规则和属性一样(私有操作可以用下划线开头)。
- 参数列表:操作的“输入” 📥
和编程语言里的“函数参数”一样,格式是“[方向]参数名:类型[=默认值]”: - 方向:in(输入,不能改)、out(输出,可以改)、inout(输入输出); - 例子:
oper(out arg1:int, arg2:double=3.2)
表示“oper有两个参数,arg1是输出参数,arg2默认值是3.2”。
- 返回类型:操作的“输出” 📤
用“:类型”表示操作的返回值类型,比如
getContactInfo():ContactInfo
表示“这个操作返回ContactInfo类型的数据”;没有返回值就写“:void”(或不写)。
- 特性:操作的“行为规则” 📜
比如: -
查询(isQuery)
:操作不改变系统状态(比如“getXXX()”); -
冻结(frozen)
:操作不能被重写(对应C++的非虚函数)。
五、职责:类的“任务清单” 📋
关键字:职责、类的责任
📌
职责是类的“义务”——说明这个类“要做啥”。比如“Student类的职责是管理学生的基本信息和选课行为”,可以写在类的第四格(可选)。
总结:类是“数据+行为”的封装体 📦
🎉
类把“属性(数据)”和“操作(行为)”打包在一起,是面向对象的“核心概念”——就像“手机类”包含“颜色、内存”(属性)和“打电话、拍照”(操作),用类能清晰地描述现实中的任何概念~ 要不要我帮你整理一份
类的UML表示模板
,方便你快速画出自己的类图?