|
东 北 大 学 继 续 教 育 学 院) E" {& c5 H' W; _% T
4 ^6 i. O' R5 u 软件设计模式 试 卷(作业考核 线上) B 卷
. [! I y$ A7 u6 _
" u: x9 ]5 s) o/ z! S4 X( J( S学习中心: 院校学号: 姓名
2 t) ~! T3 \2 X8 n) A
. z& w1 U0 L: _(共 页)
+ B4 ?9 T; K1 z' `总分 题号 一 二 三 四 五 六 七 八 九 十
& N! w7 m& a1 M6 q# f0 g; J 得分 I( J% O/ N4 E4 \
% T# Y; E4 f" o7 P6 d" ^: v
一:单选题(共40分,20小题,每小题2分。请将资料填入下表). P) u1 }3 z5 { n+ d* ?: [ h' O
题号 1 2 3 4 5 6 7 8 9 10
1 s( n% }9 N" X7 E资料
2 z0 t5 H4 y' W; |; K题号 11 12 13 14 15 16 17 18 19 20
% }. @+ z8 T+ T& z资料
+ F1 k$ m$ m& N+ s7 q7 E( k
; o) P1 E/ l3 H1 K% X1. C#语言的核心是面向对象编程(OOP),所有OOP语言都应至少具有三个特性:
, d! G9 ^! _) Q( t8 M8 h8 `A. 封装、继承和多态 B. 类、对象和方法
- J1 T! k; ~5 eC. 封装、继承和派生 D. 封装、继承和接口& U' r( S; m: X9 k
2. C#中MyClass 为一自定义类,其中有以下方法定义public void Hello(){..}使用以下语句创建了该类的对象,并使变量obj 引用该对象:MyClass obj = new MyClass();那么,可如何访问类MyClass 的Hello 方法?! i9 B4 @, |/ q6 f8 y
A. obj.Hello(); B. obj::Hello();
5 R* P9 k3 D5 A/ z3 x6 e3 eC. MyClass.Hello(); D. MyClass::Hello();
5 A# E% o9 Q7 O* g$ V3. 在编写c#程序时,若需要对一个数组中的所有元素进行处理,则使用___循环体最好?
, w/ L" h' D z* g* ^2 ?/ dA. while循环 B. for each 循环
. y$ o" i1 L! N7 p! a9 oC. do循环 D. for 循环5 \4 U! V- G) _' K
4. 在c#程序中,入口函数的正确声明为:
6 G1 o+ k& t; ?, z& `; k5 z7 { KA. static int main(){……} B. static void Main(){……}' D/ Y( _9 z- P
C. static void main(){……} D. void Main(){……}2 o0 R: }6 C, z/ W
5. 在C#中,引用命名空间system 的正确语句是:
. J0 H; o" @+ u: ?A. using System; B. #import<System>;5 G' W' q& O; Q$ `, j J+ d
C. uses System; D. #include<System>;1 z7 J: ?$ V9 f# O' u; N
6. MyClass为一个自定义的类,则下列语句创建了多少个类MyClass的对象?
- _& F: E1 X; e/ N$ S) J MyClass[,] myArray = new MyClass[2][3];
: L: Y# ]. G0 L8 u' EA. 0 B. 2
+ e1 m C$ H. h2 K6 BC. 3 D. 6+ S* ?$ ]. A) e6 T2 Y: b" Q
7. 下面有关析构函数的说法中,不正确的是:
: _$ f* e- e: Z, tA. 析构函数中不可以包含return语句1 q2 o! _, K, D) ~6 g. v
B. 一个类中只能有一个析构函数
J* I) J# Q. m6 K% @; D$ zC. 析构函数在对象被撤销时,被自动调用+ _2 H, v; f. m7 F8 V
D. 用户可以定义有参析构函数
1 ]+ z/ y h' F8 S1 g2 [8. 下列说法哪个正确?
" W* D7 N7 @: F1 J# ]- fA. 不需要定义类,就能创建对象
! H# u3 n' Y, j d# YB. 属性可以定义为抽象的
# d [1 B O2 {7 S; R* HC. 对象中必须有属性和方法% a: U( w' q4 \. K5 } x- h
D. 常量不能作为类成员
3 D9 ^/ p1 z! F9. 下列说法哪个正确?9 z* b4 R7 \/ M* F
A. 允许一个子类有多个父类
* C5 b4 z" K5 x0 ZB. 某个类是一个类的子类,它仍有可能成为另一个类的父类/ d* n/ Y: F& J: f2 D) L- P
C. 一个父类只能有一个子类# k; l6 K: \" }
D. 继承关系最多不能超过4层
d0 l- A7 }4 M, O% l. t* m, E10. C#语言源代码文件的后缀名为:
2 S( S( F3 u1 M3 Z9 Y/ A" o' o6 XA. .C# B. .CC C. .CSP D. .CS* F% S6 [, a" P# L; \
11. C#中导入某一个命名空间的关键字是:
2 [9 D# U: O# S7 qA. using B. use C. import D. include7 b+ B( ]* D9 @, W* a3 }1 }0 ?4 w% Z
12. 方法中的值参数是_________的参数。
3 u5 y: f7 J6 U. ^5 N; XA. 按值传递 B. 按引用传递
( O" m/ h: G/ z. B7 A5 ~C. 按地址传递 D. 不传递任何值9 @! h: i6 G1 c" x2 `2 R# i& N7 Q1 Z
13. 结构化程序设计的3种结构是:
. w; i) w( _- N, X6 E1 u2 m+ fA. 顺序结构、if结构、for结构
" r8 {; U3 E* S7 nB. if结构、if…else结构、else if结构
! U2 e& @1 g w- yC. while结构、do…while结构、foreach结构
4 [8 c- _6 l4 xD. 顺序结构、分支结构、循环结构! M1 J- |& p; H& J
14. 下列描述错误的是:
% f8 V6 b; j( J, R Y3 RA. 类不可以多重继承而接口可以" L6 T: A0 K# g: G6 ]3 L! }# Z
B. 抽象类自身可以定义成员而接口不可以
3 T6 k" d) m" X4 q: T% ?* x4 pC. 抽象类和接口都不能被实例化
% ] q* F* }! {/ Q+ H/ A5 FD. 一个类可以有多个基类和多个基接口1 U9 Q* y2 d7 o0 g& c& e
15. 下列关于构造函数的描述正确的是:. Q z- B; Z) g8 Q" i8 K
A. 构造函数可以声明返回类型。
6 b# V) Y* C7 M% T! p$ |6 L. V' Z4 oB. 构造函数不可以用private修饰
4 u6 A8 j" j( ~$ _& e. aC. 构造函数必须与类名相同
/ v) B# Q( N7 p7 z7 SD. 构造函数不能带参数/ N) j, C1 o, c' f' h
16.C#中MyClass 为一自定义类,其中有以下方法定义public void Hello(){..}使用以下语句创建了该类的对象,并使变量obj 引用该对象:MyClass obj = new MyClass();那么,可如何访问类MyClass 的Hello 方法?+ F* T& p. i/ F. W9 I6 f
A.obj.Hello(); B.obj::Hello();
- i4 ~" E5 t( V" k) w7 KC.MyClass.Hello(); D.MyClass::Hello(); ' r" i b3 f3 d1 l
17.在类的定义中,类的_______描述了该类的对象的行为特征。6 @1 h* m+ o- R5 V) b$ v7 ?
A.类名 B.方法 C.所属的名字空间 D.私有域
6 i3 P" C7 B$ v' T5 s- j+ B18.C#语言中,下列能够作为变量名的是:
Z1 i, E: _# \3 K5 Y2 b+ D6 zA.if B.3ab C.a_3b D.a-bc1 \% b0 q+ S ~
19.能正确表示逻辑关系“a>=10 或a<=0”的C#语言表达式是:
. W4 x" Z0 I) X* G+ ]A.a>=10 or a<=0 B.a>=10|a<=0
7 Z9 E# g9 A4 J/ A* SC.a>=10&&a<=0 D.a>=10||a<=0
/ `: b4 t' _6 `5 a- L20.以下叙述正确的是:# |1 r% I& k6 h N( |1 I L
A.do….while语句构成的循环不能用其他语句构成的循环来代替
" u+ j4 ~9 K P7 p. Y+ R! ]* ^) g) kB.do….while语句构成的循环只能用break语句退出
' b/ s* v5 Y! |C.用do….while语句构成的循环,在while后的表达式为true时结束循环2 q ?0 D9 h9 [) `, a+ p$ }
D.用do….while语句构成的循环,在while后的表达式应为关系表达式或逻辑表达式
, x( I: a# J8 V# N; c0 D# J+ b! ?5 r
二:判断题(共20分,20小题,每小题1分。请将资料√或×填入下表)
# E3 [, K& B0 C% x! ~题号 1 2 3 4 5 6 7 8 9 10* S4 ^1 E0 D% v7 c9 T7 E$ `
资料
- g: W8 ^ }: ]5 A3 Q b$ F6 w题号 11 12 13 14 15 16 17 18 19 208 |0 ^8 p6 J6 Y B0 k6 H
资料 1 v( H# c# j- n- O8 d
0 u% N: v/ N, @+ a/ v" J" n1.软件危机是二十一世纪软件领域出现的新问题。6 m2 v% a7 a: r6 Y
2.结构化程序设计对基本模块的要求是单入口、多出口。& Z1 [3 X* k3 T* t, Y# F
3.从提出软件开发计划的那一刻起开始直到软件投入实际应用为止可以认为是一个完整的软件生存周期。
4 C: v0 y3 K( `) ?6 w, L" O- C4 i4.喷泉模型主要用于面向过程的软件项目。
! P q4 E: P1 |( m) z3 p: a2 s4 E5.在面向对象方法中,由于对象中的数据以及对数据的操作是封装的,所以对某一类对象的修改一般只涉及该类,通常不会对整个系统造成很大影响。! `0 d: w" e8 p' c, z x# `, r( F5 ^4 h
6.书写需求陈述时,要做到语法正确,至于词汇选择则无关紧要。
8 V- y8 _8 y0 d* T M2 M3 l1 i- R7.利用多重继承虽然可以提高类的共享程度,但也会增加系统的复杂程度。
! [5 |% c# G4 u8 v4 N3 V8.脚本(script)就是详细描述类的静态结构的信息。
' r: a8 G1 E3 a0 K9.面向对象程序设计应该遵循低内聚、高耦合的原则。- ]( Z* H$ x. y5 }; X1 S
10.作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分。
( ^: ?, }8 E: c. A* X' n3 P11.用例图、类图、对象图、状态图和顺序图属于静态建模机制。
1 ~) P& ^9 m! U7 p12.顺序图和协作图虽然都是用来描述交互的,但顺序图强调的是空间,而协作图强调的是时间。
9 {4 s. u8 c' q+ r5 O1 P13.面向对象设计中的"开-闭"原则指的是软件对修改应该是开放的,对扩展应该是关闭的。
8 j, H, f! z. I% D/ E* x14.单一职责原则、里氏代换原则、依赖倒置原则等,都可以看成是“开放-封闭”原则的实现方法。 C/ X9 ]# O' D
15.一般来说,继承必须确保超类所拥有的性质在子类中仍然成立。
~, Z V. n& p" p: _16.当一个超类的实例能够替换任何其子类的实例时,它们之间才具有is-A关系。
" k1 w% Z% q2 b8 `* ^; z+ c, W2 Y17.工厂方法是抽象工厂模式的扩展。
9 l' o% }- Q# O4 S ^4 {% x% a18.结构型模式在破坏类的封装性的基础上,实现新的功能。
/ o5 r6 ^8 H8 M+ Q19.具有抽象方法的类必须声明为abstract。
1 a: p6 ~$ i# {7 n! _20.类和对象的区别就是,类是对象的实例,而对象则是类的抽象。
9 a6 y! N+ ]7 T B
' Y3 h5 z: ?! D; |. A3 j三:简答题(共25分,5小题,每小题5分。)" O9 e+ O. _2 w7 D( \; Y
1. 什么是设计模式?
# o( P8 {4 h. w% k
5 q9 s9 ^) q# A" G. X& @; F }- v2 s0 n2 d8 e! I) [9 Y- t! i* y
, I/ B$ o3 e$ n3 H8 U8 [* B; b: n3 ~
$ p3 ~) ~- Z' M, e- L9 I3 N7 e* g+ P% S7 ?' N3 z9 w/ m8 ^
$ r7 Y$ ?, ~, \% J
2. 面向对象设计中需要遵循哪些原则?为什么要遵循这些原则?5 x6 O7 y7 \9 ~
1 Q0 G& l( s2 U1 Y
! Q; [9 _7 o! K: ?. [
6 [: B! R* F# |7 N" s- B5 |! n9 e( Q | D
% s: S( E" k- i* y U) }& o, a: o* j P3 W( L" v" U
1 R+ C. Q/ G5 a; \2 _8 e' @
2 }! F9 c- h2 x6 T
, v: |& m% u0 C
+ g2 i: f1 t6 ]( Y, r& o3 E0 Y' {# [/ {# S4 ^4 H
/ @: {0 b0 _- k9 n# L; h$ p( m p3. 结构型模式的功能有哪些?
( ^: ?: B* {6 J; q8 M
~/ L. z1 T$ r5 I. m3 A: U) a* t6 @/ O
5 o: i0 w- \$ i. D, i$ }. g3 D0 F- l. A' ]5 B% B
, g+ K$ s7 _+ }+ e- U
% g. D7 t; f' ]+ |' B) R1 W# P
9 j/ l |, l6 e! _$ e' b( E# h* G# g/ v9 K+ U9 c) X x5 |5 f
$ e" C' x- |1 `
4. 简述建造者模式。
! {4 k# D# z/ y" E4 _5 i, E9 t% p, G+ A8 i* t( |
# b C8 J' o7 k" e
( B4 P) U. ]' r
& U. e P. q3 S5 d9 x; J
! @6 \) C( p, h. C+ r" j
6 z/ s9 T* G* {: a5 K1 a; N
, ]# n% \0 d5 i( {' b F% h" Z/ P* O
; r- [0 t# n: p- Q: @2 h; J; H0 g% X
. C$ P: W" o+ j5 v
& k6 k. h" l f7 f# Z7 q
5. 试简述重载与覆盖的区别。
8 \5 v: U1 O6 r9 F, I7 {3 B& b) L* A$ c0 P# u8 X" o
! \9 s7 e6 ^- ]+ k: d. s p. \) U
' @# y6 m6 y: `& m2 X2 D5 N& _$ D
9 w1 ?, \ W. _ |
; P) H2 C: B, u. `9 E5 ]# p9 V+ q& w/ E
% Y2 }" |( j* J. U2 o1 A' H% l四:综合题(共15分)# u9 H. D n6 }
假设你现在是一家快餐店的的管理者,要给顾客提供一系列的食品,如鸡翅、鸡腿等,顾客每要求一种食品,快餐店应当很快“生产”出来。请采用工厂模式来实现这个过程,用C#语言编写相应的类代码。
% G$ F P: O- N. @: H6 y6 k- W0 n0 x4 }% ]: X- d6 ^
3 \) |+ q- B; h1 o6 ]3 i3 B" C! q) }- Y9 [6 }5 W6 f) z* ]1 E: U9 l
: t+ T; k' g2 O( I7 s
7 Q: q+ c" v% m9 H u/ ^2 L
7 u# S2 ~. y+ H# q+ U _ Q; m# G( t5 F
5 i6 K* o8 K$ `, Y- v! |. w1 X: a) V$ K& x/ s4 |$ u6 |( h
|
|