gpt4 book ai didi

java - 将 Java 代码逆向工程为序列图

转载 作者:太空宇宙 更新时间:2023-11-04 15:14:54 24 4
gpt4 key购买 nike

这可能是一个简单的问题,但是,这让我很担心。我们得到了一个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();
}
}

对应的类定义了对应的函数。考试后我发现的解决方案是这样的。

diagram

在考试中我认为在线售餐系统会向顾客发送消息(addorderitems)。

我的思维过程哪里出了问题?为什么不应该发生这样的事呢?

请举例说明从java代码到序列图的转换。

最佳答案

我想说有人颠倒了 UML 的理解,但不是你:UML 规范(UML Superstruction 规范,v2.4.1 第 504 页)定义了一个 CallEvent (即箭头)作为对象接收调用操作的消息。例如,参见here .

我的理解是给定的图表并不代表给定的代码。

  • 在图中,客户添加订单项发送到Dinner Now系统(有意义)
  • 在代码中,onlinemealsalessystemCustomer 发送 addOrderItems(没有意义)。

忽略参数(因为在您的示例中未指定它们,与该图对应的源代码将类似于:

    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 图相互对应,则代码会错过图中存在的循环。这太奇怪了。

另请注意,客户需要等待餐厅将食物送来。

关于java - 将 Java 代码逆向工程为序列图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20944679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com