学库吧 > 软件设计师 > 正文

软件设计师UML知识点:第六章 软件设计师知识点:面向

更新:2008-09-22 整理:www.xuekuba.com
字体:

[软件设计师知识点:面向对象语言概论四]四,彻底划清界限(继续分离Subclassing和Subtyping)在第二节我们讨论了部分分离Subclassing和subtyping的方法,即subclassing-implies-subtyping. 现今的多面向对象语言,如Ja, C#都是采用了这种技术。除此之外,还有一种进一步分离Subclassing和subtyping的方法。这种被称作inheritance-is-not-subtyping的方法通过完全割裂subclassing和subtyping之间的而在更大程度上方便了码的。......+阅读

软件设计师UML知识点:第六章

前言
  建模实际上是对真实世界进行简化,从而可以更好地理解你要开发的系统。使用UML中基本的建筑块如:类、接口、关系、协作、组件、依赖、继承等,可以建立你想要的模型。还可以利用第五章介绍的机制扩充UML来表达问题领域独特的东西。
  图是你组织这些建筑块的方式。图代表着一系列的元素,这些元素常常被画成用点(事物)和弧(关系)相连的图。利用图来从不同的视角来观察系统。由于没有一个复杂的系统可以从一个透视图弄明白,UML定义了一些图使得我们可以独立地从几个不同的视角来了解系统。
  好的图使得你要开发的系统是易于理解和可以接近的。选择好的图对系统建模让你找到系统中真正要问的问题,帮助你阐述清楚你的系统。
  术语和概念
  系统是组织起来完成特定目标的一组子系统。系统可以用一组模型,可能来自不同的视角,进行描述。子系统是一组元素,其中一些通过包含的另外的元素组成特定的行为。模型是对系统进行语义上的抽象,它是整个真实系统的简化,为了更好地理解系统而创建的。图是一系列的元素,这些元素常常被画成用点(事物)和弧(关系)相连的图。利用图来从不同的视角来观察系统。
  系统代表着你要开发的事物,通过不同的模型从不同的透视图来观察系统,这些透视图以图的形式表达。
  在对真实世界进行建模的时候,你可以发现不管你的问题处于什么样的领域,你都会创建相同的图,因为他们代表着通用的模型的通用的视。通常,你利用下面的图来观察系统的静态部分:
  1. 类图(Class Diagram)
  2. 对象图(Object Diagram)
  3. 组件图(poment Diagram)
  4. 分布图(Deployment Diagram)
  使用下面的五种额外的图来观察系统动态的方面:
  1. Usecase图
  2. 序列图(Sequence Diagram)
  3. 协作图(Collaboration Diagram)
  4. 状态图(Statechart Diagram)
  5. 活动图(Activity Diagram)
  UML定义了这五种图。
  结构化图(Structural Diagrams)
  1. 类图(Class Diagram) 类、接口和协作
  2. 对象图(Object Diagram) 对象
  3. 组件图(poment Diagram) 组件
  4. 分布图(Deployment Diagram) 节点(Notes)
  类图
  类图显示了一组类、接口和协作以及它们之间的关系。类图在面向对象的建模设计中是很常用的。利用类图阐明系统的静态的设计。包含活动类(active classes)的类图通常用来说明看到的系统静态过程。
  对象图
  对象图显示了一组对象和他们之间的关系。使用对象图来说明数据结构,类图中的类或组件等的实例的静态快照。对象图和类图一样反映系统的静态过程,但它是从实际的或原型化的情景来表达的。
  组件图
  组件图显示了一些组件和它们之间的关系。使用组件图来说明系统的静态实现。组件图和类图是有联系的,通常一个组件可以映射成一个或多个类,接口或协作。
  分布图
  分布图显示了一些节点和它们之间的关系。使用分布图来说明系统的静态结构。分布图和组件图是有联系的,通常一个节点封装了一个或多个组件。
  动作图(Behioral Diagrams)
  UML中定义的动作图包括:
  1. Usecase图
  2. 序列图(Sequence Diagram)
  3. 协作图(Collaboration Diagram)
  4. 状态图(Statechart Diagram)
  5. 活动图(Activity Diagram)
  Usecase图
  Usecase图显示了一些Usecase和角色(特殊的类)和他们的关系。使用usecase图来描述系统静态的功能场景。Usecase图对于组织和模型化系统的动作是很重要的。
  序列图
  序列图是一种交互图(interaction diagram),强调的是时间和消息的次序。一个序列图显示了一系列的对象和在这些对象之间发送和接收的消息。对象通常是命名或匿名的类的实例,也可以代表其他事物的实例,例如协作、组件和节点。使用序列图来说明系统的动态情况。
  协作图
  协作图是一种交互图(interaction diagram),强调的是发送和接收消息的对象之间的组织结构。一个协作图显示了一系列的对象和在这些对象之间的联系以及对象间发送和接收的消息。对象通常是命名或匿名的类的实例,也可以代表其他事物的实例,例如协作、组件和节点。使用协作图来说明系统的动态情况。
  注意:序列图和协作图是同构的,它们相互之间可以转化而不损失信息。
  状态图
  状态图显示了一个状态机,由状态、转换、事件和活动组成。使用状态图说明系统动态情况。状态图对于建模接口的动作、类的动作或协作的动作是重要的。状态图强调的是事件驱动的对象的动作,这在对反应式系统的建模是相当重要的。
  活动图:
  活动图显示了系统中从一个活动到另一个活动的流程。活动图显示了一些活动,他们很象传统的流程图有序列或分支。活动图对于给系统的功能建模是很重要的。活动图强调的是对象之间的流程控制。
  通用建模技巧
  1. 对系统的不同视进行建模
  l 决定采用哪个视才能地表达系统的结构,以及暴露出项目的技术风险。前面讨论的五种图是很好的开始点。
  l 对每一种视图决定要画那些图,通常一个视图会对应多个图
  l 作为你的过程计划的一部分,决定那些图是要作为项目文档保存。
  l 不要认为一次能够将图画好,准备一个装废纸的房间。
  例如,如果你为一个简单的应用建模。你可能只需要其中一部分视图。
  Usecase 视图
  usecase图
  设计(Design)视图
  类图
  交互图
  处理(Process)视图
  不需要
  展开视图 不需要
  实现视图 不需要
  如果你是一个反应式的系统或系统的重点在处理流程上,你可能想包括状态图和活动图来建立系统的动作模型。
  同样的,如果你是一个Client/Server系统,你可能想用组件图和分布图来为你的系统的物理细节进行建模。
  最后,如果你是要对一个复杂的、分布式的系统建模,你需要使用所有的UML的图来表达系统的结构和项目的技术风险,如下所示:
  Usecase视图
  Usecase图
  活动图
  设计视图
  类图(结构化建模)
  交互图(动作建模)
  状态图(动作建模)
  过程视图
  类图(结构化建模)
  交互图(动作建模)
  实现视图
  组件图
  展开视图
  分布图
  
  1. 不同抽象层次建模
  你不仅要从不同的视角观察系统,还要系统进行不同层次的抽象,因为参加项目开发的人可能对同一个系统的视图需要不同的抽象层次。对于程序员来说,他希望看到的是类的属性、方法,而对于一个系统分析员使用usecase场景来说只要看到存在这么个类就可以了,这里程序员要求的抽象层次较底层。可以通过隐藏或显示不同层次的细节来实现不同抽象层次的模型,或者创建不同层次抽象的图。
  考虑你的读者的需要,从一个给定的模型开始
  如果你的读者使用模型是构造一个实现,他需要的是较低层的抽象,也就是说他需要更多的细节。如果他利用概念模型只是为了和最终用户交流,他需要的是高层次的抽象,不需要细节的东西。
  2. 复杂视图建模
  首先确信没有更好的方法可以利用高层次的抽象表达要表达的信息,即便是删除一部分图或保留细节到另外一部分。
  如果你隐藏了你所能隐藏的细节而你的图还是很复杂,考虑将一部分元素分组放到包里或放到较高层次的协作中,然后在你的图中只画这些包和协作。
  如果你的图还是很复杂,使用注释或颜色来钩出你的重点好引起读者的注意
  如果你的图依然很复杂,哈哈,打印出来,贴到墙上,将读者叫来亲自讲解给他听吧。希望他能明白……其实你可以自己慢慢研究,最后发现简化还是可以的。
  

本文地址:http://www.xuekuba.com/view/10332056.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请给我们来信(willowduanall@hotmail.com),我们会及时处理和回复,谢谢.

类似推荐

软件设计师面向对象知识点:类和对象类的实现的基本格式:class 类名 类声明{类体的内容}类体中包括:变量的定义 + 方法的定义。例:class Ladder 类声明{float a,b,h,ladderArea; 定义变量float area() 定义方法{float ladArea;ladArea=(a+b)*h/2.0f;return ladArea;}void setHeight(float newH) 定义方法{h=newH;}}成员变量和部变量成员变量:类体中,变量定义部分所定义的变量。部变量:类体中,方法体定义的变量和方法的参数。成员变量的作用范围:在整个类...
软件设计师UML知识点:第三章类类是具有相同属性、作、的对象集合的总称。通常在UML中类被画成矩形。名称每个类都必须有一个名字,用来分其它的类。类名是一个字符串,称为简单名字。路径名字是在类名前加包含类的包名为前缀。例如Wall、ja::awt::Wall都是合法的类名。属性属性是指类的命名的特性,常常一类取值。类可以有任意多个属性,也可以没有属性。在类图中属性只要写上名字就可以了。如下图也可以在属性名后跟上类型甚至缺省取值,如下图:...
软件设计师知识点:面向对象语言概论一面向对象语言概论(译自Martin Abadi, Luca Cardelli的对象理论一书的第一部分)译者前言这本书是我们上面向对象类型理论的教材。当时上这门课时,心里满不以为然,觉得自己的C++和OO已经颇有造纸,C++和Ja的类型系统不说倒背如流,也是轻车熟路,上这么一门课不是白拿学分?哈哈!但一上起来,才发现自己竟如井底之蛙一样。老天,原来就这么简单的面向对象竟有这么多说道!原来除了C++, Ja, 面向对象还有这么多没见过甚至没想过的...
软件设计师面向对象知识点:面向对象方法面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容的作组成的封装体,与客观实体有直接对应,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次的类的属性和作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制...
软件设计师UML知识点:第二章HelloWorld记得在学C语言的时候,教科书上的第一个程序就是叫Hello world,一个在屏幕上简单地打印出“Hello world!”语句的例子。在系统的学UML语言之前我们来看一个简单的例子,让大家有一个系统的认识。在ja中一个在浏览器中显示“Hello World!”的Applet码如下:import ja.awt.Graphics;class HelloWorld extends ja.applet.Applet{public void paint( Graphics g ){g.String(Hello World!, 10,10 );}}码的第一行:import...
软件设计师UML知识点:第五章通用机制UML中的四种机制使地它简单和更易于使用,你可以在UML语言的任何时候用同样的方法来使用,这四种机制是:l specificationsl adornmentsl mon divisionsl extensibility本章讨论adornments和extensibility这两种机制。注释是最重要的一种修饰。一个注释在UML中是一个图形符号,描述了和它相关联的元素或一组元素的或注释语。上图就是一个使用注释的例子,图中右边的为注释符号。UML的扩充性机制允你在控制的方式下扩充UML语言...
软件设计师知识点:面向对象语言概论三传统的基于类的面向对象语言的一个主要特点就是inheritance, subclassing和subtyping之间的密不可分的。很多的面向对象语言的语法,概念,就是从这三者而来的。说,通过subclassing, 你可以继承父类的一些方法,而同时你又可以在子类中改写父类的方法。这个改写过的方法,通过subtyping, subsumption, 又可以从一个类型是父类的对象去调用。但是,inheritance, subclassing, subtyping这三者并不是永远和睦相处的。在一些...
软件设计师面向对象知识点:面向对象系统的特性面向对象系统最突出的特性就是封装性、继承性和多态性。衡量某一种程序设计语言,看它是否是面向对象的程序设计语言,主要看它是否具有这三种特性。在这一章中我们将对它们逐个地进行分析。3.1 封 装 性3.1.1 什么是封装从字面上理解,封装就是将某事物包围起来,使外界不知道其实际内容。在程序设计中,封装是指将一个数据和与这个数据有关的作集合放在一起,形成一个能动的实体 ---- 对象,不必知道对象行为的实现细节...
软件设计师知识点:面向对象语言概论四四,彻底划清界限(继续分离Subclassing和Subtyping)在第二节我们讨论了部分分离Subclassing和subtyping的方法,即subclassing-implies-subtyping. 现今的多面向对象语言,如Ja, C#都是采用了这种技术。除此之外,还有一种进一步分离Subclassing和subtyping的方法。这种被称作inheritance-is-not-subtyping的方法通过完全割裂subclassing和subtyping之间的而在更大程度上方便了码的。它的产生很大程度上是由于人们想...