3.1 待開發的三個應用場景
首先請列出你要完成的具體應用場景(至少3個,1和2中選一,3必選,4和5中選一,鼓勵完成更多的應用場景)。
行星系統
原子系統
社交網路
分析你所選定的多個應用場景的異同,理解需求:它們在哪些方面有共性、哪些方面有差異。
他們都具有軌道,中心物體,軌道物體等屬性,但是各自具體的屬性不同,行星系統上物體有實際物理位置,其他兩個系統無,行星系統每個軌道只有乙個物體,其他兩個系統有多個,社交網路有關係概念,還有親密度概念。
3.2 基於語法的圖資料輸入
讀入檔案,根據檔案的結構運用正規表示式來實現系統
3.3 面向復用的設計:circularorbit
設計介面,提出公用方法//返回乙個空系統
public concretecircularorbitempty();
/** 加入乙個軌道**
*/public void addtrack(track a);
/*
* * 刪除指定軌道
* */
public boolean removetrack(track a);
// todo 自動生成的方法存根
/* * 設定中心點並加入
* *
* */
public void centralpoint(l a);
/* * 在特定的軌道加入物理物件
* */
public void addphyobjectintrack(e object , track a);
/* * 增加中心點和一外部點的關係
* */
public void addrelationwithcentral( e b) ;
/*
* 增加兩個外部點的關係
*/
public void addrelationwithtrackobject(e a, e b) ;
/* * 讀檔案
*//*
*移動點到特定軌道
*/public void transit(e object, track t);
並實際實現這個系統,
然後具體系統繼承這個系統,在根據具體系統的不同細節修改,增添新的屬性。
3.4 面向復用的設計:track
軌道,
final private double distance;
final private int number;
這裡只提出了軌道的距離和編號作為所以系統軌道的公有屬性。
3.5 面向復用的設計:l
中心物體
final private string name ;
只提出了名字作為所以物體的公有屬性,其他屬性根據具體應用加入。。
3.6 面向復用的設計:physicalobject
final private string name ;
protected final double distance;
只提出了距離和名字作為軌道上物體的公有屬性。
3.7 可復用api設計public double getobjectdistributionentropy(circularorbit c)
針對所有系統的計算熵值的方法。
這裡採用 作為計算熵的公式,定義p(x)為該軌道上物體數/總物體數,得到的結果,恰好滿足分布越均勻,熵值越高的定義。
public double getphysicaldistance (circularorbit c, e e1, e e2)
計算物理距離的公有方法,顯然,只有行星系統有物理距離的概念,這裡若是行星系統,則直接呼叫行星系統中寫過的計算物理距離方法,否則,直接返回並輸出無物理距離概念。
public int getlogicaldistance (concretecircularorbit c, e e1, e e2)
計算邏輯距離的公有方法,這裡採用弗洛伊德演算法來求最短距離在關係網路裡來計算邏輯距離
public difference getdifference(concretecircularorbit c1, concretecircularorbit c2)
得到兩個系統的不同的公有方法
設計difference類
int tracknumberdifference;//記錄兩個系統軌道數不同
arraylist objectnumberdifference = new arraylist<>();//記錄兩個系統每個軌道上物體數差異
arraylistfirstobjectdifference = new arraylist<>();//記錄第乙個系統某軌道上與另一系統該軌道上物體的不同。
arraylistsecondjectdifference = new arraylist<>();記錄第二個系統某軌道上與第乙個系統該軌道上物體的不同。
該公有方法得到兩個系統的差異,在計算軌道上物體數量和具體物體差異時,需要判斷軌道上物體數量大小。在將具體不同加入到相應集合。
3.8 圖的視覺化:第三方api的復用
設計了public static void visualize(circularorbit c)的靜態方法,這裡先判斷該系統的型別,在根據具體型別生成相應視覺化。
3.9 設計模式應用
高階類 track,physicalobject 等物件使用靜態工廠方法實現,在類中設計 getinstance 方法獲得物件。 對於 concretecircularorbit 的構造使用 builder 設計模式,設計抽象 類 concretecircularorbitbuilder,包括 buildtrack,buildeobjects, buildrelation,通過傳入的引數新增軌道系統組成。 每個具體應用類的 builder 繼承自 concretecircularorbitbuilder,覆 蓋 createconcretecircularorbit 方法分別建立對應的軌道系統物件。應用設計與開發
利用上述設計和實現的adt,實現手冊裡要求的各項功能。
以下各小節,只需保留和完成你所選定的應用即可。
3.9.1 trackgame
3.9.2 stellarsystem
設計具體的星球及恆星類
分別繼承physicalobjetc類和centralobject類,並為其加上各自該有的屬性
如行星有名稱,形態,顏色,行星半徑,軌道半徑,公轉 速度,公轉方向,初始位置的角度,
恆星有名稱,半徑,質量;
2.,實現該系統特有的方法
public position getposition(double t,planet a)
計算星球位置,需要時間t
public double centraldistance(planet a)
計算恆星與行星距離,直接得到行星距離即可
public double planetdistance(planet a,planet b,double t)
計算行星間距離,需要用餘弦定理
哈工大軟體構造lab3總結
軟構的課程已經結束一段落了,如今回顧起來,收穫頗豐。這篇部落格主要是回顧一下lab3自己出現的一些問題,總結一下教訓,幫接下來需要做實驗的同學們避避坑。第一點 不要拖延症,不要拖延症,不要拖延症。不要開始的時候覺得時間還很長,不抓緊。拖延症晚期的同學要注意!不要等最後一周的時候才開始寫 這樣會導致你...
哈工大軟體構造實驗lab6
3.1 adt設計方案 設計了哪些adt 各自的作用 屬性 方法 給出每個adt的specification 可選 以類圖形式給出多個類之間的關係。梯子類 public class ladder public vectorgenerator int t,int k,int mv,int h 猴子產生...
哈工大軟體構造Lab4實驗心得
這次實驗基於lab3對 進行修改,處理各種異常,保證健壯性和正確性。之前在lab3中已經很注意防禦性程式設計了,但是這次改動還是特別大。太難了。健壯性更多的是對使用者友好,而正確性是對程式設計師友好,健壯性考慮的是輸入有問題的時候,程式能優雅的繼續進行,或者提示錯誤,正確性是保證程式正確輸入的時候能...