练习题.docx
- 文档编号:29578762
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:20
- 大小:191.92KB
练习题.docx
《练习题.docx》由会员分享,可在线阅读,更多相关《练习题.docx(20页珍藏版)》请在冰豆网上搜索。
练习题
一、类图练习:
简单类图:
1、为下面的关联定义重数
(a)“hasonloan”(借出),链接图书系统中的people(人)和书(book)。
(b)“hasread(已读)”,链接people(人)和book(书)。
(c)“Isoccupying”(占据),链接棋子和棋盘上的方格。
(d)“spouse”(配偶),链接“people”类和“people”类。
(e)“Parent(父母)”,链接“people”类和“people”类。
2.预开发一个话剧院订票系统,话剧院的预订票分为个人预订和订套票,一个顾客可以预订许多场演出票,根据预订票的类型生成演出票,一场话剧演出可以多次上映,每场上映可以销售很多演出票。
该类中包括有类Customer、Reservation(预订票)、IndividualReservation(个人预订)、SubscriptionSeries(订套票)、Ticket、Performation(出席)、和Show(演出),试填写类和给出类关系。
3.画出一个类图概括下列关于图书馆的事实。
讨论你的设计策略,以及你的模型的局限性。
对图书馆保存的每本书,包括书名、作者名和该书的ISBN号。
图书馆中的一种书可能有许多册,每册有一个惟一的登记号码。
图书馆有很多注册读者,发给每个读者一个借书卡。
系统记录每个读者的姓名、地址、已经发给他们的借书卡号。
读者最多可以借6本书,系统记录读者借了哪本书和必须还书的日期。
4.神州六号飞船是神州飞船系列的一种,它由轨道舱、返回舱、推进舱和逃逸救生塔等组成;航天员可以在返回舱内驾驶飞船,轨道舱则是航天员工作和休息的场所。
在紧急的情况下,可以利用逃逸救生塔逃生。
在飞船两侧有多个太阳能电池翼,可以为飞船提供电能。
4.下面是开发一个邮局业务系统,给出的一个用例场景。
描述一个寄信人到邮局寄信的用例场景:
寄信人到达邮局,购买信封,将信装入信封,写上地址,称重,计算邮资,购买邮票,贴上邮票,邮寄信件,拿走回执。
分析:
从用例场景中逐个分析动词后面的名词,它们就是业务实体的备选对象。
例如:
邮局、信、信封、地址、邮资、邮票、信件、回执等。
从备选列表中选出对业务目标有贡献的对象。
例如:
邮局是一个场所,它是寄信的一个约束,或者说是一个前置条件,对寄信业务目标没有直接的贡献,应当从列表中去掉。
最后,分析这些业务实体之间的关系,并决定哪些应当单独建模,哪些应当作为属性。
例如,地址和邮票都在信封上,其中地址只有信封能够承载,并且只能通过信封来阅读地址,所以地址应当作为信封的一个属性。
而邮票虽然也在信封上,但是寄信人可以对邮票单独处理,比如在购买时邮票还没有在信封上,所以邮票应当单独建模。
再比如,邮资实际上等价于邮票的面额,所以邮资这个对象可以被邮票的面额属性代替,不需要为其建立模型。
最后,信、信封、邮票、信件、回执等共同构成一份合法信件。
5.一个软件公司有许多部门,分为开发部门和管理部门两种。
每个开发部门可开发多个软件产品。
每个部门由部门名称唯一确定。
该公司有许多员工,分为经理、工作人员和开发人员。
开发部门有经理和多个开发人员,管理部门有经理和多个工作人员。
每个开发人员可参加多个开发项目,每个开发项目需要多个开发人员,每位经理主持多个开发项目。
6.在学校人员管理系统中,所有人员都有姓名、性别、出生年月和籍贯等,把这些共同具有的特性抽象为人员类,根据工作性质,可以把学校分为教师、学生及管理人员等,学生类中,教师每学期要讲授几门课程,具有职称和工资等。
7、画一个简单的手表元素的类图。
它的对象主要与按钮、显示盘、电池、显示时间对象发生关系。
其中按钮对象有两个,电池有两个。
二、画一个UML类图表示下面Java类。
publicclassCounter{
privateintvalue;
publicCounter(){
value=0;
}
publicintgetValue(){
returnvalue;
}
publicvoidincrement(inti){
value+=i;
}
publicvoidreset(){
value=0;
}
}
画出下面两个类之间关系
publicclassAccount{
privateDebitCardtheCard;
publicDebitCardgetCard(){}
publicvoidsetCard(DebitCardcard){}
publicvoidremoveCard(){}
}
publicclassDebitCard{
privateAccounttheAccount;
publicDebitCard(Accounta){}
publicAccountgetAccount(){}
}
画出下面两个类之间关系
classClassA{
publicvoidfun(ClassBbb){
bb.g();
}
}
classClassB{
publicvoidg(){}
}
写出上面图的代码(10分)
▪publicclassjob
▪{
▪privateDoublesalary;
▪publicjob(){}
▪}
publicclassPlayer
{
privateStringPlayerName;
protectedTeamemployer;
publicPlayer(){}
}
publicclassTeam
{
privateStringTeamName;
publicPlayeremployee[];
publicTeam(){}
}
三、状态图练习:
1.在订货管理系统中,包括一个有关“订货”的简单用例,该用例有如下活动:
(1)订单提交窗口发送一条“准备”消息给订单。
(2)订单发送“准备”消息给订单上的每个订单项。
(3)每个订单项检查其对应的仓库货物。
若检查结果为真,即仓库货物数量足够多时,则订单项从对应的仓库货物中减去所订购的数量;否则,表明仓库中的货物数量低于订购数量,这时仓库要求一次新的进货。
试给出订单类的状态图。
2.请描述图书馆系统中图书的状态图
3.画出反映电话机工作的状态图
四、用例图:
1.请给火车自动售票机系统画一张用例图。
该系统包括两个执行者:
购票的乘客和系统管理员。
售票机有提供价格的数据库,乘客购买单程车票,购买周卡、月卡。
还包括例外情况:
超时(乘客长时间没有投入合适的钱币),取消(乘客在购买组合没有完成交易前选择了取消键),另外,系统管理员除了乘客的功能外,还可以调整价格、缺零钱及缺打印纸。
《软件工程清华王庆育P79》
2.请对乘坐电梯的情景建立用例图:
你可以呼叫电梯并在电梯到达之后进入电梯,然后指定楼层,当然你也可以打开或关闭电梯门。
在出现紧急情况下,你可以拨打报警电话,相关的工作人员将会及时赶到。
五、顺序图练习
1.下面的代码描述了一个DataSet类,该类提供了对一组数据的基本统计功能,以及一个ExamMarks类,它使用DataSet存储并计算一组考试分数的平均值。
主函数展示了读入两个分数,用ExamMarks保存它们,并打印输出平均值。
画一个顺序图,说明主函数执行时发生的交互。
classDataSet
{
privatefloatdata[];
privateintitems;
publicDataSet()
{
data=newfloat[256];
item=0;
}
publicvoidadddataPoint(floatd)
{
data[items++]=d;
}
publicfloatmean()
{
floattotal=0;
for(inti=0;i { total+=data[i] } returntotal/getSize(); } publicintgetSize() { returnitems; } } classExamMarks { privateDataSetmarks; publicvoidenterMark(floatm) { if(marks==null) { marks=newDataSet(); } marks.addDataPoint(m); } floataverage() { returnmarks.mean(); } } publicclassAverage { publicstaticvoidmain(String[]args) { ExamMarksexam=newExamMarks(); exam.enterMark(56); exam.enterMark(72); System.out.println(exam.average()); } } 2.完成一个添加用户的顺序图,要求: 打开添加用户的界面,在界面上选择一个组(可以通过一个下拉选择框来选择),然后向后台提交,后台系统保存用户的信息(并同时建立用户和组之间的关联) 用顺序图描述以上的过程。 3.基于Web的消息管理系统实例: 用户登录系统,可以给其他用户发送消息,也可以查询到其它用户发送过来的消息。 建立用例图、概念模型,为对象分配职责,画顺序图。 六、活动图练习 开店申请: 填写开店申请(客户信息,销售渠道,报价单)->经理审核 七、综合题: URL限制访问系统 ●需求描述: 本题中将开发软件,实现类似IE浏览网页的功能,与IE不同,本软件不强调浏览功能,只需要能够访问URL网址即可。 重点在于网址限制和网址列表的维护。 ●具体需要实现以下功能: (1)浏览器功能,输入URL网址,访问网页; (2)如果网页不能允许,则不允许访问; (3)记录合法和非法网址的访问; (4)截取非法访问的网址,并将数据保存到非法网址访问记录数据库; (5)截取合法访问的网址,并将数据保存到合法网址访问记录数据库; (6)用户可查看网址访问记录; (7)合法网址库可以由专人负责维护; ●数据上,需要关心的是网址库和网址访问记录库,如下: (1)合法网址库: 序号、网址; (2)非法网址访问记录库: 序号、网址记录、访问IP、访问时间; (3)合法网址访问记录库: 序号、网址记录、访问IP、访问时间。 ●要求: 用UML建立分析和设计该系统的用例图、类图、顺序图和活动图。 用例图: 类图: 顺序图: 活动图 设计模式部分: 1、某绘图系统存在Point、Line、Rectangle三种图类,他们具有shape接口,类图关系如下所示。 现要加入绘制三角形的类Triangle,已知某第三方库已经提供了类MyTriangle,并完全满足要新增的Triangle所需要的功能,但MyTriangle不是由Shape派生来,它提供的接口不能被系统直接使用,如它的显示方法为show()。 修改类图并写一段代码(Java或C++),使其既使用了MyTriangle类又遵循Shape规定的接口,既避免了从头开发一个新的Triangle类,又可以不修改绘图系统中已经定义的接口。 (7分) 1.类间关系由表现的强弱程度依次为: 组合>聚合>关联>依赖 2.怎样区分是依赖关系还是关联关系? 依赖 可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用; 关联 他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量; 3.在图书管理系统中定义了类BorrowList和类Book,并在类BorrowList中定义了方法add(b: Book)和方法remove(b: Book),则类BorrowList和类Book之间的关系是: ()。 A.泛化(generalization)关系B.组合(composition)关系 C.依赖(dependency)关系D.包含(include)关系 [说明] 某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子 的发声特征、飞行特征和外观特征。 游戏需要模拟的鸭子种类及其特征如下表所示: 鸭子种类 发声特征 飞行特征 外观特征 灰鸭(MallardDuck) 发出“嘎嘎”声(Quack) 用翅膀飞行(FlyWithWings) 灰色羽毛 红头鸭(RedHeadDuck) 发出“嘎嘎”声(Quack) 用翅膀飞行(FlyWithWings) 灰色羽毛头部红色 棉花鸭(CottonDuck) 不发声(QuackNoWay) 不能飞行(FlyNoWay) 白色 橡皮鸭(RubberDuck) 发出橡皮与空气摩擦的声(Squeak) 不能飞行(FlyNoWay) 黑白橡皮颜色 为支持将来能够模拟更多种类鸭子的特征,采用策略设计模式(Strategy)设计的类图如下图所示: 其中,Duck为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck 和RedHeadDuck分别描述具体的鸭子种类,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;接口FlyBehavior与QuackBehavior分别用于表示抽象的飞行行为与发声行为;类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为与不发声的行为。 请填补以下代码中的空缺。 [Java代码] _ (1)_FlyBehavior{ publicvoidfly(); }; _ (2)_QuackBehavior{ publicvoidquack(); }; classFlyWithWingsimplementsFlyBehavior{ publicvoidfly(){System.out.println(“使用翅膀飞行! ”);} }; classFlyNoWayimplementsFlyBehavior{ publicvoidfly(){System.out.println(“不能飞行! ”);} }; classQuackimplementsQuackBehavior{ publicvoidquack(){System.out.println(“发出\'嘎嘎\'声! ”);} }; classSqueakimplementsQuackBehavior publicvoidquack(){System.out.println(“发出空气与橡皮摩擦声! ”);} }; classQuackNoWayimplementsQuackBehavior{ publicvoidquack(){System.out.println(“不能发声! ”}; AbstractclassDuck{ protectedFlyBehavior__(3)__; protectedQuackBehavior___(4)__; publicvoidfly(){__(5)__} publicvoidquack(){__(6)_} public__(7)_voiddisplay(); } classRubberDuckextendsDuck{ publicRubberDuck(){ flyBehavior=new___(8); quackBehavior=new(9); } publicvoiddisplay(){/*此处省略显示橡皮鸭的代码*/}; //其它代码省略
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 练习题