需求分析与系统设计2.ppt
《需求分析与系统设计2.ppt》由会员分享,可在线阅读,更多相关《需求分析与系统设计2.ppt(236页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、需求分析与系统设计需求分析与系统设计 第二章第二章 需求分析基础需求分析基础 面向对象的开发要求对对象技术有很好的理解。没有对对象技术深层次的理解,开发人员就不能正确地使用UML作为惟一且贯穿全过程的建模语言。学习面向对象技术是一种“从中间出发”的方法。不管我们如何加快学习的进程,我们总是处于学习过程的中间阶段(由于新的问题总在出现)。当读者理解了在面向对象系统中“任何东西都是对象”这个事实的深刻含义后,才算是通过了成功学习的第一阶段。第二章第二章 需求分析基础需求分析基础 l2.1对象技术基础 l2.2分析建模中的学习指导 l2.3案例分析的问题陈述 2.1对象技术基础 解释信息系统中面向对
2、象概念的一个好的方法是提供与具体的实际生活中对象的一个类比。l我们周围的世界由一个个处于特定状态的对象组成,对象的状态由该对象当前的属性值来确定。l一些实际生活中的对象具有行为。l所有现实生活中的对象还有身份,这一个固定的特性,通过它我们可以将一个对象从别的对象中识别出来。具备三个特性(状态、行为、身份)的现实生活对象构筑自然行为系统。2.1对象技术基础l2.1.1实例对象 l2.1.2类 l2.1.3关联 l2.1.4聚合和组合 l2.1.5泛化 l2.1.6类对象 2.1.1实例对象 l对象是“东西”的实例,它可以是同一个“东西”的多个实例中的一个。l一件“东西”的通用描述称为一个类,因此
3、,对象是类的实例。l但是,类本身也可能需要实例化,它可以是对象。由于这个原因,我们需要区别实例对象和类对象。2.1.1实例对象l2.1.1.1对象表示法 l2.1.1.2对象如何协作 l2.1.1.3对象如何相互识别 2.1.1.1对象表示法 lUML的对象表示法是含两个格的长方形,上面的格子包含对象的名字和该对象所属类的名字。其语法为:objectname:classname l下面的格子包含属性名和属性值的一个列表。属性的类型可以用下面的语法形式给出:attributename:type:=value 2.1.1.1对象表示法 图2-l给出了一个名为c1的Course对象,这个对象有两个属
4、性,这个属性的类型没有说明它们已经在类的定义中声明了。重要的是,要注意对象表示法没有提供罗列实例对象可以执行的操作的格子,这是因为操作对所有实例对象是相同的,要是在每个实例对象中都重复存储会带来冗余。操作可以用其他方式存储在与实例对象关联的类对象中(在基本面向对象系统软件中实现)。2.1.1.1对象表示法 2.1.1.2对象如何协作 l特定类的对象的数目可以非常大。在一个图中显示许多对象是不现实的,也是不可行的。画出对象只是为了示例某个时间点上的系统,或者示例它们如何协作来完成某项任务。l系统任务由相互调用各自的操作(行为)的一组对象来完成。我们称它们在交换消息。消息触发了对象上的操作,而操作
5、可以导致对象状态的改变并调用其他的操作。2.1.1.2对象如何协作 图2-2给出了四个对象之间的消息流。消息名之后的括号表明消息可以带有参数(就像在传统程序设计中的函数调用一样)。对象Order请求对象Shipment装运所订购的货物,为了实现请求,Shipment命令对象Stock从产品库存量中减去适当的数量,然后对象Stock分析新的存货量,如果库存量很低,它请求对象Purchase再订购更多的这种产品。2.1.1.2对象如何协作2.1.1.2对象如何协作 虽然我们将上述对象协作解释为一个活动序列,我们甚至为消息编了号,但通常消息流并不将严格的时序强加在对象的活动上。例如,analyzeS
6、tockLevers或 reorderProducts可以按任意的)顺序执行,可能还独立于 shipOrder和 subtractProduct。由于这个原因,我们在设计级讨论对象的协作时将放弃给消息编号。2.1.1.3对象如何相互识别 一个对象怎么知道它想要发送信息的另一个对象的身份?每个对象在创建时都被赋予一个对象标识符(OID),OID是对象的句柄,它是惟一个在对象的整个生命期中都保留的编号。如果对象X想要发送一条消息给对象Y,那么X必须知道Y的OID。建立对象间的OID 链接有两个实际的方案 l永久OID链接。l临时OID链接。2.1.1.3对象如何相互识别 这两种OID链接之间的区分
7、必须与对象的生命期一起考虑,一些对象只在程序执行期间才是活动的,它们由程序创建并在程序执行期间或程序终止执行时消失。这些是临时对象。其他一些对象比程序的执行更长寿,它们在程序终止时存储在永久磁盘存储器中,并且在程序的下一次执行中仍然有用。这些是永久对象。2.1.1.3对象如何相互识别l2.1.1.3.1永久链接l2.1.1.3.2临时链接2.1.1.3.1永久链接 永久链接是永久存储中的一个对象链接到永久存储中的另一个对象(或一组其他对象)的一个对象关联(或一组对象关联)。因此,为了将一个Course对象永久地链接到它的Teacher对象上,对象Course必须包含一个链接属性,该属性的值为对
8、象Teacher的OID,这个链接是永久的,因为这个OID被物理地存储在对象Course中,如图2-3所示。2.1.1.3.1永久链接2.1.1.3.1永久链接 对象c1的OID在这里被标记为Ref&*)(,这个对象包含一个名为teacher的链接属性,这个属性的类型是identtity,它的值是一个奇怪的数Ref#$%,表示对象Teacher被永久存储的磁盘地址。一旦对象Course和对象Teacher被调进内存,Teacher属性的值将被掺合成内存指针,从而建立对象间的内存级协作(掺合并不是UML的术语它用在对象数据库中,在那里,对象在永久存储器和临时内存之间的调进调出是很频繁的)。2.1
9、.1.3.1永久链接 图2-3示例了一般情况下如何实现永久链接。然而,在UML建模过程中,对象之间的链接被画成如图 24所示形式,这些链接表示成对象Course和 Teacher关联的实例。2.1.1.3.1永久链接2.1.1.3.1永久链接 通常,协作链接支持双向导航。每个Course对象链接到它的Teacher对象,并且每个Teacher对象可以通向Course对象。当然虽然不太经常只允许一个方向的导航也是可能的。一旦一个对象永久地链接到另一个对象,它可以顺着该链接发送消息请求另一个对象的服务,这就是说,一个对象能够通过发送消息给另一个对象来调用它上面的操作。通常的情景是,为了指向一个对象
10、,消息发送者将使用程序的变量来包含那个对象的链接值(OID值)。2.1.1.3.1永久链接 例如,由对象Teacher所发送的用来发现对象Course的一个消息可以成为如下形式:crs.ref.getCourseName(out crs_name)在这个例子中,特定的将用来执行getCourseName的类Course的对象被链接变量crs.ref的当前值所指向,输出(out)参量crsName是要用在类Course中实现的操作getCourseName返回的值初始化的变量。2.1.1.3.2临时链接 如果我们没有定义Course和Teacher之间的永久链接,但是我们还需要由对象t1发送一个
11、消息到对象c1来调用操作getCourseName,结果将会怎样呢?应用程序必须有其他方式来找出对象c1的身份,并且创建从对象t1到对象c1的临时链接。2.1.1.3.2临时链接 有许多技术通过内存来驻留对象c1的OID并对变量crs.ref进行初始化。l对老师(Teacher)的t1有效性以及课程(Course)的时间表执行了一次搜索操作,已经确定老师t1应该教课程c1。l程序已经访问了将课程编号映射到老师编号的永久存储表,然后可以对Course对象进行搜索,以找到所有由老师t1所教的课程,并且请求用户确定消息getCourseName将要发给的课程。l在将它们存放到数据库中去之前先创建课程
12、和老师。在老师和课程之间没有永久链接,但是用户要输入信息使得每个课程清楚地标识一个负责的老师。这个程序然后可以将这个临时链接存放在程序变量(如crs_ref)中,而且这些变量以后可以被用来(在同一次程序执行期间)在 Teacher和 Course对象之间发送消息。2.1.1.3.2临时链接 简而言之,存在程序的和用户驱动的技术,为类之间还没有通过关联永久链接起来的对象之间建立临时链接。临时链接包含当前在程序内存中的对象OID值的程序变量。临时和永久OID间的映射(掺合)应该是基本程序设计环境的责任,如对象数据库系统。2.1.2类 类是一组具有同样的属性和操作的对象的描述器,它作为对象创建的模板
13、。每个按该模板创建的对象,包含与该类定义的属性类型一致的属性值,每个对象可以调用在它的类中定义的操作。2.1.2类 在图形表示上,类表示为带有三个用横线隔开的长方形的格子,如图2-5所示。顶上的格子保存类名,中间的格子声明类的属性,下面的格子包含操作的定义。2.1.2类l2.1.2.1属性 l2.1.2.2操作 2.1.2.1属性 属性是一个类型值的对,类定义属性类型,对象包含属性值,图26示例了两个带属性名和定义的属性类型的类。属件类型可以是内部原始类型,也可以是另一个类。原始类型为可直接理解的类型,并由基础面向对象软件环境所支持。图26中的所有属性类型都指派为原始类型。2.1.2.1属性l
14、2.1.2.1.1指派为类的属性类型l2.1.2.1.2属性可见性2.1.2.1.1指派为类的属性类型 一个属性类型也可以指派为一个类,在某类的特定对象中,这样的一个属性包含一个对象标识符(OID)值,这个值指向另一个类的一个对象。在UML分析模型中,属于基于类的类型的(不是原始类型)属性不出现在类的中间格子中,改为用类之间的关联来表示。图2-7显示了这样的两个类之间的关联。2.1.2.1.1指派为类的属性类型 关联线上的两个名字(the_shipment和 the_order)表示角色名,角色名标识本关联端点的含义,并用于建立映射到关联中另一个类的一个对象的导航。2.1.2.1.1指派为类的
15、属性类型 在所实现的系统中,角色名(这个关联的另一个端点)成为一个类属性,它的类型为由该角色名指向的类。图2-8显示了来自图2-7的两个类在它们将要被最终实现时的情景。2.1.2.1.2属性可见性 对象通过相互发送消息来协作。一个消息调用一个类操作。这个操作通过存取它自己对象中的属性值为调用对象的请求提供服务。一个可能的情景是,这个操作必须对外面的对象是可见的(消息必须看得见操作),这样的操作被称为具有公共可见性。2.1.2.1.2属性可见性 在纯面向对象系统中(就像Smalltalk程序设计环境所示例的那样),大多数的操作都是公共的,但大多数的属性都是私有的,属性值对其他的类是隐藏的。一个类
16、的对象只能请求另一个类在公共界面上发布的服务(操作),它们不允许直接操作其他对象的属性。2.1.2.1.2属性可见性 操作封装了属性。然而必须注意,封装只作用到类。一个对象不能对相同类的另一个对象隐藏(封装)任何东西。可见性通常用加号或减号来指派:l+指公共可见性l-指私有可见性 这些符号在某些 CASE工具被替换为图标。图 2-9显示了表示属性可见性的两个图形表示。2.1.2.1.2属性可见性2.1.2.2操作 对象包含数据(属性)以及作用于这些数据的算法(操作)。操作在类中声明。实现这个操作的过程称为方法。操作(或更精确地说是方法)由发送给它的消息所调用。消息名和操作的名字是相同的。操作可
17、以包含一列参数,这些参数可以在消息调用时设置为特定的值,操作可以给调用的对象返回一个值。操作名与一列形式参数的名字合在一起称为操作的型构,型构在类中必须惟一,这意味着一个类可以有多个相同名字的操作,但它们的参数类型的列表不同。2.1.2.2操作l2.1.2.2.1操作支持对象协作l2.1.2.2.2操作可见性和范围2.1.2.2.1操作支持对象协作 面向对象程序通过响应来自于用户的随机事件来执行,这些事件来自键盘、鼠标、菜单。活动按钮以及任何其他输入设备。用户产生的事件转换为发送给对象的消息。为了实现一个任务,许多对象需要协作,它们通过调用其他对象中的操作来协作。2.1.2.2.1操作支持对象
18、协作 图2-10展示了支持图2-2中的对象协作所必须的类操作,图2-2中的每个消息都要求由消息目的地指派的类中的操作,在这个例子中,类Order没有任何操作,类Order的一个对象启动了这个协作,这个Order对象请求一个Shipment对象为它运送货物,作为货物运送的结果,库存需要新的产品来补充。2.1.2.2.1操作支持对象协作2.1.2.2.2操作可见性和范围 操作可见性原理与属性可见性并没有什么不同,操作可见性定义该操作在不同于该类的其他类的对象中是否可见。如果是可见的,则该操作的可见性为公共的,否则是私有的。图2-10中操作名之前的图标表示了公共可见性。2.1.2.2.2操作可见性和
19、范围 面向对象系统中的大多数操作具有公共可见性,对于为外界提供服务的对象来说,“服务”操作必须是可见的。然而,大多数对象也有许多内部管理操作,这些操作被赋予私有可见性。它们只在它们被定义的类中是可存取的。2.1.2.2.2操作可见性和范围 操作可见性需要与操作范围区别开来。操作可以在一个实例对象中被调用,或者它还可以在一个类对象中被调用。对前一种情况,操作被说成是具有实例范围,而后一种情况则具有类范围。例如,寻找雇员的年龄的操作具有实例范围,但计算雇员的平均年龄的操作就具有类范围。2.1.3关联 关联是类之间的一种关系,类之间的其他关系还包括泛化、聚合、依赖和其他更多一些。关联关系提供给定类的
20、对象之间的一个链接,需要相互通信的对象可以使用这种链接。对象之间的消息一般是沿着关联关系发送的。图2-11展示了类Order和 Shipment之间的名为 Ordship的关系,这个关系支持一个Order对象被运送(被链接)到多于一个Shipment对象(由星号*指明),而且一个Shipment对象能够运载(链接)多于一个Order对象。2.1.3关联2.1.3关联 l2.1.3.1关联度 l2.1.3.2关联多重性 l2.1.3.3关联链和程度 l2.1.3.4关联类 2.1.3.1关联度 关联度定义被这个关联连接起来的类的数目,最常见的关联为二度关联,这种关联称为二元关联。图2-11中的关
21、联是二元的。关联还可以只定义在一个类上,这称为一元(或单元)关联,一元关联建立单个类的对象之间的链接。虽然一般不建议这样,但三度关联(三元关联)也是可能的。2.1.3.1关联度 图2-12是一元关联具有代表性的例子,它捕获了雇佣的层次结构,一个Employee对象被另一个Employee对象所控制(managed_by),或不被任何人控制(即他是首席执行官(CEO),不被任何人控制),一个Employee对象是许多Employee对象的控制者(manager_of),除非他是雇佣梯队中最底层的雇员,那样他不控制任何人。2.1.3.1关联度 2.1.3.2关联多重性 l关联多重性定义多少对象可以
22、填充由角色名标识的位置,多重性指出多个目标类的对象(由角色名所指向的)可以与源类的单个对象关联。2.1.3.2关联多重性 多重性表示为一个整数范围nl.n2,整数nl定义所连接的最少对象的数目,而n2则为最多对象数(如果不知道确切的最大数的话,最大数可以用星号*表示)。如果不想指明最小数,但知道它可以被连接到多个对象,那根本就不指明最小数(如图2-11所示)。2.1.3.2关联多重性 最常见的多重性是:l0.1 l0.*l1.1l1.*2.1.3.2关联多重性 图2-13给出了类Teacher和 Courseoffering之间的两个关联。一个关联表示对当前排出课程的老师的安排,另一个关联确定
23、哪位老师负责哪门课程。一个老师可以教多门课或不教课(例如如果老师休假的话),一位或多位老师可以教一门课,由其中的一位老师负责这门课。通常,一位老师可以负责多门课或不负责任何课,一位且仅有一位老师管理课程安排。2.1.3.2关联多重性2.1.3.2关联多重性 关联多重性在UML中是一个含有过多含义的术语,“0”和“l”的最小多重性可以看成具有特殊语义的表示,称为成员关系或参与关系。“0”的最小多重性表示一个对象在一个关联中可选的成员关系,“l”的多重性表示强制的成员关系。例如,CourseOffering对象必须由一个Teacher对象所管理。2.1.3.2关联多重性 成员关系特性自身具有一些有
24、趣的语义。例如,特定的强制成员关系可以另外蕴涵该成员关系是固定的,即一旦对象链接到该关联的目标对象,它就不能再链接到同一个关联的另一个目标对象。2.1.3.3关联链和程度 关联链是关联的一个实例,它是一个对象引用的元组,这个元组是引用的集合或引用的表(有序集合)。通常,元组可以只包含一个引用。像以前讨论的那样,这个键也表示角色名。程度是链的集合。2.1.3.3关联链和程度 图2-14是图2-11中关联Ordship的一个特定实例,图2-14中有五条链,因此关联的程度是五。2.1.3.4关联类 关联经常有它自己的属性(和或操作),这样的关联必须用类来建模(因为属性只能在类中定义),关联类的每个对
25、象都具有属性值和对所关联的类的对象的链接。因为关联类是一个类,在通常情况下,它可以被关联到模型中的其他类。2.1.3.4关联类 图 2-15 示例了关联类Assessment,类Assessment的一个对象存储着ClassOffering中一个Student的分数表、总分和等级。2.1.3.4关联类 属性 mark的类型为 List(Number),它称为参数化类型,Number是类 List的参数,这里List定义一个值的有序集合,就是说,属性mark包含了在一门课程中学生得到的所有分数的表。就是说,如果学生“Fred”上了课程“COMR227”,总有他关于这门课的一个分数表(一个有序集)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 需求 分析 系统 设计
限制150内