这可能是一个简单的问题但是,这让我很担心。 我们得到了一个java代码,并被要求转换为序列图。 java代码是这样的。
class onlinemealsellingsystem
{
public static void main(String[] args)
{
DinnerNowSystem dns =new DinnerNowSystem();
Customer c = new Customer();
Restaurent r = new Restaurent();
Bank b = new Bank();
c.addOrderItems();
c.confirmOrder();
dns.sendorder();
c.payment();
r.deliverfood();
}
}
相应的类具有相应的功能定义。考试结束后我找到的解决办法是这样的。
在考试中我认为在线餐饮销售系统会向客户发送信息(addorderitems)。
我的思维过程出了什么问题?为什么不应该这样呢?
请给我举例说明从java代码到序列图的转换。
答案 0 :(得分:0)
我会说有人已经理解了UML颠倒,而不是你:UML规范(UML上层结构规范,v2.4.1 pag.504)将CallEvent
(即箭头)定义为< em>通过调用操作调用的消息对象接收。例如,请参阅here。
我的理解是给定的图表不代表给定的代码。
Customer
向add order item
发送Dinner Now System
(有意义)onlinemealsellingsystem
向addOrderItems
发送Customer
(没有意义)。 不考虑参数(因为它们未在您的示例中指定,与图表对应的源代码将类似于:
class Customer {
public void iWannaEat() {
DinnerNowSystem dns =new DinnerNowSystem();
Restaurant r = new Restaurant();
Bank b = new Bank();
while (...) dns.addOrderItem();
dns.confirmOrder();
dns.sendorder();
dns.paymentDetail();
Food f = r.receiveFood();
}
}
class DinnerNowSystem() {
Bank b;
Restaurant r;
void addOrderItem();
void confirmOrder() {
r.sendOrder();
}
void paymentDetail() {
if (b.processPayment())
r.confirmOrder()
else halt and catch fire;
}
}
另请注意,如果您发布的代码和UML图彼此对应,则代码会错过图中显示的loop
。这很奇怪。
另请注意,Customer
等待Restaurant
传递食物的是{{1}}。