• UML之类图


    概要

    • 类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法。
    • 类图中的“类”与面向对象语言中的“类”的概念是对应的,是对现实世界中的事物的抽象。

    元素解析

    • 从上到下分为三部分,分别是类名、属性和操作。类名是必须有的
    • 类如果有属性,则每一个属性都必须有一个名字,另外还可以有其它的描述信息,如可见性、数据类型、缺省值等
    • 类如果有操作,则每一个操作也都有一个名字,其它可选的信息包括可见性、参数的名字、参数类型、参数缺省值和操作的返回值的类型等

    属性和方法:

    • private:成员前有一个“-”号,表示成员私有
    • public: 成员前有一个“+”号,表示成员公开
    • protected:成员前有一个“#”号,表示成员受保护的
    • package:成员前有一个“~”号,表示成员包可见

    例如

    1. public abstract class Vehicle
    2. {
    3. public abstract int Start();
    4. public abstract int Stop();
    5. public abstract int Run(float fSpeed);
    6. private float fMaxSpeed;
    7. }

    接口

            一组操作的集合,只有操作的声明而没有实现

    抽象类

            不能被实例化的类,一般至少包含一个抽象操作

    模板类

            一种参数化的类,在编译时把模版参数绑定到不同的数据类型,从而产生不同的类

    关系解析

    关联关系

            描述了类的结构之间的关系。具有方向、名字、角色和多重性等信息。一般的关联关系语义较弱。也有两种语义较强,分别是聚合与组合。

    例如

    1. public class Dialog{
    2. private Button btnOK;
    3. private Button btnCancel;
    4. private TextBox txtInfo;
    5. }
    6. public class Button{
    7. ...
    8. }
    9. public class TextBox{
    10. ...
    11. }

    聚合关系

            特殊关联关系,指明一个聚集(整体)和组成部分之间的关系,箭头指向部分,菱形指向整体。

            聚合关系整体与部分的生命周期是可以不一致的,且部分可以脱离整体存在。

    1. // 汽车类
    2. public class Car {
    3. private Engine engine = null; // 一辆车存在一个引擎
    4. private List tyres = null; // 一辆车存在四个车轮
    5. }
    6. // 引擎类
    7. class Engine {
    8. ...
    9. }
    10. // 轮胎类
    11. class Tyre {
    12. ...
    13. }

    组合关系

            语义更强的聚合,部分和整体具有相同的生命周期,箭头指向部分,菱形指向整体。

    1. // 人类
    2. public class Person {
    3. private Head head = null; // 一个人有一个大脑
    4. private List hands = null; // 一个人有一双手
    5. }
    6. // 大脑类
    7. class Head {
    8. ...
    9. }
    10. // 手类
    11. class Tyre {
    12. ...
    13. }

    泛化关系

            在面向对象中一般称为继承关系,存在于父类与子类、父接口与子接口之间

    例如

    1. public class SavingsAccount extends Account{
    2. ...
    3. }

    实现关系

            对应于类和接口之间的关系

    例如

    1. // Shape类
    2. public interface Shape{
    3. public abstract void Draw();
    4. }
    5. // Circle类
    6. public class Circle implements Shape{
    7. public void Draw();
    8. private Point ptCenter;
    9. private int nRadius;
    10. }

    依赖关系

            描述了一个类的变化对依赖于它的类产生影响的情况。有多种表现形式,例如绑定(bind)、友元(friend)等

    例如

    1. class FloatStack{
    2. private int size;
    3. public int Push(float elem);
    4. public int Pop();
    5. public float GetTop();
    6. }

    常用例子

    图形编辑器

    • 图形编辑器一般都具有一些基本图形,如直线、矩形等,用户可以直接使用基本图形画图,也可以把基本图形组合在一起创建复杂图形
    • 如果区别对待基本图形和组合图形,会使代码变得复杂,而且多数情况下用户认为二者是一样的
    • 组合模式可以用相同的方式处理两种图形

    演出售票系统

            在用例驱动的开发过程中,通过分析各个用例及参与者得到类图。分析用例图的过程中需要根据面向对象的原则设计类和关系,根据用例的细节设计类的属性和操作

  • 相关阅读:
    甲板上的战舰|模拟?|每日一题|chatgpt结合更正
    QCC51XX---BLE_生活中的实例_医院的结构
    三门问题 代码验证概率
    Bio-Helix 艾美捷IRIS11预染蛋白Markers基参及相关研究
    3D激光SLAM:LeGO-LOAM论文解读---点云分割部分
    (9)点云数据处理学习——Global registration(全局注册)
    Euro-NCAP-2023-安全驾驶辅助驾驶员状态监测DMS和限速辅助测试流程-中文版
    RT-DETR算法改进:最新Inner-IoU损失函数,辅助边界框回归的IoU损失,提升RT-DETR检测器精度
    数模3—Matlab线性规划、非线性规划、多目标规划(超全解法合集)
    Allegro如何添加泪滴操作指导
  • 原文地址:https://blog.csdn.net/princekin_even/article/details/127975729