1. 类图(Class Diagram)描述类的静态结构,定义类及描述类之间的联系,如关联、依赖、聚合等,还包括类的内部结构(类的属性和操作)。
类图是⼀种静态模型类型。⼀个类图根据系统中的类以及各个类之间的关系描述系统的静态结构。 类图包含7个元素: ◊ 类(Class) ◊ 接⼝(Interface) ◊ 协作(Collaboration) ◊ 依赖关系(Dependency) ◊ 泛化关系(Generalization) ◊ 关联关系(Association) ◊ 实现关系(Realization)
类图是⾯向对象系统建模中最常⽤的图,它是定义其他图的基础,在类图的基础上,可以使⽤状态图、协作图、组件图和配置图等进⼀步描述系统其他⽅⾯的特性。
2. 类是对⼀组具有相同属性、操作、关系和语义的对象的描述。类定义⼀组有着状态和⾏为的对象。其中,属性和关联⽤来描述状态。属性通常⽤没有⾝份的数据值表⽰。关联则⽤有⾝份的对象之间的关系表⽰。⾏为由操作来描述,⽅法是操作的实现。
在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。客户使⽤产品需要提供者,但⼀个客户需要的产品可以有多个提供者。 场景:Driver与Car,Driver驾驶之前需要Car能够开动。 依赖关系图:
C#实现:
public class Driver{
pulic void Drive(Car car) {
car.Move(); }}
public class Car{
pulic void Move() {
// 省略代码 }}
或
public class Driver{
pulic void Drive() {
Car car = new 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; }
/// ///
///
public abstract double Area(); /// ///
public abstract void Display();}
Circle.cs:
using System;
using System.Collections.Generic;using System.Linq;using System.Text;/// ///
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;
/// ///
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;
/// ///
public class Triangle : Shape{
private double _a; private double _b; private double _c;
/// /// 参数:三⾓形名称和三条边长 ///
/// 三⾓形名称 /// 第⼀条边长 /// 第⼆条边长 /// 第三条边长
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 实现关系(Realization)
实现是规格说明和其实现之间的关系,实现关系通常在类与接⼝之间的实现关系。 实现关系图:
3.4 关联关系(Association)
关联关系是⼀种结构关系,它指明⼀个事物的对象与另⼀个事物的对象之间的联系。关联关系⽐依赖关系更强,不存在依赖关系的偶然性,关系也不是临时性的,⽽⼀般是长期性的。
3.4.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 List return products; }} 3.4.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 return new List 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 return new List 3.4.3 聚合关系(Aggregation) 聚合表⽰的是⼀种has-a的关系,是⼀种整体-部分关系,同时整体与部分之间⼜可以相互分离。整体与部分拥有相互独⽴的⽣命周期,部分的⽣命周期并不由整体来管理决定。当整体这个对象已经不存在的时候,部分的对象还是可能继续存在的。整体可以包含多个部分,部分可以属于多个整体对象,也可以为多个整体对象共享。 场景:汽车与车轮,汽车有多个车轮。车轮使⽤周期结束,可以为汽车安装新的车轮。同时汽车使⽤周期结束,可再⽤的车轮也可以卸下安装到其他的汽车上。 聚合关系图: C#实现: Wheel wheel = new Wheel();Car car = new Car(wheel); 或者 Car car = new Car(new Wheel()); Car与Wheel的⽣命周期相互独⽴。 3.4.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对象的⽣命周期同时也结束。 因篇幅问题不能全部显示,请点此查看更多更全内容