一、习题知识梳理

1、UML的4种事物分类

结构事物:模型的静态骨架(类、组件、节点等)。
行为事物:模型的动态部分(交互、状态机、活动)。
分组事物:用于组织模型(包)。
注释事物:用于说明和约束(注释)。

2、用例图

核心概念:系统功能的抽象,通过场景(Scenario)来描述具体的交互步骤。

3、泛化关系:

描述了一般事物与特殊事物之间的继承关系,即 “is-a” 关系。接口和实现类之间是实现关系,类之间的静态连接是关联关系。

4、UML4种核心关系

泛化:空心三角实线,指向父类 / 接口。
依赖:虚线箭头,指向被依赖者。
关联:实线,类之间的结构化连接。
实现:空心三角虚线,指向接口。

5、做题时涉及到的概念

关联关系它描述了类之间的结构化联系,是最常见的类间关系。

接口和实现该接口的类之间的关系是实现关系

对象图属于结构图(静态图),用于展示某一时刻类的实例(对象)及它们之间的链接。类图、组件图、顺序图均为 UML 标准结构图 / 行为图。

组合结构图是 UML 2.0 新增的图,用于描述复杂元素(如类 / 组件)的内部内部结构及协作关系。类图、交互概览图、时序图均为 UML 2.0 规范内的图种。

UML 的扩展机制包括构造型、标记值、约束。构造块是 UML 的核心组成元素(如类、关系),并非扩展机制。

标记值用于为元素添加特性信息(如版本、作者、属性)。构造型扩展语义,约束限定规则,注释是独立元素。

UML 由构造块(事物、关系、图)、公共机制和规则三部分组成。

行为图(如序列图、状态机图)专注于描述系统随时间的动态行为和对象交互,即模型的动态部分。(行为图的定义)

关系的作用:用于建立元素之间的语义联系。

UML 是一种图形化的建模语言,其符号仅表达语义,不依赖于绘制的大小和位置。(UML的语义规则)

UML 中的约束(Constraint)通常使用花括号 { } 内的文本来表示,例如 {只读}、{长度 > 0}。(约束的表示法)

6、UML的扩展机制:

构造型(<<>>):扩展元素语义。
标记值({tag=value}):添加元数据属性。
约束({ }):限定语义规则。

7、UML 4+1 视图模型

逻辑视图:系统功能设计(类图、对象图)。
开发视图:代码与组件组织(组件图)。
进程视图:并发与通信(序列图、通信图)。
物理视图:硬件部署(部署图)。
用例视图:需求驱动。

二、软件工程及其面向方法

1、软件危机

进度、成本、质量

2、软件工程目标

进度控制、成本控制、质量控制

3、面向对象概念

一种运用一系列面向对象的指导软件构造的概念和原则(如类、对象、抽象、封装、继承、多态等)来构造软件系统的开发方法。


4、面向过程------步骤化

分析出实现需求所需要的步骤,通过函数(方法)一步一步实现这些步骤,接着依次调用。

5、面向对象------行为化

把整个需求按照特点、功能划分,将存在共性的部分封装成类 (类实例化后是对象),创建对象不是为了完成某一个步骤,而 是描述某个事物在解决问题的步骤中的行为。

6、面向对象-------对象

◼自治性:独立处理问题
◼ 封闭性:外部对象只能发送消息对其施加影响,无法直接对对象修改
◼ 通信性:与其他对象通信
◼ 被动性:存在和状态转换由外界驱动,接收到外界消息后才进行某种转换

7、面向对象-------类

◼拥有共同的结构、行为和语义的一组对象,一组对象的公共属 性和公共行为。类也具有属性、操作和标识符。

◼面向对象程序中的构造单位,面向对象程序设计语言的基本成分

8、面向对象------抽象

◼去除不重要的细节,揭示一个事物的本质特征。

◼抽象取决于使用者的目的,同一实体在不同场景中可有不同抽象。

9、面相对象-------封装

◼ 隐藏对象的属性和实现细节,仅对外公开接口,并控制在程序中属性的 读和修改的访问级别。 ◼ 封装强调两个概念,封闭和独立。

10、面向对象--------泛化

◼ 一般描述和具体描述之间的关系,具体描述在一般描述基础上对其进行了扩展。
◼ 实现泛化关系的机制为继承。一个子类继承一个父类,就实现两者之间的泛化关系。

11、面向对象-------多态

◼ 多态是在同一接口下表现多种行为的能力。
◼ 多态允许不同类的对象对同一消息做出不同响应。
◼ 当一个对象接收到进行某项操作的消息时,多态机制将根据对象所属的类,动态地选用该类中定义的操作。

三、统一建模语言UML

1、UML特点

UML用来捕获系统静态结构(对象间的属性和方法,对象 间的关系)和动态行为(对象在不同时间、状态下的变 化以及对象间的相互通信)的信息。

UML是独立于过程的,它适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以各种开发工具。

UML不是一种程序设计语言,可以使用代码生成器将UML模型转换为多种程序设计语言代码,或者使用逆向工程将程序代码转换为UML。

四、初识UML

1、构造块

构造块指的是UML的基本建模元素,是现实世界中的概念的抽象描述方法。

2、事物

对模型中关键元素的抽象体现

事物的分类:结构事物(UML模型的静态部分)、行为事物(是UML模型的动态部分,即静态元素之间产生的时间和空间上的行为动作)、分组事物(是UML模型的组织部分,是用来组织系统设计的事物。)、注释事物(是UML模型的解释部分,用来描述、说明和标注模型的元素。)

3、关系

事务和事务间联系的方式

关系的分类:关联关系(指一种对象和另一种对象之间存在联系)、依赖关系(如一个元素的某些特性随另一个独立元素的特性的改变而改变)、泛化关系(描述特殊到一般的关系)、实现关系(描述特殊到一般的关系)

4、图

相关的事务及其关系的聚合表现

结构图:捕获事物与事物之间的静态关系。

行为图:捕获事物的交互过程的动态行为。

5、通用机制

规格说明:UML的规格说明用来对系统的细节进行描述,确定系统的更多性质

修饰:对规格说明的基本符号添加一些独特性的修饰(对类名添加斜体修饰表明这是一个抽象类;公有性(public)的操作,保护性(protected)的操作,私有性(private)的操作)

扩展机制:为了扩充描述能力定义的通用性扩展

UML的三种扩展机制:构造型、标记值、约束。

6、4+1架构

在“4+1”视图模型中,软件开发者从五个不同视角描述软件体系结构的一组视图模型。

逻辑视图:

➢将系统功能进行分解,负责反映出系统内部是如何组织和协
作来实现功能的。
➢ 通过揭示类、对象、类与对象之间的静态关系,以及对象之
间如何交互的动态行为来展示各个对象如何实现系统功能.
➢ 逻辑视图主要对应UML的类图。

开发视图:

➢ 面向开发人员,描述软件的各个模块的组织方式,主要考虑软 件编程时的需求,例如模块编写是否容易,是否可以重用,哪 些成熟的框架可以应用。

➢ 由于其描述了静态的软件组织结构,一般对应UML中的组件图。

进程视图:

➢ 描述系统的运行特性,关注进程、线程、对象、并发、同步、通信等运行时概念。
➢ 为逻辑视图中类的具体操作指定进程或线程,并对运行时单元之间的交互加以规划。
➢ 在UML中运行时一般采用状态机图、交互图和活动图完成。

物理视图:

➢描述硬件配置,强调系统的安装、配置、通信、拓扑结构等问题。
➢将软件系统映射到指定的硬件设备上,保证不同的硬件环境给软件性能带来的影响最小,或让物理配置的性能和稳定性达到最高。
➢UML中的部署图基本可以实现物理视图中涉及的部分。

场景视图:

➢ 从项目需求入手,将四个视图结合为一个整体。四个视图中的元素需要协同工作以实现场景视图中给出的用例,它是距离用户需求最近的视图,是软件开发中重要的驱动要素(用例驱动)。
➢ UML中的场景视图主要指用例图。

五、类图

1、概念

通过系统中的类以及个各类之间的关系来描述系统的静态接口(类图主要包含的7种元素:类、接口、依赖关系、泛化关系、实现关系、关联关系)

2、类名

类名应来自系统问题域,从系统词汇表中提取明确而无歧义的名词或名词短语。

类名必须是合法标识符(字母、数字、下划线,不能数字开头)
命名规范:大驼峰命名法(每个单词首字母大写)
类名是唯一标识,同一作用域不能重复定义

3、属性

实例属性:每个对象自己的,用 self.xxx;类属性:所有对象共享,直接写在类里;私有属性:__xxx,外部不能直接访问;属性就是类 / 对象里的变量。

4、操作

类能做的具体动作 / 函数,对外暴露或内部私有行为。

5、职责

这个类该负责什么、不该管什么(单一职责原则核心),是业务定位,不写在 UML 图形里,是设计说明。

原则:一个类只干一件核心事

举例:

用户类职责:只管理用户信息、登录认证
订单类职责:只管订单创建、付款、状态变更
❌错误:用户类里写「计算运费、生成发票」(越权)

6、接口

是一个被命名的操作集合(不包含属性与方法;所有内容都是公有的;可支持多个接口)。

一套规范 / 契约,只声明操作,不写实现;类去「实现接口」遵守契约。

六、绘制类图

(类图中的关系:关联关系(特殊关系:聚合关系与组合关系)、泛化关系(单继承、多继承)、依赖关系、实现关系)

1、关联关系:类与类之间长期、稳定的引用关系(比如师生、订单 - 用户),是最通用的关系。

连线:实线,可标多重度(1 对 1、1 对多、多对多)
多重度举例:
1:唯一
*:多个
0..*:0 个或多个

(1)聚合(Aggregation,空心菱形)
弱整体 - 部分,生命周期独立
符号:整体端画空心菱形 + 实线
特点:
整体没了,部分还能独立存在;部分可被多个整体共享。
例子:
班级 ↋ 空心菱形→学生
班级解散,学生依然存在,可加入别的班级。
(2)组合 / 合成(Composition,实心菱形)
强整体 - 部分,生命周期绑定
符号:整体端画实心菱形 + 实线
特点:
整体销毁,部分必须一起销毁;部分专属当前整体,不能共享。
例子:
人体 ↋ 实心菱形→心脏 / 大脑
人没了,心脏就失效,不能拆给别人用。

极简口诀:空心聚合可分家,实心组合生死随

2、泛化关系:父子类继承关系,子类复用父类属性 / 方法。

符号:实线 + 空心三角箭头(箭头指向父类)。

分类
单继承:一个子类只继承一个父类(Java/C# 默认支持)
多继承:一个子类同时继承多个父类(C++ 支持,Java 用接口替代规避)

例子
动物 ←泛化← 狗、猫;
学生 ←泛化← 本科生、研究生

语义:子类是一种父类(is-a)

3、依赖关系:临时、偶然的使用关系,用完就断。

符号:虚线 + 普通箭头

例子
司机 依赖 汽车:司机开车时临时用汽车,不开车就没关系;
工具类调用、临时数据校验都属于依赖。

语义:临时用到(use-a)

4、实现关系:类实现接口的契约关系,接口定规范,类写具体代码。

符号:虚线 + 空心三角箭头(箭头指向接口)。

例子 接口:支付 → 实现类:微信支付、支付宝支付

语义:类遵守接口规范(like-a /abide-a)

七、类图的建模技术

1、面向对象的设计原则----开闭原则

软件实体(类、模块、函数等)对扩展开放,对修改关闭

通俗来说:新增功能时,优先通过「扩展代码(新增子类 / 实现类)」实现,禁止直接修改已稳定运行的核心代码,避免引入新 bug,提升系统可维护性。

速记口诀:
扩能不加改,新加不碰旧;
抽象定规矩,多态来出头。

2、面向对象的设计原则----里氏替换原则

所有使用父类对象的地方,都可以透明地替换为子类对象,且程序逻辑完全正确。
它是继承复用的基石,要求子类严格遵守父类的行为约定,不能破坏父类的逻辑。

核心要点
子类可以扩展父类功能,但不能改变父类原有的功能
子类不能重写父类的非抽象方法,避免破坏继承体系的一致性
子类实现父类的抽象方法时,输入条件可以更宽松,输出结果可以更严格

3、面向对象的设计原则----接口分离原则

使用多个专门的小接口,比使用一个臃肿的总接口更好。
禁止让一个类依赖它不需要的接口方法,避免接口污染,降低耦合度。

核心要点
接口要单一职责,只包含某一类特定的方法
避免设计「万能接口」,防止实现类被迫实现无用的空方法
提升代码的灵活性和可维护性,修改接口时只影响相关实现类

原则 核心目标 解决的问题
开闭原则 系统可扩展、易维护 避免修改旧代码引入 bug
里氏替换原则 保证继承体系的健壮性 避免子类破坏父类逻辑
接口分离原则 降低系统耦合度 避免接口臃肿、依赖无用方法
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐