以PowerDesigner畫UML类圖

UML类图操作(一)

类图(Class Diagram用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析设计阶段的重要产物,也是编码测试的重要模型依据。在uml2.0中,类图使用的频率是最高的,这里使用PowerDesigner16.5版本来操作。

首先我们先要了解类图的显示结构,其次再來了解类間之結合关系,由於类有普通类、抽象类、接口(*即介面)之區別,分別展示如下:

https://i-blog.csdnimg.cn/blog_migrate/fa79d83830ff425bbdab2cb40bba7a90.png

 接著创建一个类图:在PowerDesigner-->File-->NewModel-->ModelTypes-->Object Oriented Model-->Class Diagram

https://i-blog.csdnimg.cn/blog_migrate/e20420c4685edef766dcf147838ea0a4.png

  接著创建一个並展開此类Class Properties頁面,再對此类添加如下属性(Attributes)和方法(Operations)以熟悉添加元素之操作演練:

 https://i-blog.csdnimg.cn/blog_migrate/a0c8b1d0dd1e478ed04e7015a900f5cf.png

接着可先查看它自动生成的代码(在Class Properties頁面-->Preview頁籤下):

 https://i-blog.csdnimg.cn/blog_migrate/0b7e4c1e4de317e62fd2ae2f9695850c.png

 如没有自动生成代码呀,可在Class Properties页面的General頁籤下將Generate code勾上

 https://i-blog.csdnimg.cn/blog_migrate/c66506811f7d1a52313dacc9f048216d.png

下面我们结合c#語法來分析类图的顯示結構:

类图分为四部分:

                第一部分:类名

                第二部分:属性

                第三部分:操作行為,含方法、构造器等

                第四部分:內部类

  • 类名普通类直接以类名作表示;抽象类下面有{Abstract}标志;接口則可以一个符号表示;

注意类還有静态类(static)、密封类(sealed)等之區分,此如何表示呢?但这个不会体现在表示层上,这可在Class Properties頁面-->C#-->Modifiers 里面勾选,图雖不表示其變化但在生成的代码会显示其變化。

 

  • 属性表示规则: 

可见性  名称:类型 [ = 初始值 ]

  • 操作表示规则:

可见性  名称(参数列表) [ : 返回类型]

至於可见性(访问修饰符)如下: 

                public+

                private-

                protected#

                internali

                protected internalr

注意在代码中直接写public int age {get;set;},則會同時在属性里面显示<<Property>>age:int,及操作里面显示<<Getter>><<Setter>>…..之變化。

 

如果类太多的话字体過小,可如下操作如下:

Ctrl+A全选类图-->点击一个大A來设置字体,如下图所示

https://i-blog.csdnimg.cn/blog_migrate/2576d92f9a965984e3bc9ffd44104a2f.png

UML类图操作(二)

一般类不會只是单独存在的,类与类之间會存在着結合关系UML提供了类间关系的不同表达方式。

下面只简单說明一些必要设置之操作,双击关系线,然后找到Detail頁籤

https://i-blog.csdnimg.cn/blog_migrate/55a8c2986db856ce9eefb49728608d14.png

1.关联关系(Association

对象与对象之间的结构关系

1.1.1单向关联

https://i-blog.csdnimg.cn/blog_migrate/a6bae463d462d6d4a8cb3f6671a18e79.png 

class Man

{

    public Car car;

}

class Car

{

 

}

1.1.2双向关联

 https://i-blog.csdnimg.cn/blog_migrate/6d7ef76a00fc562e091d42533a5a694d.png

 

class Studen

{

    public Grade grade;

}

class Grade

{

    public Student student;

1.1.3自关联

https://i-blog.csdnimg.cn/blog_migrate/721df03e3ed8b4bb215d067a2dde06d6.png

class ClassA

{

    public ClassA classA;

1.1.4多重关联:用來表示對象之數量关系

1..1 : 表示另一个类的一个对象只与该类的一个对象有关系
0..*:表示另一个类的一个对象与该类的零个或多个对象有关系

1..*:表示另一个类的一个对象与该类的一个或多个对象有关系

0..1:表示另一个类的一个对象没有或者只有一个对象有关系

m..n:表示另一个类的一个对象与该类最少有m个最多有n个对象有关系

这里值得注意的是:只要有*的关联就要以数组表示之

 1.2聚合关系(Aggregation

表示整体与部分关系,部分是整体的一部分,也可以脱离整理独立存在。也就是说car被回收,gasoline不会跟car一起被回收。 

https://i-blog.csdnimg.cn/blog_migrate/491bc1a73472bb3290e46d63987c08e8.png

class Car

    {

        public Gasoline gasoline;

        //构造注入(*此法錯誤!!)

        public Car(Gasoline gasoline)

        {

            this.gasoline = gasoline;

        }

 

        //以get/set設置

        public Gasoline gasoline

        {

            get { return gasoline; }

            set { gasoline = value; }

        }

    }

 

    class Gasoline

    {

 

    }

这里注意的是:通过get/set設置

1.3组合关系

也是整体和部分的关系,但是组合关系中整体控制部分的生命周期,也就是说你在使用car对象的时候,在它的构造函数里面创建wheel實例或以构造注入wheel實例,在回收car的时候wheel同时被回收

https://i-blog.csdnimg.cn/blog_migrate/3a8dd62498d9d79fb4149be0e02a2aaa.png

    class Car

    {

        public Wheel wheel;

 

        public Car()

        {

            //实例化

            this.wheel = new Wheel();

        }

                //构造注入

        public Car(Wheel wheel)

        {

            this.wheel = wheel;

        }

 

    }

 

    class Wheel

    {

 

    }

2.依赖关系(Dependency

属于一种使用关系一般都是某个类使用另一个类里面的对象作为参数使用

所以我们一般用到的3种方式

1)将一个对象作为参数传入类的方法,比如 public void A(Car car);

2)在一个类里面调用静态对象的方法,比如 Car.Move();

 下面我们使用第一种方式

https://i-blog.csdnimg.cn/blog_migrate/523e3ebdbd07c68f4767940df657b03a.png

    class Driver

    {

        public drive(Car car)

        {

            car.Move();

        }

    }

 

    class Car

    {

 

        public void Move()

        { }

    }

 3.泛化关系(Generalization

俗称继承关系。

 

https://i-blog.csdnimg.cn/blog_migrate/cd75c699163c51b7aa6c056a9ba44c65.png

public class Subclass : Base

    {

    }

 

    public class Base

    {

    }

4.实现关系(Realization

类继承接口的关系 

https://i-blog.csdnimg.cn/blog_migrate/c08c7dd4e7302f1d91d3078605d924fd.png

    class Subclass : IBase

    {

        public void Move()

        {

        }

 

    }

 

    interface IBase

    {

        void Move();

 

    }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值