oo第四次总结
?
-
測試與正確性論證差異
測試是直接構造許多的測試樣例,通過程序運行這些樣例,判斷運行結果是否與預期結果相符,從而判斷程序的正確性。在前幾次的oo測試中,均采用了這種方法,這種方法不關心程序的實現邏輯,僅僅關心程序的輸出是否正確,簡單直觀,與程序實際應用場景更為接近。而正確性論證試根據代碼規格,分析程序實現是否符合代碼規格的要求,從而判斷程序的正確性。
理論上來說,這兩種方法都能對程序的正確性進行判斷,但都存在著一定的問題。使用測試方法時,由于不關心程序的具體實現細節,因此需要構造大量的測試樣例,從而試圖覆蓋程序所有的執行情況。在構造樣例時,很可能會出現幾種看上去不同的樣例,對程序而言實際上卻是相同的情況,造成樣例大量重復;也可能會出現漏掉了某種很隱蔽的分支的情況,不能完全檢查程序的正確性。因此這種方法在程序較為簡單時很有效,而且測試過程很簡單;但是對于功能較為復雜的程序,即使通過了測試,也不意味著程序的完全正確。對于正確性論證,其依據是程序的規格,這就意味著程序的規格必須完全正確,完全符合需求的要求,這一點雖然已經被默認保證,但仍存在出錯的可能。同時,正確性論證需要對代碼實現進行深入分析,在這一過程中,也很容易出現論證的邏輯錯誤,從而使論證變得沒有意義。因此對于正確性論證,其雖然能保證通過論證的程序的正確性,但是論證過程更為復雜,不易實現。?
?
?
-
OCL語言與JSF
OCL是對象約束語言(Object Constraint Language)的簡稱,是一種指示用戶建模系統中的限制方式,是UML可選的附加內容,可以用來更好地定義對象的行為,并為任何類元指定約束。在對象約束語言中,對象代表了系統的組件,它定義了完善的項目,約束代表限制。它是對圖形符號的補充,說明建模元素的有關細節。OCL作為形式化語言,基本要素包括:類型,操作,表達式,語句等四部分。
OCL與JSF均可對程序運行的前置條件、后置條件等內容進行說明,同時都是無二義性語言,其表達式狀態對系統執行也不會有影響。但是OCL中定義了更為復雜的數據類型與語句規范,因此從形式上更為工整,但也更為復雜。JSF在使用時自由度較高,因此是一種簡化的OCL。
?
?
-
規格寫法改進
- UML類圖
?
- UML順序圖
?
- UML狀態圖
?
?
-
總結
- 知識點關系
第一個單元主要介紹了面向對象的基本知識,主要有面向對象與面向過程的主要差別,面向對象的思考方式是怎么樣的,面向對象程序的基本構成是什么。第二單元主要是多線程編程,介紹了java多線程編程的基本方法。第三單元在多線程的基礎上,主要訓練規格的書寫。而第四單元在規格與之前程序的基礎上,進行程序的正確性論證。這四個知識點是逐步遞進的關系,但是每個知識點之間也有較大的不同,屬于編程的四個層次。
- 提升與進步
個人來說,在編程語言上,這個學期讓我java從0起步,現在已經能夠讀懂并寫一些稍復雜的java程序,實現了很大的進步。在代碼質量上,原來對于代碼格式、代碼結構等方面關注的不多,程序以實現功能為主要目標,這學期次作業由于對功能要求的降低,讓我有了更多的時間去思考如何構建代碼,讓自己的代碼質量、代碼可讀性有了顯著的提升。
- 關于工程化開發
工程化開發是工程中進行系統化、模塊化、規范化編程的過程。在實際工程實踐中,這一點顯得尤為重要。在我們的作業中,主要進行了兩大模塊的作業,即電梯與出租車。寫電梯的時候,由于對java及面向對象都是剛剛入門,怎么寫代碼都不清楚,也就談不上工程化的問題。因此在這一模塊作業中,每一次的需求附加,幾乎都面臨著程序重寫的問題,因為在初始階段對程序沒有一個合理的構建。在寫出租車的時候, 由于編程能力的提升,在最開始就對代碼框架進行了設計,因此后續的需求更改也就顯得比較容易,無需對程序主體進行任何改動。
雖然我們的作業遠遠談不上工程,但是從這兩個模塊的實踐中也可以很明顯的發現,工程化設計在編寫程序中是非常重要的。
- 建議
關于課程,最明顯的感覺就是作業和課堂聯系的不夠緊密,除了后幾次作業必須看ppt,按照要求寫規格、寫論證之外,前幾次的ppt對于作業來說幫助不大,這也就表明,課上講的東西沒有在作業中很好的進行體現、進行考察。其實原因也是顯而易見的,在第一單元介紹面向對象的時候,課上的理論對同學們的指導作用不是很強,這個時候很少有人有時間按照課上的理論分析需求進行編程,此時大多數人根本不了解java的任何語法(包括我),他們需要花費大量時間學習語法。在學習語法后,時間已經所剩不多了,就只能按照自己最熟悉的方式(面向過程),先把作業做完。第二單元介紹多線程,第一次課花了大量時間介紹java實現多線程的原理及多線程的意義,反而對多線程的具體代碼實現僅進行了很少的介紹,而課后的作業卻是需要利用多線程編寫復雜程序;第二次課注重介紹了線程安全機制,在編程中卻基本上也就用到了最基本的類鎖,創建線程安全類,而且個人感覺鎖設計最為復雜的反而是上一次作業,在以后的作業中也基本見不到鎖的蹤影。從第二單元的第三次到后續的所有作業,基本上都和軟件規范有關,我相信這是很好的訓練,但我記得吳老師在第一節課就說過,這門課曾經確實還有一個目的,就是訓練軟件工程能力,但是現在軟件設計已經被分成一門單獨的課,在大三下學期進行。在面向對象程序設計課的后幾次作業中,可以很明顯的感覺到,對面向對象這一思想的理解沒有顯著的提升,都是在利用第一次出租車作業時的程序進行修修補補,很明顯不會因為之前寫的不是”面向對象“,而在后幾次作業當中逐漸因為對面向對象的理解,而將程序重構為”面向對象“式的。在面向對象設計與構造中,花費半學期的時間著重訓練軟件工程的內容,我感覺占比稍微大了一些。
當然我可能也沒有什么特別好的建議給老師,只是指出了一些我認為不夠合理的地方。我想到了一兩點改進意見,比如是否可以對java語法進行一些講解,或是將作業從一些類更少、算法更簡單的程序開始,通過編寫幾個基本程序熟悉語言,而不是一開始就將語言學習、正則表達式匹配等多個知識點融合在一起。還有就是后面軟件規格、正確性論證等方面,是否需要在本門課程中占據這樣的比重,是否會和其他課程有一定的教學重疊,老師們可以考慮一下。
轉載于:https://www.cnblogs.com/liuhm98/p/9224030.html
總結
- 上一篇: 人的一生为什么要努力 1
- 下一篇: C# LINQ(5)