实验4--建立类图王霄鹏实验内容根据设计课题设计类分析并建立类间的关系建立类图进行完整描述类类是任何面向对象系统中最重要的构造块。类是一种重要的分类器(Classifier),用来描述结构和行为特性的机制,它包括类、接口、数据类型、信号、组件、节点、用例和子系统。类是对一组具有相同属性、操作、关系和语义的对象的描述。这些对象包括现实世界中的软件事物和硬件事物,甚至也可以包括纯粹概念性的事物,它们是类的实例。一个类可以实现一个或多个接口。结构良好的类具有清晰的边界,并成为系统中职责均衡分布的一部分。一、类与关系关系关系(Relationship)是事物间的联系。在类的关系中,最常用的4种分别为:依赖(Dependency),它表示类之间的使用关系;泛化(Generalization),它表示类之间的一般和特殊是关系;关联(Association),它表示对象之间的结构关系;实现(Realization),它是规格说明和其实现之间的关系。1.依赖(Dependency)依赖是两个元素之间的关系,对一个元素(提供者)的改变可能会影响或提供消息给其他元素(客户)。也就是说:客户以某种方式依赖于提供者。在实际的建模中,类元之间的依赖关系表示某一类元以某种方法依赖于其他类元。从语义上理解,关联、实现和泛化都是依赖关系,但因为他们有更特别的语义,所以在UML中被分离出来作为独立的关系。在图形上,UML把依赖描述成一条有向的虚线,指向被依赖的对象。2.泛化(Generalization)泛化是一般事物(称为超类或父类)和该事物的较为特殊的种类(称为子类)之间的关系,子类继承父类的属性和操作,除此之外通常子类还添加新的属性和操作,或者修改了父类的某些操作。泛化意味着子类的对象可以用在父类的对象可能出现的地方,但反过来则不成立。例如:电视可以分为CRT电视、液晶电视、背投电视、等离子电视。更简单的来说,泛化关系描述了类之间的isakindof(属于……的一种)的关系。在图形上,泛化用从子类指向父类的空心三角形箭头表示。3.关联(Association)关联是一种结构关系,它指明一个事物的对象与另一个事物的对象间的联系。也就是说,如果两事物间存在链接,这些事物的类间必定存在着关联关系,因为链接是关联的实例,就如同对象是类的实例一样。4.实现(Realize)实现是规格说明和其实现间的关系。它表示不继承结构而只继承行为。大多少情况下,实现关系用来规定接口和实现接口的类或组件之间的关系。接口是能够让用户重用系统一组操作集的UML组件。一个接口可以被多个类或组件实现,一个类或组件也可以有多个接口。可以在两种情况下使用实现关系:第一,在接口与实现该接口的类间;第二,在用例以及实现该用例的协作间。Class框图类图(classdiagram)是描述类、接口、协作、以及它们之间关系的图。它是系统中静态视图的一部分,静态视图可以包括许多的类图。类:包装信息与行为的项目显示系统中的类与类包提供系统组件及相互关系的静态图形描述类图的用途类图是系统静态视图的一部分,它主要是用来描述软件系统的静态结构。该视图主要支持系统的功能需求,也就是系统要提供给最终用户的服务。当系统分析师以支持软件系统的功能需求为目的设计静态视图时,通常以下述3种方法之一使用类图。对系统的词汇建模对简单协作建模对逻辑数据库模式建模Class框图的显示范围类及其关系的子集类的子集,包括属性和操作类包及包之间的关系----可对系统生成多个Class框图类的显示类在UML中由专门的图符表达,是一个分成3个分隔区的矩形。其中顶端的分隔区为类的名字,中间的分隔区放类的属性、属性的类型和值(在UML符号表示中给出类的初始值),第3个分隔区放操作、操作的参数表和返回类型。新建Class框图右键单击Logical试图选择New-ClassDiagram为框图命名生成类使用Class工具栏添加在浏览器中New-ClassTools-Create-Class使用交互图添加Class框图工具栏按钮Class将新类加入框图Interface将接口类加入框图Association画出关联关系Aggregation画出累计关系LinkAttribute链接关联类和关联关系Package将新包加入框图Dependencyorinstantiates画出相关性关系Generalization画出泛化关系Class框图工具栏按钮Realize画出实现关系UnidirectionalAssociation画出单向关系ParameterizedClass将新参数化类加入框图ClassUtility将新类实用程序加入框图ParameterizedClassUtility将新参数化类实用程序加入框图InstantiateClass将新实例化类加入框图InstantiateClassUtility将新实例化类应用程序加入框图类版型边界类Boundary:位于系统与外界的交界处,包括窗体、报表、与其他系统的接口。控制类Control:也叫管理者类,向其他类发出控制消息。实体类Entity版型显示风格设置:右键Options-StereotypeDisplay-……生成Class框图的步骤(1)设置显示选择Tools-Options选择Diagram标签确保选择Stereotypes复选框确保选择Showallattributes和ShowallOperations复选框确保取消Suppressattributes和SuppressOperations复选框生成Class框图的步骤(2)建立包右键单击浏览器中的Logical视图选择New-Package为包命名建立Entities包、Boundaries包和Control包Mainclass框图EntitiesBoundariesControl生成Class框图的步骤(3)生成MainClass框图打开Logical视图内的MainClass框图将前面生成的三个包拖动到框图中生成Class框图的步骤(4)生成含有用例中所有类的框图在用例下新建Class框图以用例名为其命名将用例中的所有类拖动到框图中将版型加入到类中组成包:将类根据版型拖动到三个包中添加新订单class框图生成Class框图的步骤(5)将Class框图加进每个包在浏览器中单击一个包新建一个Class框图,命名为Main打开框图将包里的类由浏览器拖动到框图中重复以上步骤,为每个包建立一个Class框图Boundary包class框图包图包图由包和包之间的联系构成,它是维护和控制系统总体结构的重要建模工具。当对大型系统进行建模时,经常需要处理大量的类、接口、构件、节点和图,这时就有必要将这些元素进行分组,即把那些语义相近并倾向于一起变化的元素组织起来加入同一包,,这样方便理解和处理整个模型。同时也便于轻松地控制这些元素的可见性,使一些元素在包外可见,一些元素是隐藏在包内的。设计良好的包是高内聚、低耦合的,并且对其内容的访问具有严密的控制。