基於軟體工程的程式碼設計問題
本學期我們進行了軟體工程的學習工作,其中一項內容就是重新對C語言就行學習,通過這一系列的作業,在軟體工程領域中對程式碼的編寫有了全新的認識。
最開始我對於程式碼的理解就是對於演算法的完成,函式的呼叫,甚至於沒有一個清晰的模組的概念,但是隨著課程的加深,特別是在軟體工程這門課上我逐漸對於軟體系統的瞭解,明白程式碼只是軟體的血肉,骨架在於架構的設計,而軟體工程作為一個整體需要平衡的是各方面的關係(Availability,Modifiability,Performance,etc)所以這就導致了程式碼的存在性從我們最開始的程式設計師眼中的全部性漸漸地向軟體工程的全域性性轉變。我們編寫的程式碼不是給我們一個人看到的,最基礎的要能讓其他人看懂(所以各門語言都統一了自己的規範並且我們添加了自己的註釋),通過課程的學習。我們發現在軟體工程的建立過程中,我們更強調模組化
然後僅僅有模組化對於整個程式碼設計來講是遠遠不夠的,拋去隱藏函式資訊,建立通用模組等細節技巧,我在軟體工程中還學到了另一個重要的程式碼特性:靈活性
https://www.shiyanlou.com/courses/reports/1244462 第一次作業我們進行了簡單的hello world的程式碼編寫工作,其中的重點在於讓我們熟悉linux下的環境,也是在這幾次的實驗中我學會了一些基礎的linux命令列以及git命令。從老師文件中提及的mkdir,git
push等命令到後來自己能夠掌握git diff,git merge,nohup等,我逐漸的發現對於命令列掌握的越熟練那麼對於程式碼的管理與編輯上越方便,所以想要寫好程式碼,對於終端的掌握十分重要。
https://www.shiyanlou.com/courses/reports/1245153 第二次作業要求寫出具有實驗命令的小程式,要求實現多功能的執行動作,大多數人用的是strcmp(cmd,XXX),然後呼叫某個函式,我選擇了基於linux終端上的getpwuid(getuid())函式,通過函式本身的性質可以呼叫linux系統中的函式。
https://www.shiyanlou.com/courses/reports/1245714第三次實驗我們採用了模組化的思想,將一個函式分成了linklist.h,linklist.c,menu.c三個部分來描寫,具體的是menu.c呼叫linklist.c中的函式,而linklist.c中的Node呼叫了標頭檔案linklist.h中的struct
Node,本次實驗的函式十分有邏輯,一層一層的呼叫。系統被抽象成兩個層級:選單業務邏輯和選單資料儲存。(另外在說一下本次實驗是在十一的時候提交的,之前老師有說過十一作業是推遲一週的,結果我就沒看網易雲課堂打算下週再交作業了,結果發現10月3號的作業還是需要提交的,而十月10號左右的作業不需要提交,我本以為延遲的是十一這一週結果延遲的是下一週,導致一次作業加評論沒有提交,希望通過這次對於6次實驗的總結,能夠讓老師看到我寫的作業,並不是當初沒有完成啊0.0)
https://www.shiyanlou.com/courses/reports/1246256 第四次作業在我看來是最難的,任務量也最繁重,我們在這次實驗中添加了連結串列,通過連結串列對Menu進行操作,包括Init,delete,add,getnextNode等等函式,並且添加了大量的指標操作,這使得程式碼表述上增加了許多的困難,比如說initMenu函式,最後AddLInkTableNode設定下一枚結點,但實際上結點並沒有真正的指向誰,可以說程式能不能執行全憑指標自己的意志,在借鑑之前提交報告同學的程式碼時發現也不能很好的執行程式,比如命令只是能從help開始執行,而從中間結點的命令執行時也總是出錯,既然指標指向不對,就需要將每一部分的指標,比如pNext=NULL編寫出來,這個是最要的,每一次新建的結構體的指標,必須要初始化。
https://www.shiyanlou.com/courses/reports/1246941 第五次作業中我們主要學習了callback機制,這在軟體工程中也是很重要的一部分,也算初步體現了函式靈活性的一面,在main函式中呼叫某個庫函式時,需要先使庫函式對某個函式進行呼叫,這種多層呼叫的關係缺少一層都是不完整的,而通過登記不同的回撥函式,使得每次呼叫都有不同的功能發生,有點類似於C++的多型性質,極大的增加了函式的靈活性。
檔案,再次細分了整個函式的模組,而函式中對於int argc,char argv的引用,讓使用者對於Menu選單的使用更加方便,可以通過修改函式或者直接手動輸入新的結點資訊。在本次實驗中我們還進行了巨集命令的學習,連編譯過程我們都可以簡化以makefile的形式展現出來。
綜上所述,在本次網路課程中,我們所要進行的函式功能並未發生改變,只是從結構上,從靈活性方面加深了對其的呼叫,這也是軟體工程(c語言程式設計)的目的所在,讓我們在短時間內能夠了解模組化思想,靈活的處理各種問題。
學習軟體工程最大的收穫就是學會了模組化思想這一點,這對於程式設計師本身來講算是一種質的飛躍,從拘泥於一小點的程式碼編輯躍升至站在整個工程的角度去看問題,這種收穫無疑是巨大的。而想要去加深這種思想,我們還需要不斷的練習,在程式編寫過程中以模組化思想為中心來思考,設計問題。自己在課程中也存在著許多的不足與遺憾,由於自己來的比較晚課堂上總是佔不到最前面的座位,有時孟寧老師講的畫在黑板上的結構與程式碼無法及時的理解,只能課後再進行總結。而下半學期孟寧老師的網路程式設計沒有選到,無法跟著老師繼續學習,聽不到一些獨到的見解與語錄,算是本次實驗最大的遺憾吧!在課後作業方面,有時知道某個函式的寫法並不是最好的但是卻不想去修改,或者設計某個指標時想去指向其他地方看看會出現什麼錯誤等等,自己也沒有花費時間進行深入的研究,在以後的課程學習中我一定要再多花費時間對於程式碼的整體設計方面多進行探討!