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