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