软件构造——Lab2

① Implement ConcreteVerticesGraph
在这个ADT中要求只用点的类来实现一个图,我采用的存储边的结构是两个图
private Map<L,Integer> source=new HashMap<>(); //用于连到该点的点集图
private Map<L,Integer> target=new HashMap<>(); //用于存储该点能连到的点集图
虽然这样在每次连一条边的时候需要同时更新这两个属性,但在需要或取边的信息的时候却非常方便。

②GoAndChessGame
我首先首先设计了一个抽象类Game.java,其包含
两名玩家:
private Player P1;
Private Player P2;
具体子类:
class Player //玩家类
class Piece //棋子类
class Board //棋盘类
抽象方法(在两个扩展类中具体实现):
//用于初始化棋盘,棋子
public abstract void init(Player p1,Player p2);
//围棋的放子方法
public abstract boolean putPiece(Player player,Piece piece,int x,int y);
//象棋的移子方法
public abstract boolean movePiece(Player player,int x1,int y1,int x2,int y2);
//围棋的提子方法
public abstract boolean getPiece(Player player,int x,int y);
//象棋的吃子方法
public abstract boolean eatPiece(Player player,int x1,int y1,int x2,int y2);
//搜索棋盘上某位置的信息
public abstract String search(int x,int y);
//获得棋盘上某点棋子姓名方法
public abstract String get(int x,int y);
//用于显示棋盘
public abstract void showBoard(Player p1,Player p2);
mutability:子类和方法
immutability:private Player P1; Private Player P2;
AF:Game(p1,p2)={a game contains two player p1 and p2}
RI:P1和P2不能重名
safety from rep exposure:玩家为private,不能修改

之后我用两个类去扩展了这个抽象类,分别为ChessGame和GoGame

ChessGame:
Rep:Board chessBoard; //象棋棋盘
覆写方法如下:
@Override public void init(Player p1,Player p2) //象棋棋盘的初始方法
@Override public boolean movePiece(Player player, int x1, int y1, int x2, int y2) //象棋游戏的移子方法
@Override public boolean eatPiece(Player player, int x1, int y1, int x2, int y2) //象棋游戏的吃子方法
@Override public String search(int x,int y)//象棋的搜索方法
@Override public void showBoard(Player p1,Player p2) //象棋的显示棋盘方法

GoGame
Rep:Board goBoard; //围棋棋盘
@Override public void init(Player p1,Player p2) //围棋棋盘的初始方法
@Override public boolean putPiece(Player player, Piece piece, int x, int y) //围棋的放子方法
@Override public boolean getPiece(Player player, int x, int y) //围棋的提子方法
@Override public String search(int x,int y)//围棋的搜索方法
@Override public void showBoard(Player p1,Player p2) //围棋的显示棋盘方法

这样进行覆用可以极大地减少不必要的代码重复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值