討論區快速選單
知識庫快速選單
掌握Salesforce雲端管理秘訣 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
新手請教能告訴我有關狀態圖嗎?
更改我的閱讀文章字型大小
作者 : per_k(philips_kuo) 人氣指數超過10000點
[ 貼文 150 | 人氣 15628 | 評價 10 | 評價/貼文 0.07 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/9/2 上午 11:53:35
看到現在的開發程式幾乎都是物件導向,敝人也初步在學校和自學學了一點VB,VC++,Delphi,JAVA...,但很多當紅的語言書上都有略微提狀態圖,但講的很少,各位大大能告訴我有關狀態圖的相關教學資料或網站嗎?謝謝!
作者 : frankfkc(長長) 程式設計甘苦談卓越專家C++優秀好手貼文超過1000則人氣指數超過50000點
[ 貼文 1148 | 人氣 62194 | 評價 4640 | 評價/貼文 4.04 | 送出評價 108 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/9/3 上午 12:30:00

>看到現在的開發程式幾乎都是物件導向,敝人也初步在學校和自學學了一點VB,VC++,Delphi,JAVA...,但很多當紅的語言書上都有略微提狀態圖,但講的很少,各位大大能告訴我有關狀態圖的相關教學資料或網站嗎?謝謝!

有關狀態圖,在「離散數學」會提到蠻多蠻詳細的,在「有限狀態機(finite state machine)」這部分探討。(理論上可以有無限狀態機,但是沒見過)

而在「數位邏輯設計」的「序向電路(sequential circuit)」會提到利用有限狀態機來設計數位電路的方法。

而狀態圖就是用來表現狀態機的抽象表示法。

以人的行為來舉例。

小明一開始是站著的:小明的「起始狀態」是「站著的狀態」。
老師叫小明坐下:小明收到「坐下」的訊息。
小明坐下了:現在小明的狀態是「坐下的狀態」。
可是當小明站著的時候,老師如果叫小明走出去,則小明會進入「走出去的狀態」。
而小明在坐著的時候,老師如果叫小明走出去,則小明會先進入站起來的狀態,然後才變成走出去的狀態。

就是這樣,對於一件事情的描述,可以有很多種狀態,而再考慮每種狀態的所有可能收到的訊息而改變其狀態,整個畫起來就是一個狀態圖。

而在每個狀態中或者是狀態的轉換中,可能會有輸出,也可能沒有。

比較正式的寫法是:

FA = (S, I, O, P, s0)。
S為所有狀態的集合。
I為所有可能輸入的訊息的集合,或稱符號。
O為所有可能輸出的訊息集合,或符號。
P為狀態轉換的規則的集合。
s0為起始狀態,屬於S集合。

如果對於每個輸入屬於I,僅有一條狀態轉換規則的狀態機,我們稱該狀態機為「可決定性(deterministic)」。
例如,老師叫小明坐下,小明就一定坐下,而不會跑出去。

否則則稱為「不可決定性(nondeterministic)」的狀態機。
例如,老師叫小明坐下,小明可能坐下,也可能跑出去。

而根據輸出函數的不同,又可分為Milly Machine和Moore Machine兩種。

如果輸出僅跟現在狀態有關,即O=f(S),則稱
如果輸出跟輸入和現在狀態有關,即O=f(S, I),則稱
(哈!兩個那個對哪一個我忘了!)

而我們在寫程式時,通常用的是「可決定性的有限狀態機」。
雖說「不可決定性」的也可以寫得出來,但是非常少用,而且兩者可以互相轉換,這部分就要去看關於「計算機理論」的書,裡面有詳細的討論。

而「無線狀態機」則。。。。我不會寫!哈哈!
作者 : per_k(philips_kuo) 人氣指數超過10000點
[ 貼文 150 | 人氣 15628 | 評價 10 | 評價/貼文 0.07 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/9/3 上午 08:53:23
TKS.
作者 : lcwdl(混世魔王) 貼文超過500則人氣指數超過10000點
[ 貼文 951 | 人氣 10894 | 評價 1100 | 評價/貼文 1.16 | 送出評價 10 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/10/1 上午 03:19:40
Very clearly!!! thanks
作者 : demo999(DEMO999) Java優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 632 | 人氣 29373 | 評價 3840 | 評價/貼文 6.08 | 送出評價 20 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/8/17 上午 12:47:30
在UML中
有些圖是被列為選用的 ,意思是有需要才去畫....


狀態圖在某些情形下 (看你的專案的情況)是一定要畫 畫出來會比較清楚....
但是不是每個案子都需要....

作者 : alex0014(藍色LED) 貼文超過200則
[ 貼文 261 | 人氣 264 | 評價 240 | 評價/貼文 0.92 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/8/22 下午 12:22:51
畫出狀態圖不是一件很困難的事
只要仔細思考就可以畫出來
重點是 implement
要寫一堆 if...else 嗎
搞不好寫到最後連自己都看不懂
更不用說是 maintain 別人的 code
作者 : alex0014(藍色LED) 貼文超過200則
[ 貼文 261 | 人氣 264 | 評價 240 | 評價/貼文 0.92 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/8/22 下午 12:25:49
這是小弟的一些心得
用長長大大的範例及 java 所寫的
如果有任何問題歡迎各位大大指教

public class 小明 {
//起始狀態
private 狀態 status = new 站著的狀態();

public void 坐下指令() {
status.坐下();
}

public void 站著指令() {
status.站起來();
}

public void 走出去指令() {
status.走出去();
}
}

public interface 狀態 {
public void 坐下();
public void 站起來();
public void 走出去();
}

class 坐下的狀態 implements 狀態 {
public void 坐下() {
不鳥他;
}

public void 站起來() {
把大屁股挪開並站起來;
小明.status = new 站著的狀態();
}

public void 走出去() {
把大屁股挪開並站起來;
非常不爽的走出去;
小明.status = new 走出去的狀態();
}
}

class 走出去的狀態 implements 狀態 {
public void 坐下() {
已經繞跑了誰理你;
}

public void 站起來() {
已經繞跑了誰理你;
}

public void 走出去() {
已經繞跑了誰理你;
}
}

class 站著的狀態 implements 狀態 {
public void 坐下() {
心不甘情不願的坐下;
小明.status = new 坐下的狀態();
}

public void 站起來() {
不鳥他;
}

public void 走出去() {
非常不爽的走出去;
}
}
作者 : frankfkc(長長) 程式設計甘苦談卓越專家C++優秀好手貼文超過1000則人氣指數超過50000點
[ 貼文 1148 | 人氣 62194 | 評價 4640 | 評價/貼文 4.04 | 送出評價 108 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/9/24 下午 05:35:04
很新鮮,用class來表示狀態。
不過一般來說我會用數值啦!比較方便,而把心思放在Transition上面。

而一般在時作Transition時,除了用swich、if-else外,可以可以用查表法,而在實用上,由於每個狀態通常都不是簡單地作State Transition,通常也包含一些運算(Combinational logic for hardware design或Action for software field, especially for parser generation),所以,查表法結合virtual member function(OOPL)或function pointer(Procedural Language),會很方便,也通常能增加performance。但缺點就是通常用switch或if-else來寫比較直覺,好debug,但比較沒有彈性。而用查表法,比較難debug,但卻比較有彈性。

>這是小弟的一些心得
>用長長大大的範例及 java 所寫的
>如果有任何問題歡迎各位大大指教
 板主 : Clark
 > 物件導向程式設計 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 物件導向程式設計 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
物件導向程式設計
1 Arthur 180 
2 藍色LED 150 
3 長長 100 
4 Linkin 100 
5 love seeker 100 
6 Raymond 90 
7 Nets 80 
8 nop 70 
9 Huah 70 
10 矇矇 60 
物件導向程式設計
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.046875