这是软件工程课程艰巨的编程任务的一部分。目的是在NetworkLayerInterface和ApplicationLayerInterface之间添加一层安全性。该中间层称为PresentationLayerInterface。
属于网络层UML图的一部分的抽象方法是:
openConnection()
closeConnection()
sendMessage(String)
receiveMessage(String)
getPresentationLayer()
setPresentationLayer()
属于应用层UML图的抽象方法是:
start()
stop()
sendMessage(String)
receiveMessage(String)
getPresentationLayer()
setPresentationLayer()
作为表示层的UML图的一部分的抽象方法是:
start()
stop()
sendMessage(String)
receiveMessage(String)
getNetworkLayer()
setNetworkLayer()
getApplicationLayer()
setApplicationLayer()
在不使用PresentationLayer作为中介的应用程序层的初始实现中,start()方法如下所示。
@Override
public void start() {
//TODO: Part 2: Replace with method invocation of the the presentation layer
networkLayer.openConnection();
}
start()方法内部的openConnection()方法在实现网络层接口的TCPNetwork.java文件中实现。如下:
@Override
public void openConnection() {
System.out.println("Connecting to server ...");
try {
socket = new Socket(host, port);
socketInput = new Scanner(new InputStreamReader(socket.getInputStream()));
socketOutput = new PrintWriter(socket.getOutputStream(), true);
waitForIncommingMessages();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Connection established.");
}
如果我不能再(根据分配)使用内部的[[networkLayer.openConnection();,则如何调用方法start()?
例如,我尝试了以下方法:public void start() {
//TODO: Part 2: Replace with method invocation of the the presentation layer
//networkLayer.openConnection(); Originally this
//presentationLayer.start();
//presentationLayer.openConnection(); Can't add method to Presentation Interface
}我确实是Java的业余用户,所以请不要对已有知识进行假设。
@ codebrane评论。
如果要从PresentationLayer调用openConnection()
方法,则必须获取NetworkLayer对象才能进行调用,因此需要调用presentationLayer.getNetworkLayer().openConnection()