Java 程序设计
定义类:
接口类、抽象类。接口类中的函数定义可以通过代码判断。
设计类:
填写函数体,通常以调用形式出现。可通过程序或说明或类图中找到。
- 接口 interface 用 implements 实现;抽象类用 abstract class 用 extends 继承。
- 抽象类中可以有普通方法(有函数体),也可以有抽象方法(无函数体,方法前要加关键字 abstract),接口中的方法默认为抽象方法,因此无需加关键标识。
- this 用来指代当前对象,一般有两个重名变量的赋值时会使用到,如在构造函数中,局部变量和成员变量相同都为 name,就要使用 this.name = name
- 调用父类的方法用 super
- 认真看类图,类图中可以看到类之间的关系以及类中的方法。
真题示例 1:
某图书管理系统中管理着两种类型的文献:图书和论文。现在要求统计所有馆藏文献的总页码(假设图书馆中有一本 540 页的图书和两篇各 25 页的论文,那么馆藏文献的总页码就是 590 页)。采用 Visitor(访问者)模式实现该要求,得到如图 6-1 所示的类图。
【Java 代码】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
import java.util.*;
interface LibraryVisitor {
____(1)______;
____(2)______;
void printSum();
}
class LibrarySumPrintVisitor implements LibraryVisitor { // 打印总页数
private int sum = 0;
public void visit(Book p_book) {
sum = sum + p_book.getNumberOfPages();
}
public void visit(Article p_article) {
sum = sum + p_article.getNumberOfPages();
}
public void printSum() {
System.out.println("SUM=" + sum);
}
}
interface LibraryItemInterface {
____(3)______;
}
class Article implements LibraryItemInterface {
private String m_title; // 论文名
private String m_author; // 论文作者
private int m_start_page;
private int m_end_page;
public Article(String p_author, String p_title, int p_start_page, int p_end_page) {
m_title = p_title;
m_author = p_author;
m_start_page = p_start_page;
m_end_page = p_end_page;
}
public int getNumberOfPages() {
return m_end_page - m_start_page;
}
public void accept(LibraryVisitor visitor) {
____(4)______;
}
}
class Book implements LibraryItemInterface {
private String m_title; // 书名
private String m_author; // 书作者
private int m_pages; // 页数
public Book(String p_author, String p_title, int p_pages) {
m_title = p_title;
m_author = p_author;
m_pages = p_pages;
}
public int getNumberOfPages() {
return m_pages;
}
public void accept(LibraryVisitor visitor) {
____(5)______;
}
}
|
真题示例 - 2:
试题五(共 15 分)
阅读下列说明和 Java 代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
享元(flyweight)模式主要用于减少创建对象的数量,以降低内存占用,提高性能。现要开发一个网络围棋程序,允许多个玩家联机下棋。由于只有一台服务器,为节省内存空间,采用享元模式实现该程序,得到如图 6-1 所示的类图。
【Java 代码】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
import java.util.*;
enum PieceColor { BLACK, WHITE } // 棋子颜色
class PiecePos { // 棋子位置
private int x;
private int y;
public PiecePos(int a, int b) { x = a; y = b; }
public int getX() { return x; }
public int getY() { return y; }
}
abstract class Piece { // 棋子定义
protected PieceColor m_color; // 颜色
protected Piecemopos m_pos; // 位置
public Piece(PieceColor color, PiecePos pos) {
m_color = color;
m_pos = pos;
}
______(1)______;
}
class BlackPiece extends Piece {
public BlackPiece(PieceColor color, PiecePos pos) { super(color, pos); }
public void draw() {
System.out.println("draw a black piece");
}
}
class WhitePiece extends Piece {
public WhitePiece(PieceColor color, PiecePos pos) { super(color, pos); }
public void draw() {
System.out.println("draw a black piece");
}
}
class PieceBoard { // 棋盘上已有的棋子
private static final ArrayList<___(2)____> m_arrayPiece = new ArrayList<>();
private String m_blackName; // 黑方名称
private String m_whiteName; // 白方名称
public PieceBoard(String black, String white) {
m_blackName = black;
m_whiteName = white;
}
}
// 一步棋,在期盼上放一颗棋子
public void SetPiece(PieceColor color, PiecePos pos) {
____(3)____ piece = null;
if (color == PieceColor.BLACK) { // 放黑子
piece = new BlackPiece(color, pos); // 获取一颗黑子
System.out.println(m_blackName + "在位置(" + "pos.getX()" + "," + "pos.getY()" + ")");
_____(4)_____;
} else { // 放白子
piece = new WhitePiece(color, pos); // 获取一颗白子
System.out.println(m_whiteName + "在位置(" + "pos.getX()" + "," + "pos.getY()" + ")");
_____(5)_____;
}
m_arrayPiece.add(piece);
}
|
真题答案
真题示例 1:
(1)void visit(Book p_book);
(2)void visit(Article p_article);
(3)int getNumberOfPages();
(4)visitor.visit(this);
(5)visitor.visit(this);
真题示例 2:
(1)public abstract void draw();
(2)Piece
(3)Piece
(4)piece.draw()
(5)piece.draw()