|
东 北 大 学 继 续 教 育 学 院: |# N" K: B/ M2 A, I1 t; W
$ {0 ^4 K( M) I1 C6 h4 O( D# O; @+ k9 J
软件设计模式 试 卷(作业考核 线上) B 卷9 ^2 J, F+ Q w/ O5 N+ N3 k% F
, B3 W6 }* b, V
学习中心: 院校学号: 姓名 0 ^& P, m3 h& }$ f' D4 {1 N
3 J% o- P" Y. m8 F" Y: e0 ~
(共 页) $ m* f* t9 L; @, y
总分 题号 一 二 三 四 五 六 七 八 九 十
: `) o! p7 U0 _ 得分 % ]2 F3 {* g$ c& V$ V. N/ f4 I9 O
) p$ M) I, C3 L0 _/ V
一:单选题(共40分,20小题,每小题2分。请将资料填入下表)" Q0 k- _- k& f# c
题号 1 2 3 4 5 6 7 8 9 10
) L( T) ^. ]! X资料
+ e1 [# o; W9 z9 Q$ J9 g! E! u1 V" |题号 11 12 13 14 15 16 17 18 19 20
3 w, _+ f0 t$ L& A/ w( d& x资料
: c) _+ A8 I6 m
0 w* f2 s/ L& F5 A( [1.以下标识符中,正确的是:; \' [, g2 y2 R9 {' F( I. R' x
A、_total B 3abc C while D class , L8 x5 t& g- }$ r6 i, h1 |, K
2.在c#程序中,入口函数的正确声明为:7 R( x' n$ ^8 E2 Q7 M8 a0 D5 e
A. static int main(){…..}% q% b6 F" \* _
B. static void Main(){……}
" S. L$ K; Q: n' g+ V C. static void main(){……}
! J* P5 g2 [3 d) n4 \/ `0 V, }+ m D. void Main(){……}2 p* Z' |5 A9 H% J t! I+ Z
3.C#中MyClass 为一自定义类,其中有以下方法定义public void Hello(){..}使用以下语句创建了该类的对象,并使变量obj 引用该对象:MyClass obj = new MyClass();那么,可如何访问类MyClass 的Hello 方法?0 f7 h% N9 V* s6 _( S' ^0 E& R( P
A. obj.Hello(); * t* B; G/ \. e4 { o
B. obj::Hello();
# n7 T/ J/ z J: ^ C. MyClass.Hello(); 6 R2 K' q$ c/ @9 A5 A
D. MyClass::Hello();
" x0 Y/ g! L C5 U! K4 B4.在C#中,表示一个字符串的变量应使用以下哪条语句定义?
. f( ?) n3 E! v4 r& P) `# q A. CString str; . e) A/ E4 z# l* l
B. string str; ! C' ~0 [ o; Q4 U, |4 |6 G5 O: _. i
C. Dim str as string
- m8 I9 g: q$ `) h. O D. char * str;
: R& m; o2 y$ ~& R; x5.结构化程序设计的3种结构是:. R" j: P% z6 n3 \+ }! t, I
A. 顺序结构、if结构、for结构
1 [ l0 A* B3 G2 {. t6 V B. if结构、if…else结构、else if结构) B& v" z1 E: D+ x+ {
C. while结构、do…while结构、foreach结构
5 i0 p* J* h% g D. 顺序结构、分支结构、循环结构
, H2 V$ P+ `# o* Y2 t* p( H6 [6.能正确表示逻辑关系“a>=10 或a<=0”的C#语言表达式是:/ [- f: B6 g2 C! r$ E
A. a>=10 or a<=0
, C6 n# i4 {; d4 M. @ B. a>=10|a<=00 w0 ^9 b- R* _
C. a>=10&&a<=0
8 M( c; h5 I! L2 ?4 v+ F2 I$ ]8 r D. a>=10||a<=0
1 b; `5 j( D' ~2 ~5 h- [7.分析下列C#语句,注意类MyClass 没有访问修饰符:
/ z# ^% k7 m: E7 F0 ^ e0 h: J namespace ClassLibrary1
% s8 _! i6 Q( l- Q, A- g {
' d' f, ]# N8 O) e1 g) o class MyClass4 A. P, c6 S9 W7 ~4 E6 t& u. H$ L
{% z, q; J' o( G5 u
public class subclass
* C0 a; `! l3 y6 h, G& V" `& s {
' T5 O7 X& ^. Y4 d int i;
0 z) f' X5 P% [9 Z }1 [* v" D* ~, |! V' A' D
}! }8 h9 u/ h2 P! U4 I
}9 ^8 z; b1 F% ?6 I( B; k
若必须为类MyClass 添加访问修饰符,并使MyClass 的可访问域保持不变,则应选择:
- z6 q* ]4 r8 N8 L6 D A. private
6 m2 z% [ {0 G1 E B. protected ; T( _$ A: v) m4 a) s- G
C. internal : w- }1 a+ n) }7 q9 i3 L2 F2 s5 y1 _
D. public * q- y: E' q0 T# W' d5 Z6 q
8.在类的外部可以被访问的成员是:! \5 a' d& ]6 ~$ k% g
A. public成员 B. private成员 C. protected成员 D. protected internal成员2 Y4 L! R4 g( t0 [; ]
9.在定义类时,如果希望类的某个方法能够在派生类中进一步进行改进,以处理不同的派生类的需要,则应将该方法声明成: c7 |& y# a2 j2 ^* y$ H' L
A. sealed 方法) |* z) b0 X( x* i( ~- @
B. public 方法" y7 {4 l" f) v5 L
C. visual 方法( A6 M& F. m/ |; h: ]1 |. T9 A
D. override 方法
1 V$ F+ V6 E0 B$ C/ T' ?& }10.C#中,回车字符对应的转义字符为:
9 H8 F/ M3 o( f0 t6 h1 `) s A. \r
2 y- d1 s: h: ^3 U; g3 c! M: W B. \f
; m; z! s- g' j9 ? U0 L& S C. \n
& p! M9 `$ [; ~ D. \a) R% u/ X ~8 y8 b7 J. w
11.判断下列类MyClass 的定义中哪些是合法的抽象类?7 V2 H( E2 Q- ^2 ~+ {; D( U9 O7 P
A. abstract class MyClass { public abstract int getCount(); }
2 @8 G/ K. [0 T5 {3 r7 I" G B. abstract class MyClass { abstract int getCount(); }
[5 L$ `9 M: h% k: r& p C. private abstract class MyClass { abstract int getCount(); }
, c" Y/ z( i" _ D. sealed abstract class MyClass { abstract int getCount(); } ! [; y) W9 ^* \0 c" B4 I6 X& `
12.已知a、b、c的值分别是4、5、6,执行下面的程序段后,判断变量n的值为:
# t+ p. E8 w7 b" k+ ~; X int a,b,c,n;% F" N; q0 S& J9 ^$ [! V1 O/ M9 X
if (c < b)
% c, Z0 L8 w! I. m, B* t% J n = a + b + c;
( i* ? h. s/ D+ v# T9 x% ^ else if (a + b < c)
9 I' [3 f, j- S) y3 b: Z n = c - a - b;& O+ e$ S- U, S+ @2 X7 J
else
' X9 j0 L; P. q& R7 \6 A) M n = a + b;
- J4 e) b# K/ ^. K: z' ^4 U" v/ l A. 3 B. -3 C. 9 D. 155 @6 m* \; K3 \& g+ R' x
13.MyClass为一个自定义的类,则下列语句创建了多少个类MyClass的对象?
5 P2 _ @& E2 E' P5 U/ R' u! x MyClass[ , ] myArray = new MyClass[2][3];
* j2 q# U$ }( @; x' [ A. 0
% L& B1 q4 q; w; } B. 2+ d. d& P$ @% ~& O, T
C. 39 Q' O1 Y3 u# ~! Y# Q# ?- q5 K
D. 6( m$ n/ J; N: w/ |
14.下面是几条动态初始化二维数组的语句,指出其中正确的:
( t0 H' ?, b$ A* N! F, ~% H A. int arr5[][]=new int[4,5];
. y8 d+ ~3 n% G B. int[][] arr6 = new int[4, 5];# Y% ^0 C0 n! X. {0 C; v* S. i& b
C. int arr7[,]=new int[4,5];4 p( ^; S' Q) H' G8 t! Z
D. int[,] arr8=new int[4,5];* }' ~0 M7 ~0 m. \& z3 k
15.下面有关析构函数的说法中,不正确的是:4 d1 s1 Z$ V+ T k( r
A. 析构函数中不可以包含return语句
' @' [8 E4 i3 O5 Z, N$ A% c/ b B. 一个类中只能有一个析构函数
0 K1 A8 \- s; m F! k+ V% x& O C. 析构函数在对象被撤销时,被自动调用- I5 n9 z! Y5 H0 U6 h8 C
D. 用户可以定义有参析构函数8 V$ V# @( v2 e6 T
16.下列说法哪个正确?$ H2 R* Y0 S" u0 e, S7 u
A. 不需要定义类,就能创建对象8 c. x, z+ a6 u, W
B. 属性可以定义为抽象的6 c% j2 z2 N! i
C. 对象中必须有属性和方法
/ x4 e# P$ L! ^6 T D. 常量不能作为类成员
% @! w' a; Z q3 Z" G/ J17.下面有关静态方法的描述中,正确的是:
* _ y' i% N; ^" W% ` A. 静态方法属于类,不属于实例
@/ r0 M. m. S B. 静态方法可以直接用类名调用" |+ R+ j" w9 `7 P+ A7 L
C. 静态方法中,可以访问非静态的局部变量
( t3 D1 d6 l- c D. 静态方法中,可以访问静态的变量
+ c4 l& x7 Z, |) } {. f6 u% d18.以下描述错误的是:
3 T0 N4 u8 S% N V# k A. 在C++中支持抽象类,但在C#中不支持抽象类。
3 Z( T; {1 u: M0 h" ]7 \ B. C++中可在头文件中声明类的成员,而在CPP文件中定义类的成员;在C#中没有头文件并且在同一处声明和定义类的成员。
9 k( d( ?. A' T+ D- `6 m C. 在C#中可使用 new 修饰符显式隐藏从基类继承的成员。! X3 b6 Y9 I. N) f
D. 在C#中要在派生类中重新定义基类的虚函数必须在前面加Override。6 o' q) \( y! e. R! `$ w
19.下列关于构造函数的描述正确的是:
) o1 o4 a. K4 @+ g4 V: Q A. 构造函数可以声明返回类型。 }* Q- S5 u- q0 F1 t' {+ V
B. 构造函数不可以用private修饰
+ |0 r3 `" [: w) ~ C. 构造函数必须与类名相同+ E; e: ~ b0 c! k3 y2 O7 Y
D. 构造函数不能带参数4 Q9 I; _; N8 r5 o
20.变量x的值为25,要输出x的值,下列正确的语句是:
5 |& L0 s& K9 g6 U A. System.Console.writeline(“x”)7 |( V' l- m6 k- I+ ?
B. System.Console.WriteLine(“x”)
" h+ I) Q* R8 ~/ _- _' S C. System.Console.writeline(“x={0}”,x)
# w* _- w0 F+ T3 ` D. System.Console.writeline(“x={x}”)# ?+ {; H8 b U4 \
二:判断题(共20分,20小题,每小题1分。请将资料√或×填入下表)# j' z- Z8 A' T! A& Q8 W' A. y
题号 1 2 3 4 5 6 7 8 9 10
! j( y7 r+ d7 k$ W. p& o资料
' C! n# g% C& f7 W q U& D题号 11 12 13 14 15 16 17 18 19 20
: d+ J+ L1 j" C- c资料 d$ M" o7 I9 i( l) U: l- T$ M7 F
6 c# y- }' o- c1.软件危机是开发软件的开发工具功能不强造成的。( ) Q+ G6 k S' v8 R& Q, w6 s$ m) L- S# ^- s
2.结构化程序设计的3种基本结构是顺序、循环和选择。( ): O7 C" x% p& D# g7 }8 E
3.面向数据流的设计以面向对象分析阶段的数据流图为基础。( )
Y. r+ j3 D$ m& L j4.软件设计主要是要求功能强大,对于说明文档的要求则可以适当放松。( )+ [7 _+ p {- p# Q* M1 q1 P( _# N, e
5.软件测试方法主要白盒测试和黑盒测试两种。( )9 F3 }5 K7 V0 E& y' [+ ]2 W
6.螺旋模型包括制定计划、概要设计,详细设计和工程实施四个主要部分。( )2 {8 g3 j5 z' b$ f) U
7.面向对象方法是从算法为出发点来构造系统。( )5 h2 s0 q" z4 O& I5 g, ]& } e% T) ?
8.在面向对象方法中,封装使得外界无法存取对象的内部信息。( )8 V+ o! t: j5 {# x" J5 o8 u4 V
9.面向过程方法的缺点是过程和数据结合的过于紧密。( )
' z/ [0 K7 C$ f f) N h$ I10.面向对象程序设计应该遵循低内聚、高耦合的原则。( )$ e# l l/ e# W, V
11.消息可以用顺序图和协作图这两种图来表示。( )) e2 T7 n z2 c) W2 ?
12.状态图、顺序图、协作图和部署图属于动态建模机制。( ); A2 n; i0 c9 o
13.顺序图描述系统中对象间通过消息进行的交互,强调消息在时间轴上的先后顺序。( )
3 |' ?- ^' N" Y14.提倡设计模式的根本原因是增强代码复用,增加可维护性。( )
. Y' Y) N: q! c15.里氏代换原则的本质是在同一个继承体系中的对象应该有共同的行为特征。( )$ q3 X* C; q$ F& G, t
16.工厂方法是抽象工厂模式的扩展。( )" P) }8 w0 g& z7 ^3 @/ `: Y H
17.提倡设计模式的根本原因是增强代码复用,增加可维护性。( )
7 Y: b- v- F0 H# h1 ?18.具有抽象方法的类必须声明为abstract. ( )% h: P4 U8 u5 G3 D- Q( k1 U+ `
19.当创建派生类对象时,先执行基类的构造函数,后执行派生类的构造函数。( )
# S! c" h h8 p) `6 }4 z20.虚函数是可由子类继承并重写的函数。( ); f( k9 m( h) c* a# c
# X. G) l1 \ @, z( p( {1 |
& C% R; R6 ^! f! H+ s三:谋学网(www.mouxue.com)(共25分,5小题,每小题5分。)
8 b. G. E. w5 I1 y0 y! l7 H0 D# K1.试简述瀑布模型。: A8 W/ ?/ t) T4 T
0 _+ ]2 `) C9 {. m/ G7 R% C: _2 i0 F1 }
$ {) a2 }8 ]+ K) @ J2 E
8 h. h" w6 D* U. v) I( S1 e. x& b! T) E) t- P$ K: J: R% ?
5 g+ O* y# \$ P! x9 h% b0 Y, ]7 X
1 l6 Y% F& L, u+ v4 x& f2.设计模式的基本要素有哪些?
7 ^6 q% o9 _5 w* o8 j( v; _. I! ? U: O- ?
[! |. G" w) g* I( O- J3 w) N* E$ Y+ U0 N2 m" n5 R1 h
7 ~" x) r1 I( o7 _
, e, U l) N1 Q
$ |+ u3 R" I* {7 H7 @" L- e
& V9 E9 X' ?- {. o$ E( w6 I8 y/ ]5 ]- j) u
- S2 R, u$ R1 M) p4 j! X) f, P( F0 O4 u! Z1 q" q& e
3.什么是创建型设计模式,它的目的是什么?- x7 F6 k0 ^6 e7 ]/ ?
: w* |4 ?2 ?& Z4 q/ q' j) R: e! B. y4 `" r# g5 p; `+ S
: A% p0 Z; ]! t4 B
# n, O5 S: `3 W' C* j. |
6 r9 `% P `6 p! \5 P
. ]% M" ~% {0 Z7 s( L5 ?
7 D" ], {0 R" q8 V( k% ?% {2 v8 W5 G9 R7 n3 j& d
/ x8 o! W1 Z# Y; x9 c4.结构型模式的功能有哪些?, c! w7 P1 J" P1 @7 c
% r+ }6 ~( X# Y# [; j* h# E
' {8 ?# \3 L6 \! ]3 [; \' _9 r
$ P( n- }2 j1 W. F! R/ F- {. X3 n0 W
" x) x m! j* x* o) y+ I9 \
% C, A! Y# L/ S
( X& m1 e7 S/ p( `/ d
3 l+ f6 M" r5 H
3 ^5 b# }: ?4 u& |
! ?5 F4 Q8 T, ~" O5 T% J+ c4 G1 C" ?+ y; U: K
5.构造函数有哪些特殊性?
' N: p! G1 q% \# o! |+ }
" s; H, ~/ }9 R4 f. }$ q" w$ w1 \4 O) v2 |
0 I5 V; ^+ O7 b
) T3 O& V9 R# n
0 n$ \4 H6 _5 t) K" ^5 }- k. [
- B0 T0 u9 P3 {6 g" f, c. E; K
5 \! y( b% w z$ M* p
2 w4 r0 N$ f0 a- ]5 w8 N* g
7 `1 S1 p6 f9 _, y: @+ X! z) D0 l+ s7 r. P
* x! n( ?& m6 ?$ g7 x, w% g( W2 v, ], M7 j! h9 w) b
; I$ `' i- K) g% `
$ f* o4 W1 H- z t四:综合题(共15分)
. s3 k8 P5 H8 n4 _& x$ S7 i1. 试举一个例子并设计抽象工厂模式的UML结构图(7分)
% i. P1 g( {6 c9 `. r! b# t5 g3 A/ Y, V- d2 b2 \5 g
% C) ?, o. o/ u% Q
# p# q1 R/ l9 e p; Y( ]) ~6 j6 Y7 i1 p, k, K
9 J# x! k6 T& }% |0 V' ^* Q% z1 `" g+ o, o; R/ S% h6 }; z$ ]8 X3 y' c, c) o
- p/ o' V- n0 _8 |2 L- |
' b9 Q8 L9 f& d
$ h! n, F; R- Z5 w0 J& q2 u8 x% ~# s
. w: N$ x* M" K$ `
7 k7 Y) f5 _( F: P% I9 S. O( X) y
4 l# y$ F& R, O% b! I) [. @3 ]
* N! V8 e! P# c3 X. _% f, x O' P4 S2 K1 M7 M
8 F2 B; T- q. @' s* ?$ k5 V- z4 {$ q9 R5 R; ^, M
7 y! [4 v7 k9 v$ s* r
1 L" Y" @# }( c4 C! h( O2 g! X
. L$ W4 V1 _! C( l, f5 J2 D
8 h$ P. ~3 {8 a' b. h" S9 k& N
" Y) J' U5 E+ w7 x7 _+ n
5 J$ O5 K3 w( y/ ~# Z: k6 K1 B
k) S4 ~ y1 L/ _ j! P- e* B' }0 S4 D! `
2 Y0 D" H y; g, c
/ y# p& N e" u; s) @. p8 ?/ g. P( a3 l1 F5 ]/ I; Q
. \/ @ F8 F* E
2. 定义一个抽象的运动员(Player)基类,具有抽象方法Train方法。然后以该类为基类,派生出BasketballPlayer、FootballPlayer等类。(8分)
" i. ~" \ }" V" g- c& F! ]
; C% ~! o( A" F* S# {5 C# s, c
5 _6 f/ }5 t7 C e
. |9 X$ {5 s9 ]' ~
5 K# w# n5 A A# Z9 Q. c
2 P5 j& [7 v* D- Z m
4 L$ Z6 I X6 q( B/ C ]% s8 k8 Q/ K
' o/ n% z- Q5 r1 j9 R
|
|