什么是時序圖
成都創(chuàng)新互聯(lián)公司專注于網(wǎng)站建設(shè)|網(wǎng)站建設(shè)維護(hù)|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計與制作經(jīng)驗,為許多企業(yè)提供了網(wǎng)站定制設(shè)計服務(wù),案例作品覆蓋人造霧等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身開發(fā)品質(zhì)網(wǎng)站。
時序圖(Sequence Diagram),又名序列圖、循序圖,是一種UML交互圖。它通過描述對象之間發(fā)送消息的時間順序顯示多個對象之間的動態(tài)協(xié)作。它可以表示用例的行為順序,當(dāng)執(zhí)行一個用例行為時,其中的每條消息對應(yīng)一個類操作或狀態(tài)機中引起轉(zhuǎn)換的觸發(fā)事件。
時序圖描述對象是如何交互的,并且將重點放在消息序列上。也就是說,描述消息是如何在對象間發(fā)送和接收的。時序圖有兩個坐標(biāo)軸:縱坐標(biāo)軸顯示時間,橫坐標(biāo)軸顯示對象。每一個對象的表示方法是:矩形框中寫有對象和 / 或類名,且名字下面有下劃線;同時有一條縱向的虛線表示對象在序列中的執(zhí)行情況 ( 即發(fā)送和接收的消息對象的活動 ) , 這條虛線稱為對象的生命線。對象間的通信用對象的生命線之間的水平的消息線來表示,消息線的箭頭說明消息的類型,如同步,異步或簡單 。 瀏覽時序圖的方法是,從上到下查看對象間交換的消息,分析那些隨著時間的流逝而發(fā)生的消息交換。
時序圖中的消息可以是信號、操作調(diào)用或類似于 C++ 中的 RPC ( Remote Procedure Call,遠(yuǎn)程過程調(diào)用)或 Java 中的 RMI ( Remote Method Invocation , 遠(yuǎn)程方法調(diào)用)。當(dāng)對象接收到一個消息時,該對象中的一項活動就會啟動,我們把這一過程稱做激活 ( Activation )。 激活會顯示控制焦點,表明對象在某一個時間點開始執(zhí)行。一個被激活的對象或者是執(zhí)行它自身的代碼,或者是等待另一個對象的返回(該被激活的對象已經(jīng)向另一個對象發(fā)送了消息)。在圖形上,激活被繪制為對象生命線上的一個瘦高矩形。
消息可以用消息名及參數(shù)來標(biāo)識。消息還可帶有條件表達(dá)式,表示分支或決定是否發(fā)送消息。如果用于表示分支,則每個分支是相互排斥的,即在某一時刻僅可發(fā)送分支中的一個消息。消息也可以有順序號,但是在時序圖中,消息的順序號很少使用,因為時序圖已經(jīng)將消息的順序顯式地表示出來了。
一個對象可以通過發(fā)送消息來創(chuàng)建另一個對象,當(dāng)一個對象被刪除或自我刪除時,該對象用 "X"標(biāo)識。
創(chuàng)建步驟
1、確定交互過程的上下文;
2、識別參與過程的交互對象;
3、為每個對象設(shè)置生命線;
4、從初始消息開始,依次畫出隨后消息;
5、考慮消息的嵌套,標(biāo)示消息發(fā)生時的時間點,則采用FOC(focus of control);
6、說明時間約束的地點。
我以前用EA畫過時序圖,網(wǎng)上下載一個EA軟件安裝后就可以用了···圖如下所示,
可以在里面寫方法及其寫程序的時候的一些大概的思路表現(xiàn)在上面···
JSP頁面中嵌入動態(tài)圖表的兩種方法 :在JSP頁面中插入Applet小程序 ;通過JavaBean動態(tài)生成圖像。
JSP是一種廣泛應(yīng)用的網(wǎng)頁設(shè)計技術(shù) ,它是一種HTML和Java腳本混合的編程技術(shù) ,它結(jié)合了HTML的靜態(tài)特性和Java語言的動態(tài)能力 ,因此用它進(jìn)行動態(tài)網(wǎng)頁設(shè)計非常方便。在進(jìn)行圖像處理時 ,一般處理靜態(tài)圖片非常容易 ,但是 ,在實際應(yīng)用中常常需要動態(tài)地在網(wǎng)頁中生成二維的圖形.
基于JFreeChart開發(fā)的一個時序圖的繪制。代碼如下:
實例中createDataset()方法用于創(chuàng)建數(shù)據(jù)集合對象。時序圖的數(shù)據(jù)集合與其他數(shù)據(jù)集合不同,它需要添加一個時間段內(nèi)的所有數(shù)據(jù),通常采用TimeSeries類進(jìn)行添加。該實例中通過Math類的random()方法進(jìn)行隨機生成。
import java.awt.*;
import java.awt.event.ActionEvent;
import
java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import
java.io.DataInputStream;
import java.io.FileOutputStream;
import
java.io.IOException;
import java.net.URL;
import
java.net.URLConnection;
import java.text.DateFormat;
import
java.text.ParseException;
import java.text.SimpleDateFormat;
import
java.util.Calendar;
import java.util.Date;
import java.util.Random;
import javax.swing.JApplet;
import javax.swing.Timer;
import org.jfree.chart.*;
import
org.jfree.chart.annotations.CategoryTextAnnotation;
import
org.jfree.chart.axis.CategoryAnchor;
import
org.jfree.chart.axis.CategoryAxis;
import
org.jfree.chart.axis.CategoryLabelPositions;
import
org.jfree.chart.axis.DateAxis;
import
org.jfree.chart.axis.DateTickUnit;
import
org.jfree.chart.axis.DateTickUnitType;
import
org.jfree.chart.axis.ValueAxis;
import
org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import
org.jfree.chart.plot.CategoryPlot;
import
org.jfree.chart.plot.PlotOrientation;
import
org.jfree.chart.plot.XYPlot;
import
org.jfree.chart.renderer.category.BarRenderer;
import
org.jfree.chart.title.TextTitle;
import
org.jfree.data.category.CategoryDataset;
import
org.jfree.data.category.IntervalCategoryDataset;
import org.jfree.chart.axis.NumberAxis;
import
org.jfree.data.category.DefaultCategoryDataset;
import
org.jfree.data.gantt.Task;
import org.jfree.data.gantt.TaskSeries;
import
org.jfree.data.gantt.TaskSeriesCollection;
import
org.jfree.data.time.Day;
import org.jfree.data.time.Second;
import
org.jfree.data.time.TimeSeries;
import
org.jfree.data.time.TimeSeriesCollection;
import
org.jfree.data.xy.XYDataset;
public class shixutu extends JApplet {
//PLOT_FONT是一靜態(tài)的字體常量對象,使用此對象可以避免反復(fù)用到的字體對象被多次創(chuàng)建
private static final Font PLOT_FONT = new Font("黑體", Font.ITALIC ,
18);
JFreeChart chart;
//創(chuàng)建數(shù)據(jù)動態(tài)更新的監(jiān)聽
class DataGenerator extends Timer
implements ActionListener {
private static final long serialVersionUID =
3977867288743720504L;
String
equID;????????????????????????????????
//設(shè)備ID號
int
totalTask;???????????????????????????????
//任務(wù)數(shù)
String[][]
strTask;??????????????????????????
//任務(wù)情況
public void
actionPerformed(ActionEvent actionevent) {????????????
addTotalObservation();
}???????? DataGenerator()
{
super(1000,
null);
addActionListener(this);
System.out.println("super");
}
}
//將更新的數(shù)據(jù)添加到chart中
private void addTotalObservation()
{
System.out.println("addTotalObservation");
//設(shè)置新的數(shù)據(jù)集
chart.getXYPlot().setDataset(createDataset());
//通知Jfreechart
數(shù)據(jù)發(fā)生了改變,重新繪制柱狀圖
if
(chart != null)
{
chart.fireChartChanged();
}
}
private static void
processChart(JFreeChart chart)
{?
//設(shè)置標(biāo)題字體?
chart.getTitle().setFont(new Font("隸書", Font.BOLD,
26));?
//設(shè)置背景色?
chart.setBackgroundPaint(new
Color(252,175,134));?
XYPlot plot = chart.getXYPlot();???????
//獲取圖表的繪制屬性?
plot.setDomainGridlinesVisible(false);?
//設(shè)置網(wǎng)格不顯示?
//獲取時間軸對象?
DateAxis dateAxis = (DateAxis)
plot.getDomainAxis();?
dateAxis.setLabelFont(PLOT_FONT);??
//設(shè)置時間軸字體?
//設(shè)置時間軸標(biāo)尺值字體?
dateAxis.setTickLabelFont(new
Font("宋體",Font.PLAIN,12));?
dateAxis.setLowerMargin(0.0);??????
//設(shè)置時間軸上顯示的最小值?
//獲取數(shù)據(jù)軸對象?
ValueAxis valueAxis =
plot.getRangeAxis();?
valueAxis.setLabelFont(PLOT_FONT);?????????????????????
//設(shè)置數(shù)據(jù)字體?
DateFormat format = new SimpleDateFormat("mm分ss秒");??
//創(chuàng)建日期格式對象?
//創(chuàng)建DateTickUnit對象?
DateTickUnit dtu = new
DateTickUnit(DateTickUnitType.SECOND,30,format);?
dateAxis.setTickUnit(dtu);?????????
//設(shè)置日期軸的日期標(biāo)簽?????????? }????????? //將結(jié)果輸出在文件中
private static
void writeChartAsImage(JFreeChart chart)
{?
FileOutputStream fos_jpg =
null;?
try
{?
fos_jpg = new
FileOutputStream("D:\\test\\shixutu.jpg");?
ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 400, 300,
null);?
} catch (Exception e)
{?
e.printStackTrace();?
} finally
{?
try
{?
fos_jpg.close();?
} catch (Exception e)
{?
}?
}?
}?
//創(chuàng)建數(shù)據(jù)集合對象
public static XYDataset createDataset()
{?
//實例化TimeSeries對象?
TimeSeries timeseries = new
TimeSeries("Data");?
Second second = new Second();?
//實例化Day
double d =
50D;?
//添加一年365天的數(shù)據(jù)?
for (int i = 0; i 500; i++)
{??
d = d + (Math.random() - 0.5) * 10;
//創(chuàng)建隨機數(shù)據(jù)?
timeseries.second(day, d);
//向數(shù)據(jù)集合中添加數(shù)據(jù)?
second = (Second)
second.next();??
}??????????????????
TimeSeriesCollection timeSeriesCollection =?????????????????????????
new
TimeSeriesCollection(timeseries);?
//返回數(shù)據(jù)集合對象?
return timeSeriesCollection;?????????? }?//Applet程序初始化
public void init()
{
// 1.
得到數(shù)據(jù)??
XYDataset? dataset =
createDataset();?
// 2.
構(gòu)造chart??
chart =
ChartFactory.createTimeSeriesChart(?
"時序圖示范", //
圖表標(biāo)題??
"時間", //
目錄軸的顯示標(biāo)簽--橫軸??
"數(shù)值", //
數(shù)值軸的顯示標(biāo)簽--縱軸??
dataset, //
數(shù)據(jù)集??
false,
false, //
是否生成工具??
false //
是否生成URL鏈接??
);?
// 3.
處理chart中文顯示問題??
processChart(chart);?
// 4.
chart輸出圖片??
//writeChartAsImage(chart);?
// 5. chart
以swing形式輸出???
//6.使用applet輸出
ChartPanel chartPanel = new
ChartPanel(chart);
chartPanel.setPreferredSize(new
java.awt.Dimension(800,500));???????
getContentPane().add(chartPanel);????????? (new
DataGenerator()).start();
}
public void
paint(Graphics g)
{
if
(chart != null)
{
chart.draw((Graphics2D) g,
getBounds());
}
}
public void destroy() {
}
}
時序圖描述對象是如何交互的,并且將重點放在消息序列上。也就是說,描述消息是如何在對象間發(fā)送和接收的。時序圖有兩個坐標(biāo)軸:縱坐標(biāo)軸顯示時間,橫坐標(biāo)軸顯示對象。每一個對象的表示方法是:矩形框中寫有對象和 / 或類名,且名字下面有下劃線;同時有一條縱向的虛線表示對象在序列中的執(zhí)行情況 ( 即發(fā)送和接收的消息對象的活動 ) , 這條虛線稱為對象的生命線。對象間的通信用對象的生命線之間的水平的消息線來表示,消息線的箭頭說明消息的類型,如同步,異步或簡單 。 瀏覽時序圖的方法是,從上到下查看對象間交換的消息,分析那些隨著時間的流逝而發(fā)生的消息交換。
時序圖中的消息可以是信號、操作調(diào)用或類似于 C++ 中的 RPC ( Remote Procedure Call,遠(yuǎn)程過程調(diào)用)或 Java 中的 RMI ( Remote Method Invocation , 遠(yuǎn)程方法調(diào)用)。當(dāng)對象接收到一個消息時,該對象中的一項活動就會啟動,我們把這一過程稱做激活 ( Activation )。 激活會顯示控制焦點,表明對象在某一個時間點開始執(zhí)行。一個被激活的對象或者是執(zhí)行它自身的代碼,或者是等待另一個對象的返回(該被激活的對象已經(jīng)向另一個對象發(fā)送了消息)。在圖形上,激活被繪制為對象生命線上的一個瘦高矩形。
消息可以用消息名及參數(shù)來標(biāo)識。消息還可帶有條件表達(dá)式,表示分支或決定是否發(fā)送消息。如果用于表示分支,則每個分支是相互排斥的,即在某一時刻僅可發(fā)送分支中的一個消息。消息也可以有順序號,但是在時序圖中,消息的順序號很少使用,因為時序圖已經(jīng)將消息的順序顯式地表示出來了。
一個對象可以通過發(fā)送消息來創(chuàng)建另一個對象,當(dāng)一個對象被刪除或自我刪除時,該對象用 X標(biāo)識。