李曉宇 秦文杰
摘 要:闡述了無序事物有序化思想與計算機程序設(shè)計之間的聯(lián)系,介紹了無序事物有序化思想在計算機設(shè)計中的相關(guān)案例,對比了計算機程序設(shè)計中是否應(yīng)用無序事物有序化思想的優(yōu)勢與不足,分析了無序事物有序化思想對計算機程序設(shè)計的意義和應(yīng)用價值。觀察分析無序的事物,從中尋找共同點、規(guī)律,以達到有序地解決問題,便于修改或復(fù)用設(shè)計。
關(guān)鍵詞:無序事物有序化,計算機程序設(shè)計,循環(huán),復(fù)用
1 引言 無序事物有序化思想,顧名思義,就是通過一定量的觀察分析問題,從大量的經(jīng)驗中抽象總結(jié)出某些潛在規(guī)律,做到有序地解決事務(wù)。計算機程序設(shè)計包含順序、分支、循環(huán)三種思想結(jié)構(gòu)。有效地使用循環(huán)可以減少大量無用的工作,而且可以使他人更加容易地理解自己的思路想法,甚至是源代碼。還便于修改邏輯設(shè)計,做到復(fù)用移植。
2 無序事物有序化思想與計算機程序設(shè)計的聯(lián)系
計算機程序設(shè)計順序結(jié)構(gòu),一個一個地解決問題,就亂序地處理事物。沒有能充分利用循環(huán)結(jié)構(gòu)的簡潔。循環(huán)結(jié)構(gòu),代碼量短小,不那么容易使人煩躁、令人心生畏懼。如何使無序事物有序化,就需要分析事物問題,找出共同點。而如何找到,就要靠設(shè)計人員的經(jīng)驗和思維抽象高度了。
3 相關(guān)應(yīng)用案例
案例1 數(shù)組列表實現(xiàn)無序事物有序化
《32匯編語言程序設(shè)計》3習題8-14,利用CMOS RAM的系統(tǒng)時間,將年月日時分秒星期等時間完成的顯示出來。
解釋:CMOS RAM有64個字節(jié)容量,以8位I/O接口形式與處理器連接,通過兩個I/O地址訪問。要訪問CMOS RAM的內(nèi)容,需要首先向I/O地址70H輸出要訪問的存儲單元編號,然后用I/O地址71H讀寫該單元的一個字節(jié)數(shù)據(jù)。
由上表可知,待求的年月日時分秒星期信息分別存放在CMOS RAM的9,8,7,4,2,0,6號單元。
若順序地依次輸出年月日時分秒星期信息,需要把讀取CMOS信息的語句寫7遍,代碼立刻顯得冗余,且若要修改年月日等信息的順序,需要讀取分析整個代碼清單的好幾處,不容易查找待修改的地方。
但若加以分析,讀取何種時間信息,都要訪問CMOS,只是提前告知CMOS要訪問的單元號不同。
把這些無序的單元號寫到一個連續(xù)的存儲空間中(cell byte 9, 8, 7, 4, 2, 0, 6; MASM匯編語言定義字節(jié)數(shù)組的語句),順序訪問這些數(shù)據(jù),執(zhí)行相同的代碼段,根據(jù)提供的單元號不同,獲得相應(yīng)的信息。這就可以寫成一個循環(huán)體了。如果改變時間年月日十分秒星期顯示順序,只需要修改cell byte ... 字節(jié)數(shù)組就可以了。
源代碼請訪問:代碼托管平臺5
案例2 映射實現(xiàn)無序事物的有序化
題目描述讀入兩個小于100的正整數(shù)A和B,計算A+B。 需要注意的是:A和B的每一位數(shù)字由對應(yīng)的英文單詞給出。[6]
這道考研機試題,就是一個典型的把無序的英文單詞,映射為機器可以直接進行數(shù)學計算的數(shù)字。需要用到映射。one -> 1 , two -> 2, three -> 3, four-> 4... 這里用一個紅黑樹實現(xiàn)的映射容器map。
map[“one”] = 1, map[“two”] = 2, map [“three”] = 3, map[“four”] = 4...
遇到一個英文單詞就轉(zhuǎn)換成數(shù)字。one, two, three, four,... 就變成了1, 2, 3, 4.
案例 3
加密解密中的應(yīng)用
在簡單的加密算法字符替換中,把某個字符替換成另一個字符,而不是簡單地將所有字符后移幾位(例如 a->d, b->e, c->f 后移3位)。替換并無規(guī)律可尋,秘鑰字符串key可能是個一個隨機生成的字符串,例如秘鑰key = “jdekalgoba3fdlh4cijm3ip1uo”只要26個不同的字符就可以了。這個秘鑰對應(yīng)的字符依次對應(yīng)a b c d...
對于轉(zhuǎn)換成的密文,如何根據(jù)這個秘鑰串key還原得到原文呢?這就需要無序化為有序的思想了。根據(jù)秘鑰key,給數(shù)組array賦值。array[‘j] = a, array[‘d] = b, array[‘e] = c... 利用這個數(shù)組array就可以把密文還原為明文了。
4 是否應(yīng)用無序事物有序化思想到計算機程序設(shè)計中的優(yōu)勢與不足
由上面案例可以看到,
無序事物有序化可以使最終的解決方案更簡潔;
有利于后來的變動修改;
抽象度更高,需要一定的經(jīng)驗和代碼實踐基礎(chǔ),不容易想到。
有序到無序可以用于混淆事物,做到加密報文。然后再無序到有序還原報文。
不使用無序到有序的思想,在起初設(shè)計編碼時可能是簡單。不用多動腦筋思考。可是,一旦程序出現(xiàn)問題,再修改維護時,很可能要同時修改幾個地方,易疏忽。
給別人閱讀理解代碼帶來麻煩。
過分的考慮分析無序事物中的規(guī)律,可能是徒勞的。
5 無序事物有序化思想對計算機程序設(shè)計的意義和應(yīng)用價值
大量實踐證明,維護軟件需要大量的財力物力,甚至是開發(fā)軟件的N多倍。無序事物有序化可以提高設(shè)計的抽象高度,便于處理后來可能存在的維護問題,減少花費。
該思想可以提高設(shè)計人員的思考能力(抽象思維得到提高),開發(fā)人員的代碼能力(需要縝密的編寫)。提高軟件生產(chǎn)質(zhì)量。
結(jié)束語
無序事物有序化思想應(yīng)用在計算機程序設(shè)計中,可以抽象設(shè)計,使編碼量更少。無序事物有序化可以用于批量處理一些問題,效率更高。這是計算機程序設(shè)計中的一個小思想,可能只是用在一個較大設(shè)計中的一小部分,也不可丟棄。積少成多,計算機程序設(shè)計中有很多技巧,需要開發(fā)人員等在生產(chǎn)實踐中取總結(jié),分享。
2018年3月6日
于鄭州大學
注解
[1] 李曉宇:指導(dǎo)老師,鄭州大學信息工程學院的老師
[2] 秦文杰:鄭州大學信息工程學院軟件工程系2015級學生,學號20152480225
[3] 《32位匯編語言程序設(shè)計》:鄭州大學錢曉捷教授編著的匯編語言學習教科書
[4]CMOSRAM實時時鐘信息:本圖片源自網(wǎng)絡(luò),若有侵權(quán),請告知
[5] 源代碼鏈接 https://github.com/zzuwenjie/coding18/blob/master/MASM/8_14.asm
[6] 題目摘自浙江大學2005年考研機試題