软件构造学习笔记-实验2
P1
1.設計目標
首先對圖的ADT進行兩種實現(從邊和頂點出發),然后選擇一種實現的ADT,根據輸入的文件構建語料庫,再利用構建的語料庫,對輸入字符串進行插入操作,并返回修改后的字符串。
2.有關AF和RI的概念,在實驗剛開始時是沒有講到的。進一步學習之后才完成代碼的這個部分。
AF:R->A(抽象函數)給出R空間的數據,如何映射到A空間的解釋。
RI:R->boolean(表示不變性)某個具體的表示是否是合法的。也可以將RI看成所有表示值的一個子集,包含了所有合法的表示值。同時可以將RI看作描述什么是合法表示值的條件。
3.接口是不允許存在構造方法的,因為接口無法被實例化。接口中可以存在工廠方法,返回接口的實現的實例,從而構造出具有接口所有方法的實例。
4.在不可變類中,方法不能直接返回可變的引用類型。因為這么做會造成表示暴露。正確的做法應該是返回其復制,即防御式拷貝。
P2
1.有關private成員域的繼承問題
在實現FriendshipGraph類時,老師明確要求用繼承寫,而不能調用Graph的工廠方法創建圖的實例。這讓我很疑惑,因為剛完成的圖的兩種實現中,它們的成員域都是private final修飾的,也就是說無法被繼承的。既然沒有父類的成員域,那怎么完成使用父類成員域的成員方法呢?
從網上查找博客,我了解到,父類的privare成員域其實是被繼承了,但是子類沒有訪問權限,只能通過調用繼承父類的方法,對父類的private成員域進行修改。這也就能說得通了。
P3
1.將小的、表示數據的類設置成不可變類。如Player類、Piece類、Positon類。而Board類則必須是可變類,因為棋盤上的棋子會發生變化。
2.關于如何實現游戲結束后查看走棋歷史,我選擇在Action類中設置一個StringBuilder成員域,在每個操作調用完成后,在該成員域添加一行操作信息。當需要查看走棋歷史時,將其轉化成String類型并返回即可。
3.客戶端代碼設計
-初始化
獲得輸入信息后,對游戲進行初始化。由于兩類游戲的棋盤大小和棋子的初始狀態不同,而玩家信息相同,所以在創建玩家實例之后對兩種游戲分別進行初始化。在初始化象棋游戲時,將象棋棋子添加到棋盤上。
-進行游戲
用int類型的變量operation記錄用戶輸入的操作,從1到8每個數字代表一種操作,在終端中顯示(通過調用printMenu方法)。然后將該值傳入performAction方法,進行對應操作。該方法返回布爾值,標記是否操作成功。如果操作成功,則進入對方回合(round取反),否則仍是當前玩家的回合。
-游戲結束
游戲結束時會提示玩家是否查詢走棋信息。如果是,則打印走棋歷史,否則直接退出游戲。
總結
以上是生活随笔為你收集整理的软件构造学习笔记-实验2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件构造学习笔记-第六周
- 下一篇: 精准“爆破”癌细胞!我国首台硼中子俘获治