从实体关系图生成类图
- 格式:pdf
- 大小:817.45 KB
- 文档页数:8
继承、实现、依赖、关联、聚合、组合的联系与区别分别介绍这几种关系:继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java 中此类关系通过关键字extends明确标识,在设计时一般没有争议性;实现指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;依赖可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;关联他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;聚合聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;组合组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;聚合跟组合其实都属于关联只不过它们是两种特殊的关联因为本是同根生所以它们之间难免会有相似之处下面让我们一起来看一下它们之间有何不同聚合与组合的概念相信不用我在此赘述大家就已经了解了下面直接上例子程老师的《大话》里举大那个大雁的例子很贴切在此我就借用一下大雁喜欢热闹害怕孤独所以它们一直过着群居的生活这样就有了雁群每一只大雁都有自己的雁群每个雁群都有好多大雁大雁与雁群的这种关系就可以称之为聚合另外每只大雁都有两只翅膀大雁与雁翅的关系就叫做组合有此可见聚合的关系明显没有组合紧密大雁不会因为它们的群主将雁群解散而无法生存而雁翅就无法脱离大雁而单独生存——组合关系的类具有相同的生命周期聚合关系图:组合关系图:从从代码上看这两种关系的区别在于:构造函数不同雁群类:[csharp]view plaincopy1.public class GooseGroup2. {3.public Goose goose;4.5.6.public GooseGroup(Goose goose)7. {8.this.goose = goose;9. }10. }[csharp]view plaincopy1.public class GooseGroup2. {3.public Goose goose;4.5.6.public GooseGroup(Goose goose)7. {8.this.goose = goose;9. }10. }大雁类:[csharp]view plaincopy1.public class Goose2.{3.public Wings wings;4.5.public Goose()6. {7. wings=new Wings();8. }9.}[csharp]view plaincopy1.public class Goose2.{3.public Wings wings;4.5.public Goose()6. {7. wings=new Wings();8. }9.}聚合关系的类里含有另一个类作为参数雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数把值传进来大雁类(Goose)可以脱离雁群类而独立存在组合关系的类里含有另一个类的实例化大雁类(Goose)在实例化之前一定要先实例化翅膀类(Wings)两个类紧密耦合在一起它们有相同的生命周期翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在信息的封装性不同在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。
复习题一、判断题(每题2分,共30分)1.螺旋模型是在瀑布模型和增量模型的基础上增加了风险分析活动。
(对)2.数据字典是对数据流图中的数据流,加工、数据存储、数据的源和终点进行详细定义.(错)3。
JAVA语言编译器是一个CASE工具.(对)。
4.软件是指用程序设计语言(如PASCAL ,C,VISUAL BASIC 等)编写的程序,软件开发实际上就是编写程序代码。
(错)5。
软件模块之间的耦合性越弱越好.(对)6。
数据库设计说明书是一个软件配置项(对)7。
在面向对象的软件开发方法中,每个类都存在其相应的对象,类是对象的实例,对象是生成类的模板。
(错)8.过程描述语言可以用于描述软件的系统结构。
(错)9.如果通过软件测试没有发现错误,则说明软件是正确的。
(错)10。
快速原型模型可以有效地适应用户需求的动态变化。
(对)11.模块化,信息隐藏,抽象和逐步求精的软件设计原则有助于得到高内聚,低耦合度的软件产品。
(对)12.集成测试主要由用户来完成。
(错)13.确认测试计划应该在可行性研究阶段制定(错)14.白盒测试无需考虑模块内部的执行过程和程序结构,只要了解模块的功能即可。
(错)15.软件概要设计包括软件系统结构设计以及数据结构和数据库设计。
(对)16。
在可行性研究中最难决断和最关键的问题是经济可行性。
(╳)17。
耦合是指一个模块内各个元素彼此结合的紧密程度.(╳)18. 一笔交易、一个动作、甚至操作人员按一个按钮都可以看做是一次事物。
( √)19。
概要设计阶段完成的主要文档是概要设计说明书。
(√)20.过大的模块可能是由于分解不充分造成的,即使降低模块独立性也必须继续分解。
(╳)21。
程序设计语言中应绝对禁止使用GOTO语句。
(╳) 22.类是关于对象性质的描述,由方法和数据组成。
(√)23。
随着软件技术的发展,人们逐渐认识到编码不仅要强调效率还要强调清晰。
(√)25.为保证程序的安全,必须做到程序中没有任何错误存在,即容错.(╳)26。
UML类图及类与类之间的关系原⽂地址:类图⽤于描述系统中所包含的类以及它们之间的相互关系,帮助⼈们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。
1. 类类(Class)封装了数据和⾏为,是⾯向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
在系统中,每个类都具有⼀定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。
⼀个类可以有多种职责,设计得好的类⼀般只有⼀种职责。
在定义类的时候,将类的职责分解成为类的属性和操作(即⽅法)。
类的属性即类的数据职责,类的操作即类的⾏为职责。
设计类是⾯向对象设计中最重要的组成部分,也是最复杂和最耗时的部分。
在软件系统运⾏时,类将被实例化成对象(Object),对象对应于某个具体的事物,是类的实例(Instance)。
类图(Class Diagram)使⽤出现在系统中的不同类来描述系统的静态结构,它⽤来描述不同的类以及它们之间的关系。
在系统分析与设计阶段,类通常可以分为三种,分别是实体类(Entity Class)、控制类(Control Class)和边界类(Boundary Class),下⾯对这三种类加以简要说明:(1) 实体类:实体类对应系统需求中的每个实体,它们通常需要保存在永久存储体中,⼀般使⽤数据库表或⽂件来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。
实体类来源于需求说明中的名词,如学⽣、商品等。
(2) 控制类:控制类⽤于体现应⽤程序的执⾏逻辑,提供相应的业务操作,将控制类抽象出来可以降低界⾯和数据库之间的耦合度。
控制类⼀般是由动宾结构的短语(动词+名词)转化来的名词,如增加商品对应有⼀个商品增加类,注册对应有⼀个⽤户注册类等(3) 边界类:边界类⽤于对外部⽤户与系统之间的交互对象进⾏抽象,主要包括界⾯类,如对话框、窗⼝、菜单等。
在⾯向对象分析和设计的初级阶段,通常⾸先识别出实体类,绘制初始类图,此时的类图也可称为领域模型,包括实体类及其它们之间的相互关系。
UML建模—EA创建Class(类图)1.新建类图2.添加类或接⼝在类图可以捕获系统-类-和模型组件的逻辑结构。
它是⼀个静态模型,描述存在什么,有哪些属性和⾏为,⽽不管如何去做。
说明关系之间的类和接⼝; 泛化、聚合和关联是在分别反映继承、组成或使⽤和连接。
3.⼯具栏从⼯具箱中的类页⾯选择类图元素和连接器。
(1)Package:包包是⼀个命名空间,也是⼀个元素。
可以包含在其它命名空间中。
包可以拥有其他包或与其他包合并,它的元素可以导⼊包命名空间中。
除了要在项⽬浏览器中使⽤包来组织您的项⽬的内容外,您还可以拖动包到图中图 (⼤多数图类型、标准和扩展)以描述结构或关系,包括包的导⼊或合并。
(2)Interface: 接⼝接⼝是实施者需要满⾜的⾏为规范(或合同)。
通过实现接⼝,类可以保证提供所需的⾏为,系统可以相同的⽅式处理⾮相关元素;也就是说,您通过共同的接⼝,使⽤复合结构图中的接⼝。
接⼝是绘制⽅式类似于类,指定操作,如下所⽰。
它们可以还可以被画成⼀个圆圈,但没有显式的操作。
右击该元素并选择使⽤圆表⽰法上下⽂菜单选项样式,可以在两者之间进⾏切换。
实现以⽆⽬标箭头的实线绘制画成⼀个圆的接⼝连接器。
接⼝不能实例化(即,不能从接⼝创建对象)。
您必须创建该类实现接⼝规范,并在类中定义每个接⼝操作。
然后,您可以实例化类。
(3)Class: 类类是对象类型的表现形式。
反映出这类对象在系统内的的结构和⾏为。
它是⼀个模板,⽤它可以创建实际运⾏的实例,虽然类可以定义控制其⾃⼰的执⾏,或者定义为模板或参数类,必须由任何绑定类定义指定参数。
类可以有属性(数据)和⽅法 (操作或⾏为)。
类可以从⽗类别继承特征和委托其他类的⾏为。
类模型通常描述系统的逻辑结构,⽽是构成组件的构造块。
类的顶部,如下所⽰,显⽰与类关联的属性(或数据元素)。
这些包含对象在运⾏时的状态。
如果该信息保存到数据存储区,并可以重新加载,它被称为持久的。
下半部分包含类的操作(或在运⾏时的⽅法)。
1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。
在 GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。
对象引用本身就是有向的,更适合表达我们所讨论的那种关系。
所以这种关系在设计的时候比较少用到,关联一般都是有向的。
使用ROSE 生成的代码是这样的:class C1...{public:C2* theC2;};class C2...{public:C1* theC1;};双向关联在代码的表现为双方都拥有对方的一个指针,当然也可以是引用或者是值。
单向关联:C3->C4:表示相识关系,指C3知道C4,C3可以调用C4的公共属性和方法。
没有生命期的依赖。
一般是表示为一种引用。
生成代码如下:class C3...{public:C4* theC4;};class C4...{};单向关联的代码就表现为C3有C4的指针,而C4对C3一无所知。
自身关联(反身关联):自己引用自己,带着一个自己的引用。
代码如下:class C14...{public:C14* theC14;};就是在自己的内部有着一个自身的引用。
2、聚合/组合当类之间有整体-部分关系的时候,我们就可以使用组合或者聚合。
聚合:表示C9聚合C10,但是C10可以离开C9而独立存在(独立存在的意思是在某个应用的问题域中这个类的存在有意义。
这句话怎么解,请看下面组合里的解释)。
代码如下:class C9...{public:C10 theC10;};class C10...{};组合(也有人称为包容):一般是实心菱形加实线箭头表示,如上图所示,表示的是C8被C7包容,而且C8不能离开C7而独立存在。
但这是视问题域而定的,例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。
Generate class diagrams from entity relationship diagrams Written Date : October 30, 2009
Visual Paradigm for UML (VP-UML) supports generating class diagrams from ER diagrams
(entity relationship diagram). Entities and relationships are mapped with classes and associations accordingly. This tutorial teaches generating class diagrams from entity relationships diagrams and how to synchronize documentation between classes and entities.
To generate class diagrams from entity relationship diagrams:
1.We first create Entity Model in Model Explorer. Right click on the Model Explorer and select
Model > New Model.
Create entity model in Model Explorer
2.Enter the name as Entity Model.
Input "Entity Model" in model specification dialog box
3.Now let's create entity relationship diagram under Entity Model. Right click on the Entity Model
and select Diagram > Database Modeling > Entity Relationship Diagram.
Create entity relationship diagram under "Entity Model"
4.Develop the following entity relationship diagram.
Device support history ER diagram
5.Repeat the above steps to create the following entity relationship diagram under Entity Model.
Device purchase ER diagram
6.Once the entity relationship diagrams are ready, we can then generate class diagrams from our
entity relationship model. Select Tools > Object-Relational Mapping (ORM) > Synchronize to Class Diagram.
Select "Synchronize to Class Diagram" menu item
7.The Synchronize form Entity Relationship Diagram to Class Diagram dialog will be shown.
The entity relationship diagrams in your project shows on the left hand side of the table, and the target class diagram shows on the right hand side.
ER diagram to UML class diagram mapping dialog box
8.Click on the entity relationship diagram cell and the preview will be show up.
Preview ERD diagram
9.You can name the target class diagram directly in the class diagram cell, or you can synchronize
to existing class diagram (if any).
Assign meaningful name to UML class diagram
10.Press OK to proceed.
11.Now the Synchronize to Class Diagram dialog will show up. The mapping between entity
name and class name, also the column name and attribute name will be listed in the dialog.
Let's change the name of the User class to Customer. And change the attribute name from
firstname to firstName.
Entity column to class attribute mapping table
12.We can specify the target for storing the output class diagram. Select Specify... in the Target
Parent combo box.
Selecting target model
13.Select the root node in the tree and press the New Model button. Name the model as Class
Model.
Create "Class Model"
14.Press OK to proceed.
15.Now the class diagrams being generated.
Generated UML class diagrams
16.Let's try to modify the documentation of the class PriorityType.
Modify "Priority Type" class's documentation
17.You can synchronize the documentation from class model to the associated entity model by right
click on the diagram and select Utilities > Synchronize Class Documentation to ERD.
Synchronize class documentation to ER Diagram
18.Synchronize Class Documentation to ERD dialog will list class model which contain different
documentation with the entity model.
19.Click on the entity PriorityType in the list and the differences of documentation between class
and entity model will be shown.
Synchronize class documentation dialog box
20.Select the checkbox under Synchronize column to specify the model you would like to
synchronize their documentation.
Check synchronize classes and entities
21.By select Synchronize members checbox, the documentation of the class attribute and entity
column will also being synchronized.
Check "Synchronize members" checkbox
22.Uncheck the Hide equals checkbox and all the classes/entity will be listed, even their
documentation are same.
Visual Paradigm for UML home page
(/product/vpuml/)
UML tutorials (/product/vpuml/tutorials.jsp)
Visual Paradigm home page (/)。