2017-10-08 148 views
0

我正在尝试做我的中期任务,它为一个简单的java程序创建一个序列图。但是,我遇到了一个问题,我无法确定将哪个元素放入图表以及哪个元素可以省略。如果可以帮助回答问题,我发布了一个JAVA代码。UML 2.0序列图深度

public class TestPOS { 
public static void main(String[] args) { 
    // POST 객체를 준비 
    Store store = new Store(); 
    ProductCatalog catalog = new ProductCatalog(); 
    catalog.addSpec(1, new ProductSpec(1, "pencil", 1000)); 
    catalog.addSpec(2, new ProductSpec(2, "eraser", 500)); 
    catalog.addSpec(3, new ProductSpec(3, "fountain pen", 50000)); 
    POST post = new POST(store, catalog); 

    // 첫 번째 판매 
    post.enterItem(1, 12); 
    post.enterItem(2, 4); 
    post.enterItem(3, 1); 

    post.makePayment(); 

    post.endSale(); 

    // 두 번째 판매 
    post.enterItem(1, 2); 
    post.enterItem(2, 1); 

    post.makePayment(); 

    post.endSale(); 

    // 출력을 보여주어 이해를 돕기위한 코드 
    for (Sale sale : store.completedSales) { 
     System.out.println(sale.getDate()); 
     sale.printLineItems(); 
     System.out.println("total = " + sale.getTotal()); 
    } 
    } 
} 

这是调用enterItem(),makePayment()和endSale()的主要地方。这个任务是为上面的三个函数创建序列图。我将在下面发布每个课程。

----------------------------------------------------------- 
import java.util.Date; 
public class POST { 
    private Store store; 
    private ProductCatalog catalog; 
    private Sale sale = null; 

    public POST(Store store, ProductCatalog catalog) { 
     this.store = store; 
     this.catalog = catalog; 
    } 

    public void enterItem(int upc, int qty) { 
     if (sale == null) { 
      Date date = new Date(System.currentTimeMillis()); 
      sale = new Sale(date); 
     } 
     ProductSpec s = catalog.spec(upc); 
     sale.makeLineItem(s, qty); 
    } 

    public void makePayment() { 
     if (sale != null) sale.makePayment(); 
    } 

    public void endSale() { 
     store.addCompleteSale(sale); 
     sale = null; 
    } 
} 
----------------------------------------------------------- 
import java.util.ArrayList; 
public class Store { 
    protected ArrayList<Sale> completedSales = null; 

    public Store() { 
     completedSales = new ArrayList<Sale>(); 
    } 

    public void addCompleteSale(Sale sale) { 
     completedSales.add(sale); 
    } 
} 
----------------------------------------------------------- 
import java.util.ArrayList; 
import java.util.Date; 
public class Sale { 
    private Date date; 
    private ArrayList<SalesLineItem> lineItem = null; 
    private Payment payment = null; 

    public Sale(Date date) 
    { 
     this.date = date; 
     lineItem = new ArrayList<SalesLineItem>(); 
    } 

    public void makeLineItem(ProductSpec s, int qty) { 
     SalesLineItem item = new SalesLineItem(s, qty); 
     lineItem.add(item); 
    } 

    public int getTotal() { 
     int total = 0; 
     for (SalesLineItem item : lineItem) { 
      total += item.getSubTotal(); 
     } 
     return total; 
    } 

    public void makePayment() { 
     int total = this.getTotal(); 
     payment = new Payment(total); 
    } 

    // 출력을 보여주어 이해를 돕기위한 메소드, 클래스 다이어그램에 반영하지 않음 
    public Date getDate() { 
     return date; 
    } 

    // 출력을 보여주어 이해를 돕기위한 메소드, 클래스 다이어그램에 반영하지 않음 
    public void printLineItems() { 
     for (SalesLineItem item : lineItem) { 
      System.out.println("upc : " + item.getItemUpc() +", name : " + item.getItemName() + ", price : " 
        + item.getItemPrice() + ", quantity : " + item.getQuantity()); 
     } 
    } 
} 
----------------------------------------------------------- 
public class Payment { 
    private int amount; 

    public Payment(int amount) { 
     this.amount = amount; 
    } 

    // 출력을 보여주어 이해를 돕기위한 메소드, 클래스 다이어그램에 반영하지 않음 
    public int getAmount() { 
     return amount; 
    } 
} 
----------------------------------------------------------- 
public class SalesLineItem { 
    private int quantity; 
    private ProductSpec spec; 

    public SalesLineItem(ProductSpec spec, int quantity) { 
     this.spec = spec; 
     this.quantity = quantity; 
    } 

    public int getSubTotal() { 
     int price = spec.getPrice(); 
     return price * quantity; 
    } 

    // 출력을 보여주어 이해를 돕기위한 메소드, 클래스 다이어그램에 반영하지 않음 
    public int getItemUpc() { 
     return spec.getUpc(); 
    } 

    // 출력을 보여주어 이해를 돕기위한 메소드, 클래스 다이어그램에 반영하지 않음 
    public String getItemName() { 
     return spec.getName(); 
    } 

    // 출력을 보여주어 이해를 돕기위한 메소드, 클래스 다이어그램에 반영하지 않음 
    public int getItemPrice() { 
     return spec.getPrice(); 
    } 

    // 출력을 보여주어 이해를 돕기위한 메소드, 클래스 다이어그램에 반영하지 않음 
    public int getQuantity() { 
     return quantity; 
    } 
} 
----------------------------------------------------------- 
import java.util.HashMap; 
public class ProductCatalog { 
    private HashMap<Integer, ProductSpec> specTable = new HashMap<Integer, ProductSpec>(); 

    public void addSpec(int upc, ProductSpec spec) { 
     specTable.put(upc, spec); 
    } 

    public ProductSpec spec(int upc) { 
     return specTable.get(upc); 
    } 
} 
----------------------------------------------------------- 
public class ProductSpec { 
    private int upc; 
    private String name; 
    private int price; 

    public ProductSpec(int upc, String name, int price) { 
     this.upc = upc; 
     this.name = name; 
     this.price = price; 
    } 

    public int getPrice() { 
     return price; 
    } 

    // 출력을 보여주어 이해를 돕기위한 메소드, 클래스 다이어그램에 반영하지 않음 
    public int getUpc() { 
     return upc; 
    } 

    // 출력을 보여주어 이해를 돕기위한 메소드, 클래스 다이어그램에 반영하지 않음 
    public String getName() { 
     return name; 
    } 
} 

不介意韩语在代码中,他们只是为了一些描述。下面的图片是我画的图,它是正确的或不正确的。

enterItem sequence diagram

的主要问题是,我没有一个线索,我是否应该引起每一个元素,交互和实例正在道路上的终端使用时。我知道我听起来有点无组织,但请有人帮我解决我的问题。

回答

1

我没有与你交叉检查图纸是否正确。只需注意,创建ProductSpec直接返回到POST。这可能是您的上下文中的法定缩写,但它可能不会反映代码。

无论如何,你在可持续发展标准中应该澄清一定的背景,而不是掩盖它。因此,将所有内容都放在一个SD中并不是一个好主意。而是创建一个粗略的概述来突出主流。在POS系统中,这可能首先是两件事:整个东西的初始化和目录中文章的输入。意味着你会在这里创建两个SD。你也不应该试图“编程图形化”并集体使用片段。将它们留作重要的路径决策之类,不适用于您在代码中找到的每个ifcase。就可持续发展而言,使用少于更多通常会更好。

注:我不知道你的老师在这里打算什么。这可能与我的陈述相矛盾,他只是想让你制作一张(无用的)墙纸。