UML类图及C#实现

简介: 我们引用《大话设计模式》中得UML类图图示样例来学习UML类图。本文UML类图使用了Visual Paradigm工具绘制。UML视图主要可以帮我们理清楚思路:知道每个对象直接的交互关系,而且让我们更加清楚的知道什么时候用什么结构。

UML类图

我们引用《大话设计模式》中得UML类图图示样例来学习UML类图。
本文UML类图使用了Visual Paradigm工具绘制。
UML视图主要可以帮我们理清楚思路:知道每个对象直接的交互关系,而且让我们更加清楚的知道什么时候用什么结构。

总图.png

1、类

首先是“动物”矩形框,它表示一个类(Class)。类图有三层,从上至下分别表示:

类名称(如果是接口,就使用斜体表示)
类的特性(一般是类的字段和属性,可以没有)
类的操作(一般是类的方法或行为)
它们前边的符号有以下几类:

“+”表示public
“-”表示private
“#”表示protected
“_”下划线表示static

动物类.png

public class Water
{
}
public class Oxygen
{
}
public abstract class Animal
{
        /// <summary>
        /// 是否有生命
        /// </summary>
        public bool life { get; set; }

        /// <summary>
        /// 新陈代谢
        /// </summary>
        /// <param name="oxygen"></param>
        /// <param name="water"></param>
        public abstract void Metabolism(Oxygen oxygen , Water water);

        /// <summary>
        /// 繁殖
        /// </summary>
        public abstract void Breed();
}

2、依赖关系

某个类,强烈依赖某种东西:比如新陈代谢强烈依赖氧气和水。依赖关系用带箭头的虚线表示。

依赖关系.png

/// <summary>
/// 新陈代谢
/// </summary>
/// <param name="oxygen"></param>
/// <param name="water"></param>
public abstract void Metabolism(Oxygen oxygen , Water water);

3、继承关系

鸟属于动物,那么鸟必然需要继承抽象类动物,但是鸟又和其他的动物不一样,有自己的特点,所以鸟必然也是我们抽象出来的!例如:鸟是动物的一种,企鹅、鸭、大雁是鸟的一种。依赖关系用带空心三角形的实线表示。

依赖关系.png

    public abstract class Brid : Animal
    {
        /// <summary>
        /// 有羽毛
        /// </summary>
        public bool feather;

        /// <summary>
        /// 有喙状的嘴巴
        /// </summary>
        public bool coronoid;

        public override void Breed()
        {
            Console.WriteLine("我可以繁衍后代");
        }

        public override void Metabolism(Oxygen oxygen, Water water)
        {
            Console.WriteLine($"我依赖{oxygen}和{water}进行新陈代谢");
        }

        /// <summary>
        /// 下蛋
        /// </summary>
        public abstract void LayEggs();
    }

    /// <summary>
    /// 企鹅类
    /// </summary>
    public class Penguin : Brid
    {
        public override void LayEggs()
        {
        }
    }

    /// <summary>
    /// 大雁类
    /// </summary>
    public class WildGoose : Brid
    {
        public override void LayEggs()
        {
        }
    }

    /// <summary>
    /// 鸭类
    /// </summary>
    public class Duck : Brid
    {
        public override void LayEggs()
        {
        }
    }

    /// <summary>
    /// 唐老鸭类
    /// </summary>
    public class DonaldDuck:Duck
    {
    }

4、实现接口

接口的作用是方法的复用,所以用到此方法的对象都只需要实现这个接口,在这里,我们有的鸟类可以飞比如,燕子和喜鹊可以飞,但是有的不行,那么燕子和喜鹊就要继承这个接口,实现接口用带空心三角形的虚线表示。

实现接口.png

    interface IFly
    {
        void Fly();
    }
    
    public class WildGoose : Brid, IFly
    {
        public void Fly()
        {
            Console.WriteLine("我能飞");
        }

        public override void LayEggs()
        {
        }
    }

鸭子也属于鸟,但是鸭子不能飞。
唐老鸭也是鸭子,但是他有一个特异功能,会说话,接口也可以用棒棒糖表示法

棒棒糖.png

    interface ISpeed
    {
        void Speak();
    }
    
    /// <summary>
    /// 唐老鸭类
    /// </summary>
    public class DonaldDuck : Duck, ISpeed
    {
        public void Speak()
        {
            Console.WriteLine("我能说话");
        }
    }

5、组合关系(强拥有关系)

特点:在组合中,部分与整体生命期一致,部分与组合同时创建并同时消亡 。比如:鸟与翅膀的关系。

组合关系用带实心菱形的实线表示。

组合关系.png

    /// <summary>
    /// 翅膀类
    /// </summary>
    public class Wing
    {
    }

    public abstract class Brid : Animal
    {
        /// <summary>
        /// 有羽毛
        /// </summary>
        public bool feather;

        /// <summary>
        /// 有喙状的嘴巴
        /// </summary>
        public bool coronoid;

        /// <summary>
        /// 翅膀
        /// </summary>
        public Wing wing;

        public override void Breed()
        {
            Console.WriteLine("我可以繁衍后代");
        }

        public override void Metabolism(Oxygen oxygen, Water water)
        {
            Console.WriteLine($"我依赖{oxygen}和{water}进行新陈代谢");
        }

        /// <summary>
        /// 下蛋
        /// </summary>
        public abstract void LayEggs();
    }
    

6、聚合关系(弱拥有关系)

每一只大雁都属于一个雁群,掉队的除外,那么我们可以理解为每个大雁都属于一个雁群,但是这种关系又和强拥有关系不同,用带空心菱形的实线表示,所以有了弱拥有关系。

特点: 部分对象的生命周期并不由整体对象来管理。也就是说,当整体对象已经不存在的时候,部分的对象还是可能继续存在的。比如:一只大雁脱离了雁群,依然是可以继续存活的。

弱拥有关系和强拥有关系是反的,指向也是反的!空心的菱形!

聚合关系.png

    public class GooseGroup
    {
        public WildGoose[] wildGeese;

        /// <summary>
        /// 一字飞
        /// </summary>
        public void LFly()
        { 
        
        }

        /// <summary>
        /// V字飞
        /// </summary>
        public void VFly()
        {

        }
    }

7、关联关系

企鹅是很特别的鸟,生存和天气的原因很大,关联关系用带箭线的实线表示。

关联关系.png

    public class Climte
    {
    }
    public class Penguin : Brid
    {
        /// <summary>
        /// 天气
        /// </summary>
        public Climte climte;
        public override void LayEggs()
        {
        }
    }
相关文章
|
uml
UML之类图
UML之类图
398 1
|
数据可视化 Java uml
IDEA中一个被低估的功能,一键把项目代码绘制成UML类图
IDEA中一个被低估的功能,一键把项目代码绘制成UML类图
1409 1
使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实
该博客文章通过UML类图和Java代码示例,展示了如何使用工厂方法模式设计一个支持加法、减法、乘法和除法运算的计算机程序,并严格按照类图设计实现程序。
1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
该博客文章展示了如何使用简单工厂模式设计一个程序,该程序能够根据用户输入的运算符(加、减、乘、除)对两个数进行计算,并提供了相应的UML类图和Java源码实现。
1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
|
应用服务中间件 uml
【UML】软件工程中常用图:类图、部署图、时序图、状态图
【UML】软件工程中常用图:类图、部署图、时序图、状态图
4294 1
|
设计模式 数据可视化 程序员
软件设计模式:UML类图
软件设计模式:UML类图
451 1
|
数据可视化 Java uml
精通UML:从类图到序列图的实战指南
【8月更文第23天】统一建模语言(Unified Modeling Language, UML)是一种用于软件工程的标准图形化语言,它提供了一套工具来帮助开发团队可视化、构造和文档化软件系统。在UML中,类图和序列图是最常用也是最重要的两种图。类图用于描述系统的静态结构,而序列图则用于表示对象之间的交互和系统的动态行为。
748 5
|
设计模式 uml
设计模式常用的UML图------类图
这篇文章介绍了UML中类图的基本概念和用途,详细解释了类与接口、类之间的关系,包括继承、实现、组合、聚合、关联和依赖等六种关系,并展示了它们在类图中的表示方法。
设计模式常用的UML图------类图
|
数据可视化 Java uml
Java的UML类图
Java的UML类图
565 1
|
uml
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
4542 0