`

用微软.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#代码,当然了,肯定是需要调整的。

 

代码
<!--<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();
   }

}

 

 

  

代码
<!--<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进行建模以及表达业务流程的时候,变成一个非常强大的工具。同时可以用它产生一个通用的模型。缺点就是因为优点产生的,独立性越强,也就越是远离了系统运行的代码。

分享到:
评论

相关推荐

    ASP.NET4学习笔记

    8. **部署和调试**:最后,笔记可能涵盖了解决方案的发布和部署过程,以及如何使用Visual Studio进行调试。 以上内容只是根据文件名推测的可能知识点,具体的学习笔记将更详细地阐述每个主题,并可能包含示例代码和...

    .net学习笔记

    - **.NET Framework**:.NET Framework 是 .NET 战略的核心组件之一,它是 .NET 应用程序的基础架构,包含了公共语言运行时 (CLR) 和类库等核心组件。 #### 2. .NET Framework 的组成 - **MSIL (Microsoft ...

    ASP.NET学习笔记

    总之,ASP.NET学习笔记涵盖了从基础到高级的诸多主题,包括但不限于ASP.NET的架构、Web Forms和MVC的区别、控件使用、身份验证与授权、数据库操作、路由和视图解析、ASP.NET Core的特性等。无论你是初学者还是有经验...

    基于C#的ASP.NET Core 3高级编程学习笔记设计源码

    ASP.NET Core 3高级编程学习笔记 - 基于C#开发,包含132个文件,如CS、...该项目为用户提供了一个基于C#的ASP.NET Core 3高级编程学习笔记,通过界面交互和功能模块,为用户提供了一个高效、易用的学习笔记解决方案。

    asp.net2.0网络编程学习笔记源代码

    此压缩包文件包含的是一个关于ASP.NET 2.0网络编程的学习笔记源代码,其中很可能包含了多个实例,帮助学习者通过实践理解ASP.NET 2.0的核心概念和技术。 在ASP.NET 2.0中,主要的知识点包括: 1. **页面生命周期**...

    杨中科.Net培训实况教学视频学习笔记+视频地址1-13季

    学习者会了解到解决方案管理器,它用于组织项目和文件,以及错误列表,帮助开发者快速定位和修复编译错误。 4. **控制台程序编写**: 控制台程序是学习编程的起点,因为它专注于逻辑和算法,而非图形用户界面。...

    .NET Framework实训学习笔记与实例作业

    5. **XML和Web服务**:理解XML的结构和解析,以及如何通过SOAP协议使用.NET Framework创建和消费Web服务。 6. **安全性**:包括代码访问安全性和基于角色的安全性,确保应用程序在执行时遵循预定义的安全策略。 7....

    asp.net学习笔记

    ### ASP.NET 学习笔记 #### 一、ASP.NET 概述 ASP.NET 是一个用于构建 Web 应用程序的框架,由微软公司开发并维护。它基于公共语言运行库 (CLR) 和 .NET Framework,提供了强大的功能和高度灵活性,支持多种编程...

    ASP.NET学习笔记(我们一起学习ASP.NET)

    本学习笔记主要记录了作者在学习ASP.NET过程中的关键知识点与实践心得,旨在帮助初学者更好地理解和掌握ASP.NET的基本概念和技术要点。 ### 1. 关于页面关闭与PostBack - **页面关闭**: 在ASP.NET中,如果需要关闭...

    asp.net控件笔记 asp.net控件笔记

    ASP.NET控件是微软.NET Framework框架中用于构建Web应用程序的核心元素。这些控件提供了一种简单的方法来构建交互式、动态的网页。本笔记将深入探讨ASP.NET控件的各个方面,帮助开发者更好地理解和使用这些工具。 ...

    ASP.NET学习大总结+笔记

    二、ASP.NET架构 ASP.NET基于HTTP协议,通过HTTP模块和HTTP处理程序来处理Web请求。IIS(Internet Information Services)作为Web服务器,负责接收和转发用户请求,而ASP.NET则处理这些请求并生成响应。 三、ASP...

    .NET全程学习笔记

    根据提供的文件信息,我们可以归纳出一系列与.NET相关的学习知识点,这些知识点主要涵盖了.NET技术栈的基础到进阶内容,包括但不限于C#语言、多线程编程、网络编程、数据库设计及管理、WPF开发等。 ### .NET 全程...

    【ASP.NET编程知识】Asp.net回调技术Callback学习笔记.docx

    ASP.NET回调技术Callback学习笔记 ASP.NET回调技术Callback是ASP.NET提供的一种机制,允许客户端脚本和服务器端代码之间进行异步通信。通过使用回调机制,可以实现实时更新页面内容、验证用户输入、获取服务器端...

    VB.NET 学习笔记

    在VB.NET 2005中,学习笔记涵盖了一些基本概念,包括数据类型、变量与常量、数组、枚举类型、结构类型、语法规则以及流程控制。 1. 数据类型: - VB.NET 提供了多种数据类型,用于存储不同类型的值。数值型包括...

    我的asp.net学习笔记

    本学习笔记将深入探讨ASP.NET的核心概念、主要特性和实际应用场景。 首先,ASP.NET的核心是页生命周期模型,它定义了从请求到响应的整个过程。在每个页面的生命周期中,包括初始化、加载、验证、呈现和卸载等阶段,...

    VS.NET学习笔记

    【VS.NET学习笔记】 Visual Studio .NET(简称VS.NET)是微软公司开发的一款强大的集成开发环境,用于构建基于.NET Framework的应用程序。这个平台为开发者提供了丰富的工具和功能,支持多种编程语言,如C#、VB.NET...

    系统架构师学习笔记

    系统架构师的学习笔记,通常是资深架构师或者对架构有深入研究的专业人士根据个人经验和学习总结所撰写的学习资料,它可以帮助开发工程师向系统架构师的职业发展道路上迈进。 从提供的内容来看,系统架构师的学习...

Global site tag (gtag.js) - Google Analytics