从UML建模语言到C#代码

博客涉及C#语言及UML相关内容,虽未给出具体内容,但推测围绕二者在信息技术领域的应用等方面展开。C#是常用后端开发语言,UML用于软件系统建模。
从UML建模语言到C#代码

[翻译] vczhgame 2004-02-01
<短评>
    本站最年青的一篇文章发表了!陈梓瀚(vczhgame)是团队年龄最小的成员,今年刚刚高中二年级侨炊杂蜗房⒓际鹾兔嫦蚨韵蠹际跤凶庞判愕牧煳蚝褪导U馐撬尤胪哦雍蟮牡谝黄胛母澹窈蟾嵩贑STC上贡献给大家更多关于面向对象技术和游戏开发的文章。希望大家给与特别的鼓励与支持!在这里团队成员祝愿vczhgame同学学习进步,考上理想的大学。
                                        计算机科学技术网全体成员贺


前言


    在这篇文章里,我会告诉大家把UML转变为C#代码的一些方法。
    首先,我将会讲述一个与UML有关的案例。现在,我们把重点放在如何把UML转变为C#代码,而不讲述制作UML图表的方法。这就是为什么大家会在一开始就看到处与分析设计阶段的UML图表。


案例描述


    有个公司想改善他们的信息系统。第一步是分析职工的培训程序,将一些任务自动化。
  1. 当一个职工向培训官申请培训的时候,一个培训程序就开始了。培训官将决定是否同意这位职工的培训申请。
  2. 如果培训官同意了职工的培训申请,培训官将会在目前可以负责的培训项目里寻找合适的培训项目。一旦职工决定了她所要接受的培训项目,培训官将会向教员登记。
  3. 如果职工中途停止了培训,它必须在最短的时间里通知培训官以便注销登记。
  4. 培训结束后,职工必须把一张自评和一张出席登记表一起提交给培训官。
  5. 培训官在把表单们提交给汇记服务前先进行检查。

    注:UML in practice, P.Roques, Wiley, 2004  提供案例


主要方法


    我们将使用下面的UML图表来进行讲解 :

类图
    类图用于定义代码框架, 以可以说成是整个类的声明。
    在一开始,我们可以近似的说:
  • 一个UML类图将成为一个C#类
  • UML类图的属性将成为C#类的实例的变量
  • 类图的操作方法将成为C#类的方法

    大家会注意到navigable角色被实现为实例变量,就像属性一样,但它是却不是一个简单类型,而是一个用户自定义类型。这暗示了一个类的创建。

    我将举一个简单的图示说明这些方法。
图A 一个订单类的框架代码



交互图
    交互图说明了类的方法的运作过程,特别是相互关联一些方法的调用次序。
    接下来的这个图示说明了消息序号与C#方法实现代码的关系。
图B enregistrerEmprunteur(register borrower)方法的主体



    在这些例子之后,我将会给出一些具体的真实的例子。

从UML类图到C#框架代码


    大家来看图C,注意一下“培训申请”类
图C 培训申请类的内部关系



    前面讲过的方法已经住足够把这张图表转换成C#框架代码。我们唯一要紧记得是我们必须添加一条导入语句来保证能够与其它包中的类建立联系(不论是用户自定义的包还是标准基类库)。
    等价的C#框架代码在图D上。
图 D : 培训申请类的C#框架代码



    如果我们要为一个属性添加读写操作,根据封装类的方法,我们自然要为类添加一个属性,就像下面的代码:
public int propDateValidite {
    get { return DateValidite; }//这是propDateValidite属性的“读”操作
    set { DateValidite = value; }//这是propDateValidite属性的“写”操作
}

    现在让我们看看图E,注意里面的“培训”类。
图 E : 类的构成与它们之间的关系



    以前面的例子相比较, 又产生了一些附加的问题:
    • 元素之间关系的概括
    • 多重性:Theme(Topic)的<<1..*>>和Session的<<0..*>> {ordered}
    前面的方法已经不适用了。我们已经看到如何用<<1>>(或<<0..1>>)的多重性来实现navigable联系,然而,如何将联系转换为<<*>>的多重性呢?
    有个相当简单的原则:通过用一个具有特定属性的类型(如对象引用集合)来取代对单个对象的引用来实现<<*>>多重性。
    正确地选择.NET framework提供的集合类型是困难的。虽然用C#创建manager arrays很容易,但这对于一个正确地解决方案来说是不必要的。一般来说,人们更喜欢使用像C#的ArrayList或HashTable这样的集合类型。
    • 如果你想记住对象之间的次序,而且想用整数索引取得对象的话,就选择ArrayList;
    • 如果你想用任意的关键字取得对象的话,就是用HashTable或SortedList。
    这里有一些应付各种不同需要的解决方案:
图 F : UML联系到C#的转换


    对于Formation类,我们将会使用:
    • 一个ArrayList来实现对Session的组织
    • 一个HashTable来实现对Theme的组织而不是用一个简单的数组。我们使用大纲的名称作为限定词

    通过以上的说明,我们可以写出这样的代码:
图 G : Formation类的C#框架代码



结束语


    把UML图表转变成代码是一件必须规范的敏感的工作。所以,对于一些语言来说,转换得到的代码与UML图表之间可能会有一些冲突。代码发生工具能自动进行UML与代码的转换工作,但它同时也会向对象编辑器提供一些不同的选择(例如ArrayList与HashTable)。
基于UML 的资料室管理系统 用例 时序图 状态图 测试分析 毕业设计论文 摘要 I Abstract II 目录 III 第1章 引言 1 第2章 系统需求分析 2 1.1项目描述 2 1.1.1 开发背景 2 1.1.2 开发目的 2 1.1.3 业务范围 2 1.1.4 参考文档 3 1.1.5 术语说明 3 1.2约束及假定 3 1.2.1软件运行环境及技术约束 3 1.2.2 交付及部署约束 3 1.3功能性需求 4 1.3.1系统角色 4 1.3.2需求描述 6 1.4.非功能性需求 12 1.4.1性能需求 12 1.4.2可扩展性 12 1.4.3可用性 12 1.4.4安全性 12 1.4.5易用性 13 1.4.6可维护性 13 1.5.用例规约描述 13 1.5.1 目的 13 1.5.2 定义 13 1.5.3 用例描述 14 第3章 系统设计实现 51 3.1 系统分析设计 51 3.1.1架构设计 51 3.1.2领域模型 52 3.1.3时序图 55 3.1.4状态图 71 3.1.4设计类 72 3.2 数据库设计 76 3.2.1书籍类型表 77 3.2.2书籍基本表 77 3.2.3书籍明细表 78 3.2.4管理员信息表 78 3.2.5读者信息表 78 3.2.6预借信息表 79 3.2.7借阅信息 79 3.2.8罚款信息表 80 3.3 用户界面设计 80 3.3.1系统主界面 80 3.3.2查询统计界面 81 3.3.3库存统计界面 82 3.3.4类型统计界面 82 3.3.5借阅统计界面 83 3.3.6推荐购书统计界面 83 3.3.7季度报表统计界面 84 3.4 系统功能实现 84 3.4.1开发环境配置 84 3.4.2系统功能实现 84 3.4.3系统测试 99 第4章 系统运行测试 102 4.1系统运行环境 102 4.1.1 系统硬件运行环境 102 4.1.2 系统软件运行环境 102 4.2 系统运行调试 102 4.3 系统操作步骤 103 第5章 结 论 104 参考文献 105 致 谢 106 附 录 107 附录A: 主要源程序 107 附录B: 软件使用说明书 108
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值