问题 填空题

阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。

[说明]

某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图6-1所示。

采用状态(State)模式来实现该纸巾售卖机,得到如图6-2所示的类图。其中类State为抽象类,定义了投币、退币、出纸巾等方法接口。类SoldState、SoldOutState、NoQuarterState和HasQuarterState分别对应图6-1中纸巾售卖机的4种状态:售出纸巾、纸巾售完、没有投币、有2元钱。

[Java代码]

import java.util.*;

interface State

public void insertQuarter(); //投币

public void ejectQuarter(); //退币

public void turnCrank(); //按下“出纸巾”按钮

public void dispense(); //出纸巾

class TissueMachine

(1) soldOutStater noQuarterState, hasQuarterState, soldState,state;

state - soldOutState;

int count=0; //纸巾数

public TissueMachine (int numbers) /*实现代码省略*/

public State getHasQuarterState() return hasQuarterState;

public State getNoQuarterState() return noQuarterState;

public State getSoldState() return soldState;

public State getSoldOutState() return soldOutState;

public int getCount() return count;

//其余代码省略

class NoQuarterState implements State

TissueMachine tissueMachine;

public void insertQuarter()

tissueMachine. setState( (2) );

//构造方法以及其余代码省略

class HasQuarterState implements State

TissueMachine tissueMachine;

public void ejectQuarter()

tissueMachine.setState( (3) );

//构造方法以及其余代码省略

class SoldState implements State

TissueMachine tissueMachine;

public void dispense()

if(tissueMachine .getCount()>0)

tissueMachine.setState( (4) );

else

tissueMachine.setState( (5) );

(5)处应填()。

答案

参考答案:tissueMachine. getSoldOutState()

解析:

[分析]: 本题考查状态(State)模式的概念及应用。

状态模式是一种对象的行为型模式,允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。状态模式的类图如下所示:

状态模式主要解决的是控制一个对象转换的条件表达式过于复杂的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。

题目利用状态模式来实现一个简易的纸巾售卖机。售卖机的状态转换图已经在题目中给出,类SoldState、SoldOutState、NoQuarterState和HasQuarterState分别用来表示售卖机的4种不同状态,对应于状态模式中的ConcreteStatel,...ConcreteStateN。题目所设置的填空,主要集中在状态转换上。因此解答该题时,要求在理解状态模式内涵的基础上,依据纸巾售卖机的状态转换原则,给出正确的状态设置。

空(1)出现在类TissueMachine的数据成员定义部分。状态模式封装了状态的转换过程,但是它需要枚举可能的状态,因此需要实现确定状态种类。因此在类TissueMachine中需定义出所有可能的状态对象。根据所给出的对象名称及说明中的描述,可知(1)处应填入的类名为State。

空(2)~(5)要求填写类TissueMachine中的方法setState在不同调用处的实际参数。这里的一个难点在于题目中没有显示地给出方法setState的原型及语义,这要求考生根据面向对象程序设计风格及说明中给出的应用场合来推断setState的内涵及原型,主要是确定其参数列表。

在面向对象程序设计中,为了做到封装,通常都会把数据成员定义为私有的。私有的数据成员对象不能直接访问,因此在类中都会提供2组访问私有数据成员的方法,分别为get…方法和set…方法(…代表对应的数据成员名称)。get…方法表示获取私有数据成员的值,其返回值类型为对应的数据成员的类型;set…方法表示对数据成员进行赋值,所要赋的值通常通过参数传递进去,方法的返回值类型通常为void。根据面向对象程序设计的这些特点,以及状态模式的内涵及应用场合,可以推断出setState方法的功能就是设置纸巾售卖机的当前状态。纸巾售卖机在任一时刻只能处于一个唯一的状态,由状态模式可知,纸巾售卖机的状态都是用状态对象表示的,由此就可以确定出,setState方法的参数只要一个就可以了,就是表示纸巾售卖机下一状态的状态对象。

经过以上分析之后,可以明确空(2)~(5)空所填的内容都应与状态转换相关。因此要填充这些空,只要对照图5-1的状态转换图,根据状态转换的条件确定出当前状态及下一状态即可。

空(2)出现在方法insertQuarter内,即给纸巾售卖机投入2元钱。根据状态图,“投入2元钱”之后,售卖机应转换到“有2元钱”的状态。“有2元钱”对应的状态的类为“HasQuarterState”,所以空(2)处应填写类HasQuarterState的对象。由此得出(2)应填tissueMachine. getHasQuarterState()。

同理,空(3)表示的状态是从“有2元钱”状态,经历“退回2元钱”事件之后的状态,及“没有投币”状态。所以空(3)处应填tis sueMachine. getNoQuarterState()。

空(4)和(5)处分别表示卖出一包纸巾之后,售卖机应该转换到的下一个状态。这个跟售卖机中的纸巾数有关,如果还有纸巾,则转换到“没有投币”状态,如果没有纸巾了,则转换到“纸巾售完”状态,因此,空(4)处应填tissueMachine. getNoQuarterState(),空(5)处应填tissueMachine.getSoldOutState()。

阅读理解与欣赏

阅读下面的文字,完成下面的题。    

第一个梦想成真

朱苏力

  经历了长远的——时间和空间的,但更主要是心路的——跋涉,终于,你们来到了向往中的北大。我代表法学院全体师生欢迎你们,欢迎你们来到北大法学院,欢迎你们成为北大法律人!

  北大是值得向往的,但她只是你人生的第一个梦想成真。如今,同学和邻居羡慕和赞许的目光已经远去;北京的第一场秋霜会平息你的兴奋和激动;而在这个人人“才华横溢”的校园,也不会给你留下太多自恋的空间。上课、占座、考试和“灌水”,教室、图书馆、农园和“一塔湖图”,将挤满你的日程。什么时候,美丽的未名湖会再一次听见你的足音?

  学习不仅仅是读书和上课。不要把学习仅仅当做一项任务,或是为了分数,为了满足人人会有的、无可指责的虚荣心而谋杀了你生活的快乐。学习,不要追求“刻苦”,而是要“发现你的热爱”;学习应当是从容的,是一种享受,一种生活的常态。而在北大,这是可能的。这里有许多智慧的老师,不仅有本校的,而且有外埠的;有许多精彩的讲座,不仅有法学的,还有其他专业的。当然,不会都好、事事令人满意;但无论如何,它都不会,也不应该,只是让你失望,你可以由此获得自信,促动你去创造。你还应当发现,周围的每个人都可能拥有你无法一一亲历却是你需要的经验和知识。一次远足也许会令你获得一位良友,即使不是终生的;一次交谈也许会让你进入一个只能在电视上或书本里接触的世界,即使某一天你必须离开。大学并不只是校园更大一点,同学更年长一点,老师学历更高一点。大学与中学的最大区别之一是,后者是标准化的,而前者是高度专业分工的;因此她更像一个小型的现代社会,尤其是在北大这样的综合性大学,你要同各种各样的人打交道。

  这对于学习法律尤为重要。不仅因为实践的法律总是需要各种知识,而且与自然科学和人文科学相比有很多不同,法律说到底是要恰当地处理各种人际关系、规章制度和解决大大小小的人际冲突。对于法律的知识和技能,首先是理解,然后要锻炼妥善应对人和事的能力。好律师、好法官的那个“好”字既不是文字的构建,也不全是个人的修行,它更多是在各种交往和事务处理中,逐渐磨炼出来的那种敏锐、犀利、干练和缜密,当然还包括一定程度的、要做成事不可缺少的融通之处。

  这只能从社会交往中学。但学习本身不是目的,目的还是生活。你们当中很多人,特别是本科生,一直生活在父母的目光中,如今第一次真正远离家门,要同这么多、将来还会更多的无亲无故的人打交道,这真的是非常艰难却是你必须迈出的一步。要学会相信别人,也要学会自我保护;学会竞争,也要学会协同;学会严格,也要学会宽容;学会坚持,也要学会妥协;学会倾听,也要学会表达;学会默默恪守,也要学会分享心灵;学会在挫折中守护理想,在超越中留住平凡。而所有这些,只能靠你们独自摸索的“分寸”,别人很难教授。独生子女被父母和社会一直“关”在校园内,但实际上,大学并不只是一个灌输知识或创造知识的地方;今天的大学已不得不悄悄承担了另一个重要的社会功能:它成了青年人进入现代社会生活之前的最后一个集训营。

  不要以为这只是对你们个人生活幸福和职业成功的告诫,这其实也是我们这个正在转型发展中的社会的需要。仅仅是一般的、可文本化的知识或技能不足以组织一个我们愿意接受的现代社会,仅仅是父母或老师的告诫也不足以应对严酷有时甚至是险恶的生活世界。在书本之外、课堂之外,我们每个人,特别是法律人,需要其他许多东西,其中包括胸怀、视野、想象力、同情心等等,以及在此基础上的你对于周围人的真诚关切,乃至对于整个中国和整个人类的关切。

  最后的半句话并非夸张。因为,中国社会已经在市场经济和人员流动中日益整合了——你带着些许乡音的普通话就是一个标志;世界也已经在全球的贸易、交往甚至冲突中日益整合了——你床头的英文版《哈利波特》或你袋中的手机就是一个明证。

  你们是幸运的,不只是因为你们来到了北大法学院,更因为今天的中国,今天的世界。当然,仅仅幸运是不够的。即便今天进入北大,也并不意味着前程一定远大——如果你们太多关注了考试、分数、出国、考研、个人情感以及其他数不清的纠葛。

  很有可能,你的才华、自信、经验以及其他许多东西都会在这里第一次受到挑战,高中或大学本科独孤求败的经验将在这里终结。你还会遇到许多同青春相伴的困惑、怀疑、挫折和痛苦,也许包括你的初恋,和更多的暗恋、失恋。但即使如此,有一点请记住,没有什么可能规定你的未来,最多只能算是“被青春撞了一下腰”。

  我相信,在这里,你将度过也许不是你最幸福,肯定不是你最灿烂,但必定是你最怀念的一段时光!

  我祝福你们!(摘自《演讲与口才》)

注:朱苏力:北京大学法学院院长。

1.本文作者认为大学的性质是什么?这和蔡元培先生的认识有什么不同? 

                                                                                        

2.作者认为大学生学习的内容是什么?这和蔡元培先生的认识有什么不同? 

                                                                                        

3.文中的“当然还包括一定程度的、要做成事不可缺少的融通之处”,其中“融通”的具体含义是什么? 

                                                                                        

4.“第一个梦想成真”的含义是什么?

                                                                                         

判断题