团队沟通利器之UML——类图

一:用途

     用于描述系统的静态结构,或许在所有的uml图中,类图是我们最熟悉不过的,在我们没有接触uml的时候,可能都看过

类图,早在vs2005里面“解决方案资源管理器”的下边有一个“查看类图”的小图标,并且还能支持“正向“和”反向“工程。

 

<1>反向工程

  首先我们定义两个类:User和Product

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

        }
    }

    /// <summary>
    /// 用户类
    /// </summary>
    public class User
    {
        public string Name { get; set; }

        public int Age { get; set; }

        public string Sex { get; set; }
    }

    /// <summary>
    /// 产品类
    /// </summary>
    public class Product
    {
        public string Name { get; set; }

        public DateTime CreateTime { get; set; }
    }
}

然后我们点击”查看类图“,看看给我们生成的类图是咋样的。

<2> 正向工程

      既然是正向工程,那我们就可以在”类设计器“上面随便拖一些元素看看效果,细节的大家可以自己玩一玩。

 

二:基本元素

1:类图,枚举,接口,抽象类,结构,委托

    这几个元素我想学OO的都已经烂熟于心了,也没有什么好解释的。

2:关联关系

    关联关系一般作为类与类之间的一种强依赖关系,这种关系具有稳定和长期性,比如在C#中的代码实现为:将一个类作为

另一个类中的属性,比如这里我新建一个Order类,将User类作为Order类的一个属性。

先看类图:

然后看下是否为我们需要的代码:

3:继承关系

   在OO的三大特性中就有继承,我们都知道继承这么个概念,那么在类图中该如何展现呢?我们发现在User和Product

中都有一个Name属性,根据OO原则我们需要将Name属性单独提出来,然后让其他类继承。

下面我们看下生成代码,是否真如类图描述一样,(双击)任意类图即可,嘿嘿,是不是有点意思。

好,到现在为止,在类图这一块,我们已经掌握了20%,只要多练习练习即可,当然你可能觉得这些代码比较死,是的,

实际开发中,我们常会用CodeSmith来解决这些枯燥无味的代码。

在uml的类图中还有几个关系需要表达一下,只不过实际应用比较少而已,好,下面我们看看”建模项目“里面的UML类图

4:依赖关系

    同样它也是类与类之间的关系,只不过这种关系比较弱,具有临时性和特定环境下的偶然性,可能大家不是很容易理解,

如果用C#解释就一目了然了,在代码中一般是一个类作为另一个类中方法的参数,既然是参数,那么它的生命周期你懂的。

5:聚合关系

    在官方文档中它描述的是一种”has-a“的关系,也就是整体与局部的关系,整体挂了,局部不见得就挂了,比如:你的大功率

电器挂了,不见得里面的电池就挂了,其次我们要注意”空心菱形“是整体端,“箭头”端是局部端。

6:组合关系

    在官方文档中它描述的是一种”contains-a“的关系,同样也是表示整体和局部的关系,整体挂了,局部也挂了,因为他们享有

共同的生命周期,比如:你挂了,你的心脏肯定挂了,同样"实心菱形“是整体端。

 

下面我们看看稍微复杂一点的”画图软件“的类图设计,大家也可以看看自己手头的项目类图,是否符合OO规范。

时间: 2024-09-13 06:21:47

团队沟通利器之UML——类图的相关文章

团队沟通利器之UML—— 序列图

一:用途      对一个开发团队来说,序列图是非常重要的,因为序列图用于描述系统内部一群对象之间的交互情况,尤其在做爬虫这种 业务复杂性的项目,序列图可以让我们更快的理清这些复杂流程.   二:基本元素    序列图中的uml元素还是相对比较少的,先截个图. 1:生命线 首先我们要知道序列图有一种动静结合的特点,以类图作为静态结构,用例图作为动态行为的过程.所以我们可以认为生命线 就是一个类,比如下图中,customer:Customer ,前者是类的实例,后者是类名,图中的"X"是

团队沟通利器之UML——活动图

              在平时的项目开发中,可能有的团队对业务都是用口头在团队里面进行交流,有时程序员的理解跟老大表达的意思不一致,还有 其他等等的弊端就不说了.我们知道建筑工人都是按照图纸做事的,同样在软件开发中,我们应该也有这样一份"图纸",这也就是我 们要说的UML,有了它就可以让我们做事统一口径,而从更快的理解业务并完成项目.        可喜的是VS2010已经集成了我们平时最常用的一些UML图,这个系列也准备介绍这4种图. 我们从"活动图"说起,平

团队沟通利器之UML——用例图

       在所有的UML图中,最容易理解的是用例图,也是元素最少的一种UML图,也是产品经理最拿手的一种图.   一: 用途     用例图常用来描述需求,让用户第一时间了解系统所具有的功能,可能有人就会问,几个图怎么可能让人一下就了解系统 所具有的功能的?其实在产品经理的prd中都是"图文相依"的形式展现,这里的"文"也就是"用例描述".   二:基本元素    用例图中的所有元素都是初级概念,所以所有的元素都是我们常用的,首先我们还是看看

PHP与UML类图: PHP and UML Class Diagrams

这篇短文写的不错,用PHP来解释UML(或者反过来说)可以说是一个创新了,通过这篇文章,我也发现了一个好站: www.phppatterns.com .各UML术语的翻译来源于我正在看的<UML用户指南(The Unified Modeling Language User Guide)>一书. UML(Unified Modeling Language, 统一建模语言)是一种通过图的方式表示软件的机制.本质上它允许我们通过画图来设计我们的程序,并且如果有相应的工具,我们甚至可以从图来直接产生代

使用UML类图设计Java应用程序(二)

在第一部分中,我们实现了5个类.在本部分中,我们接着说明如何利用UML类图来设计余下的各个类.为减少篇幅,本部分着重讲解UML类图及应用,对Java实现代码不再详细描述. 六.CGPoint类 CGPoint类说明了如何利用非抽象类扩展抽象类.CGPoint类是CGObject的子类,CGPoint类扩展了 CGObject类,CGPoint类没有再它所继承的变量中增加变量,它所声明的方法只有构造函数和要求它实现的抽象方法.其类图如下: Java实现代码为: 七.CGBox类 CGBox类也扩展

使用UML类图设计Java应用程序(一)

UML已成为面向对象设计的标准图形化工具,在UML定义的各种图中,本文只涉及类图.Java应用程序由许多类所构成,类图的设计与实现,是Java实现面向对象应用程序的核心.本文通过一个具体的应用程序的设计与实现过程,详细说明了利用UML类图设计Java应用程序,使得开发过程标准化.可视化,代码编程简单化. 在类图中,类被描述为带有三层的盒子. 顶层为类名,一般用加粗字体表示.如果类是抽象的,其名称用斜体表示:如果类是接口,则在类名上方标注<<interface>>. 中间层包含类的属

UML类图几种关系的总结

在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 泛化(Generalization) [泛化关系]:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为.例如:老虎是动物的一种,即有老虎的特性也有动物的共性. [箭头指向]:带三角箭头的实线,箭头指向父类 实现(Realization

[好文要转要收藏] UML类图几种关系的总结

在UML类图中,常见的有以下几种关系:泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1.泛化(Generalization) [泛化关系]:是一种继承关系,它指定了子类如何特化父类的所有特征和行为例如:老虎是动物的一种. [箭头指向]:带三角箭头的实线,箭头指向父类 2.实现(Realization) [实现关系]:是一种类与接口的关系,表示类

UML类图简介

概述 设计模式中常常使用UML来表示类与类,类与接口之间的关系,UML类图是设计模式入门必备的技能,感觉各种关系比较多,这里做一下总结. 类与接口的表示 类与接口通常是一个矩形框表示,一般分为3层,第一层显示类的名称,如果是抽象类则类名用斜体表示.第二层代表类的特性,通常是字段和属性,第三层是类的操作,通常表现为方法或者行为,其中+表示public,-表示private,#表示protect  常用关系 继承  继承关系用空心三角形+实线来表示,在Java中体现为extends关键字  实现接口