逆向工程java代码到序列图

时间:2014-01-06 06:58:57

标签: java object uml sequence-diagram

这可能是一个简单的问题但是,这让我很担心。 我们得到了一个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代码到序列图的转换。

1 个答案:

答案 0 :(得分:0)

我会说有人已经理解了UML颠倒,而不是你:UML规范(UML上层结构规范,v2.4.1 pag.504)将CallEvent(即箭头)定义为< em>通过调用操作调用的消息对象接收。例如,请参阅here

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

  • 在图表中,Customeradd order item发送Dinner Now System(有意义)
  • 在代码中,onlinemealsellingsystemaddOrderItems发送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}}。