Java概览(java语言编程艺术笔记)
Java入門(1)——注釋,面向對象,問題分解
?
注釋
?
簡單程序里廣泛注釋顯然是愚蠢的,但是設計更大的,更復雜的程序是一種非常有用的記錄。
?
面向對象
?
擴展類的實例同時也是現有類的實例。
?
這個怎么理解?雖然我知道類這個概念是源于面向對象的。現有類應該是個基礎,擴展類則繼承了現有類的屬性:
?
舉個例子:人——》周杰倫。周杰倫繼承了人的固有屬性,但是同時也有自己發音不清的個性。所以人是現有類,周杰倫是擴展類。或者說人是超級類,周杰倫是子類。
?
這里有個問題,供我日后解答:
?
java里有類,也有函數(這個我現在不知道叫什么,但和c里的函數很像,所以姑且叫它為函數)。這是為什么呢,因此我也難以理解面向對象和面向過程到底有什么本質區別,難道僅僅是思維過程的不同嗎?面向對象講求的是分解的思想而面向過程講求的是過程。
?
其實這些一切的東西用c語言中的函數不就可以搞定嗎。C的函數像一個黑箱,提供了幾個輸入的接口和輸出的接口,java的類也是這樣,只是把函數做的更靈活了,可以只調用其中的一小部分內容,通過屬性。然而為什么java還允許寫一些類似函數的“私有”的東西呢?
?
這里不得不提一點,如果有了盡可能多的函數那么可以解決盡可能多的問題,當這些函數多到一定數量時對生活的影響將是巨大的,如果有個公司肯將所有編程用到的函數弄一個數據庫,當然我不知道這個庫的大小是否在可實現的數量級,程序員的工作不再是編碼而是挑選適合的函數用到程序里(現在的程序員也是這樣吧,我不知道),或許那時編程已經類似于桌面軟件一般的簡單,進入我剛剛設想的數據庫,搜索功能,輸入參數,成功解決。
?
問題分解
?
一個程序分成若干小部分的過程。因此選擇一個恰當的分解路徑將是一個程序中比較困難的部分。
?
分解原則:
?
每個子問題應該執行一個在概念上簡單的任務,這里無需關注在具體的實現過程是多么復雜。如何檢驗這任務在概念上是簡單的呢?通過對它的命名,是否能對它進行準確而又簡單的命名。
每個子問題應該執行盡可能通用的任務,而不是只用一遍,那還不如不分解呢。因此在評定程序的實施方案是盡可能通用的分解也成了一個重要的方面。
(本次筆記來自于《karellearnsjava》第二章)
?
Java入門(2)——bug,結構化程序,軟件工程,算法
?
Bug
對于初學者來說bug肯定是很多,常見的有以下幾點:
語法錯誤:
變量,方法名字書寫錯誤。
將私有方法直接寫在public里面。
將else寫在if里面。
邏輯錯誤:
Fenceposterror,就是柵欄柱錯誤。少算了一個或者多算了一個。
Oboe(offbyoneerror),缺了一個錯誤,也是柵欄柱錯誤的一種。
解決以上兩種錯誤的方法是,寫成類似的代碼:
while(條件){
執行語句
}
執行語句
第三類bug:
這個完全是我生造的概念,指的是不能將程序設計的更具有普遍性,給日后的開發管理帶來難度,其實這是最大的卻最很難關注的bug。
?
結構化程序:
在學會循環語言之前,同學們所寫的程序,都是線性的。
循環的具體選擇原則:
for循環:已知程序的循環次數。
while循環:未知程序的循環次數。
當然在大多數情況下他們是可以轉換的(應該是這樣的吧。)
?
軟件工程:
軟件工程是為了讓程序的開發復雜性,即開發難度降低到可管理的范圍內的一系列方法。其中最重要的方法論,便是自上而下設計(逐步求精)。
自上而下設計(逐步求精):
原則是從一個問題的頂部開始程序設子。也就是從程序最概念化,抽象化的地方開始程序設計,例如helloworld程序可以被我們概念化的稱為問好。然后具體到,問什么好用什么方式問。
用這樣的方法可以得到程序大體框架,然后逐步分層解決。
因此一個程序可能被分成很多方法,一個方法被調用時必須滿足的條件被稱為前置條件,于此相對,后置條件則指一個方法完成后必須達成的條件。
?
算法:
設計一個問題的解決思路的過程被稱為算法設計。其中解決問題的方法就被稱為算法。
算法必須具備以下要素。
清晰而且毫不含糊的表達形式。
該思路的每一步都應該是可行的。
在有限的幾部之后,該思路總是會終止的,而不是死循環。
?
(本次筆記來自于《karellearnsjava》第三,四,五章。)
6/15/201207:06
?
Java入門(3)——計算機發展及初探,算法及編程過程,面向對象
?
計算機發展及初探
發展
計算機發展迅速,但也只是近幾百年的故事。如果把公元前兩千多年的算盤算上的話,計算機發展路線酷似一個底數大于1的指數函數。
計算機科學
與其說計算機科學是關于計算機的科學,毋寧說是一門解決問題的科學。
硬件
算法及編程過程
算法
算法是抽象的問題解決方案,對于編程新人來說具體編程的實現難度大于算法的,而隨著編程經驗的增加,算法的設計越來越成為一件有挑戰的事。
之前的筆記中也提到過算法的三個要素:準確定義,有效,有限。
編程過程
語言類型:
1.編譯型:在不同的硬件上有不同的編譯器,將源文件轉換為機器指令,根本原因在于基本硬件使用的是不同的機器語言。
2.解釋型:將代碼轉換為解釋器可認的中間語言,這些語言在通過解釋器執行,而不是像編譯型直接裝換為機器語言。
Java采用的是結合策略:Java將源代碼編譯為普通的中間語言。java為了跨平臺的同時保持程序的運行效率引入了虛擬機的概念。虛擬機將中間語言鏈接后的代碼翻譯為機器語言。具體的過程如圖:
?
面向對象
在“面向過程”的語言中,程序是由過程或是可重用代碼的函數構建起來的。在“面向對象”的語言中,程序是由數據和功能組合而成的對象構建起來的。
本次筆記來自于《Java語言的科學與藝術》
?
6/21/201209:06
?
Java入門(4)——編程示例:Java程序結構,程序欣賞方式,類和對象,圖形程序
?
Java程序結構:
?
如圖一個入門級別java程序的結構是這樣的,注釋,輸入,主類。
注釋:
注釋有兩種方式,一種是:/*注釋內容*/,通常用于整段的注釋;一種是//用于單行注釋。
輸入:
Java可以方便的使用程序庫,這些程序庫通常是其他編程人員寫的工具的集合。通常大多數程序在注釋后會包含import行。
主類:
這顯然是java程序的主體,一般包括標題行和類定義的主體。我們可以從標題行得到重要的關于程序主體的信息,又可以在類定義的主體體會程序細節。上圖程序中extends是java關鍵字中的一員,她表示HelloProgram是GraphicsProgram的子類,因此GraphicsPogram能做的,HelloProgram都能做。類的主體中則包括了java方法的一個示例,方法中包含的便是語句,準確的說語句才是程序的主體,雖然這里整個程序只有這一條語句。無論什么時候運行java程序,計算機總是執行包含在主類的run方法主體中的語句。
?
程序欣賞方式:
整體觀:整體觀只要求知其功能,而不必知其細節,實現。需要了解每行語句,或者每個方法,甚至每個程序的功能。
細節觀:細節觀則要求知其細節,而不對整體要求。需要知道每個變量,每個關鍵字的具體含義,以及每個程序的具體實現。
對于初學者更多的要求是兩種觀點的相互轉換,既不能淹沒在具體語言細節里而忽略軟件工程;也不應過分的整體化而導致程序無法實現。而這樣做的機會則是編程,用編程學會語言,用編程學會編程。因為在實驗中我們能學會很多東西。
習語或編程模式:
Java中有著很多結構化的重復性的代碼,這些代碼被我們稱為習語或編程模式。有時候,這些模式像Java規則或庫提供的宏大有冗長的故事,然而熟記這些故事可以隱藏很多細節,好比中國成語一樣,有事侯短短的幾個字下面就是一個豐富多彩的故事。識別并熟記這些模式可以方便程序的實現。事實上,我們并不需要可以的記背這些模式,編程到了一定的累積程度,很多細節便自動轉換成了習語或編程模式。
?
類和對象:
類,是可擴充的模板。它制定了對象的特殊風格的結構。每個對象都是特殊類的實例,類可以分別作為不同對象的模板。
對象,是一個封裝狀態和行為的綜合實體。而對象的狀態由一組屬性組成,這些屬性適用于該對象,并且可以隨時間而更改。對象的行為指對象對其內部事件或外部對象發出請求的響應。觸發特殊行為的詞語稱為消息。
?
圖形程序:
或許有人認為對于初學者來說圖形程序包含了很多解決問題以外的細節,因而不太適合初學者。所以一Java作為學生的第一門語言的課程都會使用冷冰冰的控制臺程序,然而這是課程設計者絲毫不管學生的聲音的愚蠢行為,更多的同學渴望的是可以寫出易于交互的圖形程序。這點也是本書的開創性之舉。
7/3/201219:07
轉載于:https://www.cnblogs.com/bear-lab/archive/2013/02/13/2910677.html
總結
以上是生活随笔為你收集整理的Java概览(java语言编程艺术笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql获得当前时间 与 SQL 比较时间
- 下一篇: Effective Java学习笔记之第