繁体   English   中英

UML 2.0序列图深度

[英]UML 2.0 Sequence Diagram depth

我正在尝试进行中期任务,即为一个简单的Java程序创建序列图。 但是,我遇到了一个问题,即我无法决定要在图表中放置哪个元素以及要从哪个元素省略。 我正在发布JAVA代码,如果它可以帮助回答问题。

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序列图

主要的问题是我不知道是否应该绘制终止方式中使用的每个元素,交互和实例。 我知道我听起来有点杂乱无章,但请有人帮助我解决我的问题。

我没有与您交叉检查代码是否正确。 请注意,创建ProductSpec直接返回到POST 在您的上下文中,这可能是合法的缩写,但可能未反映代码。

无论如何,您在SD中放置的内容应阐明特定的上下文,而不应模糊不清。 因此,将所有内容放入单个SD绝不是一个好主意。 而是创建一个粗略的概览以突出显示主要流程。 在POS系统中,这可能首先需要做两件事:初始化整个工作并将商品输入目录中。 意味着您将在此处创建两个SD。 您也不应尝试“图形化编程”并大量使用片段。 离开他们的重要途径决策之类的,不是针对每个if还是case你的代码中发现。 就SD而言,少用多于好。

注意:我不知道您的老师打算在这里做什么。 这可能与我的说法相矛盾,他只是希望您创建一个(无用的)墙纸。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM