- 浏览: 496583 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1028)
- [发布至博客园首页] (826)
- [随笔分类]个人生活随笔 (14)
- [网站分类]首页候选区 (26)
- [网站分类]SharePoint (15)
- [网站分类]其他技术区 (6)
- [随笔分类]批处理技巧 (6)
- [随笔分类].net 2.0 (3)
- [随笔分类]SharePoint2007(MOSS2007) (0)
- [网站分类].NET新手区 (6)
- [网站分类]ASP.NET (6)
- [网站分类]架构设计 (18)
- [网站分类]程序人生 (2)
- [网站分类]SQL Server (2)
- WCF (3)
- 编程技巧 (2)
- 模式架构 (2)
- 分析设计 (4)
- 生活随笔 (0)
- 软件工程 (1)
- Android实例 (2)
最新评论
-
zilong0536:
楼主您好:
请问发表博文支持图片的功能怎么实现啊,一直没有思路 ...
新浪微博开放平台开发-android客户端(3) -
nicegege:
小弟 学习了
帮助中国移动设计10086的排队小模块 -
zl7824516:
用什么技术没说啊
通告(公告),消息(站内短信),提醒的设计:通告 -
virusswb:
源码下载: SinaWeibo2 源码下载之后,将后缀改为ra ...
新浪微博开放平台开发-android客户端(3) -
Jimmyxu0311:
找不到源码下载
新浪微博开放平台开发-android客户端(3)
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#代码,当然了,肯定是需要调整的。
// 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();
}
}
// 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进行建模以及表达业务流程的时候,变成一个非常强大的工具。同时可以用它产生一个通用的模型。缺点就是因为优点产生的,独立性越强,也就越是远离了系统运行的代码。
发表评论
-
NET 应用架构指导 V2 学习笔记(十六) 服务层设计指导
2010-06-04 00:13 548如果你的应用是通 ... -
NET 应用架构指导 V2 学习笔记(十七) 组件设计指导
2010-06-05 00:48 673组件提供了一种将 ... -
NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
2010-06-05 21:09 530本章讲述的是你在设计用户界面组件和表现层逻辑组件的时候应该 ... -
NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
2010-06-06 06:15 5965 决定数据绑定的 ... -
NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
2010-06-07 06:58 617前言 业务组件 ... -
微软企业库5.0学习笔记(四十二)异常处理模块
2010-06-14 00:04 840企业库的异常处理 ... -
关于程序员在30岁、35岁之后怎么办的新思考
2010-06-14 10:40 626首先给大家问个好 ... -
NET 应用架构指导 V2 学习笔记(二十四) 跨层关注问题
2010-06-17 20:00 596概况 大部分的 ... -
微软企业库5.0学习笔记(四十三)数据验证模块
2010-06-19 08:07 999概况 任何接受用户或者是其他系统输入的应用,一定要确保 ... -
关于项目进度慢的思考----如何提高整体开发效率
2010-06-21 23:42 807我们都是软件行业 ... -
微软企业库5.0学习笔记(四十四)实战数据验证模块
2010-06-23 19:22 8431 在业务对象上添加验证 添加对程序集【Microso ... -
微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
2010-06-24 19:41 9721、添加自定义的提示信息 验证失败的提示信息可以自定义 ... -
面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
2010-06-29 15:45 779引言 面向对象类设计,或者说是面向对象设计,有五大原则 ... -
《深入浅出设计模式-中文版》读书笔记 开篇乱弹(一)
2010-07-01 06:42 653oreilly的《Head.First ... -
《深入浅出设计模式-中文版》读书笔记-继承与组合(三)
2010-07-03 16:53 607经过上一次的改造 ... -
《深入浅出设计模式-中文版》读书笔记-观察者模式(四)
2010-07-06 06:34 636今天要接触的是观 ... -
利用attribute实现简单的ORM
2010-07-09 15:27 684我不知道NH的ORM具 ... -
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
2010-07-14 13:02 807题外话 最近已经在努力学习了,学习基本功,学习设计模式 ... -
《深入浅出设计模式-中文版》读书笔记-工厂模式(五)
2010-07-16 12:46 700今天给大家带来的是:工厂模式。 我们在代码中创建一个对 ... -
Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(一)
2010-07-18 21:47 673题外话 又是一本Head.First系列的书,这个系列 ...
相关推荐
8. **部署和调试**:最后,笔记可能涵盖了解决方案的发布和部署过程,以及如何使用Visual Studio进行调试。 以上内容只是根据文件名推测的可能知识点,具体的学习笔记将更详细地阐述每个主题,并可能包含示例代码和...
- **.NET Framework**:.NET Framework 是 .NET 战略的核心组件之一,它是 .NET 应用程序的基础架构,包含了公共语言运行时 (CLR) 和类库等核心组件。 #### 2. .NET Framework 的组成 - **MSIL (Microsoft ...
总之,ASP.NET学习笔记涵盖了从基础到高级的诸多主题,包括但不限于ASP.NET的架构、Web Forms和MVC的区别、控件使用、身份验证与授权、数据库操作、路由和视图解析、ASP.NET Core的特性等。无论你是初学者还是有经验...
ASP.NET Core 3高级编程学习笔记 - 基于C#开发,包含132个文件,如CS、...该项目为用户提供了一个基于C#的ASP.NET Core 3高级编程学习笔记,通过界面交互和功能模块,为用户提供了一个高效、易用的学习笔记解决方案。
此压缩包文件包含的是一个关于ASP.NET 2.0网络编程的学习笔记源代码,其中很可能包含了多个实例,帮助学习者通过实践理解ASP.NET 2.0的核心概念和技术。 在ASP.NET 2.0中,主要的知识点包括: 1. **页面生命周期**...
学习者会了解到解决方案管理器,它用于组织项目和文件,以及错误列表,帮助开发者快速定位和修复编译错误。 4. **控制台程序编写**: 控制台程序是学习编程的起点,因为它专注于逻辑和算法,而非图形用户界面。...
5. **XML和Web服务**:理解XML的结构和解析,以及如何通过SOAP协议使用.NET Framework创建和消费Web服务。 6. **安全性**:包括代码访问安全性和基于角色的安全性,确保应用程序在执行时遵循预定义的安全策略。 7....
### ASP.NET 学习笔记 #### 一、ASP.NET 概述 ASP.NET 是一个用于构建 Web 应用程序的框架,由微软公司开发并维护。它基于公共语言运行库 (CLR) 和 .NET Framework,提供了强大的功能和高度灵活性,支持多种编程...
本学习笔记主要记录了作者在学习ASP.NET过程中的关键知识点与实践心得,旨在帮助初学者更好地理解和掌握ASP.NET的基本概念和技术要点。 ### 1. 关于页面关闭与PostBack - **页面关闭**: 在ASP.NET中,如果需要关闭...
ASP.NET控件是微软.NET Framework框架中用于构建Web应用程序的核心元素。这些控件提供了一种简单的方法来构建交互式、动态的网页。本笔记将深入探讨ASP.NET控件的各个方面,帮助开发者更好地理解和使用这些工具。 ...
二、ASP.NET架构 ASP.NET基于HTTP协议,通过HTTP模块和HTTP处理程序来处理Web请求。IIS(Internet Information Services)作为Web服务器,负责接收和转发用户请求,而ASP.NET则处理这些请求并生成响应。 三、ASP...
根据提供的文件信息,我们可以归纳出一系列与.NET相关的学习知识点,这些知识点主要涵盖了.NET技术栈的基础到进阶内容,包括但不限于C#语言、多线程编程、网络编程、数据库设计及管理、WPF开发等。 ### .NET 全程...
ASP.NET回调技术Callback学习笔记 ASP.NET回调技术Callback是ASP.NET提供的一种机制,允许客户端脚本和服务器端代码之间进行异步通信。通过使用回调机制,可以实现实时更新页面内容、验证用户输入、获取服务器端...
在VB.NET 2005中,学习笔记涵盖了一些基本概念,包括数据类型、变量与常量、数组、枚举类型、结构类型、语法规则以及流程控制。 1. 数据类型: - VB.NET 提供了多种数据类型,用于存储不同类型的值。数值型包括...
本学习笔记将深入探讨ASP.NET的核心概念、主要特性和实际应用场景。 首先,ASP.NET的核心是页生命周期模型,它定义了从请求到响应的整个过程。在每个页面的生命周期中,包括初始化、加载、验证、呈现和卸载等阶段,...
【VS.NET学习笔记】 Visual Studio .NET(简称VS.NET)是微软公司开发的一款强大的集成开发环境,用于构建基于.NET Framework的应用程序。这个平台为开发者提供了丰富的工具和功能,支持多种编程语言,如C#、VB.NET...
系统架构师的学习笔记,通常是资深架构师或者对架构有深入研究的专业人士根据个人经验和学习总结所撰写的学习资料,它可以帮助开发工程师向系统架构师的职业发展道路上迈进。 从提供的内容来看,系统架构师的学习...