《对象类图与对象》PPT课件.ppt

上传人:xin****828 文档编号:15491239 上传时间:2020-08-12 格式:PPT 页数:82 大小:4.37MB
收藏 版权申诉 举报 下载
《对象类图与对象》PPT课件.ppt_第1页
第1页 / 共82页
《对象类图与对象》PPT课件.ppt_第2页
第2页 / 共82页
《对象类图与对象》PPT课件.ppt_第3页
第3页 / 共82页
资源描述:

《《对象类图与对象》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《对象类图与对象》PPT课件.ppt(82页珍藏版)》请在装配图网上搜索。

1、一、对象类图与对象图,UML中的对象类图(Class Diagram)与对象图(Object Diagram)具有强大的表达能力,能够有效地对现实世界的业务领域和计算机系统建立可视化的对象模型。 类图与对象图用来表达对象模型的静态结构。,1,对象类图(类图),类图表达一组类和它们之间的联系。 描述各个对象类本身的组成,即类的属性、操作和对对象的约束条件等。 描述系统中对象类之间的各种静态的联系。 类图是一种静态结构图,它描述的是系统的静态结构,而不是系统的行为。 类之间的静态联系主要类型有:关联、聚合、复合、继承、依赖等,2,一、对象类图示例,3,读卡机 -卡号 接收卡() 弹出卡() 读卡(

2、),帐目 -帐号 -PIN -结余 打开() 取钱() -扣钱() -验钱数(),ATM屏幕 提示() 接收输入(),取钱机 -结余 提供兑现() 提供收款(),ATM系统,主要内容,1.类的可视化表示 2.类的发现 3.类之间的关系 4.语境 5.接口与实现 6.对象图 7.类的高级概念 8.类图的建立,4,1.1 类名,类名:类名必须唯一,可以是简单名,也可以是路径名。 如果用英文,则单词首字母 大写,多单词合并写。,5,学生,学校:学生,学校,WashingMachine,包名在左,类名在右,中间用双冒号隔开。这种类型的类名叫:路径名(pathname)。,1.2 属性1,属性:属性是类

3、的一个特性。一个类可具有零个到多个属性;属性名必须唯一。 类属性的表示: 可视性 属性名 多重性:类型=初始值 可视性:+ 公共 # 保护 - 私有 多重性:说明该属性可取多少值。如:3,4,*,0.* ,.等。 (*表示任意非负整数) 类型:属性值的数据类型。依赖于实现语言。 =初始值:新建对象时该属性的初始值,6,1.2 属性2,属性名如果用英文,一般头一个单词的首字母小写。,属性表示:,7,学生 +姓名:string 性别2:string -年龄:integer=18 ,WashingMachine brandName modelName serialNumber capacity,指出

4、下面属性名的含义? + studentName : String = “黎明” # studentBirthDay : Date = 1999-10-21 - price : Real = 12.01 R / W ,8,Static Parts of Classes,9,An attribute or operation is made static in UML by underlining it; the accountCounter attribute will be used to keep a running count of the number of objects create

5、d from the BlogAccount class,1.3 操作1,操作:操作是类能够做的事或是能对类做的事情。一个类可具有零个到多个操作;操作名必须唯一。 类操作的表示: 可视性 操作名(参数列表):返回列表 参数列表:参数名1:类型=缺省值,参数名2:类型=缺省值, 返回列表:规定了当该操作完成返回时的返回值的类型。(函数)格式 返回名字1:类型,返回名字2:类型, 操作的全部信息称为操作的型构。通常在设计阶段指明操作型构。型构对程序设计人员非常有用。(注意操作和方法的区别),10,1.3 操作2,操作表示:,11,WashingMaching brandName addClothe

6、s() +addDetergent(D:integer) removeClothes(C:string) turnOn():boolean,1.4 构造,如果属性或操作太多,可以用构造型来组织属性或操作列表。,12,WashingMachine brandName modelName serialNumber capacity addClothes() addDetergent() removeClothes() turnOn(),1.5 约束,是一个用花括号括起来的自由格式的文本。括号中的文本指定了该类所要满足的一个的或者多个规则。,13,WashingMachine brandName m

7、odelName serialNumber capacity addClothes() .,capacity=16 or 18 or 20 lb,1.6 职责,职责用来描述类的属性和操作能完成的任务。在图标中,职责在操作区域下面的区域中说明。,14,WashingMachine Responsibility: Take dirty clothes as input and produce clean clothes as output,1.7 注释,注释给类添加了更多的信息,15,WashingMachine brandName modelName serialNumber capacity

8、addClothes() .,序列号的生成参 考美国政府标准 EV 5-2241,1.8 属主范围,属性:属主范围有两种 实例:如果一个属性的属主范围是实例,则该类的每一个对象都有一个自己的该属性值。 分类符:如果一个属性的属主范围是分类符,则对于该对象类本属性只有一个值,该类的每一个对象都持有此唯一的属性值。要在属性名下加下划线。 操作:也有属主范围区分,含义与属性相同。对象的构造操作(构造函数)必须带有下划线,表示它的属主范围是分类符。,16,分类符-共享数据和共享操作,如何放置下列信息和服务:(1)储蓄账户的当前利率(2)计算给定年数的复合利息(3)二月份的天数(4)计算今年是否为闰年

9、问题:把这些元素放在特定的对象中是否合适?浪费空间和时间。 分类符:Java允许用关键字static表示元素与整个类相关,而不与类的实例相关。 替代方法:(1)找出或引入另一种对象类,例如:引入Bank对象。(2)使用单一的类,这种类可确保只有一个实例(单一对象作为服务对象,客户对象不能创建服务对象)。,17,与Account类相关,与Calendar类相关,interestRate,1.9 类的可视化表示,18,Circle,Circle centre radius area() move() scale(),Circle -centre:float -radius:float +Circl

10、e() area():float move(location:Point) scale(ratio:float) .,(a)概念层,(b)分析层,(c)实现层,2. 类的发现1,同客户交谈,分析他们的领域知识。注意客户描述业务事件流中的名词术语,也要注意客户提到的动词。 名词:可作为领域模型中的类或类中的属性。 动词:可能会构成类中的操作。,19,候选类(名词)的快速删除,系统本身:系统只是开发过程的一个边界。 参与者:边界匿名驱动力。混淆情况:内部需要存储参与者信息。 边界:边界是允许参与者获得对象的特定软件。 小类型:作为属性,可以假定这些由实现语言或它的库提供。 如果不能给类写出简短的描

11、述,就可能希望它表示更多的内容,此时应分解为多个类。,20,2. 类的发现2,篮球比赛:比赛目标是要把篮球投入蓝框并且尽量比对手得更多的分。每个篮球队由5名队员组成:2名后卫、2名前锋和1名中锋。每个队要将球推进蓝框附近(通过运球和传球),目的将篮球投入蓝框(必须在规定的时间内投入,美国职业是24秒,国际是30秒,美国大学是35秒)。计算得分:三分线内得2分,线外得3分。对方犯规后在罚球线处罚球投入得1分。 名词:篮球、蓝框、篮球队、队员、后卫、前锋、中锋、投入、进攻时间、三分线、罚球线、球场、比赛时钟等 动词:投蓝、推进、运球、传球、犯规、.等,21,2. 类的发现3,22,蓝球,队员,球队

12、,后卫,前锋,三分线,蓝球场,罚球线,直径 体积 被运球() 被投蓝() 被传球() 被推进(),姓名 身高 体重 运球() 传球() 投蓝() 拦板球() .,主要做运 球和传球,主要做抢蓝 板球和中距 离投蓝,中锋,靠近蓝框 以便蓝下 进攻,进攻时间,pro=24s college=35s Intl=30s,蓝框,3. 类的关系,1. 关联:一种类型的对象与另一种类型对象的联系。 多重性 限定关联 自身关联 依赖 2. 聚合:强关联-一个类的实例有另一个类的实例构成。 3. 复合:强聚合-复合对象不能有其他对象共享,且与构成它的对象一起消亡。 4. 继承:子类继承了超类的所有属性和行为。

13、在分析过程中,这些关系出现的频率为:关联 聚合 继承 复合,23,24,UML offers five different types of class relationship,3.1关联1(association),关联:类之间在概念上的连接关系。 表示法:关联线段、关联名、关联方向、角色、约束等,25,队员,球队,效力,雇员,雇主,队员,球队,球队,后卫,前锋,中锋,雇佣,效力,效力,二元关联,N元关联,3.1 关联2,约束:用来说明关联的规则或含义,26,出纳,顾客,有序,高中生,对类的约束,专业课,商务课,选择,选择,or/xor,两个关联之间的约束,3.1 关联多重性,多重性表示参

14、与类关联的对象数,27,队员,球队,5,1,帐户,用户,密码,*,*,1,*,user,owner,key,人,单位,工作岗位 聘用期 工资 .,聘用者,*,0.1,关联的方向,28,此类图中的关联代表什么含义? 一个教师可以开设一到三门课,一门课程有一到多个教师教授。 如果有有序约束呢?,29,3.1 关联3,关联类:关联也可以有自己的属性和操作。表示方式与类相同,用一条虚线与关联线相连。,30,队员,球队,契约,总经理,效力,谈判,31,顾客,供应商,商品,订货 商品编号 商品名 单价 数量 总价 日期,*,*,*,对象类N元关联示例,3.1关联限定关联,限定关联是一个用来解决查找问题的关

15、联。在关联端紧靠源对象类可以有限定符,包含在小矩形框内,代表被关联对象类一个或多个属性的列表。,32,职员,预订房,房间许可号,找出,1,*,3.1 关联自身关联,自身关联又称为递归关联,是一个对象类与本身的关联,即一个类中的对象之间的联系。,33,职务 职责 薪水 ,工作 人员,经理,1,*,管理,轿车上的人员,1,driver,0.4,passenger,Drives,3.1 关联依赖,依赖:一个类使用了另一个类的关系。表示:一条虚箭线连接有依赖关系的两个类,箭头指向被依赖的类(称为供应者),依赖类称为客户。 依赖可以加上构造型,常用的构造型有、等。,34,System displayFo

16、rm(f:Form),Form,3.2 聚合,聚合:类之间整体和部分弱关系。称为“has-a”联系。 整体类被删除,部分体类还存在。 表示方式:在关联线的整体端加上一个空心菱形。,35,套餐,汤,沙拉,主食,甜点,1,1,1,1,1,xor,3.3 复合,36,咖啡桌,桌面,桌腿,1,4,1,复合:类之间整体和部分强关系。称为“contains-a”联系。 整体类被删除,部分体类不存在。 表示方式:在关联线的整体端加上一个实心菱形。,3.4 继承,继承是现实世界中实体之间一般与特殊的关系。 从编程的观点来看,需要继承是因为: 它支持更丰富、更强大的建模。这有利于开发小组和其他想重用代码的开发人

17、员。 它可以在一个类中定义信息和行为,在相关的子类中共享这些定义。这样编写的代码比较少。 继承是很自然的。它是面向对象的主要动机之一。 表示格式:用父类到子类之间的连线表示继承关系,在父类的一端带有空心三角形。这种连接的语义为 is a kind of。,37,一般性元素,特殊性元素,38,陆地交通工具建模,LandVehicle topSpeed:float getTopSpeed( ):float setTopSpeed (:float),Car milesPerGallon:float getMilesPerGallon( ):float setMilesPerGallon(:float

18、),Bicycle numberOfGears:int getNmberOfGears( ):int setNumberOfGears(:int),Truck axleWeight:float getAxleWeight( ):float setAxleWeight(:float),在分析问题论域时,要找出继承关系,并抽象类。,39,队员 姓名 . 运球() 传球() .,后卫,前锋,中锋,单门课,数学课,毕业设计,公共课,实践课,专业课,理论课,40,人,学生,教师,人,学生,教师,对象类的继承表示,课堂练习,1、举出一个具有聚合关系的类图的例子。 2、举出一个具有组合关系的类图的例子。 。

19、,41,42,43,3.4 继承-设计类的层次结构,例子:给集合(Collection)建模。集合是可以包含其它对象的对象。 四类集合: Bag:该集合中的对象没有顺序。 List:该集合可以把所有的对象按照插入的顺序放置。 LinkedList:该集合中的对象使用链表来排序。链表很容易更新,但访问速度慢,因为必须沿着链表向下搜索。 ArrayList:该集合中的对象使用数组来排序。数组访问速度快,但更新比较慢,因为在每次更新时,必须移动元素。 问题:如何把这4个子类和Collection放在继承的层次结构中?关键要找出类似之处。,44,45,Collection,Bag,List,Array

20、List,LinkedList,无序,不涉及内部实现,涉及实现 (空间和时间折中方案),这个过程是在已知所有类的情况下建立层次 结构,实际情况:首先确定层次结构底部有 哪些类,接着找出比较一般的概念,以丰富 模型,共享元素的定义。,考虑下面三个消息(操作),将它们放入集合类的层次结构中:1.contains(:Object):boolean-在集合中搜寻对象,找到,返回true,否则返回false。2.numberOfElements():int-返回集合中的对象数。 3.elementAt(:int):Object-在参数指定的位置检索对象。 把这些消息放在已有类的什么地方?,46,Coll

21、ection,Bag,List,ArrayList,LinkedList,可以用于任何种类的集合,位置作为参数,所以必须处理有顺序的对象,contains(:Object):boolean numberOfElements():int,elementAt(:int):Object,斜体表示还没 有考虑方法,实现-抽象和重定义,不能在Collection类中编写contains方法,因为有序和无序集合搜索算法不同。因此,对Bag和List分别实现contains方法。 List的contains算法:1 boolean contains(Object o)2 for (int i=0;inumb

22、erOfElements() ;+i) 3 if (elementAt(i)=o) 4 return true;5 6 7 return false;8 继承的好处:只编写一个方法,可以用于List的任何直接或间接子类,而List可以有许多子类。,47,elementAt 操作的实现代码不同:ArrayList 的 elementAt:直接访问元素LinkedList 的 elementAt:沿着列表向下访问 numberOfElements 编写实现代码:取决于把集合对象总数值存储为字段,还是在要求时计算总数值: 存储为字段:增删对象时,该字段值必须修改。随时跟踪对象数,但占用空间,增删对象

23、时操作慢。 要求时计算:对于LinkedList来说非常慢,因为要遍历所有元素。对于Bag和ArrayList类来说,内部对象可能以某种方式存储了元素数,所以操作非常快。不浪费存储空间,不影响增删对象的速度。 需要解决时间-空间折中问题:这两种方法都不适用所有类,也不适用所有List对象,建议在三个叶子类Bag、ArrayList、LinkedList中分别放置一个numberOfElements方法。,48,49,Collection contains(:Object):boolean numberOfElements():int,Bag contains(:Object):boolean

24、numberOfElements():int,List contains(:Object):boolean elementAt(:int):Object,ArrayList elementAt(:int):Object numberOfElements():int,没有方法的操作 称为抽象操作或 抽象方法,LinkedList elementAt(:int):Object numberOfElements():int,抽象类至少有一个抽象方法的类,抽象方法可以是该类本身的方法,也可以是超类继承来的。 抽象类有如下优点: 它们允许更丰富、更灵活地建模。 它们可以共享更多的代码,因为可以编写具体的

25、方法来使用抽象方法,例如:List的contains方法调用了抽象方法。 抽象是一件很自然的事,所以面向对象提供了这个功能。如:给水果削皮。 问题:如果创建一个抽象类对象,调用其抽象方法,会发生什么? -对象不知道该做什么。 大多数面向对象的语言都禁止创建抽象类的实例。 大多数情况下,超类都是抽象的。如果一个具体类希望继承了另外一个具体类的某部分,尝试转化。 即使没有在超类中发现抽象方法,UML也允许把超类标记为抽象的。,50,重定义方法-多态性,重定义方法三个原因: 继承的方法是抽象的,希望给它一些代码,把它变成具体的。 子类中的方法需要完成一些额外的工作。 可以为子类提供更好的实现代码(更

26、高效或更准确)。例如,如果给LinkedList类添加一个索引,就可以重新定义contains,使之比List使用的线性算法更快。 每种面向对象语言都允许重定义的方法调用超类已有的方法。在重定义元素时,不要改变其含义。,51,Void initialize() /Invoke the inherited initialize super. initialize() ; /Now do the extra stuff .,共享重用代码例子:实现栈类,一个 Stack 类带有四个消息(操作): push(:Object)-把对象添加到栈的顶部 peek():Object-返回栈顶的对象 isEmp

27、ty():boolean-如果栈中没有对象,返回true pop():Object-从栈顶删除一个对象,并返回该对象 查找类似已有的类。如:LinkedList 类,具有可重用的消息有: addElement(:Object)-在列表的尾部添加一个对象 lastElement():Object-返回列表尾部的对象 numberOfElement():int-返回列表中的对象数 removeLastElement()-删除列表尾部的对象 firstElement():Object、 removeFirstElement 等 行为类似,消息定义不同。可以通过继承或复合将LinkedList行为融合

28、到新的Stack类中。,52,使用继承实现栈,把 Stack 设置为 LinkedList 的一个子类。(在Java中,extends 表示“继承自”)Public class Stack extends LinkedList public void push ( Object o ) addElement(o); public Object peek () return lastElement(); public boolean isEmpty() return numberOfElement()=0; public Object pop() Object o=lastElement();

29、removeLastElement(); return o; ,53,LinkedList,Stack,LinkedList: addElement(:Object) -在列表的尾部添加一个对象 lastElement():Object -返回列表尾部的对象 numberOfElement():int -返回列表中的对象数 removeLastElement() -删除列表尾部的对象,现在可以创建栈对象实例,并使用它们Stack sk = new Stack();Object ot=new Object();.sk.push(ot);.ot=aStack.peek(); 问题:LinkedLi

30、st有一些不适合栈的操作,如:firstElement() 或removeFirstElement() 等 用户仍可以执行:ot=sk.firstElement();sk.removeFirstElement();这表明可以访问或删除栈底部的元素,这是不允许的。,54,55,使用复合实现栈,Stack 对 LinkedList 的内部引用。sk把其行为委托给LinkedList对象list 。 因为list是封装的,对它唯一的引用是在sk内部,因此,如果使用带有垃圾收集器的纯面向对象语言,在删除sk的同时就会删除list。,aLinkedList,aStack,Stack Push(:Obje

31、ct) Pop():Object isEmpty():boolean Peek():Object,LinkedList addElement(:Object) lastElement():Object removeLastElement() numberOfElement():int,复合的Stack,List,List,-list:LinkedList,56,Public class Stack private LinkedList list; public Stack() list=new LinkedList(); public void push ( Object o ) list.a

32、ddElement(o); public void peek () return list.lastElement(); public boolean isEmpty() return list.numberOfElement()=0; public Object pop() Object o=list.lastElement(); list.removeLastElement(); return o; ,这个类提供了栈需要的所有消息,但不能使用代码:ot=sk.firstElement(); 因为不再有firstElement消息了。 为了实现这个改进行为, Stack类必须声明和创建一个字

33、段,其方法必须引用该字段。,继承和复合(委托),继承有一些独特的优点: 自然的、优雅的 允许编写一般通用的代码 继承也有如下问题: 很难做的很好 在设计中发现不足时,很难改变 客户程序员很难理解 层次结构会“泄露”给客户代码,也难于改变,复合会得到与继承相同的结果, 但有如下优点: 较容易开发 较容易改变 客户容易理解 不会泄露给客户代码 在整体上,复合比继承好,规模 不大的应用程序不用继承完全合 理。继承最好留给专家,尤其是 实现可重用代码的大型库。,57,多重继承:类的层次结构中间层如何确定?,58,Vehicle,Unpowered,Train,Truck,JetPlane,Car,Fe

34、rry,Glider,RowingBoat,Bicycle,Yacht,Powered,59,Vehicle,Sea,Train,Truck,JetPlane,Car,RowingBoat,Glider,Ferry,Bicycle,Yacht,Land,Air,应选择哪一个层次结构?取决于问题领域(引擎制造商、世界观光旅游家或行李箱制造商),无法确定时,可用多继承。,60,Vehicle,Sea,Train,Truck,JetPlane,Car,RowingBoat,Glider,Ferry,Bicycle,Yacht,Land,Air,Powered,Unpowered,多重继承:相当复杂,

35、不建议采用。,使用继承的规则,不要过度使用:继承有替代方法,可以使用复合(委托)或使用属性,如:Car类使用color属性,就比使用三个类Car、RedCar和BlueCar更好。 类应是其超类的一个类型:例如,土豆不是一种水果。 类应是其超类的扩展:在子类中,应确保只添加新的特性,不要删除、禁用或重新解释特性,来分解超类。,61,选择属性还是选择关系:从顾客角度来看,如何为Car的颜色建模?,62,选(a)显得有点违背常理:“Color 是Car的一部分”; 就买主而言,选(b)比较好; 选(c)肯定过了头:给每种颜色的汽车都设置一种新类型,而汽车的颜色可能有 数十种;但对心理学家要了解汽车

36、的颜色对司机行为的影响,这样建模合理。 对汽车产家而言,选(d)最好:颜料产家比较重要-如果颜料用光,需要知道从 哪里购买。所以,可把Color单独建类,有自己的关系和属性。,Car,Color,Car Color,Car,RedCar,GreenCar,Car,Color,(a),(b),(c),(d),Car -color:Color,4. 语境 1,语境图:在一张大图中将某些局部“放大”以获得详细信息。 可以单独使用另一张图来放大某个类。,63,衬衫,衣柜物,衣架,衣挂,1,0.*,0.*,1,1,1,衣柜物,1,衣挂,*,4. 语境 2,64,衣袖,衣领,衣身,纽扣系统,纽扣缝,纽扣,

37、缝合到,2,1,扣住,1,1,1,1,1,缝合到,1,1,缝合到,5,6,1,1,1,缝合到,缝合到,0,2,3,1,衬衫类分解类图,衬衫,5. 接口和实现1,接口:是一组外部可以访问的操作,用于为对象类或组件提供服务。接口可作为一种特殊的抽象类,不含属性,它的操作也没有方法,既抽象操作。表示方式:用类的图标加上构造型,或用一个小圆表示,接口名标在圆旁边。,65, 接口名 操作名,接口名,66,Capturing an interface to an EmailSystem using the stereotype and ball UML notation; unlike abstract

38、classes, an interface does not have to show that its operations are not implemented, so it doesnt have to use italics,The SMTPMailSystem class implements, or realizes, all of the operations specified on the EmailSystem interface,5. 接口和实现2,实现:接口与提供在接口中定义的全部操作方法的对象类形成一个实现联系,是一种虚泛化联系。表示方法:用带空心的三角箭头的虚箭线

39、表示(虚泛化符),箭头指向接口。或用实线与小圆表示的接口相连。,67,实现类, 接口名,实现类,接口名,68,SecurityImp . checkID(id:Int):Bool checkPassword(pass:string):Bool .,系统其它类,问题:如果改变这个方法的工作方式或把C+安 全类换成Java安全类,则会影响整个系统。,系统其它类,安全检查例子,SecurityImp . checkID(id:Int):Bool checkPassword(pass:string):Bool .,SecurityImp,6. 对象图,对象图(Object Diagram)表示一组对象

40、和它们之间的联系。 对象是类的一个实例,对象之间的链接是其所属联系的一个实例,对象图是类图的一个实例。对象图有时也称为实例图(Instance Diagram)但它们所表达的内容、含义和侧重点有所不同的。 对象图的使用相当有限,它主要用来表达数据结构的示例,以及了解系统在某个特定时刻的具体状况。,69,70,公司,部门 部门名:string,员工 编号:integer 姓名:string 职务:string 取员工号() 取员工名() 取联系信息(),联系地址 地址:string,C1:公司,D1:部门 部门名=“销售部”,D2:部门 部门名=“研发部”,D3:部门 部门名=“国内部”,P1:

41、员工 编号=2 姓名=“张三” 职务=“销售经理”,:联系信息 地址=“和平路”,*,1.*,1,1,1,1.*,1,0.1,subset,成员,经理,D4:部门 部门名=“国外部”,.,7.1 类的高级概念参数对象类,参数对象类(Parameterized Class)又称为对象类模板,是带有形式参数的类的描述符,它定义了一个类的家族。在参数类中属性和操作都可以是形式参数来定义的(参数通常代表属性类型)。 参数类是不能直接使用的类,只有通过把参数类的形式参数绑定到实在参数时才得到一个类。绑定的类不能扩充参数类,即不能增加属性和操作。 表示方式:在类矩形框右上角挂一个小虚线框,框中标有生成具体

42、类所须指定指的参数。右上角虚线框中的“T”是一个分类,它说明这个类是创建其它类的模板。,71,T,7.1 参数对象类1,72,生物类 名称:string 高度:integer 体重:integer,T, 种:string,属:string,人,(人,智人,人类),生物,智人-种 种=“智人” 人类-属 或 属=“人类” 人- T T=“人”,7.1 参数对象类2,73,设置 insert(p,q) remove(p,q),T, p:integer,q:integer,职务表,(职务表,代号,工资),设置,职务表 insert(代号,工资) remove(代号,工资),8.1 类图的建立,建立对

43、象类图的一般步骤:1. 研究分析问题领域,确定系统需求。2. 发现对象与对象类,明确它们的含义和责任,确定属性和操作。3. 发现类之间的静态联系。着重分析找出对象类之间的一般与特殊关系、部分与整体关系,研究类的继承性与多态性。把类之间的静态联系用关联、继承、聚合、复合、依赖等联系表达出来。4. 设计类与联系。调整和精化已得到的对象类和类之间的联系,解决诸如命名冲突、功能重复等问题。5. 绘制对象类图并编制相应的说明。,74,8.3 项目与资源管理系统PRMS1,75,项目,活动,任务,资源,PRMS系统的高层项目管理对象类图,*,*,1.*,1,1.*,1,8.3 项目与资源管理系统PRMS2

44、,76,技能,资源,月薪工,计时工,PRMS的高层资源管理对象类图,*,*,资源-技能,77,技能 -name:string -desc:string +create():技能 +setName(name:string) +getName():string +setDesc(dect:string) +getDesc():string +destroy(),资源-技能 -prof:enumExpert,Novice -yearsExpr:real +create():资源-技能 +setProf(prof:enumExpert,Novice) +getProf: enumExpert,Novi

45、ce +setYearsExpr(yearsExpr:real) +getYearsExpr: real +destroy(),资源 -name:string +create():资源 +setName(name:string) +getName():string +destroy(),月薪工 -salary:real +create():月薪工 +setSalary(salare:real) +getSalary():real +destroy(),计时工 -rate:real +create():计时工 +setRate(salare:real) +getRate():real +dest

46、roy(),PRMS的详细资源管理对象类图,*,*,78,教学管理系统开发:项目 name=教学管理系统 desc=工程项目 startDate=2002/1/10,确定范围:活动 number=1 desc=确定项目范围 startDate=2002/1/10 hours=80 deliverable=范围文档,分析设计:活动 number=2 desc=分析与设计 startDate=2002/2/8 hours=80 deliverable=分析/设计文档,实现:活动 number=3 desc=实现 startDate=2002/3/9 hours=100 deliverable=系统

47、,考察:任务 number=1 desc=考察现有业务 startDate=2002/1/10 hours=40 resourceId=2,分析:任务 number=1 desc=需求分析 startDate=2002/2/8 hours=40 resourceId=2,范围:任务 number=2 desc=确定系统范围 startDate=2002/1/27 hours=40 resourceId=1,设计:任务 number=2 desc=设计解决方案 startDate=2002/2/16 hours=40 resourceId=3,测试:任务 number=2 desc=测试解决方案

48、 startDate=2002/3/16 hours=40 resourceId=3,编码:任务 number=1 desc=解决编码方案 startDate=2002/3/9 hours=40 resourceId=2,试用:任务 number=3 desc=试用解决方案 startDate=2002/4/1 hours=20 resourceId=3,PRMS的一个对象图,8.2 类图的建立,1.设计一组几何对象类图。组中父类为“几何单项” ,由之衍生“线”、“圆”、“方”,“椭圆”、“多边形”、“点”等类。,79,几何单项,多边形,圆,矩形,椭圆,线,点,80,几何单项,多边形,圆,矩形

49、,椭圆,线,点,1,1.*,有序,81,Engine,Wheel,Body,Driver,Passenger,Car,1,1,1.n,n,1,0.7,1,1,4.5,1,0.7,n,1,1,1.如图所示,Car和Engine之间的关系 最可能的实现是什么: (a)一个字段,其类型是Car,在Engine中。 (b)一个类CarEngine,它有一个Car类型的 字段和一个Engine类型的字段。 (c)一个字段,其类型为Engine,在Car中。 (d)一个字段,其类型为Engine,在Car中; 一个字段,其类型是Car,在Engine中。 2.下面哪些陈述是正确的? (a)汽车总是有唯一的车身。 (b)一些汽车有备用轮胎。 (c)汽车有一个引擎,引擎在汽车之间可共享。 (d)所有的汽车都有四或五个轮胎。 (e)汽车必须至少有一个司机。 (f)乘客不可能是司机。,二义性: 一位乘客只能在某辆特定的汽车上? 一位乘客在某一时刻只能在一辆汽车上?,作业,建立杂志类的组成语境图。要考虑到杂志中的目录、社论、一般文章、专栏。建立一个系统语境图。图中要展示出杂志类与订阅者类和普通购买者类之间的关系。 为你的居住地对象绘制一个层次结构图,要包括必要的继承关系和抽象类。 为你在学校所学过的所有科目和课程建立继承层次。要包括依赖关系(某些课程要求有先修课程)。,82,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!