面向對象(OO)第一階段學習總結

前言:對OO本階段作業情況說明

本階段一共完成三次作業,第一次主要是在主方法裡面進行編程,也就是和之前C差不多,而隨著學習的深入,慢慢了解到面向對象與面向過程的區別。作業的難度也在慢慢增大,後兩次都用到了面向對象的方法。目前三次作業均已完成。

作業過程總結:

下面就三次作業進行總結,第一次作業,可以說是基礎練習,更相當於回憶編程方法、技巧。在完成作業的過程,其中第一題計算稅率,我遇到三個測試點沒有通過,第一反應是檢查程式碼方法是不是有誤,從頭到尾查了一遍,並,沒有找到錯誤。第二步,檢查是否數據有誤,查了兩遍,發現了兩個數據寫錯了,提交之後還是有一個測試點沒過,這時我接著查了五遍,最終還是發現了一個小錯誤。可見,打程式碼得心細,思維嚴密。

這三次作業直接有著很強的知識遞進關係,難度由易到難。通過三次作業,慢慢的從面向過程進入到面向對象,從第一個java程式開始

public class Helloworld{                public static void main(String[] args){                System.out.println("hello world");
}
}

 

到後面的class(類)和對象。我簡述一下,對於面向對象的理解,面向對象和面向過程最大的區別就是前者對解決問題通過類+對象即方法+對象進行的,而後者則更多的強調函數的功能。兩者都為高級語言,而編程思想和方法截然不同,各自有優缺點。通過作業逐步從面向過程過渡到面向對象的,在這個過程中,從第一次作業的全部在主方法裡面編程,到第三次作業的建立多個類進行編程。可以說這段時間還是學到了不少東西。

當然在作業過程中也遇到不少問題,這裡我總結為一下三種。                                                                             

一是由於自己不細心造成的錯誤,這種錯誤只要在編程過程中做到認真細緻就完全可以避免的。比如數字寫錯,這種錯誤很小,一旦出錯便是要花上幾倍的時間去這個錯誤。二是在編程過程中,構造的方法沒有達到預期效果,導致測試點不能通過,比如最大(小)整數值測試,程式結果產生溢出,導致結果錯誤,對與這個錯誤,就像計算(5+n),n為輸入的值,我採用的方法是將n分為n/2+n/2(或1+n/2),這樣就不會溢出了。三是在測試程式過中出現的不常見問題,比如程式運行超時,這是我會選擇用另一種方法進行編程。在寫程式過程中,錯誤肯定是有的,但是我們要知道自己為什麼會錯,到底是不細心還是知識點沒掌握導致的。

粗略計算了一下這三次作業所花的時間比例 3:7:12(小時),我認為每周在OO上花的時間是最多的,同時學到的當然也不少。可見這三次作業難度在慢慢加大,我也要改變編程方法,從而達到高效率完成作業。

通過這三次作業,我認識到了編程過程是非常嚴謹的,不容有半點差錯,尤其是小錯誤,找起來難度大。為了減少錯誤的產生,首先,編程風格整潔,讓別人一看就懂,後面發生錯誤也很容易找到。然後,找一個安靜的環境編寫程式碼,像我一般是在晚上進行編程,這時候安靜,效率高(當然這裡不提倡熬夜哈)。最後,還是要做到細心、細心、細心!

OO設計心得

就面向對象與面向過程而言:

面向對象,從字面意思是面向對象的編程,對象可以是實物,也可以是客觀存在的東西。對象需要自己創建,通過new 進行創建,這裡對象的目的不是為了完成某一個步驟,而是描述一個事物在整個問題步驟中的行為。面向對象程式設計主要包括:對象、類、數據抽象、繼承、動態綁定、數據封裝、多態性、消息傳遞等。       

面向過程,是一種以過程為中心的編程思想。以什麼正在發生為主要目標進行編程函數,然後用函數把這些步驟一步一步實現,使用的時候依次調用就行。 

這兩者最大的區別在於,面向過程沒有封裝、繼承、多態性的特性,面向對象由於這些特性,設計起來更加靈活、更加易於維護。

面向對象基本原則有單一職責、開發封閉、依賴倒置、介面隔離、Liskov替換原則。 對於單一職責原則,其核心思想為:一個類,最好只做一件事,只有一個引起它的變化。職責過多,可能引起它變化的原因就越多,這將導致職責依賴,相互之間就產生影響。單一職責就是指只有一種單一功能,不要以類實現過多的功能,確保功能單一。

OO編程思維:我理解的編程思維是,首先對需求進行分析,根據要求建立類,方法。定義屬性,類型。通過對象進行解決問題,它與面向過程不同,面向過程主要是分析解決問題的步驟,通過步驟進行構造函數,然後通過調用將其一步步連續起來。面向對象主要是針對對象進行一系列的操作。也有很簡單的理解,在我們用java語言做一件事,只要去new一個對象,並且去調用這個對象的方法,就可以實現我們所要的業務,我們並不關注這個對象具體做了什麼。

測試的理解與實踐

 

我們所寫的程式碼得經過測試才能說得上合格,要是程式碼寫出來,什麼功能都實現不了,那豈不是寫了一堆廢品。編碼品質可以通過測試點進行檢測,通常都有一些邊界測試對程式碼測試。就像軟體公司的軟體測試員,他們的職責就是查找開發的軟體裡面的bug,通過測試案例進行檢測。可見,測試對於編碼來說是特別重要的。

目前遇到的測試,主要是對輸入變數進行測試。要是我設計測試用例,我會選擇三個正常用例,加上兩個邊界用例測試,正常用例作用是測試程式在正常值的運行結果,而邊界用例多在於測試程式運算過程中是否發生溢出,一旦溢出,結果肯定錯誤。這樣就能更好的對編碼品質進行評估。

課程收穫

通過這四周的學習,我學會了使用對象進行操作,學會了類與類之間的關係,類裡面的成員可以用UML圖進行表示,同樣也能根據UML圖進行編寫程式。從課程一開始,我覺得我有信心學好它,畢竟那時候大家也沒有OO基礎。我發現編程過程中,有好的演算法可以省好多的時間,提高效率。我認識到演算法在開發軟體過程中的重要性,同時我也會根據需求設計最優演算法。這段時間的收穫,可以說是頗豐,在面向對象中我從一臉懵逼,到能夠獨立分析題目要求。在編碼過程中,要做到細心,認真,可以為後面過程減少很大時間。在課堂上遇到不明白的,可以截圖下來,課後進行研究。

對課程的建議

我認為老師可以事先把要將的內容程式碼先發到群裡面,到時候上課時,我們可以跟著老師操作一遍,我覺得這樣效率應該會更高。