用微软.NET架构企业解决方案 学习笔记(二)UML概要

 

UML概要

 

 

 

引言

  设计一个系统,任何科学领域的系统,你首先需要做的是对它进行抽象。抽象模型为系统的视图、结构、行为、参与实体和流程方面具体的实现提供一个代理。在系统的参与人员(包括:开发者,架构师,所有者,用户)之间应该共享一个模型。为了能够提出反馈,提出错误的假设,改进建议,模型应该能够被系统的参与者所理解。尽管共享了一个模型,你还是需要用一种通用的,被广泛接受的的形式和符号来表达模型。例如:模型语言。

  显然,建模语言是基于一系列规则、符号、图表和关键字的图形或者文字语言。语言的元素用来表达模型的结构和行为,给任何熟悉语言的人传达清晰的认识和信息。

  有很多著名的建模语言例子,最流行的一个就是UML(Unified Modeling Language 统一建模语言)。UML是一种通用的图形建模语言,在过去的很多年,已经变成了工业的标准。UML特别适合于建立面向对象的系统。

正文

  1、简介

  建模在任何软件项目中都是一个关键的阶段,对于大型的、企业级的应用更是至关重要。

  在复杂的情况下,模型是一个本质。它可以帮助检查详细设计的正确性和遵守程度,使得软件可以更加容易的构建和维护。一个清晰的、良好的模型同样可以在任何时候帮助开发者找到断点的正确位置,并且修复bug。在软件中,模型应该和站点地图、蓝图同样重要,它是必须的,而不是一个可选的工具。

  2、UML的优缺点

  在现实世界,没有东西比公认的标准更加吸引公众的批评。令每一个人都满意确实很难。UML也不例外。尽管到目前为止它是使用最广的建模语言,但是从根本上来说它是一个臃肿的语言。毫无疑问,1.0需要改进,2.0有了提高。但是一些人还是认为2.0还是很臃肿和复杂,还是很难学习。

  3、在实践中使用UML

  该要的说,使用UML你需要一个方法来收集和分析需求,然后用建模工具转换为模型。通常,建模工具有自己的方法,你只需要找到最适合自己的工具就可以了。类似的工具有很多,包括:微软的Viso,IBM的Rational Rose,Sparx Systems的EA。

  4、UML中的图形

  UML2.0包括13中不同的图形,分为两组:行为和结构。结构图定义类,属性,操作和关系。行为图显示系统中对象的协作关系。

  

目的
活动图Activity行为显示一个活动中的操作流程
类图Class结构显示类、接口、及他们的关系
Communication行为显示对象之间的交互
Component结构显示组件和他们之间的依赖关系
Composite Structure结构显示类的内部结构
Deployment结构显示组件如何映射到硬件资源
Interaction Overview行为显示顺序和活动
Object结构显示系统在特定时间的状态
Package结构显示类如何分布在逻辑的相关组中
序列Sequence行为显示对象之间的交互
State machine行为显示在事件发生之后,对象的状态如何变化
Timing行为显示在特定时期中,对象的行为

Use Case

行为显示参与者在系统中进行放入操作

 

UML图之间的等级关系

 

     

   4.1用例图Use Case

  用例图提供了一个图形化的用例描述。一个用例图代表一个或者多个参与者和系统之间的相互作用。用例图显示了参与者要做的事情。一个参与者可以是一个人,也可以是和系统进行交互的任何外部系统。参与者不受系统控制,参与者是在系统之外定义的。

  用例图主要包括:系统,参与者,用例,关系。

  

  上图就是一个用例图,有两个参与者和两个用例。两个参与者分别得用户和数据库,两个用例分别是获取订单,获取商品的详细信息。

  4.2类图

  类图在UML使用较为广泛。类图代表系统的静态结构。系统的静态结构由类和他们之间的关系组成。

  类图包括属性,操作,和关系。关系则包括我们常说的1:1,1:n,0:1,0:n,n:n等

  

 

  上图是一张类图,有三个类:Customer用户,Order订单,OrderDetail订单明细。

  Customer上面有三个属性:CustomerID,CustomerName,Address。CustomerID是public,前面的符号是+;CustomerName是protected,前面的符号是#;Address是private,前面的符号是-。

  连接类之间的线代表他们之间的关系,也就是我们常说的1:1,1:n,0:1,0:n,n:n,0:n其中之一,关系还区分从哪个类的角度来看。图中的Customer和Order的关系,从Customer角度来看,一个Customer可以没有Order,也可以由多个Order,所以他们之间就是0:n的关系;从Order角度看,一个Order肯定属于一个Customer,所以他们之间就是1:1的关系。

  一个Order肯定有一个以上的Detail,一个Detai肯定属于一个Order。

  上面的类图是在PowerDesigner中画的,下面是自动生成的c#代码,当然了,肯定是需要调整的。

 

ExpandedBlockStart.gif 代码
<!--<br/ /> <br/ /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ /> http://www.CodeHighlighter.com/<br/ /> <br/ /> --> //  File:    Customer.cs
//  Author:  zy
//  Created: 2010年8月6日 6:40:04
//  Purpose: Definition of Class Customer

using  System;

public   class  Customer
{
   
private   string  address;
   
   
protected   string  customerName;
   
   
public  Customer GetCustomerByID()
   {
      
throw   new  NotImplementedException();
   }
   
   
public   int  GetCustomerOrders()
   {
      
throw   new  NotImplementedException();
   }
   
   
public   int  customerID;
   
   
public  System.Collections.Generic.List < Order >  order;
   
   
///   <summary>
   
///  Property for collection of Order
   
///   </summary>
   
///   <pdGenerated> Default opposite class collection property </pdGenerated>
    public  System.Collections.Generic.List < Order >  Order
   {
      
get
      {
         
if  (order  ==   null )
            order 
=   new  System.Collections.Generic.List < Order > ();
         
return  order;
      }
      
set
      {
         RemoveAllOrder();
         
if  (value  !=   null )
         {
            
foreach  (Order oOrder  in  value)
               AddOrder(oOrder);
         }
      }
   }
   
   
///   <summary>
   
///  Add a new Order in the collection
   
///   </summary>
   
///   <pdGenerated> Default Add </pdGenerated>
    public   void  AddOrder(Order newOrder)
   {
      
if  (newOrder  ==   null )
         
return ;
      
if  ( this .order  ==   null )
         
this .order  =   new  System.Collections.Generic.List < Order > ();
      
if  ( ! this .order.Contains(newOrder))
         
this .order.Add(newOrder);
   }
   
   
///   <summary>
   
///  Remove an existing Order from the collection
   
///   </summary>
   
///   <pdGenerated> Default Remove </pdGenerated>
    public   void  RemoveOrder(Order oldOrder)
   {
      
if  (oldOrder  ==   null )
         
return ;
      
if  ( this .order  !=   null )
         
if  ( this .order.Contains(oldOrder))
            
this .order.Remove(oldOrder);
   }
   
   
///   <summary>
   
///  Remove all instances of Order from the collection
   
///   </summary>
   
///   <pdGenerated> Default removeAll </pdGenerated>
    public   void  RemoveAllOrder()
   {
      
if  (order  !=   null )
         order.Clear();
   }

}

 

 

  

ExpandedBlockStart.gif 代码
<!--<br/ /> <br/ /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ /> http://www.CodeHighlighter.com/<br/ /> <br/ /> --> //  File:    Order.cs
//  Author:  zy
//  Created: 2010年8月6日 6:43:42
//  Purpose: Definition of Class Order

using  System;

public   class  Order
{
   
private   string  orderSeqNo;
   
private   decimal  orderAmount;
   
private   int  customerID;
   
   
public  System.Collections.Generic.List < OrderDetail >  orderDetail;
   
   
///   <summary>
   
///  Property for collection of OrderDetail
   
///   </summary>
   
///   <pdGenerated> Default opposite class collection property </pdGenerated>
    public  System.Collections.Generic.List < OrderDetail >  OrderDetail
   {
      
get
      {
         
if  (orderDetail  ==   null )
            orderDetail 
=   new  System.Collections.Generic.List < OrderDetail > ();
         
return  orderDetail;
      }
      
set
      {
         RemoveAllOrderDetail();
         
if  (value  !=   null )
         {
            
foreach  (OrderDetail oOrderDetail  in  value)
               AddOrderDetail(oOrderDetail);
         }
      }
   }
   
   
///   <summary>
   
///  Add a new OrderDetail in the collection
   
///   </summary>
   
///   <pdGenerated> Default Add </pdGenerated>
    public   void  AddOrderDetail(OrderDetail newOrderDetail)
   {
      
if  (newOrderDetail  ==   null )
         
return ;
      
if  ( this .orderDetail  ==   null )
         
this .orderDetail  =   new  System.Collections.Generic.List < OrderDetail > ();
      
if  ( ! this .orderDetail.Contains(newOrderDetail))
         
this .orderDetail.Add(newOrderDetail);
   }
   
   
///   <summary>
   
///  Remove an existing OrderDetail from the collection
   
///   </summary>
   
///   <pdGenerated> Default Remove </pdGenerated>
    public   void  RemoveOrderDetail(OrderDetail oldOrderDetail)
   {
      
if  (oldOrderDetail  ==   null )
         
return ;
      
if  ( this .orderDetail  !=   null )
         
if  ( this .orderDetail.Contains(oldOrderDetail))
            
this .orderDetail.Remove(oldOrderDetail);
   }
   
   
///   <summary>
   
///  Remove all instances of OrderDetail from the collection
   
///   </summary>
   
///   <pdGenerated> Default removeAll </pdGenerated>
    public   void  RemoveAllOrderDetail()
   {
      
if  (orderDetail  !=   null )
         orderDetail.Clear();
   }

}

 

结论

 

 

      UML是一种标准的对象建模语言。它独立于任何编程语言。这是一个关键的特性,既是一个优点,也是一个缺点。说它是一个优点,是因为它使得在使用UML进行建模以及表达业务流程的时候,变成一个非常强大的工具。同时可以用它产生一个通用的模型。缺点就是因为优点产生的,独立性越强,也就越是远离了系统运行的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值