软件建模复习纲要.docx
《软件建模复习纲要.docx》由会员分享,可在线阅读,更多相关《软件建模复习纲要.docx(14页珍藏版)》请在冰点文库上搜索。
软件建模复习纲要
流程图
E-R图
E-R方法是“实体-联系方法”(Entity-RelationshipApproach)的简称。
它是描述现实世界概念结构模型的有效方法。
是表示概念模型的一种方式,用矩形表示实体型,矩形框内写明实体名;用椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来;用菱形表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:
1,1:
n或m:
n)。
数据流图
画法:
(一)确定系统的输入输出
由于系统究竟包括哪些功能可能一时难于弄清楚,可使范围尽量大一些,把可能有的内容全部都包括进去。
此时,应该向用户了解“系统从外界接受什么数据”、“系统向外界送出什么数据”等信息,然后,根据用户的答复画出数据流图的外围。
(二)由外向里画系统的顶层数据流图
首先,将系统的输入数据和输出数据用一连串的加工连接起来。
在数据流的值发生变化的地方就是一个加工。
接着,给各个加工命名。
然后,给加工之间的数据命名。
最后,给文件命名。
(三)自顶向下逐层分解,绘出分层数据流图
对于大型的系统,为了控制复杂性,便于理解,需要采用自顶向下逐层分解的方法进行,即用分层的方法将一个数据流图分解成几个数据流图来分别表示。
注意事项:
(1)首先画系统的输入输出,即先画顶层数据流图。
顶层流图只包含一个加工,用以表示被开发的系统,然后考虑该系统有哪些输入数据、输出数据流。
顶层图的作用在于表明被开发系统的范围以及它和周围环境的数据交换关系。
下图为飞机机票预订系统的顶层图。
(2)画系统内部,即画下层数据流图。
不再分解的加工称为基本加工。
一般将层号从0开始编号,采用自顶向下,由外向内的原则。
画0层数据流图时,分解顶层流图的系统为若干子系统,决定每个子系统间的数据接口和活动关系。
例如,在上面的机票预订系统按功能可分成两部分,一部分为旅行社预订机票,另一部分为旅客取票,两部分通过机票文件的数据存储联系起来,0层数据流图如图3-4。
(3)注意事项。
①命名。
不论数据流、数据存储还是加工,合适的命名使人们易于理解其含义。
②画数据流而不是控制流。
数据流反映系统“做什么”,不反映“如何做”,因此箭头上的数据流名称只能是名词或名词短语,整个图中不反映加工的执行顺序。
③一般不画物质流。
数据流反映能用计算机处理的数据,并不是实物,因此对目标系统的数据流图一般不要画物质流。
④每个加工至少有一个输入数据流和一个输出数据流,反映出此加工数据的来源与加工的结果。
⑤编号。
如果一张数据流图中的某个加工分解成另一张数据流图时,则上层图为父图,直接下层图为子图。
子图及其所有的加工都应编号。
⑥父图与子图的平衡。
子图的输入输出数据流同父图相应加工的输入输出数据流必须一致,此即父图与子图的平衡。
⑦局部数据存储。
当某层数据流图中的数据存储不是父图中相应加工的外部接口,而只是本图中某些加工之间的数据接口,则称这些数据存储为局部数据存储。
⑧提高数据流图的易懂性。
注意合理分解,要把一个加工分解成几个功能相对独立的子加工,这样可以减少加工之间输入、输出数据流的数目,增加数据流图的可理解性。
类图
状态图
用例图
顺序图
活动图
第二部分
1.阐释概念
应用程序为谁做,解决哪些问题,会用在什么地方,何时会需要他,为什么会需要他。
2.问题陈述
编程
1.Josephus问题
2.intmain(){
3.if(!
getValue())return1;
4.Jose*pJose=createRing();
5.process();
6.cout<<"\nThewinneris"<code<<"\n";
7.delete[]pJose;
8.}//--------------
9.boolgetValue(){
10.cout<<"pleaseinputboyNumber,startPosition,intervalNumber:
\n";
11.cin>>n>>s>>m;
12.if(n>=2&&s>=1&&s<=n&&m>=1&&m<=n)returntrue;
13.cerr<<"failedinbadboyNumberorstartPositionorintervalNumber.\n";
14.returnfalse;
15.}
16.structJose{//小孩结点
17.intcode;//小孩编号
18.Jose*next;//指向下一个小孩结点
19.};//-----------------------------------
20.intn,s,m;
21.Jose*pCur,*pivot;
22.Jose*createRing(){
23.Jose*px=newJose[n];
24.for(inti=1;i<=n;++i){
25.px[i-1].next=&px[i%n];
26.px[i-1].code=i;
27.}//------------------------
28.cout<<"Thereare"<\n";
29.pivot=&px[n-2];
30.pCur=&px[n-1];
31.countBoy(s-1);
32.returnpx;
33.}
34.voidcountBoy(intm){
35.for(inti=0;i36.pivot=pCur;
37.pCur=pivot->next;
38.}
39.}
40.voidprocess(){
41.for(inti=1;i42.countBoy(m);
43.staticintline=0;
44.cout<<""<code;
45.if(!
(++line%10))cout<<"\n";
46.pivot->next=pCur->next;//小孩脱链
47.pCur=pivot;
48.}
49.}
3.算π
4.voidmain()
5.{
6.doubles=0,x=1;
7.longk=1;
8.intsign=1;
9.while(fabs(x)>1e-8){
10.s+=x;
11.k+=2;
12.sign*=-1;
13.x=sign/double(k);
14.}
15.s*=4;
16.cout<<"thepiis"
17.<:
fixed)
18.<19.<
20.}