交通灯管理系统I
交通燈管理系統I
題目要求
題意分析
面向對象分析的初步
-----------?android培訓、java培訓、java學習型技術博客、期待與您交流!?------------
1.??? 題目要求
模擬實現十字路口的交通燈管理系統邏輯,具體有以下需求
1). 異步隨機生成按照各個路線行駛的車輛
舉例說明如下:
[1]. 由南向北行駛的車輛?----直行車輛
[2]. 由西向南行駛的車輛?----右轉車輛
[3]. 由東向南行駛的車輛?----左轉車輛
…
2). 信號燈顏色選擇范圍
忽略黃燈,只考慮紅燈和綠燈
3). 左轉車輛和右轉車輛的要求
[1]. 左轉車輛受到控制信號燈的控制
[2]. 但是右轉車輛不受信號燈控制
【注意】具體信號燈控制邏輯與現實生活中普通交通燈控制邏輯相同,不考慮特殊情況下的控制邏輯。
4). 其他說明
[1]. 南北向車輛與東西向車輛交替放行,同方向等待車輛應先放行直行車輛而后放行左轉車輛。
[2]. 每輛車通過路口時間為1秒(提示:可通過線程Sleep的方式模擬)。
[3]. 隨機生成車輛時間間隔以及紅綠燈交換時間間隔自定,可以設置。
[4]. 不要求實現GUI,只考慮系統邏輯實現,可通過Log方式展現程序運行結果。
2.??? 題意分析
路口分析以及簡化
(1). 十字路口線路圖
(2). 圖例和相關術語
[1]. 方向簡寫
N --->北 S --->南? E--->東? W --->西
[2]. “2”是英文單詞“to”的意思
e.g. N2S表示從北到南的線路
[3]. 對應線路
{1}. 一條線路和他的對應線路可以同時放行的時候,不會出現兩條線路上的車輛的相互撞車的事件。
{2}. 這里面將一條線路的對應線路在后面用“()”括起來。
{3}. 圖中顏色相同的線路表示“一對”對應線路
[4]. 圖中線路的分類
這個十字路口中一共有12條線路存在,分成以下三類:
{1}. 右轉線路 (4條)
圖中四個拐角的褐色線路。分別是:N2W、W2S、S2E和E2N
{2}. 左轉線路 (4條)
圖中兩條粉色和兩條紅色的線路。分別是:N2E(S2W)和W2N(S2E)
{3}. 直行線路 (4條)
圖中兩條綠色和兩條藍色的線路。分別是: N2S(S2N)和E2W(W2E)
[6]. 線路的要求
{1}. 直行+左轉的8條線路必須遵守這條線路上的交通燈的指示進行運行和停止
{2}. 右轉的4條線路不用按照紅綠燈自由運行。
(2). 線路分析簡化設計思路
[1]. 簡化原則
{1}. 這里總共有12條路線,因此每條路線作為一個對象存在。
{2}. 為了統一編程模型,可以假設每條路線都有一個紅綠燈對該條線路的車進行控制。
{3}. 其中右轉彎的4條路線的控制燈可以設為常綠狀態。
{4}.其他8條線路是兩兩成對的,可以歸為4組。
所以程序只需考慮圖中標注了數字的4條路線的控制燈的切換順序,這4條路線對應方向的路線的控制燈跟隨標記數字的4條路線切換,不必額外考慮。
[2]. 根據題目需求進行線路切換次序確定
{1}. 需求是“南北向車輛與東西向車輛交替放行,同方向等待車輛應先放行直行車輛而后放行左轉車輛。”
{2}. 線路簡化之后,只考慮了兩個方向出發的車:
{2}1. 從S方向出發的車:S2W和S2N這兩個方向的線路 ---- 要求是先放行直行再放行左轉,所以這里面是S2N先放行,S2W后放行
{2}2. 從E方向出發的車:E2W和E2S這兩個方向的線路 ---- 要求是先放行直行再放行左轉,所以這里面是E2W先放行,E2S后放行
{2}3. 從S方向或者E方向那個開始都可以,因為這些線路的交通燈是循環切換的。因此這里面從S方向開始。
所以線路切換是
S2N【1】---> S2W【2】---> E2W【3】 ---> E2S 【4】--->S2N【1】 --->...循環
算上每條線路的對應線路,下面給出完整的線路切換是:
S2N(N2S)【1】---> S2W(N2E)【2】---> E2W(W2E)【3】 ---> E2S(W2N)【4】--->S2N(N2S)【1】 --->...循環
[3]. 簡化之后的線路圖如下
這里面需要真實考慮的線路只有直行的2條+ 左轉的2條 (一共4條線路)
3.??? 面向對象的分析初步
1). 通過需求分析名詞,定義出類
(1). 類的提取
[1]. 需求中出現的類:交通燈、線路、車輛
[2]. 額外的類 (通過分析需求)
需求是車在線路上運行,運行的時候要觀察該條線路上的交通燈的顏色的變化。這個交通燈的顏色怎么切換?靠誰去切換?肯定不是交通燈自己切換,而是交通燈靠一個交通燈控制器去切換。------第四個類是:交通燈控制器
【總結】所需的類:交通燈、線路、車輛和交通燈控制器四個類
(2). 面向對象的分析與設計的原則
[1]. 面向對象設計把握一個重要的經驗
分析的出來的哪個類有哪些數據,這個類就對外提供操作這些數據的方法。
【注意】數據就是指的是這個類的成員變量
[2]. 從一個比較復雜的類,也就是字面上看著會有很多成員的類進行分析。因為這樣的類可以直接分析出來很多成員,有利于接下來對其他的類進行分析
[3]. 為每一個類進行兩件事情的分析
{1}. 分析這個類的成員變量
一定要分析需求,根據這個需求自行描繪出來這個事件發生的過程,在這個過程中分析出這個類可能的“聚合”或者“包含”的其他類的成員變量即可。
{2}.分析這個類的成員方法
根據分析出來的成員變量和包含需求事件發生的過程為這個類的對象添加需要對外訪問的方法。
【注意1】成員變量和成員方法絕對不是一下子就添加完成的,邊分析邊做項目,邊添加。
【注意2】就是每一個提取出來的類不一定必須要自定義一個單獨的類。如果Java的核心類庫有合適的類型匹配,那就可以直接選來使用。
-----------?android培訓、java培訓、java學習型技術博客、期待與您交流!?------------
?
總結
- 上一篇: matlab与逆透视变换,基于逆透视变换
- 下一篇: 软件项目实施总结