摘要:本次實驗訓練抽象數據類型的設計規約測試,并使用面向對象編程技術實現。改成泛型將函數聲明和調用等修改一下即可調用之前我們實現的一個圖結構實現方法如下讀取文件輸入,識別序列,構建圖結構。
本次實驗訓練抽象數據類型(ADT)的設計、規約、測試,并使用面向對象編程(OOP)技術實現 ADT。
3.1 Poetic Walks
建立對ADT的基本印象,比如如何設計一個能夠泛型化的ADT。
加深對AF,RI,rep exposure 這些抽象概念的理解
這個實驗給出了一個如何設計泛型ADT的方法,首先先針對某一個特定實例設計具體的ADT:
給出接口Graph
通過不同方法實現該接口,對于該類的實現遵循ADT設計的基本方法,寫好Spec,AF,RI,并避免泄露,
3.1.1 Get the code
實驗報告中給出了github倉庫的的地址
3.1.2 Problem 1: Test Graph
進行測試。
3.1.3 Problem 2: Implement Graph
兩種方式實現Graph。
3.1.3.1 Implement ConcreteEdgesGraph
Edge類實現
Edge包含兩個String類型,source和target存放每個邊的起點終點,一個int類型weight保存權重。
ConcreteEdgesGraph實現
ConcreteEdgeGraph類中含有成員變量:
vertices
edges
3.1.3.2 Implement ConcreteVerticesGraph
Vertex類:
包含一個String類型 label存放該頂點的標簽名稱,
Map類用于存放以該點為起點的邊的信息,即終點和權重
ConcreteVerticesGraph類
ConcreteEdgeGraph類中含有一個成員變量
vertices頂點列表。
3.1.4 Problem 3: Implement generic Graph
改成泛型:將函數聲明和調用等修改一下即可
3.1.5 Problem 4: Poetic walks
調用之前我們實現的一個GraphADT圖結構實現
3.1.5.1 Implement GraphPoet
方法如下:
GraphPoet
讀取文件輸入,識別序列,構建圖結構。相鄰元素,在圖中新增邊。
poem
兩個連續單詞A B,利用sources函數,檢查圖中B的前一個單詞,比如存在C到B的邊,還存在D到B的邊,那就檢查C的前一個單詞,比方說A到C沒有邊,A到D有邊,那就說明有路徑ADB,那么打印詩句的時候就打印ADB
3.2 Re-implement the Social Network in Lab1
利用前面實現的graph,重新實現Social Network。
3.2.1 FriendshipGraph類
函數聲明:
addVertex
addEdge
getDistance
多調用Gragh中的函數,很容易改寫
3.2.2 Person類
只需要一個label表示姓名即可:
3.3 Playing Chess
ADT設計/實現方案
ACTION BOARD PIECE PLAYER POSITION
PIECE類,int belong記錄是哪一方的子,String label記錄KING.QUEEN等
POSITION類,記錄坐標,每個position都有一個piece,當然棋子的起始設為0,隱形子,相當于沒有子
PLAYER類,記個名字就好
BOARD類,構造方法中參數決定棋盤的大小
ACTION類,按指導書的要求完成
心得:
面向ADT的編程和直接面向應用場景編程,需要適應它們的區別
初步體會使用泛型的好處
一個ADT可以在多個應用場景下使用,這種復用,很舒服
為ADT撰寫specification, invariants, RI, AF,時刻注意ADT是否有rep exposure,是很重要的
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77899.html
摘要:經過半年的沉淀,加上對,和分布式這塊的補齊,終于開始重拾面試信心,再次出征。面試官提示沒有提到線程的有內核態的切換,程只在用戶態調度。三面綜合技術面這面面的是陣腳大亂,面試官采用刨根問底的方式提問,終究是面試經驗不夠,導致面試的節奏有點亂。 經過半年的沉淀,加上對MySQL,redis和分布式這塊的補齊,終于開始重拾面試信心,再次出征。 鵝廠 面試職位:go后端開發工程師,接受從Jav...
摘要:設計方案的容易改變這就是所謂的軟件構建的可維護性,可擴展性和靈活性。這也可能表明類型或方法可能難以維護。基于源代碼中不同運算符和操作數的數量的合成度量。對修改的封閉這種模塊的源代碼是不可侵犯的。 大綱 軟件維護和演變可維護性度量模塊化設計和模塊化原則OO設計原則:SOLIDOO設計原則:GRASP總結 軟件維護和演變 什么是軟件維護? 軟件工程中的軟件維護是交付后修改軟件產品以糾正故障...
閱讀 1849·2021-11-11 16:54
閱讀 2073·2019-08-30 15:56
閱讀 2384·2019-08-30 15:44
閱讀 1319·2019-08-30 15:43
閱讀 1877·2019-08-30 11:07
閱讀 830·2019-08-29 17:11
閱讀 1484·2019-08-29 15:23
閱讀 3020·2019-08-29 13:01