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