PowerDesigner(八)-面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)

  面向对象模型

  面向对象模型是利用UML(统一建模语言)的图形来描述系统结构的模型,它从不同角度实现系统的工作状态。这些图形有助于用户,管理人员,系统分析人员,开发人员,测试人员和其他人员之间进行信息交流。这里主要介绍用例图,序列图和类图。

  1.面向对象模型OOM

    面向对象模型是利用UML的图形描述系统结构的模型,可以利用PowerDesigner的面向对象模型进行创建。PowerDesigner支持UML的下列图形。

  • 用例图(User Case Diagram):通常用来定义系统的高层次草图,它从用户角度描述了应用的系统功能,指出了各个功能的外部操作者。
  • 序列图(Sequence Diagram):描述系统如何实际完成在User Case图中定义的功能。可以画出对象(类的实例)之间交互时产生的时序关系。
  • 类图(Class Diagram):描述类与类之间的静态关系。其中包括一系列的包,类,接口和它们之间的关系。类图是定义其他图的基础。

  2.创建面向对象模型

    (1)选择File-New Model命令或者单击工具栏中的New Model图标,弹出New Model窗口。

    (2)在左侧是Model type栏中选择Object-Oriented Model(面向对象模型)选项,在右侧输入模型名称,语言,如图8-1所示。

图8-1

    (3)单击“确定”按钮,进入OOM设计工作区。在该工作区中可以定义OOM的属性和操作,也可以设计各种UML的图形。

    (4)选择Model-Model Properties命令,显示如图8-2所示OOM的Model Properties窗口。

图8-2

    (5)定义完毕后单击“确定”按钮。然后选择File-Save As命令,以PubInfoSys.OOM这个名称将所定义的模型存盘。

    (6)设置模型的选择。选择Tools-Model Options命令,打开Model Options(模型选项)窗口。如图8-3所示。

图8-3

    (7)单击Set As Default按钮,设置为默认选项,然后单击OK按钮。

  3.设计用例图

   3.1 用例图用于系统需求分析阶段,进行系统需求和功能设计,它包含执行者和用例两个要素。执行者指用户在系统中的角色,用例是用户与计算机的一次交互。用例图主要用来描述每个用例将有哪些执行者进行参与。

  • 定义用例:用例是外部可见的一个系统功能单元,这些功能由系统单元提供,通过一系列单元与一个或多个参与者之间交换的消息表达。 
  • 定义角色:角色描述了与系统相互作用的一组用户,最明显的角色是系统中的人,但也可能是系统本身。
  • 定义关联:用例除了与其参与者发生关联外,还可以参与系统中的多个关系,允许定义的关联有关联,扩展,用例泛化,包括。

  3.2定义用例图

    定义用例图如下:

    (1)单击“用例”图标定义4个用例,如图8-4所示。

图8-4

    (2)选中第一个用例双击,打开Use Case Properties(用例属性)窗口,将Name属性修改为“查找”,将Code属性修改为Search,如图8-5所示。

图8-5

    (3)利用同样的方法,修改其他3个用例属性如图8-6所示。

图8-6

    (4)单击“执行者”图标定义3个执行者,如图8-7所示。

图8-7

    (5)选中第一个执行者并双击,打开Actor Properties窗口,将Name属性修改为“顾客”,将Code属性修改为Buyer,如图8-8所示。

图8-8

    (6)利用同样的方法,修改其他两个执行者的属性。

    (7)定义执行者和用例之间的关系。单击“关系”图标,再单击执行者“顾客”并拖动鼠标至用例“查找”,释放鼠标,这时在执行者和用例之间建立了关系。双击该关系,打开Association Properties窗口,将Name属性修改为“查询商品”,将Code属性修改为SearchProduct。

    (8)按照步骤(7)的方法,在其他执行者和用例之间建立关系。

    (9)定义完成后的用例图如图8-9所示。

图8-9

  4设计序列图

    4.1序列图(Sequence Diagram)是用来描述系统如何实现完成在Use Case图中定义的功能。可以画出对象之间的交互时产生的时序关系。它一方面描述了一次交互,交互中涉及类图中的类,另一方面细化了用例的描述。

    序列图有角色(Actor),对象(Object),消息(Message)和激活期(Activation)几个要素如果8-10所示。

图8-10

      消息类型有:

  • Message:消息
  • Slef Message 递归消息
  • Call Message带有激活期的消息
  • Self Call Message带有激活期的递归消息
  • Return Message返回消息
  • Self Return Message递归返回消息

  4.2创建序列图

    (1)选择File-New Model命令,打开New Model窗口。在窗口左侧的Mode type栏选择Object-Oriented Model选项,在右侧的First diagram下拉列表框中选择Sequence Diagram选项,在Object language下拉框中选择Java选项,如图8-11所示。

图8-11


    (2)选择完毕后单击“确定”按钮,进入PowerDesigner设计工作区。

    (3)单击Palette工具栏的Object图标,在右边空白工作区单击鼠标,出现对象符号如图8-12所示。

图8-12

    (4)在设计区空白区域右击,鼠标指针变为箭头形状,双击对象符号,弹出Actor Properties窗口,在Name文本框中输入"呼叫方",在Code文本框中输入“Caller”,然后单击“确定”按钮。

    (5)重复步骤(3)(4),添加其他两个对象,Name分别为“交换机”和“被叫方”,Code分别为Exchange和Receiver。

    (6)单击Palette工具栏中的Message图标,在“呼叫方”对象下方的虚线处单击,拖动鼠标至“交换机”对象下方的虚线释放鼠标,即可增加一个消息。

    (7)在设计区空白区域右击,鼠标指针变成箭头形状,双击对象符号,弹出“消息属性”窗口,在Name文本框中输入“拿起话筒”,在Code文本框中输入“Lift Reciever”,然后单击“确定”按钮。

    (8)重复(6)(7),添加其他消息。

    (9)最终的序列图如图8-13所示。

图8-13

    (10)选择File-Save命令,保存新建的面向对象模型

  5设计类图

  类图是用一种抽象的方法来描述对象及对象之间的关系,并不能描述对象的所有细节。

    5.1创建Class(类)

    (1)选择File-New Model命令,打开New Model窗口。在窗口左侧的Mode type栏选择Object-Oriented Model选项,在右侧的First diagram下拉列表框中选择Class Diagram选项,在Object language下拉框中选择Java选项,如图8-14所示。

图8-14

    (2)在类图工作区中单击Palette工具栏中的Class图标,创建一个类,双击类图的图形符号,打开Class Properties窗口。

    (3)选择Detail选项卡,可以定义类的更多属性。

    (4)选择Attributes选项卡,可以为类增加属性。单击Add a Row图标,增加属性,也可以单击Add Attributes图标打开Selection窗口列表模型中其他类的属性,选择需要的属性,然后单击“OK”按钮即可。

    (5)选择Operations选项卡,单击Add Operation图标,打开Selection窗口,从中可以选择该模型中其他类包含的操作。选择完毕后,单击OK按钮,所选的操作即可增加到当前类上。

    (6)选择Inner Classifies选项卡,可以为该类定义内部类。内部类是PowerDesigner的一个分类器,在UML中分类器是一个包含有属性和操作等的模型元素。定义完毕后可以通过Preview选项卡观察当前类或接口所包含的内部类代码,如图8-15所示。


图8-15

    (7)除了以上属性外,还可以定义Associations,Identifies等属性。属性定义完毕后创建的内容如图8-16所示。

图8-16

  5.2创建联系

  在类图中,联系有关联,依赖,泛化和实现联系。

  6.生成Java的源代码

  如图8-17所示类图,生成Java源代码。

图8-17

  (1)在类图中选择Language-Generate Java Code命令,打开Generation窗口,显示模型中包含的类。

  (2)在Selection选项卡的Classes选项卡中选择类,在Directory栏中输入Java源代码的目标路径。

  (3)在Options选项卡中定义Java生成选项。

  (4)在Tasks选项卡中定义Java生成任务选项,如图8-18所示。

图8-18

  (5)单击“确定”按钮,开始生成Java源文件,生成完成显示Generated Files窗口。

  (6)选择一个源文件,单击Edit按钮,将在文本编辑器中显示该文件的内容。如图8-19所示。


图8-19

  7.根据Java代码生成类图

   (1)选择File-Reverse Engineer-Object Language弹出如图8-20所示。

  

图8-20

   (2)在Object language栏选择Java,单击确定进入如下界面,如图8-21所示。

  

图8-21

   (3)点击Add,添加Java文件,再单击确定即可生成相应的Java类图(在Reverse engineer栏中还可以选择Java字节码文件或文件目录),如图8-23所示。


图8-23

  


  • 34
    点赞
  • 140
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
由《Ext JS码分析与开发实例宝典》作者:彭仁夔团队开发而成 90%以上代码可以生成验证、生成三层代码、生成完善的权限系统、生成数据库等功能 功能之强大用了就知道! 两年前,我负责指导Java方向实训,在最后评审准备过程,.Net组负责人要求Java和.Net的归结一起统一评审,Java指导老师们的第一反应是Java和.Net开始怎么能相提并论? 为什么不能并论?是因为Java开发阳春白雪?在我们的潜意识中,Java开发就是让程序员(学生)一行一行地编写代码,编写HTML、CSS等,而.Net开发只要把控件拖到页面上即可,Java开发的效率一定比.Net低很多很多。 那么能不能提高Java的开发效率呢?作者经过分析并总结思考,发现业务系统有一定的共性所有操作,即增删改查,既然有共性,那么能不能抽象出来? 可以思考一下,通过继承、组件化等重用设计方式是可以抽象代码的共性,但是不同表(实体)增删改查的内容是不同的,通过泛型也很难抽象出来的。如对于A表的查询和对于B表的查询都需要使用到SQL语句,怎么去剥离出来? 此时,我们就需要采用另外一种方式,把它们抽象出来更高层级的模板,然后把不同数据传入该模板的占位符,这样就变成不同的代码,这种方式就是代码生成技术。 在软件的设计过程中,代码生成及重用设计仿若陌路人,互相排斥。重用设计中很多的共性是不能抽象出来的,而一味追求生成,造成大量的雷同代码,是重用设计人员或真正开发人员最不能容忍的事件。 如果把它们两个结合起来,那就是完全不同的效果,首先通过重用设计抽象其能抽象的代码,其不能抽象的共性通过生成技术生成,开发效率就会成倍增加。以前我们都是在X或y轴上分别进行,其最大的点也不过是线,如果两者结合起来,其变成一个平面,把我们的重用从点提高到面。如下图所示: 面。如下图所示, Y重用 现在的软件开发不再仅仅是编写代码,重用等,而是需求调研、架构设计、数据库、编码开发、测试部署等过程的有机组合,组合的好与坏,其结果相差万里,这就是著名的米格-25效应。 在开发过程怎么去把这些最大效应化呢?回想一下我们的开发流程: 需求开发,形成文档 采用powerDesigner等进行实体及实体关系的设计 通过Pdm创建数据库 在开发工具中创建搭建项目 通过相关的工具(hibernate tools,myeclipse)生成实体 设计及编写Dao 设计及编写Service 设计及编写Action及相关页面 这样的线性流程有着极大的问题,首先架构师或数据库专家不是圣人,设计数据库,Dao,Service接口之后,就不需要修改,在编码过程中,会进行大量的修改,特别是那种那只懂数据库的专家在设计之后,开发人员怨声载道。另外设计的dao,service接口及实现很多都用不着,用得着的根本就没有设计。因为需要的dao,service很多都是由页面根据取数操作的不同而进行不同的编写。 开发过程的修改,就会带来原前置流程步骤的修改,所以软件开发完成之后,不会有很多公司其PDM与数据库、实体是一一对应的。而有一些是必须要修改,如在实体中修改属性,一定要到数据库中修改,到dao,service,action,page一一进行修改,如果修改的是外键属性,修改的代码更为复杂。开发人员最痛苦的事情就无穷无尽的修改,领导简单的一句话:不就修改一个属性吗?你可能就要改一个下午。 能不能有这样的方法呢?修改一处其它处跟着改,这时就需要把原来的线性流程乾变换,改成为无前置的试,即卫星城的方式,中心城就是模型,可以称为Domain、域、实体,在实体的基础是加上一些设计,如下图所示: 现在只要中间模型发生变化,其变化会通过其背后的关系推向卫星城,让其发生相对应的变化,就像蝴蝶效应一样。 此时,我们可以站在一个更高的层面去思考开发,开发不仅仅是代码,开发不仅仅是处理代码之间关系,还需要处理与数据存储的关系,与测试部署关系等。 这些关系我们需不需要去体现出来,肯定需要。我们可以把这些关系看作是软件中区别于业务逻辑属性的特殊属性,这种属性主要包括: 与数据存储之间的关系 代码结构组织的方面(如采用三层) 与设计及设计文档的关系 与开发模型(如瀑布)的关系 与需求及需求变更的关系 与测试部署之间的关系 除了这些特殊关系,代码中还有实体之间的关系,业务关系等。 我们可以发现软件不单纯是一个对象,而且是一组关系。它们相互关联,相互牵制。 续而推之,我们编写的类也是关系,是处理一类事物的抽象关系。泛型是处理类的抽象关系。所有东西都是关系体。 那么能不能在现有的面向对象的理论上推进一步呢?世界不是一个个单独的对象,而是不同的对象相互发生关系的有机结构体(可以称为关系体),只有这样,世界才多姿多彩。就算是一个个对象,它也不是静止的,它的内部也是由不同分子原子发生作用的结果,可以讲对象也是一个关系体。 软件是用来对世界进行描述的一种方式,最初我们采用过程的编程,后来与世界的描述不相符,所以就出现了面向对象,而现在面向对象并不能很好地解析如抽象类,Service类等。要解释这些东西,最好的方式是通过关系来表达。也就是面向对象的编程方式可以更进一步地改进为面向关系编程方式。 面向关系编程需要首先需要找到软件模型与需求、架构,数据,测试,部署之间的变化关系。这些关系有业务层面的,也有开发层面的。这种关系可以抽离出来,形成模板。 接下来把业务模型+关系模板通过工具生产出来,就成为一个有血有肉的软件。Mgicode(码奇)生成器就从这里出发,帮我们抽象软件背后的关系,提高开发效率。 所以通过Mgicode生成器,你可以获得如下好处: 根据设计(pdm,数据库等)快速生成可运行的项目。 修改实体之后,会帮助你找到所有需要修改的东西,并且给出最佳的修改方案。 统一代码编程风格(如同一项目中选择几种不同日历控制) 把自己的项目模板化(关系化),方便之后使用 把模板化的项目放到Mgicode市场获得一些外快。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值