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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

OO总结

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OO总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、第四單元作業總結

1、第一次作業

  第一次作業針對UML類圖的相關內容,要求實現類信息查詢、繼承與實現關系分析等操作。由于之前從未真正接觸UML類圖(IDEA自動生成UML類圖除外),對一些相關知識還比較陌生,所以本次作業讓我耗費了大量時間去做一些前期的準備工作,比如查找UML類圖的相關資料、認真研究課上的PPT、親自動手畫類圖等等。這些前期工作決定了對UML類圖的掌握程度,也決定了架構以及代碼實現的質量。

  我的第一次作業架構主要分為三部分:頂層的是與外部庫(封裝好的jar包)交互模塊,實現UmlInteraction接口,內含查詢類的個數、查詢頂層父類等方法。中層是對從外部庫接收的UML信息進行處理,記錄所有類的所有相關信息以及所有關聯的信息等等。底層是具體的元素類,包含Class類、Operation類、AssocationEnd類等等,真正有用的所有信息都存放在這些類之中。

  在UML語言中,我認為各個元素的id十分關鍵,它是UML元素的唯一標識,與各個UML元素一一對應。將這一特點運用在架構當中,就是用Hashmap存放<id,element>鍵值關系,從而可以通過id找到對應的UML元素。而為了能夠通過name找到對應的元素信息,迎合外部接口的需要,需要另外建立Hashmap來存放<name,id>鍵值關系。此外Hashmap還參與構造UMLClassUMLInterface元素的繼承與實現關系網絡,通過遞歸查詢類的頂層父類以及所有實現的接口。可以說,Hashmap的使用是本次作業設計的關鍵。

  本次作業比較難實現的部分,個人認為是查找類實現的所有接口,主要部分為遞歸遍歷接口的所有祖先接口。遞歸部分代碼如下:

?

 1 public void searchFathers(String interfaceid) {
 2     if (!interfaceidmap.containsKey(interfaceid)) {    //該接口是否已訪問過
 3         interfaceidmap.put(interfaceid, 0);     //存放訪問過的接口id
 4         interfacenamelist.add(getInterfacemap().get(interfaceid).getName());
 5         Classnode centerinterface = getInterfacemap().get(interfaceid);
 6         ArrayList<String> interfacefathers =
 7               centerinterface.getinterfacefather();
 8         int length = interfacefathers.size();
 9         for (int i = 0; i <= length - 1; i++) {    
10              searchFathers(interfacefathers.get(i));        //遞歸訪問接口的所有父接口
11         }
12     }
13 }    

?

?

  本次作業的UML類圖如下:

?

?

2、第二次作業

  第二次作業同往常一樣,是在第一次作業的基礎之上進行增量設計,只不過此次作業的迭代設計更加典型——整個第一次作業可以直接應用于第二次作業的UML類圖分析部分。也就是說,可以通過繼承來擴充功能類,添加關于UML順序圖與狀態圖的分析部分。第二次作業新增的順序圖與狀態圖部分知識量也不小,同樣需要在設計架構與代碼實現之前做好準備工作。

  第二次作業架構與第一次架構思路差別不大,主要是增量設計:在功能類中增加對順序圖和狀態圖的分析,增加State類、Interaction類等等。第二次作業所用到的算法在第一次作業中都有所涉及,比如遞歸查詢父類等。第二次作業新鮮之處在于狀態圖的構建,自己要通過一定的數據結構還原UML狀態圖。其實這部分內容在第三單元早就有所涉及,也就是圖的構建與相關操作。在本次作業中,我依然采用鄰接表的方法建立狀態圖模型,使用dfs算法進行后續狀態的查找。具體的遞歸實現與第一次作業大同小異。

  本次作業的UML類圖如下:

?

二、各單元架構設計與OO方法理解演進

1、第一單元

  第一單元的主題是以長表達式(字符串)為基礎,進行單元拆解。第一單元的作業設計,就是對字符串的拆分與計算的過程,其中拆分為主,計算為輔。第一單元的架構模式在第三次作業中得到了十分明顯的體現:加多項式由乘多項式組成,乘多項式由加多項式組成,各種具體的函數式(冪函數式、三角函數式)可化歸為乘多項式。需要對加多項式和乘多項式分別建模,對應的每個類中既存儲構成多項式的數據,又自帶求導方法。

  在第一單元中,我從對java語法一知半解到比較熟練地運用,思維從面向過程逐步過渡到初步的面向對象。第一次作業中,我總共就設計了三個類,一個類進行字符串的拆分,一個類存儲所有拆分過的子表達式,另一個類進行計算。結果每個類都十分冗長難看,每個方法都十分復雜,十分面向過程,難以理解與維護。第三次作業,我對每種多項式都設計了對應的類,并單獨設計字符串拆分與匹配的功能類,架構上有所進步。

2、第二單元

  第二單元的主題是基于多線程的電梯調度設計。在本單元中我第一次接觸到多線程編程,學習了不少java多線程的知識。第二單元的架構主要是對電梯線程與乘客線程分別建模,將調度器與電梯、乘客分離,可以對調度器單開一個線程。第二單元的需求情景類似于生產者與消費者模型,調度器接收并處理來自于乘客(生產者)的請求,電梯(消費者)主動地從調度器中接取請求。

  在本單元中,我對線程安全的理解逐漸深刻,對面向對象設計架構的理解也逐漸加深。在代碼實踐過程中,能夠更加輕松地對需求情景中的對象進行抽象,更加熟練地對對象之間的聯系進行分析與建模。

3、第三單元

  第三單元的主題是JML規格化設計,其實可以說是圖論相關算法單元。在本單元中我第一次接觸到JML語言與規格化設計方法,并在第一次作業中得到實踐應用。第一次作業比較簡單,看規格寫代碼,再加以適當的優化,沒什么好說的。第二、三次作業的主題是基于圖的算法應用,包括最短路徑算法、bfsdfs等遍歷算法等等。

  要運用圖論的算法,首先要正確、高效地建立圖模型。我在兩次作業中都采用了鄰接表方式建模,用Hashmap進行節點的鄰接關系映射。第二次作業中,我將不同路徑id相同的點視作一個點進行建模;而在第三次作業中,我對所有的點都分開建模。增量設計使得我采用繼承的方式,保留關于圖的計算類(內含最短路徑算法與dfs遍歷算法)以及節點類(存儲id以及pathid還有鄰接節點的相關信息)。

  第三單元訓練了我的建模能力,強化了我對圖論算法的熟練使用。并且對java各種容器類的使用也更加熟練,能夠利用各種容器類快速地組織起來適合于相應算法的數據結構。

4、第四單元

  第四單元的主題是UML模型的分析。知識量大,代碼任務也很重。在本單元中UML的各種元素都要在架構中有所體現,具體形式是對應為一個個具體的類,存儲UML元素的信息與相關操作。對UML模型的理解十分關鍵,理解的透徹,寫起代碼來就輕松自如。具體的架構與設計在之前已經進行說明,不再贅述。

  通過對UML的學習與理解,我對面向對象的理解也更加透徹。類的內部元素、類與類之間的關系,從UML圖上,映射到了我們的代碼之中。

?

三、各單元測試理解與實踐演進

?

1、第一單元

?

  初步接觸java語言與面向對象編程,我對測試的理解還停留在大一的c語言面向過程階段,缺乏調試大量工程代碼的經驗。關于測試樣例的構造不太全面與充分,測試的方法還停留在面向過程測試階段,缺乏模塊化測試思想。第一單元的測試比較盲目,就是自己構造一些不同類別的多項式,進行測試。測試樣例不多,質量也欠佳。通過測試找bug更多的是依靠運氣,缺乏理性分析。

?

2、第二單元

?

  在第二單元中,我的測試能力有所進步。在實踐上我開始進行模塊化測試,將測試分成幾部分進行:對于線程安全的測試,對于電梯內部行為的測試……并且對于多線程的測試經驗從無到有,也自己總結了一些多線程測試的小技巧:打印語句判斷輪詢、在線程等待與喚醒處設置標志……不過對于測試樣例的構造還尚未做到全面與充分。

?

3、第三單元

?

  在第三單元中我開始嘗試編寫測試程序,對類內部的數據進行合法性判斷,確定對于數據的處理是正確的、各個類得到的信息是正確的。這使得我的測試效率大大提高,不用完整地跑一組測試樣例,就可以找到一些關于數據處理的bug。此外,我關于測試樣例的構造也在不斷地進步,能夠理性地分析每個測試樣例的側重點,更加全面地構造測試樣例。

?

4、第四單元

?

  第四單元的測試要結合UML圖,不過本質上并沒有變化。在這一單元中我的每個測試樣例的側重點更加突出,測試目的更加明確。并且我繼續保持著編寫測試程序的習慣,寫完代碼,先寫測試程序,先保證每個類得到的數據是正確的。對于功能類,即對數據的分析處理,我進行模塊化的測試,對于類的計數、類的可見性查詢、類的頂級父類查詢等各種操作分別進行充分的測試。

四、課程收獲總結

  經過一個學期的面向對象編程訓練,寫了11次復雜的代碼作業與4次總結性的博客作業,我的面向對象設計與構造能力得到了很大的提升。從一開始的盲目、混亂的架構以及可維護性極差的代碼實現,到后來的理性的、面向對象式的架構以及較高質量的代碼實現,我的設計架構能力與代碼實現能力有了不小的進步;從一開始的隨緣測試、大海撈針找bug,到后來的科學構造測試樣例、編寫測試程序以及模塊化測試,我的測試水平得到了提升。

  除了能力上的提升,知識上的收獲也十分豐碩:第一單元讓我熟練掌握字符串相關操作,學習了不少正則表達式相關知識;第二單元讓我了解了java多線程的許多知識,對鎖、wait、notify、jion等知識與概念有了比較深刻的理解;第三單元讓我復習了大一下學期的算法與數據結構,對圖論的相關知識有了更深的理解,同時也學到了很多JML的相關知識;第四單元讓我學到了很多UML的知識,并能夠熟練地通過畫UML圖來表述自己的架構。

五、對課程的改進建議

  1、官方的對指導書的擴張解釋或類推解釋、重測等重大消息,除了在討論區開貼說明之外,最好能夠以更加有效的方式及時地通知到大家(比如在通知群里通知大家等)。

  2、最好能在課程中心建立相關課程欄目,方便及時地給大家發放PPT等課程資料(就像計組、OS、馬原等課程一樣)。

  3、部分作業好像不太符合單元主題(對,就是第三(JML(圖論))單元,大家在第三單元里都忙著學習和選擇相關算法,缺乏對JML的學習和規格化設計)。

?

轉載于:https://www.cnblogs.com/gzhBuaa/p/11067150.html

總結

以上是生活随笔為你收集整理的OO总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。