3實驗過程
請仔細對照實驗手冊,針對每一項任務,在下面各節中記錄你的實驗過程、闡述你的設計思路和問題求解思路,可輔之以示意圖或關鍵源**加以說明(但千萬不要把你的源**全部貼上過來!)。
3.1待開發的三個應用場景
列出你所選定的三個應用。
分析三個應用場景的異同,理解需求:它們在哪些方面有共性、哪些方面有差異。
航班管理、高鐵車次管理、大學課表管理
差異:1、位置的數量
2、位置是否可以改變
3、資源特徵
4、計畫項是否可阻塞
5、時間描述
6、時間是否可預先設定
3.2面向可復用性和可維護性的設計:planningentry
該節是本實驗的核心部分。
3.2.1planningentry的共性操作
//開始
public void start();
//取消
public void cancel();
//完成
public void complete();
//獲得計畫名字
public string getplanname();
//分配資源完成
public void provide();
//當前狀態包括 未分配資源(waiting) 已分配資源(allocated)已啟動(running)已完成(ended)已取消(cancelled) 掛起中(blocked)
public string getstatus();
設計乙個類 commonplanningentry來實現 planningentry。
3.2.2區域性共性特徵的設計方案
設計乙個類 commonplanningentry來實現 planningentry。
3.2.3面向各應用的planningentry子型別設計(個性化特徵的設計方案)
方案 5:crp,通過介面組合實現區域性共性特徵的復用
每個維度分別定義自己的介面, 針對每個維度的不同特徵取值,分別實現針對該維度介面的不同實現類,實現其 特殊操作邏輯。 進而,通過介面組合,將各種區域性共性行為復合在一起,形成滿足每個應用 要求的特殊介面(包含了該應用內的全部特殊功能),從而該應用子類可直接實 現該組合介面
flightentry:代表乙個具有時間表、有起飛和降落機場、由一架飛機
執飛的航班;
trainentry:代表乙個具有時間表、經過一組站點、由一組車廂構成的
高鐵車次;
courseentry:代表一次課,具有明確的日期/時間、地點、教師。
3.3面向復用的設計:r
航班應用中的資源是「飛機」,屬性包括飛機編號、機型號(a350、b787、 c919 等)、座位數、機齡(例如 2.5 年)。
高鐵應用中的資源是「車廂」,屬性包括車廂唯一編號、型別(商務、一 等、二等、軟臥、硬臥、硬座、行李車、餐車)、定員數(例如 100 人)、 出廠年份。
課表應用中的資源為「教師」,屬性包括身份證號、姓名、性別、職稱。
3.4面向復用的設計:location
3.5面向復用的設計:timeslot
3.6面向復用的設計:entrystate及state設計模式
抽象上下文角色(context):維護當前狀態並將與狀態相關的操作委託給當前狀態物件處理
抽象狀態角色(state):定義乙個狀態介面,共性的方法放入介面中
3.7面向應用的設計:board
每個特定位置都有乙個資訊板,用於實時公布該位置上過去發生過的和後續 即將發生的計畫項,以便於廣大使用者及時了解計畫項的狀態變化。
1)某機場裡的航班狀態顯示屏:分為抵達屏和出發屏,前者展示過去 1 小 時內和未來 1 小時內抵達該機場的航班資訊及其狀態,後者展示過去 1 小時內和未來 1 小時內從該機場出發的航班資訊及其狀態。注意:第一 列裡的所有時間都是計畫降落時間(對抵達航班來說)、計畫起飛時間(對出發航班來說)。
2)高鐵站裡的車次狀態顯示屏:與(1)類似,唯一的區別是要額外考慮經停 高鐵車次。
3)教室外懸掛的教室占用情況表:列出當日在本教室內上的所有課程及其 狀態。與(1)相同,第一列的時間都是計畫時間。
3.8board的視覺化:外部api的復用
3.9planningentrycollection的設計
該adt是planningentry的集合類。
3.10可復用api設計及façade設計模式
3.10.1檢測一組計畫項之間是否存在位置獨佔衝突
3.10.2檢測一組計畫項之間是否存在資源獨佔衝突
3.10.3提取面向特定資源的前序計畫項
3.11設計模式應用
請分小節介紹每種設計模式在你的adt和應用設計中的具體應用。
3.11.1factory method
3.11.2iterator
3.11.3strategy
3.12應用設計與開發
利用上述設計和實現的adt,實現手冊裡要求的各項功能。
只需保留你選定的三個應用即可。
3.12.1航班應用
3.12.2高鐵應用
3.12.3程序應用
3.12.4課表應用
3.12.5學習活動應用
3.13基於語法的資料讀入
修改「航班」應用以擴充套件該功能。
3.14應對面臨的新變化
只考慮你選定的三個應用的變化即可。
3.14.1變化1
評估之前的設計是否可應對變化、代價如何
如何修改設計以應對變化
3.14.2變化2
評估之前的設計是否可應對變化、代價如何
如何修改設計以應對變化
3.14.3變化3
評估之前的設計是否可應對變化、代價如何
如何修改設計以應對變化
3.15git倉庫結構
請在完成全部實驗要求之後,利用git log指令或git圖形化客戶端或github上專案倉庫的insight頁面,給出你的倉庫到目前為止的object graph,尤其是區分清楚314change分支和master分支所指向的位置。
2020軟體定義網路實驗三
實驗 3 mininet 實驗 測量路徑的損耗率 一 實驗目的 在實驗 2 的基礎上進一步熟悉 mininet 自定義拓撲指令碼,以及與損耗率相關的設定 初步了解 mininet 安裝時自帶的 pox 控制器指令碼編寫,測試路徑損耗率。二 實驗任務 h0 向 h1 傳送資料報,由於在 mininet...
軟體構造實驗三總結
軟體構造實驗三總結 這次就乙個目標實現乙個adt。本次實驗給定了五個具體應用 高鐵車次管理 航班管理 作業系統程序管 理 大學課表管理 學習活動日程管理 學生不是直接針對五個應用分別程式設計 實現,而是通過 adt 和泛型等抽象技術,開發一套可復用的 adt 及其實現,充 分考慮這些應用之間的相似性...
軟體構造實驗四總結
軟體構造實驗四總結 p4主要是針對健壯性和正確性來程式設計 本次實驗重點訓練學生面向健壯性和正確性的程式設計技能,利用錯誤和異常處理 斷言與防禦式程式設計技術 日誌 斷點等除錯技術 黑盒測試程式設計技術,使程式可在不同的健壯性 正確性需求下能恰當的處理各種例外與錯誤情況,在出錯後可優雅的退出或繼續執...