面向对象复习准完整版.docx
《面向对象复习准完整版.docx》由会员分享,可在线阅读,更多相关《面向对象复习准完整版.docx(14页珍藏版)》请在冰豆网上搜索。
面向对象复习准完整版
复习提纲:
根据我们的实验掌握:
软件开发的主要活动、关键制品。
第一部分:
1、迭代开发和进化开发的概念。
(P15)
2、RUP的阶段和科目。
(P26图2-7)
第二部分:
1、初始阶段的目标。
(P37)
2、需求的类型。
(FURPS+分类,和另一种宽泛的分类P42、43)
3、UP的关键需求制品。
(P43)
4、用例模型的建立。
(第6章)包括的知识点如下:
1)用例的定义(P45)+用例的本质(P46)
2)用例的参与者类型(P49)
3)用例的详细描述形式(范围、级别、主要参与者、涉众等P50例子处理销售)
4)编写用例的步骤(P63步骤一、二….)
5)判断有效用例的方法(P66)
5了解其他需求制品。
(P78-P90)
6领域模型的建立。
包括的知识点如下:
1)领域模型的定义。
(P100)
2)领域模型用UML表示为类图,可以展示的内容(P101)
3)如何创建领域模型。
(方法三:
通过识别名词短语寻找概念类P106例子)
4)关联(表示、多重性P112-P114)
5)属性(表示、类型、不用外键P117-P121)
7能看懂系统顺序图和操作契约。
8架构分层。
(P147)
9领域模型和领域层的关系(P152)
10静态建模和动态建模(P153)
第15章:
1顺序图和通讯图的优缺点。
2能在图和代码之间相互转化。
如P162图15-1、P163图15-3
3图的表示规范。
顺序图中:
消息的表示(P164)+图框的表示(P168特别是循环、条件、互斥的有条件)、(P170最下面代码转换为顺序图形)
通讯图中:
消息的序号表示。
(P176最下边)
第16章:
1设计类图和领域模型的区别(P152、P183)。
2能在类图和代码之间相互转换。
3类的属性文本和关联线的表示。
(P185图16-6和图P184图16-5)
4类之间的关系。
继承(P181图16-1)、依赖(P189图16-9)、接口(P191)\组合聚合(P192)
5 类图和交互图的关系及转换。
(P195图16-21)
第17、18、25章
1Grasp原则共9个。
基本原则须知道。
(1)创造者模式(P203谁负责创建Square)
(2)信息专家模式:
最基本的职责分配原则。
(P246谁负责计算余额)
(3)控制器模式、低耦和、高内聚(P244如何设计对象间相互协作实现了系统事件makePayment)
(4)多态
(5)纯虚构(P306。
如何解决在数据库中保存sale对象的问题)
(6)间接性、受保护变化
2第18章从操作契约入手,结合Grasp原则绘制交互图的例子
第19章
1可见性的定义(P261)
2可见性的类型(P262)
3给出代码能判断可见性。
(P262的代码、P263的代码、P264的代码)
第20章
代码和图形的相互转换。
P267图20-1、图20-2,P269图20-5
第27章:
1活动图(P350)
2状态图(P355)
第37章:
对象持久化。
(给出一个类图,来设计它的关系模型)
试卷题型:
1 单项选择。
2 简答题。
3 简单分析题。
4 分析题。
0.面向对象过程:
1面向对象软件开发过程,各阶段重要制品
2RUP的各阶段,迭代。
3架构设计的优缺点
1.用例建模
1.搬了新家,阿呆决定去申请安装ADSL,他到营业厅填好单,和证件一起交给营业员。
营业员查看阿呆的证件,接过单子开始操作电脑。
如果站在营业员身后,会看见营业员打开一个“受理”菜单,选择“ADSL”,弹出一个带有好多个Tab的框框,营业员哔哩叭啦把数据输进去,然后让阿呆设置一个服务密码,又过一队,营业员递出单子,告诉阿呆回家等,施工人员一天内就到。
阿呆高兴的出门。
营业员叹了一口气,想“又弄完一个”……
考虑营业员的“ADSL业务受理系统”,根据上述信息,分析下面所列对象或事件的归属那一类别,并在表中类别填写。
(有可能属于多个类别,也有可能都不属于任何一类)
对象或事件:
阿呆营业员设置密码施工人员受理ADSL申请安装ADSL
类别:
主参与者辅助参与者用例涉众
主参与者
营业员
辅助参与者
阿呆
用例
设置密码受理ADSL申请
涉众
施工人员阿呆营业员
2、对于用例分析的正确与否,有一些简单的方法,如老板测试,不能通过老板测试的用例是()
A.处理退货B.协商合同
C.用户登录C.处理销售
3、参与者位于系统内外?
4、给需求描述,来进行用例建模
2.领域建模
1.UML类图中关联的多重性是指()。
A.一个类有多少个方法被另一个类调用
B.一个类的实例能够与另一个类的多少个实例相关联
C.一个类的某个方法被另一个类调用的次数
D.两个类所具有的相同的方法和属性
2,阿呆开设了一家汽车公司专门为学生服务,公司拥有40辆汽车,服务对象是1600个学生。
汽车日常行驶的路线有30条。
每条路线上设有许多站牌,学生们可在这些地方上下车。
公司雇佣了20个全职的司机和30个兼职的司机。
汽车公司设有一个调度员,专门负责司机和路线的安排。
公司经常会收到学生或家长们对司机的投诉。
如果投诉的情况相当严重,司机有可能会被停职甚至被解雇。
3请根据下面描述绘制出领域模型。
假设一个公司雇佣了若干员工,每个员工的信息包括员工号码、姓名、地址和生日。
该公司当前有几个项目,每个项目的信息包括项目名称和开始日期。
每个员工可同时被分派到一个或几个项目中,也可以不做任何项目。
每个项目至少由一个员工来承担。
公司在每个月末给每个员工邮寄一张支票,支票上的数额与项目的性质和工作时间相关。
请用一张类图描述上述情况。
要求:
给出相关的类、属性、方法和关联。
3.
1依据如下顺序图,选择类Account必须实现哪些方法?
()
A.withdraw,checkBalance
B.withdraw,checkBalance,log
C.withdraw,checkBalance,acknowledge
D.withdraw,checkBalance,log,acknowledge
2下面的图1和图2分别说明了Car和Color类之间的关系是()。
A.图1:
聚合;图2:
组合B.图1:
属性;图2:
聚合
C.图1:
属性;图2:
组合D图1:
组合;图2:
属性
图1图2
3根据下列代码,画图说明已经创建的类的数据成员及类间的关系。
(要求:
如有关联需要标明关联的方向、角色名和多重性)(4分)
[代码]
publicclassCatalogueEntry{
privateStringname;
privateStringnumber;
privateStringcost;
···
}
publicclassPart{
privateCatalogueEntryentry;
···
}
答:
4下面是收银机系统设计过程中的一张为客户折扣创建定价策略顺序图,请根据顺序图所示,写出addCustomerPricingStrategy方法的基本实现代码。
(包括函数的定义,函数所在类的定义。
Strategy:
策略,Factory:
工厂,Composite:
组合,Percentage:
百分比
Publicclasssale{
Publicvoidenter…(c){addCustomerpricingStategy(s)}
}
PublicclassPricingStrategyFactory
{
PrivateCustomerc;
addCustomerPricingStrategy(Sales)
{
c=s.getCustomer();
Ps=s.getpricingStrategy();
Pct=getCustomerPercentage(c);
Per..s=new
add(s)
}
getCustomerPercentage(c){}
}
5详细解释下列消息。
(5分,每个消息一分。
说明消息名称、参数、返回值等)
(1)2:
display(x,y)
(2)1.3.1:
p:
=find(specs:
int):
String
(3)[x<0]4:
invert(x,color)
(4)3.1*:
update()
(5)1:
create(p,4)
6通信图和顺序图都是交互图,阿呆不明白什么时候用通信图,什么时候用顺序图。
请你为他解释顺序图和通信图的优点和缺点。
7下图是一个“涉税服务管理效能管理系统”中类模型的一个局部,请根据该图回答以下问题。
在描述“税务审批服务申请”时,它主要包含哪几个方面的内容?
它有几种不同的类别?
(5分)
8请根据下列代码片断,画出设计类图。
注意类,类的属性和方法以及类之间关联,关联的导航性、多重性或是角色名。
(5分)
Storestore=newStore();
Registerregister=store.getRegister();
intt=store.getNo();
ProductCatalogcatalog=newProductCatalog();
register.setNo(t);
register.setCatalog(catalog);
ProcessSaleJFrameframe=newProcessSaleJFrame(register);
9根据以下Java源程序绘制出doPayroll函数实现的顺序图。
publicclassPayroll{
privatePayrollDBitsPayrollDB;
privatePayrollDispositionitsDisposition;
publicvoiddoPayroll(){
ListemployeeList=itsPayrollDB.getEmployeeList();
foreach(EmployeeeinemployeeList){
boolflag=e.isPayDay();
if(flag){
doublepay=e.calculatePay();
doubledeductions=e.calculateDeductions();
itsDisposition.sendPayment(pay-deductions);
}
}
}
}
10下面的代码描述了一个A类,该类提供了对一组数据的基本统计功能,以及一个B类,它使用A存储并计算一组考试分数的平均值。
主函数展示了读入两个分数,用B保存它们,并打印输出平均值。
请画一个顺序图,说明主函数执行时发生的交互。
(注意:
下面的代码是左右排版)。
A类
classA{
privatefloatdata[];
privateintitems;
publicA(){
data=newfloat[256];
items=0;
}
publicvoidaddDataPoint(floatd){
data[items++]=d;
}
publicfloatmean(){
floattotal=0;
for(inti=0;itotal+=data[i];
}
returntotal/getSize();
}
publicintgetSize(){
returnitems;
}
}
B类和C类:
ClassB{
privateAmarks;
publicvoidenterMark(floatm){
if(marks=null){
marks=newA();
}
marks.addDataPoint(m);
}
floataverage(){
returnmarks.mean();
}
}
publicclassC{
publicstaticvoidmain(Stringargs[]){
Bexam=newB();
exam.enterMark(56);
exam.enterMark(72);
System.out.println(exam.average());
}
}
4.
1、GRASP原则一共9种,其中不包括的是()
A.多态B.高内聚
C.低耦合D.封装
2阿呆刚学过GRASP设计原则,觉得很不错,于是准备应用在设计的图书管理系统中,系统有图书类,图书类的实例包含某门图书的具体信息。
阿呆就想,依据信息专家的原则,那么,该由图书对象把图书信息存入到数据库中。
但是项目经理告诉他这样做不好。
阿呆想不通,请你详细为阿呆解释一下。
将课程信息存入数据库的职责分配给课程类会造成课程类与数据库接口类的耦合,面向数据库的操作与实际的课程类无关,使得课程类非内聚,不利于数据库操作的复用,其它类也存在保存对象的职责。
3POS系统中,当顾客以支付货款时,需要计算出支付余额。
阿呆发现类图中有两个类都可以承担此职责:
Sale和Payment。
他有点迷糊不知道该选那个比较好。
请你帮他选一个最佳方案,并解释理由。
4持久建模
5状态图