1、考软件工程师证须知,UML 知识,Class contents,Stereotype 原型,attribute 属性,Generalization / inhabitant,泛化(Generalization),泛化(Generalization),父与子、动物与人、植物与树、系统使用者与B2C会员和B2E会员的关系,类A要完成某个功能必须引用类B,则A与B存在依赖关系,依赖关系是弱的关联关系。本来人与电脑没有关系的,但由于偶然的机会,人需要用电脑写程序,这时候人就依赖于电脑。,依赖关系,人依赖于电脑完成一些程序的动作。,当对象 A 被加入到对象B中,成为对象B的组成部分时,对象B和对象 A
2、之间为聚合关系。 场景:商品和他的规格、样式就是聚合关系。,聚合关系,商品 Product,样式 Style,规格 Spec,聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。,B,A1,A2,对象A包含对象B,对象B离开对象A没有实际意义。人包含手,手离开人的躯体就失去了它应有的作用。 场景: Window窗体由滑动条slider、头部Header 和工作区Panel组合而成。,组合关系,Window 窗体,滑动条Slider,头眉Header,工作区Panel,组合关系是一种更强的关联关系。,B,A1,A2,A3,类与类之间的单向关联图,类与类之间的双向关联图,B1-B
3、2: 表示B1认识B2,B1知道B2的存在,B1可以调用B2中的方法和属性; 同样B2也知道B1的存在,B2也可以调用B1的方法和属性。 订单和客户,订单属于客户,客户拥有一些特定的订单,类与类之间自身关联图,自关联, 比如,Employee & Manager,Class Node Private int data; private Node nextNode; public Node(int data) this.data=data; public void setData(int data) this.data=data; public int getData() return data
4、; public void setNext(Node next)nextNode=next; public Node getNext() return nextNode; ,自引用 self reference 类,自引用 self reference 类,编写,演奏,0*,0*,1,1,0*,2*,01,1*,0*,1,01,01,2007下半年软件设计师下午试题, 283页,Cardinality/multiplicity,关联的基数,333 页,Car entry,Car exit,Car entry when full,Report Statistics,停车场信息系统,驾驶员,Idl
5、e,Await Ticket Take,Await Entry,Await Enable,用例名称图,2008下半年软件设计师下午试题 382页,Online Reviewing System,User 用户,Author 作者,Reviewer审稿人,PCChair 委员会主席,list accepted/rejected papers,browse submitted papers,Assign paper to reviewer,include,extend,设定兴趣领域,审阅稿件 给出意见,其过程为,先输入标题和摘要、选择稿件所属主题类型、选择稿件所在位置(存储位置)。上述几步若未完成
6、,则重复;若完成,则上传稿件至数据库中,系统发送通知。, 包含关系,可以通过判断是否可以从一个用例的执行中,在需要时转向执行另一个用例,执行完返回继续,即存在extend关系。可选择的!,必须的!,用例之间的关系 -包含示例,必须的!,用例之间的关系 扩展示例,X1,X2,X3,UC5,UC4,UC3,UC2,UC1,UC3 是抽象的,X1 可通过 用例UC4或UC1与系统进行交互,用例UC2是用例UC4的可选部分,用例UC5 是用例UC4的必须部分,将用例“取款”扩展为用例“现金透支”,基本用例 (对扩展关系),扩展用例 (对扩展关系),基用例,基本用例依赖于包含用例,虚线箭头表示,由调用用
7、例指向被调用用例,2019/2/13,扩展关系,扩展用例依赖于基本用例,扩展用例,基用例 (执行用例),扩展用例的执行是有条件的,扩展用例 (对扩展关系),基本用例 (对扩展关系),基本用例 (对包含关系),包含用例 (对包含关系),网上购物,transaction,Session,customer,Bank,ATM System,435页,PIN=personal identification number,个人验证码错误,Session 一段时间,一次会话的序列图,readPIN(),PIN,Creat(atm,this,card,pin),performTransaction(),某企业
8、为了方便员工用餐,为餐厅开发了一个订餐系统 (COS: Cafeteria Ordering System), 企业员工可以通过企业内联网使用该系统。 企业的任何员工都可以查看菜单和今日特价。 系统的顾客是注册到系统的员工,可以订餐(如果未登陆,需先登陆)注册工资支付、预约规律的订餐,在特殊情况下,可以覆盖预订。 餐厅员工是特殊顾客,可以进行备餐、生成付费请求和请求送餐,其中对于注册工资支付的顾客生成付费请求并发送给工资系统。 菜单管理员是餐厅特点员工,可以管理菜单。 送餐员可以打印送餐说明,记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。,某企业
9、为了方便员工用餐,为餐厅开发了一个订餐系统 (COS: Cafeteria Ordering System), 企业员工可以通过企业内联网使用该系统。 企业的任何员工都可以查看菜单和今日特价。 系统的顾客是注册到系统的员工,可以订餐(如果未登陆,需先登陆)注册工资支付、预约规律的订餐,在特殊情况下,可以覆盖预订。 餐厅员工是特殊顾客,可以进行备餐、生成付费请求和请求送餐,其中对于注册工资支付的顾客生成付费请求并发送给工资系统。 菜单管理员是餐厅特点员工,可以管理菜单。 送餐员可以打印送餐说明,记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。,某企业
10、为了方便员工用餐,为餐厅开发了一个订餐系统 (COS: Cafeteria Ordering System), 企业员工可以通过企业内联网使用该系统。 企业的任何员工都可以查看菜单和今日特价。 系统的顾客是注册到系统的员工,可以订餐(如果未登陆,需先登陆)注册工资支付、预约规律的订餐,在特殊情况下,可以覆盖预订。 餐厅员工是特殊顾客,可以进行备餐、生成付费请求和请求送餐,其中对于注册工资支付的顾客生成付费请求并发送给工资系统。 菜单管理员是餐厅特点员工,可以管理菜单。 送餐员可以打印送餐说明,记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。,其中需
11、将以上四个用例填到正确的位置,某企业为了方便员工用餐,为餐厅开发了一个订餐系统 (COS: Cafeteria Ordering System), 企业员工可以通过企业内联网使用该系统。 企业的任何员工都可以查看菜单和今日特价。 系统的顾客是注册到系统的员工,可以订餐(如果未登陆,需先登陆)注册工资支付、预约规律的订餐,在特殊情况下,可以覆盖预订。 餐厅员工是特殊顾客,可以进行备餐、生成付费请求和请求送餐,其中对于注册工资支付的顾客生成付费请求并发送给工资系统。 菜单管理员是餐厅特点员工,可以管理菜单。 送餐员可以打印送餐说明,记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客
12、,由送餐员收取现金后记录)。,Cafeteria Ordering System,工资系统,菜单 管理员,参与者之间的关系,表示子类的对象,也是一种父类的对象,即泛化关系。父类型通常是一个抽象泛化的参与者,可以完成子类型可以完成的共同行为。,状态图:一次订餐活动,登录,顾客订餐过程如下: 顾客请求查看菜单; 系统显示菜单和今日特价; 顾客选菜; 系统显示订单和价格; 顾客确认订单; 系统显示可送餐时间; 顾客指定送餐时间、地点和支付方式; 系统确认接受订单,然后发出E-mail 给顾客以确认订餐,同时发送相关订餐信息通知给餐厅员工。,四个缺少的用例及其所对应的参与者。,工资系统,菜单管理员,观
13、察者 Observer 对象行为 Behavioral 型模式,定义对象间的一对多的依赖关系, 当一个对象的状态发生改变时,所有依赖于它的对象都得到通知,并被自动更新。,bidder 出价人, 投标人 bid 出价, 投标, 叫牌 auction 拍卖,warranty n. 保单, 根据, 保修期,在观察者模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。各观察者通过自己的update()方法,对状态的改变,作出反映。,左图为观察者设计模式。 在此模式中,一个 Subject 对象 可对应多个 Observer 对象,class Subject priv
14、ate Observer observers = new Observer9; private int totalObs = 0;private int state;public void attach( Observer o ) observerstotalObs+ = o; public int getState() return state; public void setState( int in ) state = in;notifyObservers(); private void notifyObservers() for (int i=0; i totalObs; i+)obs
15、erversi.update(); ,/ 5. 对观察者广播事件,/ 3.与基类耦合,/ 1. “独立”的主类,abstract class Observer protected Subject subj;public abstract void update(); class HexObserver extends Observer public HexObserver( Subject s ) subj = s; subj.attach( this ); public void update() System.out.print( “ “ + Integer.toHexString( su
16、bj.getState() ) ); ,/ 6. 观察者“推出” 信息,/ 4. 观察者注册自己,/ 2. “依赖” 等级的根,class OctObserver extends Observer public OctObserver( Subject s ) subj = s; subj.attach( this ); public void update() System.out.print( “ “ + Integer.toOctalString( subj.getState() ) ); class BinObserver extends Observer public BinObse
17、rver( Subject s ) subj = s; subj.attach( this ); public void update() System.out.print( “ “ + Integer.toBinaryString( subj.getState() ) ); ,/ 6. 观察者“推出” 信息,/ 6. 观察者“推出” 信息,/ 4. 观察者注册自己,/ 4. 观察者注册自己,public class ObserverDemo public static void main( String args ) int n;Subject sub = new Subject();new
18、 HexObserver( sub ); new OctObserver( sub ); new BinObserver( sub );,/ 7. 用户配置好观察者的数目和类型,while (true) String s = JOptionPane.showInputDialog(“Type in an integernWe“ + “ will convert it into nHexadecimal (base 16),“ + “Octal (base 8), and Binary“);if (s = null) System.exit( 0 );n = Integer.parseInt(s);System.out.print(“nThe input integer is “ + n + “nThe converted result is written as follows“+“nHextOcttBinn“);sub.setState( n ); ,