一、
abstract class Command {
public abstract void execute();
}
class AddCommand extends Command{
private Receiver receiver;
public void AddCommand(Receiver r) {
this.receiver = r;
}
public void execute() {
receiver.action();
}
}
class PrintCommand extends Command{
private Receiver receiver;
public void PrintCommand(Receiver r) {
this.receiver = r;
}
public void execute() {
receiver.action();
}
}
class Invoker {
private Command command;
public void setCommand(Command cmd) {
this.command = cmd;
}
public void call() {
command.execute();
}
}
class Receiver {
public void action() {….}
}
class Client {
public static void main(String args[]) {
Command c1,c2;
Receiver r = new Receiver();
c1 = new AddCommand(r);
c2 = new PrintCommand(r);
Invoker in = new Invoker();
in.setCommand(c1);
in.call();
in.setCommand(c2);
in.call();
}
}
1、 绘制上述代码的类图(6分)。
评分标准:每个类及方法正确各得1分,关系正确2分。
2、 绘制上述主程序main的顺序图,要求消息(构造消息可忽略)使用层次编号,对象应有名称和类型。(10分)
评分标准:对象及名称正确得2分,主要方法(setCommand,call,execute,action)及发送对象正确每个得1分,共4分,消息层次正确得2分。(创建消息可以省略)
二、
abstract class AbstractCommand {
public abstract int execute(int value);
public abstract int undo()
}
class AddCommand extends AbstractCommand{
private Adder adder = new Adder();
private int value;
public int execute(int v) {
this.value = v;
int result = adder.add(value);
return result;
}
public int undo() {
int result = adder.add(-value);
return result;
}
}
class Calculator {
private AbstractCommand command;
public void setCommand(AbstractCommand cmd) {
this.command = cmd;
}
public void compute(int v) {
int sum = command.execute(v);…
}
public void undo() {
int sum = command.undo();…
}
}
class Adder {
public int add(int v) {….}
}
class Client {
public static void main(String args[]) {
Calculator c1 = new Calculator();
AbstractorCommand cmd;
cmd = new AddCommand();
c1.setCommand(cmd);
c1.compute(10);
c1.compute(4);
c1.compute(4);
c1.undo();
}
}
1、 绘制上述代码的类图(6分)。
评分标准:每个类及方法正确各得1分,关系正确2分。
2、 绘制上述主程序main的顺序图,要求消息(构造消息可忽略)使用层次编号,对象应有名称和类型。(10分)
评分标准:对象及名称正确得2分,重点方法(setCommand,undo,execute,add)及发送对象正确每个得1分(共6分),消息层次正确得2分。创建方法可以省略。
三、
class A {
private void x( ){…}
public static void main( ) {
x( );
B b1 = new B( );
b1.y( );
C c1 = new C1( );
c1.z( );
}
}
Class B {
public void y( ) {
y1();
y2();
D d1 = new D();
d1.y3( );
}
private void y1( ) {…}
private void y2() {…}
}
Class C {
public void z( ) {…}
}
Class D {
public void y3( ) {…}
}
1、 绘制上述代码的类图(6分)。
评分标准:每个类及方法正确各得1分,依赖关系正确得2分。
2、请绘制出下列描述的顺序图(10分)
当用户按下一个字母或数字键时,GUI对象和其它对象之间的交互情况如下:
(1)GUI将击键事件通知给操作系统。
(2)操作系统接着通知CPU。
(3)操作系统更新GUI。
(4)CPU又通知图形卡。
(5)图形卡向显示器发送一个显示消息。
(6)显示器将字母字符显示在屏幕上,给用户提供了图形化的反馈信号。
评分标准:对象及名称正确得4分,发送对象正确得3分,消息层次正确得3分。
四、
class Form1 {
private void checkInput( ){…}
public static void main( )
{
……
checkInput();
LoginControl lc = new LoginControl();
if(lc.UserLogin(username, pwd))
System.Out.Println("登录成功!");
else
System.Out.Println ("登录失败!");
}
}
class LoginControl {
public bool UserLogin(string userName, string password)
{
User u1 = new User();
Group g1 = new Group();
if (u1.queryUser(userName, password))
{
g1 = u1.userGroup;
if (g1.hasRight())
return (true);
}
return (false);
}
}
class User {
private String userName;
private String password;
private Group userGroup;
public User(String name, String password) {……}
public bool queryUser(string userName,string userPwd) {
……
userGroup = new Group();
userGroup.queryGroup(groupName);
}
}
class Group {
private String groupName;
private String description;
public void queryGroup(string name) {……}
public bool hasRight() {……}
}
1、以上简化版代码完成登录功能,根据用户名和密码查询用户信息,之后根据用户的组名查询用户组信息,并判断用户组是否有操作权限。请绘制代码的类图(10分)。
评分标准:每个类及方法正确各得2分,依赖关系正确得2分。
2、绘制上述主程序main的顺序图,要求消息(构造消息可忽略)使用层次编号,对象应有名称和类型。(6分)
评分标准:对象及名称正确得4分,消息正确得2分。