如何使用visio画UML序列图
今天尝试使用visio画了一个序列图。
话不多说,先打开visio,新建一个UML序列。
先新建几个对象生命线
加入几个激活
而后是消息,实线表示请求,虚线表示响应。
当然如果不影响理解,可以不用每个请求都配上一个响应。
此UML例子是在《UML精粹:标准对象建模语言简明指南》中拿过来的,为了更好的理解这个UML,下面使用java来实现此UML。
procuct
packagecom.simon.uml.sequenceDiagram;
/**
*CreatedbyIntelliJIDEA.
*
*@author:Simon
*@date:2019-05-09
*@time:14:50
*@description:产品
*/
publicclassProduct{
privateStringname;
privatedoubleprice;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicdoublegetPrice(){
returnprice;
}
publicdoublegetPrice(intnumber){
doubleorderLinePrice=price*number;
System.out.println("productname:"+getName()
+"/tprice:"+getPrice()
+"/tnumber:"+number
+"/torderlineprice:"+orderLinePrice
);
returnorderLinePrice;
}
publicvoidsetPrice(doubleprice){
this.price=price;
}
}
customer
packagecom.simon.uml.sequenceDiagram;
/**
*CreatedbyIntelliJIDEA.
*
*@author:Simon
*@date:2019-05-09
*@time:14:51
*@description:客户
*/
publicclassCustomer{
privatedoublediscount;
publicdoublegetDiscountedValue(Orderorder){
returndiscount*order.getBaseValue();
}
publicdoublegetDiscount(){
returndiscount;
}
publicvoidsetDiscount(doublediscount){
this.discount=discount;
}
}
order
packagecom.simon.uml.sequenceDiagram;
importjava.util.List;
/**
*CreatedbyIntelliJIDEA.
*
*@author:Simon
*@date:2019-05-09
*@time:14:50
*@description:订单
*/
publicclassOrder{
privatedoublebaseValue;
privateCustomercustomer;
privateList
publicdoublecalculatePrice(){
doublesumOrderLinePrice=0;
for(OrderLineorderLine:orderLineList){
doubleorderLinePrice=orderLine.calculatePrice();
sumOrderLinePrice+=orderLinePrice;
}
this.setBaseValue(sumOrderLinePrice);
System.out.println("orderbaseprice:"+sumOrderLinePrice);
doublediscountedValue=getCustomer().getDiscountedValue(this);
System.out.println("orderdiscountedprice:"+discountedValue);
returndiscountedValue;
}
publicdoublegetBaseValue(){
returnbaseValue;
}
publicvoidsetBaseValue(doublebaseValue){
this.baseValue=baseValue;
}
publicList
returnorderLineList;
}
publicvoidsetOrderLineList(List
this.orderLineList=orderLineList;
}
publicCustomergetCustomer(){
returncustomer;
}
publicvoidsetCustomer(Customercustomer){
this.customer=customer;
}
}
orderline
packagecom.simon.uml.sequenceDiagram;
/**
*CreatedbyIntelliJIDEA.
*
*@author:Simon
*@date:2019-05-09
*@time:14:50
*@description:订单明细
*/
publicclassOrderLine{
privateintnumber;
privateProductproduct;
publicOrderLine(intnumber,Productproduct){
this.number=number;
this.product=product;
}
publicdoublecalculatePrice(){
returnproduct.getPrice(number);
}
publicintgetNumber(){
returnnumber;
}
publicvoidsetNumber(intnumber){
this.number=number;
}
publicProductgetProduct(){
returnproduct;
}
publicvoidsetProduct(Productproduct){
this.product=product;
}
}
order的测试用例
packagecom.simon.uml.sequenceDiagram;
importorg.junit.Assert;
importjava.util.ArrayList;
importjava.util.List;
/**
*CreatedbyIntelliJIDEA.
*
*@author:Simon
*@date:2019-05-09
*@time:15:23
*@description:
*/
publicclassOrderTest{
@org.junit.Test
publicvoidcalculatePrice(){
//这个商品是鞋子,123块钱一双
ProductproductShoes=newProduct();
productShoes.setName("shoes");
productShoes.setPrice(123);
//这个商品是袜子,8块钱一双
ProductproductSocket=newProduct();
productSocket.setName("socket");
productSocket.setPrice(8);
//这是一个老客户,打七折
Customercustomer=newCustomer();
customer.setDiscount(0.7);
//这个客户下了一个单
Orderorder=newOrder();
order.setCustomer(customer);
//买了一双鞋子,两双袜子
OrderLineorderLineShoes=newOrderLine(1,productShoes);
OrderLineorderLineSocket=newOrderLine(2,productSocket);
List
orderLineList.add(orderLineShoes);
orderLineList.add(orderLineSocket);
order.setOrderLineList(orderLineList);
//算一算总共多少钱
doublepriceActual=order.calculatePrice();
Assert.assertEquals("97.3",String.valueOf(priceActual));
}
}
测试用例的输出
productname:shoesprice:123.0number:1orderlineprice:123.0
productname:socketprice:8.0number:2orderlineprice:16.0
orderbaseprice:139.0
orderdiscountedprice:97.3