第一章 設計模式概述
設計模式能夠使解決方案既優雅簡單,又可復用。設計模式僅僅是一些項目之間和程序員之間面向對象代碼的簡便方法,設計模式背后的思想很簡單:對通用的對象間的相互作用方式進行記錄和編目(程序員經常發現這些對象見的相互終于哦用方式很有用)。換言之,設計模式描述了對象如何進行通信才能不牽扯相互的數據模式和方法,保持這種獨立性一直是一個好的面向對象程序設計的目標。從而可以實現代碼的可復用性。
1. 設計模式
設計模式是對讀者經常遇到的設計問題的可再現的解決方案。
設計模式建立了一系列描述如何完成軟件開發領域中特定任務的規則。
設計模式更關注于復用和重復出現的結構設計方案,而框架注重于具體的設計和實現。
模式提出了一個發生在特定設計環境中的可重復出現的設計問題,并提供了解決方案
模式識別并確定類和實例層次上或組件層次上的抽象關系
設計模式有三種類型
創建型模式是創建對象而不是直接實例化對象,這會使程序在判斷給定情況下創建那一個對象時更靈活。
結構型模式可以將一組對象組合成更大的結構,例如復雜的用戶界面和報表數據
行為型模式定義系統內對象間的通信,以及復雜程序中的流程控制
2. 關于面向對象方法
封裝和繼承能讓程序員達到分離類的目的,一個繼承父類的類能訪問父類所有方法和所有非私有變量,但是如果一個功能完整的類開始繼承層次結構,可能過多的限制住了自己,也會給特定的實現帶去累贅,設計模式建議遵循下列原則:針對接口編程,而不是針對實現編程。即在任何類層次結構的頂端,定義的是一個抽象類或一個接口,他沒有實現方法,但是定義了該類需要支持的方法,這樣在所有的派生類中,就會有更大的自由度去實現這些方法,能最大限度地滿足你的要求。
對象組合,這是一種可以包含其他對象的對象結構,即把幾個對象封裝在另一個對象中,當編寫比較復雜的程序,對象組合具有一些優勢,新的對象擁有一個最適合于要完成的目標的接口,而不是擁有父類中的所有方法,說明了編程的第二個原則:優先使用對象組合,而不是繼承。
C#基礎知識
C#、java和vb的區別
C#和Java都是區別大小寫的;C#中的每一條語句都已分號結束;而vb是不區分大小寫的,
C#中的修飾符const的含義是:被命名的值是一個常數,不能更改。
數據類型
基本數據類型的長度與計算機或操作系統的類型無關。
寬度窄的數據類型可以直接賦給較寬的數據類型,并能自動轉化為新類型。
可以通過強制轉化把較寬的類型縮減成較窄的類型,這種轉化需要把數據類型的名稱放在圓括號內。
Java和c#的布爾變量只能接受保留字true和false所表示的值,與c和c++不同,不能將數值型數據賦給布爾型變量,也不能在布爾類型和其他數據類型之間轉化。
數值與字符串間的轉化,可以使用Convert類的方法實現數值轉化成字符串或將字符串轉化成數值。例如:
String s=Convert.ToString(x);
Float y=Convert.ToSingle(s); //single代表一個單精度浮點數
數值型對象也提供了各種格式話方法類指定小數位數;
Float x=12.3453234f;
String s=x.ToString(“###.###”); //gives 12.345
注意最后一位進行四舍五入
C#和java允許在一條語句里聲明同一類型的多個變量
數值型常量,任何數如果沒有小數部分的話,就自動為整數類型,如果有小數部分 ,就自動為double類型,如果想指定成不同的類型,可以使用各種前綴和后綴字符。
C#中有三個保留字常量,true、false和null,null表示一個對象變量還沒有 指定任何對象。
字符常量
用但引號把字符括起來表示字符常量,轉意字符和c、java中約定的一樣。
C#和java的區別
1. 許多系統對象方法都有相同的方法名,只是在大小寫形式上有區別
2. C#不提供throws關鍵字,該關鍵字使編譯器檢查你是否鋪貨了一個方法拋出的異常。
3. C#對于布局管理器有更多的限制,因為他是以windows系統為中心的,大多數時候采用的圖形元素的絕對位置。
4. C#允許運算符重載
5. C#引進了代理和索引器
6. C#有枚舉類型
7. C#有不安全模式,在這種模式下可以使用指針
8. 必須專門聲明一個方法能被覆蓋及一個方法能覆蓋另一個方法
9. 不能通過聲明來區別繼承和接口實現,他們的聲明方式是一樣的
10. Switch語句允許使用字符串變量,如果變量沒有被匹配,必須有一個默認情況,否則會出現錯誤,break語句是必須的。
11. 布爾值變量類型在C#中拼為“bool”,而java中拼為“boolean”
C#和C的區別
1. C#通常不能使用指針
2. 可以在一個方法里的任何位置聲明變量,不必把聲明語句放在方法的頂端
3. 使用一個對象前,不一定要聲明它,可以在用到的時候在定義
4. C#對結構體類型偶那個的定義有些不同,他根本不支持聯合類型
5. C#有枚舉類型,允許一系列被命名的量(如顏色或一周里的每一天)賦值為連續的數值,但是語法有些不同。
6. C#沒有位域,也就是說,變量至少要占用一個字節的存儲空間
7. C#不支持變長參數列表,必須針對參數值和類型定義一個方法,然而C#語句允許函數的最后一個參數為可變參數數組
8. C#引入了代理和索引器的思想,這些在其他流行的語言中是沒有的。
用C#編寫windows程序
1. C#中的對象
C#中的任何食物都被看做是對象,對象包含數據并具有操作數據的方法,
整型變量、浮點型變量和雙精度型變量也是對象,他們也具有方法
注意:
數值類型的轉化是用方法而不是外部函數完成的。在把一個數值格式化成一個特定的字符串時,每種數值類型都提供了一個格式化方法。
2. 受管語言和垃圾自動收集
C#和VB.NET都是受管語言,有兩個含義:一個是兩者被編譯成中間的底層語言,都使用通用語言運行時(Common Language Runtime,CLR)執行編譯后的代碼,或者進一步編譯這些代碼。另一方面,受管語言都是垃圾自動收集的,垃圾自動收集語言負責師傅拿個不用的內存,垃圾收集系統一旦檢測到變量、數組或對象不在被引用,就把相應的內存空間釋放回系統,在大多數情況下,根本不用考慮內存的分配與釋放問題。