久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    UML基礎系列:類圖

     雪柳花明 2016-09-16

      摘抄網址:http://www.cnblogs.com/libingql/p/3505063.html

    類圖描述系統中類的靜態結構,它不僅定義系統中的類,描述類之間的聯系,如關聯、依賴、聚合等,還包括類的內部結構(類的屬性和操作)。類圖描述的是靜態關系,在系統的整個生命周期中都是有效的。對象圖是類圖的實例,它們的不同之處在于對象圖顯示類圖的多個對象實例,而不是實際的類。由于對象存在生命周期,所以對象圖只能在系統某一時間存在。

    1. 類圖概述

      類圖(Class Diagram)是描述類、接口、協作以及它們之間關系的圖,用來顯示系統中各個類的靜態結構。類圖是一種模型類型,一種靜態模型類型。一個類圖根據系統中的類以及各個類之間的關系描述系統的靜態結構。

      類圖是面向對象系統建模中最常用的圖,它是定義其他圖的基礎,在類圖的基礎上,可以使用狀態圖、協作圖、組件圖和配置圖等進一步描述系統其他方面的特性。

      類圖包含7個元素:類(Class)、接口(Interface)、協作(Collaboration)、依賴關系(Dependency)、泛化關系(Generalization)、關聯關系(Association)以及實現關系(Realization)。

    2. 類(Class)

      類是對一組具有相同屬性、操作、關系和語義的對象的描述。類定義聊了一組有著狀態和行為的對象。其中,屬性和關聯用來描述狀態。屬性通常用沒有身份的數據值表示。關聯則用有身份的對象之間的關系表示。行為由操作來描述,方法是操作的實現。

      在UML中,類用矩形來表示,并且該矩形被劃分為3個部分:名稱部分(Name)、屬性部分(Attribute)和操作部分(Operation)。其中頂端的部分存放類的名稱,中間的部分存放類的屬性、屬性類型及其值,底部的部分存放類的操作、操作的參數和返回類型。

      類的屬性格式:

    name : attribute type

      UML規范允許在屬性列表節中設置默認值的標識。

    name : attribute type = default value

      類的操作格式:

    name (parameter list) : type of value returned

      當一個操作有參數時,參數被放在操作的括號內,參數格式:

    parameter name : parameter type

      當文檔化操作參數時,可以使用一個可選擇的指示器,以顯示參數到操作的輸入參數或輸出參數。in 表示輸入參數,out 表示輸出參數。按照UML規范, in 是參數的默認類型。

      

    3. 類之間的關系

      類之間的關系最常用的有4種,分別是表示類之間使用關系的依賴關系(Dependency)、表示類之間一般和特殊關系的泛化關系(Generalization)、表示對象之間結構關系的關聯關系(Association)、表示類中規格說明和實現之間關系的實現關系(Realization)。

    3.1 依賴關系(Dependency)

      依賴關系用于表示類之間的使用關系,UML定義了4種基本依賴類型:使用依賴、抽象依賴、授權依賴和綁定依賴。

      使用依賴是最常用的依賴,使用依賴關系圖:

      

      表示客戶使用提供者提供的服務以實現它的行為。可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關系是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A??蛻羰褂卯a品需要提供者,但一個客戶需要的產品可以有多個提供者。

      場景:Driver與Car,Driver駕駛之前需要Car能夠開動。

      依賴關系圖:

      

      C#實現:

    復制代碼
    public class Driver
    {
         pulic void Drive(Car car)
         {
              car.Move();
         }
    }
    public class Car
    {
         pulic void Move()
         {
              // 省略代碼
         }
    }
    復制代碼

    3.2 泛化關系(Generalization)

      泛化關系是一種存在于一般元素和特殊元素之間的分類元素。泛化關系主要表現為類與類之間的繼承關系、類與接口之間的實現關系。

      場景:形狀類(Shape)為基類,圓形類(Circle)、矩形類(Rectangle)和三角形類(Triangle)均繼承形狀類。

      類之間的泛化關系圖:

      

      C#實現:

      Shape.cs:

    復制代碼
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    public abstract class Shape
    {
        protected string _name;
    
        public Shape(string name)
        {
            this._name = name;
        }
    
        /// <summary>
        /// 面積
        /// </summary>
        /// <returns></returns>
        public abstract double Area();
    
        /// <summary>
        /// 顯示
        /// </summary>
        public abstract void Display();
    }
    復制代碼

      Circle.cs:

    復制代碼
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    /// <summary>
    /// 圓形
    /// </summary>
    public class Circle : Shape
    {
        private double _radius;
    
        public Circle(string name, double radius)
            : base(name)
        {
            this._radius = radius;
        }
    
        public override double Area()
        {
            return Math.Round(Math.PI * _radius * _radius, 2);
        }
    
        public override void Display()
        {
            Console.WriteLine("{0} 半徑:{1},面積:{2}", _name, _radius, this.Area());
        }
    }
    復制代碼

      Rectangle.cs:

    復制代碼
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    /// <summary>
    /// 矩形
    /// </summary>
    public class Rectangle : Shape
    {
        private double _width;
        private double _height;
    
        public Rectangle(string name, double width, double height)
            : base(name)
        {
            this._width = width;
            this._height = height;
        }
    
        public override double Area()
        {
            return _width * _height;
        }
    
        public override void Display()
        {
            Console.WriteLine("{0} 長:{1},寬:{2},面積:{3}", _name, _width, _height, this.Area());
        }
    }
    復制代碼

      Triangle.cs:

    復制代碼
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    /// <summary>
    /// 三角形
    /// </summary>
    public class Triangle : Shape
    {
        private double _a;
        private double _b;
        private double _c;
    
        /// <summary>
        /// 三角形構造函數
        /// 參數:三角形名稱和三條邊長
        /// </summary>
        /// <param name="name">三角形名稱</param>
        /// <param name="a">第一條邊長</param>
        /// <param name="b">第二條邊長</param>
        /// <param name="c">第三條邊長</param>
        public Triangle(string name, double a, double b, double c)
            : base(name)
        {
            _a = a;
            _b = b;
            _c = c;
        }
    
        public override double Area()
        {
            double p = (_a + _b + _c) / 2;
            return Math.Sqrt(p * (p - _a) * (p - _b) * (p - _c));
        }
    
        public override void Display()
        {
            Console.WriteLine("{0} 三條邊長:{1},{2},{3},面積:{3}", _name, _a, _b, _c, this.Area());
        }
    }
    復制代碼

    3.3 關聯關系(Association)

      關聯關系是一種結構關系,它指明一個事物的對象與另一個事物的對象之間的聯系。關聯關系比依賴關系更強,不存在依賴關系的偶然性,關系也不是臨時性的,而一般是長期性的。

    3.3.1 單向關聯(DirectedAssociation)

      場景:商品和訂單,訂單中包含商品信息,但商品中不包含訂單信息。

      類之間單向關聯圖:

      

      C#實現:

      Product.cs:

    復制代碼
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    public class Product
    {
        public int ProductID { get; set; }
        public string ProductName { get; set; }
    
        public void Add() { }
    
        public void Remove() { }
    
        protected void Find() { }
    }
    復制代碼

      Order.cs:

    復制代碼
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    public class Order
    {
        public int OrderID { get; set; }
    
        public List<Product> GetProductsByOrderID(int orderID)
        {
            List<Product> products = new List<Product>();
            // 省略代碼
            return products;
        }
    }
    復制代碼

    3.3.2 雙向關聯(Association)

      場景:用戶與角色,一個用戶可以屬于多個角色,同時一個角色也可以擁有多個用戶。

      類之間的雙向關聯圖:

     

      C#實現:

      User.cs:

    復制代碼
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    public class User
    {
        public int UserID { get; set; }
        public string UserName { get; set; }
    
        public List<Role> GetRolesByUserID(int userID)
        {
            return new List<Role>();
        }
    }
    復制代碼

      Role.cs:

    復制代碼
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    public class Role
    {
        public int RoleID { get; set; }
        public string RoleName { get; set; }
    
        public List<User> GetUsersByRoleID(int roleID)
        {
            return new List<User>();
        }
    }
    復制代碼

    3.3.3 聚合關系(Aggregation)

      聚合表示的是一種has-a的關系,是一種整體-部分關系,同時整體與部分之間又可以相互分離。整體與部分擁有相互獨立的生命周期,部分的生命周期并不由整體來管理決定。當整體這個對象已經不存在的時候,部分的對象還是可能繼續存在的。整體可以包含多個部分,部分可以屬于多個整體對象,也可以為多個整體對象共享。

      場景:汽車與車輪,汽車有多個車輪。車輪使用周期結束,可以為汽車安裝新的車輪。同時汽車使用周期結束,可再用的車輪也可以卸下安裝到其他的汽車上。

      聚合關系圖:

      

      C#實現:

    Wheel wheel = new Wheel();
    Car car = new Car(wheel);

      或者

    Car car = new Car(new Wheel());

      Car與Wheel的生命周期相互獨立。

    3.3.4 組合關系(Composition)

      組合關系是聚合關系的另一種形式,體現的是一種contains-a的關系,但是整體與部分擁有共同是生命周期,整體與部分不可分,一旦整體對象不存在,部分對象也將不存在。子類對象的生命周期依賴于父類的生命周期。

      場景:公司(Company)與公司內部設置的部門(Department),一個Company對象至少有一個Department對象,當Company對象被銷毀時,Department對象也將同時被銷毀。

      組合關系圖:

      

      C#實現:

    復制代碼
    public class Department ()
    {
            // 省略代碼
    }
    pulic class Company ()
    {
            Department d = new Department ();
            // 省略代碼
    }
    復制代碼

      Department對象在Company對象中創建,當Company對象的生命周期結束的時候,Department對象的生命周期同時也結束。

    3.4 實現關系(Realization)

      實現是規格說明和其實現之間的關系,實現關系通常在兩種情況下被使用:在接口與實現該接口的類之間;在用例以及實現該用例的協作之間。

      實現關系圖:

      

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 中文 在线 日韩 亚洲 欧美| 久久精品国产亚洲夜色AV网站 | 一区二区不卡国产精品| 中文字幕人妻系列人妻有码 | 亚洲另类丝袜综合网| 国产午夜精品福利91| 永久免费无码成人网站| 亚洲日韩欧美一区二区三区| 四虎永久免费高清视频| 国产午夜亚洲精品国产成人| 久热综合在线亚洲精品| 做暖暖视频在线看片免费| 中文字幕无码免费久久| 高清无码爆乳潮喷在线观看| 亚洲国产欧美一区二区好看电影| 成人看的污污超级黄网站免费| 日日橹狠狠爱欧美视频| 国产AV激情久久无码天堂| 中文有无人妻vs无码人妻激烈| 一区二区不卡国产精品| 久久精品国产亚洲av麻豆长发| 国产精品色内内在线播放| 色欲香天天天综合网站无码| 久久久久成人片免费观看蜜芽| 久久精品久久电影免费理论片| 2020年最新国产精品正在播放| 亚洲精品宾馆在线精品酒店| 日本高清色WWW在线安全| 日韩精品一区二区三区视频| 国产亚洲精品VA片在线播放| 国产亚洲一区二区在线观看| 欧洲卡一卡二卡三爱区| 最近中文字幕国产精选| 国产草草影院ccyycom| 青青草原国产AV福利网站| 国产亚洲色视频在线| 亚洲AV永久无码一区| 免费无码一区无码东京热| 亚洲综合色婷婷六月丁香宅男大增| 人妻无码久久中文字幕专区| 国产成人AV三级在线观看按摩|