第9章系统设计技术.ppt

  1. 1、本文档共88页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
  2.UML图   UML的基本元素可以通过多种方式组合到一起,使用图形组可以完成以下建模任务:软件可视化、数据设计、算法设计、软件设计、软件说明书、软件开发过程、工业过程等。表9-3列出了几种基本的UML图。图9-7给出了这些图的示例。 表9-3 UML 图 图9-7 UML图示例 图9-7 UML图示例 9.3.2 结构描述   结构描述用于定义系统的基本构件。面向对象设计的首要构件自然是对象。一个对象包括定义其内部状态的属性集。当使用程序设计语言实现时,这些属性通常是一种数据结构中的变量或常量。有时,我们会在属性名后加上类型声明,但不总是对属性指定类型。图9-8说明了一个用UML符号表示的描述显示器(如CRT屏幕)的对象。折角页状图标中的文字是注释,它不对应于系统中的对象。在这里,属性是保存显示器内容的像素数组。对象有两个特征:它有唯一的标识名以及它是一个类的成员。 图9-8 UML表示法中的对象   1.类   类是类型定义的一种形式——从同一个类导出的所有对象尽管其属性可能有不同的值,但它们都有相同的性质。类定义了对象可能有的属性,也定义了对象与外界交互的操作。 使用编程语言,操作将变成用来控制对象的一小段代码。图9-9所示是Display类的UML描述。Display类定义了对象中的pixels属性,当对象将一个类实例化时,对象就有了自己的存储空间,以便同一个类的不同对象有自己的属性值。其他的类能检查和修改类的属性。 图9-9 UML表示法中的类   2.选择合适的界面   显然,选择界面是面向对象设计中非常重要的决策。正确的界面必须提供访问对象状态的方法(因为属性不能直接访问)和更新状态的方法。对象的界面必须通用,以充分利用它的性能。然而,过分通用会使对象庞大而缓慢。大而复杂的界面同样会使定义类的工作对于设计者来说难以理解和使用。 对象和类之间存在若干种类型的关系: 关联——发生在彼此通信但没有从属关系的对象间。 聚集——描述由较小的对象组成的复杂对象。 组合——是一种聚集类型,其中所有者不允许访问构件对象。 泛化——允许我们通过其他类定义类。   3.类和对象的软件实现   因为UML用于设计的很多阶段,所以它不是一种程序设计语言。因此,它的概念有时看起来很抽象。它有助于在程序设计语言中使用类和对象前理解其抽象概念。首先,我们用直接支持面向对象技术的C++语言实现Display类和d1对象。下面是Display类的定义: class Display {     pixels: pixeltype[IMAX, JMAX];   public:     Display( ) { } /*一个创建类的结构体的实例*/     pixeltype pixel(int i, int j) {       return pixels[i,j];       /*为清楚起见无限制地检查*/     }     void set_pixel(pixeltype val, int i, int j) { pixels[i,j] = val; } };   在C++中,操作被称为方法。它包括参数列表、返回类型和方法的代码。C++代码比UML规格说明包含更多的细节,这是因为我们使用C++实现类,而UML描述仅仅抓住系统的本质特征。Display类的例化为对象d1:    Display d1;   d1的例化在内存中建立了为d1保存像素值的数据结构。例如,类中定义的方法能调用d1,以控制它的像素值:   apixel = d1.pixel(0,0); /* 获取pixel [0,0]的值 */   object.method()的表示法说明正在运行特定对象的方法。确保特定方法可以在给定对象上使用是一种类型检查操作。   在非面向对象语言(如C语言)中实现类和对象具有一定的挑战性,但是仍能做得相当好。下面是一种描述Display类的属性和操作的方法:   /* 这些操作都在一个二维pixels数组上执行 */   pixel pixelval(pixel *px, int i, int j) { return px[i,j]; }   void set_pixel(pixel *px, pixeltype val, int i, int j) { px[i,j] = val; }   这里我们选择不定义像素数组的显式类型,因为它是一个基本二维数组;在其他情况下,可用结构体定义对象的属性。我们定义了两个函数来实现操作,注意,与C++代码相比这些函数有额外的参数,第一个参数是我们要操作的数组。在面向对象语言中,像object.method()这种形式的符号用来运行特定对象的操作。当用C语言实现这

文档评论(0)

***** + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档