日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

现代程序设计 作业6 - 简单而有意义的题目

發(fā)布時(shí)間:2024/7/23 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 现代程序设计 作业6 - 简单而有意义的题目 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這是這個(gè)課件的一部分:? 現(xiàn)代程序設(shè)計(jì) (課程設(shè)計(jì)中, 征求意見稿)

好多同學(xué)們都說題目難,這回我們來一個(gè)簡單而很有意義的。? :)

寫代碼爽還是讀代碼爽? 往一堆亂麻中再加上一些線索,似乎比較容易;然而從這一團(tuán)亂麻中理出頭緒,還是比較難的。下圖來自 知乎的一個(gè)討論。

?

我們練習(xí)了這么多作業(yè),所有作業(yè)都是從頭寫程序,但是我們到了真正的項(xiàng)目組或公司里,通常我們會(huì)改進(jìn)一個(gè)已經(jīng)存在項(xiàng)目 (這個(gè)項(xiàng)目說不定已經(jīng)存在好多年了),這個(gè)項(xiàng)目的文檔也不多,編碼規(guī)范也不是太完美。 這時(shí)候我們?cè)趺崔k?? 我們當(dāng)然可以通過下面的辦法:

  • 理解程序
  • 在不損害程序現(xiàn)有功能的情況下,修復(fù)bug 或增加新功能
  • 同時(shí)有計(jì)劃地通過重構(gòu)或重寫,改進(jìn)這個(gè)程序,讓它更好地被程序員理解,更好地能適應(yīng)可能產(chǎn)生的變化。
  • 這個(gè)作業(yè)就是這樣一個(gè)例子。

    假設(shè)有一組水平不高的程序員,或者一個(gè)水平不高的程序員(比如我),在很久以前為了學(xué)習(xí)Java, 就寫了一個(gè) Java 的圍棋下棋程序 (不是人工智能,只是在屏幕上展現(xiàn)下棋的過程),? 后來C# 出現(xiàn)之后,他又隨意地把程序改寫為C#,? 經(jīng)過簡單測試之后,他就把程序放在一邊了。

    ?

    ?

    現(xiàn)在我們拿到了這個(gè)代碼,程序還可以編譯成功,但是不巧的是一個(gè)關(guān)鍵函數(shù)只有函數(shù)體,沒有具體的實(shí)現(xiàn)了。例如:

    int? GetLiberty(int x, int y, StoneColor c ) //判斷當(dāng)前的位置上的棋子和相連的一組棋子一共有多少氣

    這個(gè)程序原來總共有30行(算上空行和單字符行),但是由于種種原因, 這個(gè)函數(shù)只剩下了一句話

    return 1;

    現(xiàn)在請(qǐng)用遞歸和非遞歸兩種方式把它實(shí)現(xiàn)出來。

    ?

    關(guān)于個(gè)棋子或一組相連的棋子有多少氣,有沒有氣, 十分簡單。

    詳細(xì)的規(guī)則請(qǐng)看網(wǎng)上的許多教程。? 舉兩個(gè)非常簡單的例子:

    ? 如果此時(shí)該黑棋下,黑棋下在 (A,1) 的位置, 那么黑棋就把白棋 A2 的棋子吃掉了。如果此時(shí)該白旗下,白棋下在 C1 的位置,那么白棋就把兩顆黑棋吃掉了。

    此時(shí),黑白雙方誰能占據(jù) O4 的位置, 就能夠決定兩個(gè)黑棋有沒有氣。

    ?

    (上面的題目已經(jīng)在課堂上搞定了,我們?cè)贁U(kuò)展一下)

    目前給同學(xué)們的程序能在下面兩種情況下瀏覽棋局:

    a) 直接在棋盤上面點(diǎn)擊,程序就會(huì)按照黑白相間的次序走棋。

    b) 用戶可以用程序打開一個(gè)棋譜文件 (*.sgf),? 然后按 “>” 按鈕,程序就會(huì)按次序下棋。

    大家注意到用戶界面上還有一個(gè) “<” 按鈕,? 這是讓用戶把下棋的步驟倒回去 (如果上一步一方吃掉了許多棋子, 那么我們還要把這些吃掉的棋子恢復(fù)好)

    函數(shù)說明在這里:

    這個(gè)函數(shù)的大部分都沒有實(shí)現(xiàn),現(xiàn)在我們要實(shí)現(xiàn)它。 (要求: 所有的修改都只在這一個(gè)函數(shù)體里面

    我們的同學(xué)們學(xué)了《現(xiàn)代程序設(shè)計(jì)》,搞定下面的挑戰(zhàn)應(yīng)該不成問題:

    1) 把程序編譯通過, 跑起來。

    ??? 讀懂程序,在你覺得比較難懂的地方加上一些注釋,這樣大家就能比較容易地了解這些程序在干什么。

    ???? 把正確的 playPrev(GoMove) 的方法給實(shí)現(xiàn)了。 如果大家不會(huì)下圍棋,那就需要大家實(shí)地或者上網(wǎng)練習(xí)一下圍棋的死活,提子是怎么回事。這個(gè)應(yīng)該一個(gè)小時(shí)就能搞定。

    2)根據(jù)你選擇的教材 (三本之一或更多),點(diǎn)評(píng)一下這個(gè)程序設(shè)計(jì)方面的不足,例如:

    ???? 編碼風(fēng)格,

    ???? 程序架構(gòu),有哪些不符合良好的設(shè)計(jì),這個(gè)程序的設(shè)計(jì)模式 (MVC等) 是高端大氣國際化的么? 等等。?

    ???? 程序的錯(cuò)誤處理,文件處理,UI 等等

    ???? 大家可能會(huì)想到,這個(gè)程序雖然說編譯都過了,但說不定有很多基本的小問題沒解決,VS 的強(qiáng)大的編譯器和代碼分析工具能把它們都找出來? 當(dāng)然可以:

    ?????

    ???? 大家可以運(yùn)行 VS 的代碼分析工具,找到這個(gè)程序的這些問題,并改進(jìn)。下面是報(bào)告的一部分:

    這些改進(jìn)可以是很小的,例如,把所有函數(shù)的命名都規(guī)范化,這算一個(gè)改進(jìn)。同學(xué)們至少要把Code Analysis 報(bào)告的所有問題給解決了。

    關(guān)于Code Analysis 的更多信息:

    http://msdn.microsoft.com/en-us/library/ee1hzekz.aspx

    http://msdn.microsoft.com/zh-cn/library/vstudio/ms182278.aspx?

    ?

    3) 程序的注釋

    ??? 所有人都覺得注釋很重要,寫程序不寫注釋的同學(xué)真是RP 比較低。。。

    ??? 那么,就請(qǐng)把這個(gè)程序中被標(biāo)成 “zzzz” 的注釋都恢復(fù)過來。 當(dāng)然,你可以用中文寫注釋。

    4) 選擇題: (提示: 這個(gè)題目另外算分,滿分10分,需要掙分的同學(xué)就可以考慮這個(gè)選擇題)

    對(duì)于功能上的小問題, 那么你怎么改進(jìn)呢? 請(qǐng)選出 1-2個(gè)你想做的改進(jìn),然后運(yùn)用你的各種編程技術(shù)和能力把這些改進(jìn)給實(shí)現(xiàn)了(必須明確指出改進(jìn)/增加了哪一個(gè)功能)。

    ????? 把所有的改進(jìn)都實(shí)現(xiàn)之后,把代碼簽入 GitHub, 經(jīng)歷了這一番改動(dòng),你的程序和別的同學(xué)的程序就很不一樣了。

    如果大家有時(shí)間并有興趣,可以做一些大的改進(jìn):

    ????? a) 如果我要把這個(gè)程序變成一個(gè)可以人機(jī)對(duì)戰(zhàn)的小游戲 (假設(shè)你的AI 模塊已經(jīng)寫好,這里我們就可以讓一個(gè)函數(shù)返回一個(gè)合法的位置就可以), 那這個(gè)程序的架構(gòu)應(yīng)該怎么變化?? 請(qǐng)把這個(gè)功能寫出來。

    ????? b) 如果我想讓這個(gè)程序變成兩個(gè)用戶可以通過網(wǎng)絡(luò)對(duì)戰(zhàn),這個(gè)程序的架構(gòu)要怎么變化?

    ?

    另: 大家在讀程序的時(shí)候可以測試一下自己的會(huì)發(fā)什么樣的腦電波。 :)? 看看下面的論文:

    http://wwwiti.cs.uni-magdeburg.de/~feigensp/experiments/fMRI/fse_fMRI-Poster.pdf

    總結(jié)

    以上是生活随笔為你收集整理的现代程序设计 作业6 - 简单而有意义的题目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。