oo面向對象第一單元總結

? oo第一次作業主要考察了多項式的求導,從簡單的冪函數求導到三角函數求導再到嵌套函數的求導,難度循序漸進,對我們對于面向對象的理解的要求也在一次一次提升。一行行代碼打下來,一夜夜熬過去,我也來到了這個短暫的停靠站,對自己前三次的作業進行一個簡單的回顧。

?

第一次作業:

? 測試結果:在強測時被一個同質bug hack到了六個點,直接導致我自己很可惜的沒有進入互測,問題在于x和^之間的空格在我寫正則表達式進行判斷時被遺漏,導致強測大多數點輸出的結果都是”WRONG FORMAT!”,我個人對這個評測結果和給分制度并沒有任何的異議,因為我覺得這個問題的出現確實是我沒有做好本地測試的原因,最基礎的錯誤,往往是也是最嚴重的,這一點不管是在現在的學習還是以后的工作都會得到體現。

? 主要問題:感覺第一次作業結果并不好的原因就在于中測通過之后沒有進行更嚴格的測試,不是按照先測試、后寫代碼的順序來進行的,沒有按照規律構建較為完備的測試集,才導致了這么基礎的錯誤的發生。在第二三次作業中由于我做好了這一點,導致結果明顯比第一次要好很多。

? 過程反思:在第一次作業的時候我個人感覺自己并沒有很好的理解“面向對象”這個概念,整個程序就是按照一個main從頭到尾地寫了下來,還依舊停留在c語言面向過程的思維里,這樣寫出來的程序不論是魯棒性、擴展性還是后面對于修復bug而言都是十分不利的,很多時候修復一個bug往往需要對好幾個方法進行改動,這一點我在第一次作業的修復過程中深有體會。

?

第二次作業:

? 測試結果:強測點全部通過,但是顯然我對于對于三角函數的化簡并沒有做到最好,只是簡單地進行了sin(x)^2+cos(x)^2=1這個公式的有關化簡,對于大多數三角公式都沒有進行處理,最終強測只拿到了98.3分,互測也被找到了三個bug。

? 主要問題:第二次我覺得我確實相對于第一次有了一定的進步,但是代碼架構仍然十分令自己不滿意,各種方法的關系錯綜復雜,沒有做好邏輯的梳理,導致自己在檢查bug時依然十分頭疼,總是在一個類中反復尋找邏輯關系。

? 過程反思:但是第二次作業我也有了一定的收獲,那就是在互測環節中,我自己嘗試去利用shell腳本進行了程序的對拍,這樣對于bug的查找即高效又省力,我需要做的僅僅就是確保自己寫的shell文件沒有任何的問題即可。

? 雖然第二次作業和第一次作業有著許多相似之處,但是我深知我必須對自己的代碼進行徹底的重構,不然對于第三次作業的進行將會極為不利。但是第二次作業我對對象的理解仍然不夠深刻,我只是簡單的將程序分為了main、多項式處理(poly)和單項式處理(mono)這三個類來進行書寫,這樣我的poly類中仍然有著龐大的代碼數目和十分復雜的方法關系,很多完全可以單獨拿出來作為一個類的方法,都被我雜糅進了poly這個類中,這是我所犯下的錯誤。

?

第三次作業:

? 測試結果:第三次作業和前兩次作業相比難度確實大了很多,就我個人而言,對有關結構的問題和同學進行了近兩天的討論,最后通過兩個夜晚的奮斗終于在周二下午成功解決了中測的所有測試點,(雖然后來延時心里確實有些小小的不平衡,但是還是利用這個時間找出了自己的幾個bug并進行了略微的優化)。最終強測還是錯了一個測試點,并且在互測中被找出了一個bug,不得不說一下在互測的過程中我深刻的感受到了同級大佬的強大,不論是優化的程度,還是代碼的架構都十分讓人佩服。

? 過程反思:在這次互測中同班的朋友教會了我使用python腳本進行表達式的求導和計算,這樣我就可以利用shell文件對每個人的表達式賦值計算并查看結果,這無疑是一件讓人十分有成就感的事,這樣我也避免了去檢查同組復雜的的輸出表達式,而可以直接通過結果來快速判斷正確性。

? 在第三次作業中我覺得我的整體架構比前兩次要好得多,清晰得多,我一共分了八個類,并在因子的求導部分利用了繼承來進行書寫,常數、三角函數、單項式和表達式因子都是因子這個父類的子類,這樣寫起來邏輯十分的清晰,在debug的過程中也更加容易鎖定自己bug所在的位置并快速進行修改,正確度也高了許多。

?

三次作業代碼分析:

? 在三次作業之后,我利用idea自帶的metrics插件對三次作業的代碼復雜度進行分析,結果如下:

? ? ? ? ? ? ? ? ? ? ? ???

? 我個人很驚訝的發現到第三次作業代碼長度竟然略小于第二次的作業代碼長度,這里我對這個現象進行了一下簡單的分析,首先是我第三次作業的優化明顯不如第二次做的好,而對于第二次作業來說,結果優化部分大概占據了八十到一百二十行的代碼量,這是原因之一,其次是我第三次作業的框架要優于第二次作業,不論是類的劃分,還是繼承等方面都比第二次好得多,這也就導致少了很多冗余重復的代碼。

?

? 這三次作業每一次都讓我對面向對象這個概念有了進一步的認識,對程序的構架設計的越好,程序的各方面性能也隨之變得更好。我利用idea查看了每一次作業的類圖,結果如下:

? ? 第一次作業:

? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

? 第二次作業:

? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

? 第三次作業:

? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ?很明顯我每一次作業的設計都相對于上次的有了很大的提升,而隨著我結構的一次次完善,相應測試的分數也有所提高,修改bug的難度也變得越來越簡單,我覺得我在逐漸從過去的面向過程往面向對象不斷地前進,這也是我必須從這門課里學習到的最重要的東西之一。

?

對于bug查找的分析:

? 其實就我個人的感覺而言,這一次作業bug并不太可能出現在求導的部分,基本上當大家通過了中測的所有樣例之后,對因子或者項的求導功能大概率是不存在缺陷的,所以在互測環節時,bug基本都是出現在正則表達式的判斷部分,或者是輸出的格式問題上,構造一個完備的略微基礎的測試集,有時候比很復雜很長但是測試類型同質的測試樣例更為有效。

? 以我自己為例,在第二次作業的互測環節中,我被hack到的樣例分別是1*和++++,這些數據都是最簡單最基礎的測試樣例,但是往往我們就會在正則匹配的部分忽略這些情況,其實復雜的測試樣例也就只是多個簡單樣例的綜合測試,我們提前做好一個完備的簡單樣例的測試集,復雜樣例的通過只不過是順其自然的事情。

?

小小的總結:

? ?雖然通過每一次作業我都能看到自己在某些方面取得了明顯的進步,也有了繼續努力的動力,但是相比于同級大佬們的代碼而言,我的程序各個方面都還存在著極大的優化空間,這將是我未來進一步努力的方向,希望自己的能力可以通過這門課得到極大的提升。

?

?

轉載于:https://www.cnblogs.com/wth-blog/p/oo_first_summarize.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278099.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278099.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278099.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Microsoft Teams免費版本初體驗

Microsoft Teams推出有一段時間了,如果想要體驗Teams,必須需要有Office365的訂閱。最近微軟為了進一步推廣Teams,突然宣布Teams免費了。使用過Teams的讀者知道Teams是基于Office365賬號和組的,那它免費后,不使用Office…

JS:封裝函數判斷數據類型

思路 1 ).根據 typeof() 的返回值將數據分為2種情況 a.返回值為 string number boolean undefined function (直接返回 typeof() 的返回值) b.返回值為object 2 ).再將 typeof() 返回值為 object 的數據分為2種情況 a.null (直接返回自身) b.包裝類 對象 數組 (再進行細分) var…

強制禁用gitlab的雙因子認證:Two-Factor Authentication

(一)問題描述: 此博客解決如下問題:禁用gitlab的雙因子認證 禁用前,如圖(此時,你在gitlab中什么也干不了) (二)思路分析: 百度了很多方法&#xf…

如何將Outgoing Webhook部署到中國版Azure

在這篇文章中,我們主要來如何將Azure DevOps中的項目作為應用發布到中國版Azure的App Service中。 什么是Azure DevOps Azure DevOps, 原名為VSTS, 全稱是Visual Studio Team System,是由微軟開發的一套具有高生產力、高集成性、可擴展的生命周期開發工…

Google SRE 讀書筆記 扒一扒SRE用的那些工具

寫在前面 最近花了一點時間閱讀了《SRE Goolge運維解密》這本書,對于書的內容大家可以看看豆瓣上的介紹。總體而言,這本書是首次比較系統的披露Google內部SRE運作的一些指導思想、實踐以及相關的問題,對于我們運維乃至開發人員都有一定的借鑒…

第8章 java中的并發工具類

8.1 等待線程完成的CountDownLatch 作用:讓一個線程等待其余線程完成之后在繼續執行,如主線程等待開啟服務的子線程執行完畢后主線程繼續執行,類似于join。 轉載于:https://www.cnblogs.com/AshOfTime/p/10608910.html

Microsoft Teams的Meet Now功能

今天,我們宣布完成了Skype for Business to Teams路線圖中首次披露的幾項關鍵會議功能。當個人聯系,溝通和協作時,工作就自然而然的完成了,我們相信這些功能(除了我們2月的公告之外)使Microsoft Teams為所有…

深入 Adobe Reader 保護模式 —— 第一部分 —— 設計

原作者:Liz McQuarrie, Ashutosh Mehra, Suchit Mishra, Kyle Randolph, Ben Roger 譯者:lordVice 校對: StrokMitream 看雪翻譯小組 介紹 我是 Kyle Randolph, 和我一起的還有負責 Acrobat 系列產品的安全團隊, 這些產…

Java泛型主題討論

說明:在學習泛型這一知識點中,主要參考自《瘋狂Java講義》第7章P307-P330的泛型內容,因為是跳著閱讀,所以前面的一些名詞不是特別清楚,這里也做出適當備注,供自己識記與理解。 1.泛型 理解:說到…

初學Vue.js,從頭來過~

之前上課也學過vue.js,但是一遍過下來,實話,沒有記住什么,所以決定自己在對照著文檔過一遍,所以之后會弄一些基礎的東西,還請大神們莫噴~~~~今天先給平臺打一個預防針,Young C 要來啦~~ 吼吼&…

從Microsoft Teams技術棧看前端技術發展趨勢

在前不久的微軟美國一年一度的Ignite大會上,微軟宣布Microsoft Teams是微軟歷史上發展最快的應用。它將取代Skype for business,成為語音視頻協作的主打產品。 我也有幸在上個月微軟中國年度技術大會Tech Summit 2018上被邀請作為講師講解基于Teams平臺…

LeetCode 最大正方形

在一個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,并返回其面積。 示例: 輸入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0輸出: 4解法:判斷以某個點為正方形右下角時最大的正方形時,那它的上方,左方和左上…

solidity字符串拼接

如果你希望馬上開始學習以太坊DApp開發,可以訪問匯智網提供的出色的在線互動教程: 以太坊DApp實戰開發入門去中心化電商DApp實戰開發當你開始學習使用solidity開發以太坊智能合約之后,很快你會碰到一個問題: 在solidity中該如何拼…

Confluence Cloud的Teams Message Extension

Confluence Cloud的Message Extension現在正式登入Microsoft Teams。 它可用于團隊頻道和私人聊天,使您的對話更具描述性和信息性。 從Microsoft Teams應用商店獲取Confluence Cloud應用程序并連接到Confluence Cloud實例。 連接后,您將能夠搜索Conflue…

45 | 打蛇打七寸:精準測試

轉載于:https://www.cnblogs.com/lmx0621/p/10614966.html

Teams App統計

周末閑來無事,統計了一下Teams的app商店里的app ( Teams App Store )。截至到現在(2018年11月)一共有145個app。要注意一點:如果app不是公開的(即單獨安裝到Office365租戶里,并沒有提交到office store&…

你必須要懂的APK瘦身知識

隨著業務復雜度的逐漸增加,代碼、資源也在不斷的增加,此時你的APP大小也在增加。從用戶層面來說,面對動輒幾十兆的APP來說在非WIFI情況下還是會猶豫要不要下載,不下載你就可能因此失去了一個用戶。從公司層面來講,流量…

DHT網絡

(基礎技術) 現在有一種方法,可以通過磁力鏈接,例如magnet:?xturn:btih:0482e0811014fd4cb5d207d08a7be616a4672daa,就可以獲取BT文件。 這個是通過DHT網絡來實現的。 DHT網絡是一個去中心化的,分布式信息存儲系統。 存儲的信息就…

Java基礎 Day04(個人復習整理)

分支結構 2、switch語句 因為if語句的級聯式最多只會處理三種情況,如果出現多情況 1>可以繼續使用if語句的級聯式,但是可能代碼的可讀性就會變差。  2>采用switch語句來解決。 switch語法格式: switch (存在多種情況的變量) {case 值…

java如何獲取一個double的小數位數

前言 看標題是不是覺得這是一個很簡單的問題,我一開始也是這么認為的,但是實際情況下,在各種情況下我們都進行了測試,發現很多實際情況是無法不盡如人意的。 方法分析 當前能想到的比較容易有下面幾種 1、直接使用double處理 2、將…