已阅读5页,还剩95页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对高级结构建模,AdvancedClasses,可见性,InstanceandStaticScope,Abstract,Leaf,andPolymorphicElements,Multiplicity,Attributes,详述各个属性的可见性、范围和多重性详述各属性的类型、初始值和可变性,originNameonly+originVisibilityandnameorigin:PointNameandtypename:String0.1Name,type,andmultiplicityorigin:Point=(0,0)Name,type,andinitialvalueid:IntegerreadonlyNameandproperty,Operations,详述各操作的可见性和范围详述各操作的参数、返回类型、并发语义和其他特性总体上,操作的名称加上它的参数(如果有的话,也包括返回类型)被称为操作的特征标记,操作和方法的区别操作详述了可以由类的任何一个对象请求以影响行为的服务方法是操作的实现类的每一个非抽象操作必须有一个方法,这个方法的主体是可执行的算法(一般用某种编程语言或结构化文本描述)在继承层次中,对于同一个操作可能有很多方法,并在运行时多态地选择层次结构中的哪一个方法被调用,displayNameonly+displayVisibilityandnameset(n:Name,s:String)NameandparametersgetID():IntegerNameandreturntyperestart()guardedNameandproperty,在操作的特征标记中,可以不提供参数,也可以提供多个参数directionname:type=default-valuein输入参数,不能对它进行修改out输出参数,为了向调用者传送信息可以对它进行修改inout输入参数,为了向调用者传送信息可以对它进行修改,已定义的可用于操作的特性query操作的执行不会改变系统的状态(完全没有副作用的纯函数)sequential调用者必须在对象外部进行协调,以保证在对象中一次仅有一个流。在出现多控制流的情况下,不能保证对象的语义和完整性,guarded通过将所有对象监护操作的所有调用顺序化,来保证在出现多控制流的情况下对象的语义和完整性。其效果是一次只能调用对象的一个操作,这又回到了顺序的语义static操作没有关于目标对象的隐式参数,它的行为如同传统的全局过程,concurrent通过把操作原子化,来保证在出现多控制流的情况下对象的语义和完整性。来自并发控制流的多个调用可以同时作用于一个对象的任何一个并发操作,而所有操作都能以正确的语义并发进行。并发操作必须设计成:在对同一个对象同时进行顺序的或监护的操作的情况下,它们仍能正确地执行,TemplateClasses,模板是一个被参数化的元素在诸如C+和Ada这样的语言中,可以写模板类,每一个模板类都定义一个类的家族(也可以写模板函数,每一个模板函数都定义一个函数的家族)模板可以包括类、对象和值的插槽,这些插槽起到模板参数的作用不能直接使用模板,必须首先对它进行实例化实例化是要把这些形式模板参数绑定成实际参数对一个模板类来说,绑定后的结果就是一个具体类,能够像普通类一样使用,JAVA中泛型,publicabstractclassShapepublicabstractvoiddraw();publicclassRectextendsShapeimplementsSerializableTm_left,m_top,m_width,m_height;publicRect(Tleft,Ttop,Twidth,Theight).,publicclassCircleextendsShapeimplementsSerializableTm_x,m_y,m_r;publicCircle(Tx,Ty,Tr).publicclassStrokeextendsShapeimplementsSerializableWm_width;ArrayListm_ia;publicStroke(Wwidth,ArrayListia).,ArrayListsList=newArrayList();sList.add(newStroke();sList.add(newRect();sList.add(newCircle();,ArrayList的实现(JDK1.5),publicclassArrayListextendsAbstractListimplementsList,RandomAccess,Cloneable,java.io.SerializableprivatetransientEelementData;privateintsize;publicArrayList(intinitialCapacity)super();/checkif(initialCapacity0).this.elementData=(E)newObjectinitialCapacity;publicArrayList()this(10);.,ArrayList的实现(JDK1.4),publicclassArrayListextendsAbstractListimplementsList,RandomAccess,Cloneable,java.io.SerializableprivatetransientObjectelementData;privateintsize;publicArrayList(intinitialCapacity)super();/checkif(initialCapacity0).this.elementData=newObjectinitialCapacity;publicArrayList()this(10);.,结构建模AdvancedRelationships,高级依赖、泛化、关联、实现和精化关系对关系网建模创建关系网,为了捕获系统中的一些细节(为了避免设计中的实际缺陷,考虑这样的细节是重要的),就需要这些关系的一些高级特性,术语和概念,关系是事物之间的联系在面向对象的建模中,4种最重要的关系是依赖、泛化、关联和实现在图形上,把关系画成线段,用不同种类的线段区别不同的关系,依赖,依赖是一种使用关系,它描述了一个事物的规约的变化可能会影响到使用它的另一个事物,但反之不然对于大多数所遇到的使用关系而言,简单的、未加修饰的依赖关系就足够了为了详述其含义的细微差别,UML定义了一些可以用于依赖关系的衍型这些衍型被组织成几组,首先,有一些可应用到类图中的类和对象之间的依赖关系上的衍型bind表明源用给定的实际参数实例化目标模板derive表明可以从目标计算出源permit表明源对目标给予特定的可见性instanceOf表明源对象是目标类目的一个实例。一般用文本形式source:Target来表示instantiate表明源创建目标的实例,powertype表明目标是源的幂类型。幂类型是一个类目,其对象都是一个给定父类的子类对分类其他类的类建模时,要使用幂类型,refine表明源比目标处于更精细的抽象程度上use表明源元素的语义依赖于目标元素的公共部分的语义,以下两个衍型可以应用到包之间的依赖关系import表明目标包中的公共内容加入到源包的公共命名空间中,好像它们在源中已经声明过似的access表明目标包中的公共内容加入到源包的私有命名空间中。可以在源中使用这些内容的不带限定的名字,但不可以再输出它们,以下两种衍型用于用况间的依赖关系extend表明目标用况扩展了源用况的行为include表明源用况在源所指定的位置上显式地合并了另一个用况的行为,在对象之间的交互语境中会遇到一种衍型:send表明源类发送目标事件当对向目标对象(它可能有相关联的状态机)发送给定事件的操作(例如,在与状态转移相关的动作中就有这样的操作)建模时,要使用发送(send)。发送依赖在效果上是把若干独立的状态机结合在一起,在把系统的元素组织成子系统和模型的语境中,要遇到的一个衍型是跟踪trace表明目标是源的早期开发阶段的祖先当对不同模型中的元素之间的关系建模时,要使用跟踪(trace),泛化,大多数情况下,单继承就足够用了一个类要合并多个类的特征,那么用多继承对这些关系建模更为合适,UML定义了可以应用到泛化关系上的4个约束:complete表明已经在模型中给出了泛化关系中的所有子类,不允许再有更多的子类incomplete表明没有给出泛化中的所有子类,允许再增加子类,disjoint表明父类的对象最多以给定的子类中的一个子类作为类型overlapping表明父类的对象可能以给定的子类中的一个以上子类作为类型以上两个约束只应用于多继承语境中用互斥来表示一组类是相互不兼容的,一个子类不可继承该组中一个以上的父类用重叠来说明一个类能从这组类中一个以上的父类进行多继承,关联,有4种可应用到关联上的基本修饰:关联名、关联每一端的角色、关联每一端的多重性以及聚合对于高级用法,还有一些可用于对微妙的细节建模的特性,如导航、限定和不同风格的聚合,导航,给定两个类之间的一个简单的、未加修饰的关联,从一个类的对象能够导航到另一个类的对象除非另有指定,否则关联的导航是双向的然而,有些情况要限制导航是单向,描述关联的走向未必意味着从关联的一端永远不能得到另一端的对象导航只是陈述了一个类对另一个类的知识描述一个关联是可导航的,是说给定关联一端的对象就能够容易并直接地得到另一端的对象,通常这是因为源对象存储了对目标对象的一些引用信息,可见性,给定两个类之间的关联,除非另有显式的导航声明所规定的限制,否则一个类的对象能够看见并导航到另一个类的对象然而,在有些情况下要限制关联外部的对象通过关联访问相关对象的可见性,在UML中,像处理类的特征那样,通过对角色名添加可见性符号,可以在3个级别上描述关联端点的可见性除非有别的注解,否则角色的可见性是公共的私有的可见性表明,位于关联该端的对象对关联外部的任何对象来说都是不可访问的保护的可见性表明,位于关联该端的对象对关联外部除了另一端的子孙之外的任何对象来说都是不可访问的包的可见性表明,在同一包中声明的类能够看见给定的元素,因此对关联端点不适用,限定,在关联的语境中,最常见的一种建模的惯用法是查找给定关联一端的对象,如何识别另一端的对象或对象集?例如,考虑对一个制造厂的工作台的建模问题,在工作台上对返回的工件进行修理,在UML中,用限定符来对这样的用法建模,该限定符是一个关联的属性,它的值通过一个关联划分了与一个对象相关的对象的子集合(通常是单个对象)把限定符画成与关联的一端相连的小矩形,并把属性放于小矩形中源对象连同限定符的属性值确定了目标对象(若目标端的多重性最多为1)或对象集合(若目标端的多重性为多),组合,组合是聚合的一种形式,它具有强的拥有关系,而且整体与部分的生命周期是一致的带有非确定多重性的部分可以在组合物自身之后创建,但一旦创建,它们就同生共死。这样的部分也可以在组合物死亡之前显式地撤销,这意味着在组合式聚合中,一个对象在一个时间内只能是一个组合的一部分此外,在组合式聚合中,整体负责对它的各个部分的处置,这意味着整体必须管理它的部分的创建与撤销,关联类,在两个类之间的关联中,关联本身可以有特性在UML中,把这种情况建模为关联类,关联类是一种既具有关联特性又具有类特性的建模元素可以把关联类看成是具有类特性的关联,或者看成具有关联特性的类,约束,UML定义了5种可以用于关联关系的约束首先,可以描述在关联一端的对象(多重性要大于1)是有序还是无序ordered表示关联一端的对象集是显式有序的,其次,可以描述在关联一端的对象是唯一的,即它们形成了集合,或者是不唯一的,即它们形成了袋(bag)set对象唯一,不可以重复bag对象不唯一,可以重复orderedset对象唯一且有序listorsequence对象有序但可以重复,最后,还有一种约束限制了关联实例的可变性readonly一旦从关联的另一端的对象添加了一个链,就不可以修改或删除。在没有这种约束的情况下,默认可变性为无约束,实现,实现是类目之间的语义关系,在该关系中一个类目描述了另一个类目保证实现的合约在图形上,把实现画成一条带有空心三角箭头的虚线并指向描述合约的那个类目,实现与依赖、泛化和关联很不相同,所以被处理成一种独立的关系实现是依赖和泛化在语义上的一些交叉,其表示法是依赖和泛化表示法的结合在接口的语境中和在协作的语境中都要用到实现关系,对关系网建模,当对复杂系统的词汇建模时,可能要遇到数十个(如果不是成百上千的话)类、接口、构件、结点和用况建立一个包围其中每个抽象的清晰边界是困难的建立这些抽象之间的无数种关系更为困难,这要求在整体上对系统形成一个平衡的职责分布,并且各抽象是高内聚的,关系可得到表达,又是松耦合的,当对这些关系网建模时,要遵循如下策略:开始不要孤立地看问题。利用用况和脚本来驱使去发现一组抽象之间的关系一般要从呈现的结构关系开始建模。这些关系反应了系统的静态视图,而且是相当明确的接下来,识别使用一般/特殊关系的机会;使用多继承要有节制,只有在完成上述步骤后,才开始寻找依赖,它们一般表示语义连接的更精确的形式对各种关系,从其基本形式开始,只有在对表达意图绝对必要时,才应用高级特性要记住,不应该也不必要在一张图或视图内对一组抽象之间的所有关系建模,而是通过考虑系统的不同视图来建立系统的关系,结构建模ObjectDiagrams,对象图对包含在类图中的事物的实例建模对象图显示了在某一时间点上一组对象以及它们之间的关系对象图用于对系统的静态设计视图或静态交互视图建模包括对某一时刻的系统快照建模,表示出对象集、对象的状态以及对象之间的关系,Contents,对象图是表示在某一时间点上一组对象以及它们之间的关系的图对象图一般包括:ObjectsLinks像所有的其他图一样,对象图可包含注解和约束,一般用法,在对系统的静态设计视图或静态交互视图建模时,通常使用对象图来为对象结构建模为对象结构建模涉及到在给定时刻抓取系统中的对象的快照对象图表示了由交互图所表示的动态场景中的一个静态画面可以使用对象图来可视化、详述、构造和文档化系统中存在的实例以及它们之间的相互关系可以把动态行为和执行表示为一系列的画面,ModelingObjectStructures,如果冻结一个运行的系统,或者只想象被建模的系统的某一瞬间,就会发现这样的一组对象:每个对象都处于一个特定的状态,并与其他对象有特定的关系可以用对象图来可视化、详述、构造和文档化这些快照的结构在使用对象图时,只能有意义地显示一组感兴趣的具体对象或原型对象。这就是所谓的为对象结构建模,即对象图显示了在某一时刻相互联系的一组对象,ModelingObjectStructures,结构建模Components,Components,interfaces,andrealizationInternalstructure,ports,parts,andconnectors把子构件连接在一起对API建模,构件是系统中逻辑的并且可替换的部分,它遵循并提供对一组接口的实现好的构件用定义良好的接口来定义灵活的抽象,这样就可能容易地用新的兼容构件代替旧的构件接口是连接逻辑模型和设计模型的桥梁。例如,可以为逻辑模型中的一个类定义一个接口,而这同一个接口将延续到一些实现它的设计构件通过把构件上的端口连接在一起,接口允许用小的构件来建造对大构件的实现,可以把应用程序做成一个单一的大单元,但是当需求改变时,它太僵化并很难修改也无法利用一些现有的功能对于软件系统的解决方法类似于电气系统:把程序做成可灵活连接起来的、定义良好的构件,当需求发生变化时,这些构件可以单独地替换,接口(Interface)是一组操作的集合,它指明了由类或构件所请求或者所提供的服务构件(Component)是系统中可替换的部分,它遵循并提供了一组接口的实现端口(port)是被封装的构件的特定窗口,遵循指定接口的构件通过它来收发消息内部结构(Internalstructure)是靠以特定方式连接起来的一组部件来表示的构件实现部件(part)是对角色的描述,该角色组成构件的局部实现。在构件的实例中,有相应的部件实例.连接件(connector)是在构件语境中的两个部件或者端口之间的通信关系,ComponentsandInterfaces,接口是一组操作的集合,用于指明类或构件的一个服务构件和接口之间的关系是非常重要,几乎所有流行的构件模型(COM+、CORBA和EnterpriseJavaBeans)都以接口作为把构件绑定在一起的粘合剂基于构件来构造系统,通过描述接口(表示系统中的主要接缝)来分解系统然后提供实现这些接口的构件和通过访问接口获得服务的其他构件这样的机制允许部署一个系统,它的服务在某种程度上独立的位置,而且可以替换的,ComponentsandInterfaces,构件所实现的接口称为供接口(providedinterface),意思是构件向其他构件提供的作为一个服务的接口一个构件可以声明许多供接口构件所使用的接口称为需接口(requiredinterface),意思是一个构件向其他构件请求服务时所遵从的接口一个构件可以遵从许多需接口一个构件可以既有供接口也有需接口,ComponentsandInterfaces,构件可以有属性和操作,但在图中这些经常被省略构件可以表示内部结构可以用两种方式来表示构件和接口之间的关系第一种方式(最通用的)是用简略的图符形式表示接口第二种方式是用展开形式来表示,这种方式可以显示出接口的操作,ComponentsandInterfaces,Replaceability,所有基于构件的操作系统工具的基本目的都是允许用二进制可替换的制品来集成系统这就意味着可以用构件来设计系统,然后用制品来实现这些构件可以用添加新构件和替换老构件的方式来更新系统,而无须重新构造系统,接口是实现上述方法的关键在可执行的系统中,可以使用任何实现构件的制品,该构件提供或遵从指定的接口可以用以下方法扩展系统:使构件通过其他接口提供新的服务,而这些接口又能被其他构件发现和使用构件遵循或提供一组接口的实现,并使逻辑设计和基于其上的物理实现的可替换性成为可能,构件是可替换的一个构件可以用遵循相同接口的其他构件来替换在设计时期,你选择一个不同的构件一般情况下,在运行时系统中插入或替换制品的机制对于构件使用者来说是透明的,它通过对象模型(例如COM+和EnterpriseJavaBeans)或通过自动实现这种机制的工具而成为现实,上述对象模型很少需要或根本不需要人为干预转换,构件是系统的一部分构件很少单独存在,相反,一个给定的构件通常与其他构件协作,并且存在于打算使用它的体系结构或技术语境中构件在逻辑上和物理上是内聚的,代表一个较大系统的有意义的结构和(或)行为块构件可以在多个系统中复用因此,构件表示了设计和组成系统的基础构造块这个定义是递归的,某个抽象层次上的系统可能是其他更高抽象层次上系统的一个构件最后,构件遵从一组接口并提供对这组接口的实现,OrganizingComponents,以用组织类的方式来组织构件,用包将构件分组也可以通过描述构件之间的依赖、泛化、关联(包括聚合)和实现关系来组织构件构件可以由其他构件来构造,Ports,接口对构件的总体行为声明是十分的有用的,但它们没有个体的标识构件的实现只需要保证它的全部供接口的全部操作都被实现使用端口就是为了进一步控制这种实现,端口(port)是一个被封装的构件的对外窗口在封装的构件中,所有出入构件的交互都要通过端口构件对外可见的行为恰好是它端口的总和端口是有标识的,别的构件可以通过一个特定端口与一个构件通信,该通信完全是通过由端口支持的接口来描述的,即使这个构件也支持其他的接口在实现时,构件的内部部件通过特定的外部端口来与外界交互,因此,构件的每个部件都独立于其他部件的需求端口允许把构件的接口划分成离散的并且可以独立使用的包端口提供的封装性和独立性更大程度上保证了构件的封装性和可替换性,端口被表示成跨立于构件边界上的方块它表示穿过构件的封闭边界的洞供接口和需接口都附着到端口符号上供接口表示一个可以通过那个端口来请求的服务需接口表示一个该端口需要从其他构件获得的服务每个端口都有一个名字,因此可以通过构件和端口名来唯一标识它构件内部的部件用端口名来识别要通过哪个端口接收和发送消息构件名和端口名合在一起唯一地标识了一个被其他构件使用的特定构件的特定端口,端口是构件的一部分端口的实例随着它们所属构件的实例被创建和撤销端口也具有多重性,以指明在构件实例中特定端口实例的可能数目构件实例中的每一个端口都有一组端口实例虽然一组端口实例都满足同样的接口并接受同样的请求,但它们可能有不同的状态和数据值,InternalStructure,构件可以被作为一段单独的代码来实现,但是在一个大型系统中,理想的做法是用一些小的构件作为构造块来组建一些大构件构件的内部结构是一些小的部件,这些部件和它们之间的连接一起组合成构件的实现在许多情况下,内部部件可以是较小的构件的实例,它们静态地连接在一起,通过端口提供必要的行为而不需要建模者额外地描述逻辑,部件(part)是构件的实现单元部件有名字和类型在构件实例中,每个部件有一个或多个实例对应于部件指明的类型,部件在其所在构件内有多重性如果一个部件的多重性数目大于1,就可能在一个给定的构件实例中有多于1个的部件实例如果多重性数目不是一个单一的整数,那么部件实例的个数可能在不同的构件实例中有所不同一个构件实例是和最小个数的部件一起创建的,以后再加入额外的部件,注意,部件和类是不同的每一个部件潜在地由其名字来区别同一类型的部件可能有多个,但是可以通过它们名字来区别,并且假定它们在构件中的功能也不同。例如在上图中AirTicketSales(航空售票)构件为常客和普通顾客提供了不同的sales(售票)部件,它们工作相同,但常客部件是只为特殊顾客服务的,很少有需要排队的情况,而且还可能提供附加的额外补贴。因为这些构件的类型相同,所以必须用名字来区别它们。另外的两个类型为SeatAssignment和InventoryManagement的构件不需要名字,因为在航空售票构件中这两个类型都只有一个构件,如果部件是有端口的构件,可以通过端口把它们连接起来规则很简单:如果一个端口提供了一个给定的接口而另一个端口需要这个接口,那么这两个端口便是可连接的端口的连接意味着请求端口将调用提供端口来获得服务端口和接口的优点就是不需要了解其他的东西,如果接口是可兼容的,那么就可以连接端口工具能自动生成从一个构件到另一个构件的调用代码如果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年鸡西市公安局恒山分局公开招聘警务辅助人员10人考试笔试参考题库附答案解析
- 2025山东菏泽工贸科技学校教师储备招聘65人笔试考试参考试题及答案解析
- 2025湖南轨道矿业发展有限公司销售劳务派遣人员招聘笔试考试备考题库及答案解析
- 2025重庆市璧山区人力资源和社会保障局招聘非在编人员1人笔试考试备考题库及答案解析
- 2025年漯河市舞阳县辅警招聘考试题库附答案解析
- 2026湖北十堰市人民医院人才招聘笔试考试参考题库及答案解析
- 2025年河北省秦皇岛市北戴河区辅警招聘考试题库附答案解析
- 2025上海真爱梦想公益基金会招聘实习生5人笔试考试备考试题及答案解析
- 2026深圳市事业单位集中招聘高校毕业生658人考试笔试模拟试题及答案解析
- 2025洛阳市卫生健康系统医疗卫生机构招聘联考922人考试笔试备考试题及答案解析
- 2024南京交通职业技术学院辅导员招聘笔试真题
- 衢州市国企招聘考试基础题库
- 2025年武汉市蔡甸区总工会公开招聘工会协理员4人考试笔试模拟试题及答案解析
- 人民武装部办公室人员培训计划
- 电路测试服务合同范本
- 2025年新疆高职单招中职类文化课统一考试(语文)
- 2025年深圳辅警招聘考试真题及答案详解(历年真题)
- 辽宁省名校联盟2025-2026学年高三上学期11月期中联合考试语文含答案
- GB/T 7764-2017橡胶鉴定红外光谱法
- 石材检测报告2023
- 民事权利体系图示
评论
0/150
提交评论