設計模式之物件導向

2021-06-22 01:29:49 字數 4594 閱讀 1785

1物件

是乙個自包含的實體,用一組可識別的特性和行為來標識

2

具有相同屬性和功能的物件的抽象的集合

3類的例項化

例項,就是乙個真實的物件。例項化就是建立物件的過程,用

new關鍵字來建立

4構造方法

又叫建構函式,其實就是對類進行初始化。構造方法與類同名,無返回值,也不需要

void,

在new

(類例項化)時候呼叫

所有類都有構造方法,如果你不編碼則系統預設生成空的構造方法;若你有定義的構造方法,那麼預設的構造方法就會失效了

5方法過載

提供了建立同名的多個方法的能力,但這些方法需使用不同的引數型別

好處:可以在不改變原來方法的基礎上,新增功能

注意:方法名相同,但引數型別或個數必須要有所不同

6屬性

屬性是乙個方法或一對方法,但在呼叫它的**來看,它是乙個字段,即屬性適合於以字段的方式使用方法呼叫的場合,

欄位是儲存類要滿足其設計所需要的資料,欄位是與類相關的變數

修飾符:

public

:公有,允許其他任何類來訪問

private

:私有,只允許同乙個類中的成員訪問

屬性的兩個方法

get:

訪問器返回與宣告的屬性相同的資料型別,表示的意思是呼叫時可以得到內部欄位的值或引用

set:

訪問器沒有顯示設定引數,但它有乙個隱式引數,用關鍵字

value

表示,它的作用是呼叫屬性時可以給內部的字段或引用賦值

注意:變數私有的叫字段,公有的叫屬性

7封裝

每個物件都包含它能進行操作所需的所有資訊,這個特性稱為封裝,因此物件不必依賴其他物件來完成自己的操作

封裝的好處: 第

一、良好的封裝可以減少耦合 第

二、類內部的實現可以自由地修改 第

三、類具有清晰的對外介面

8繼承

物件的繼承代表了一種「

is-a

」的關係,如果兩個物件a和

b,可以描述為『b是

a』,則表明

b可以繼承a

繼承還可以理解為對被繼承者的特殊化,

繼承的工作方式是,定義父類和子類,或叫做基類和派生類

重點,子類繼承父類 第

一、子類擁有父類非

private

的屬性和功能 第

二、子類具有自己的屬性和功能,即子類可以擴充套件父類沒有的屬性和功能 第

三、子類還可以以自己的方式實現父類的功能(方法重寫

protected

:保護型別,對子類公開,但不對其他類公開

注意:構造方法不能被繼承,只能被呼叫。呼叫父類的成員,可以用關鍵字

base

優點:所有的公共部分都在父類,使得**得到了共享,這就避免了重複,另外,繼承可以使得修改或擴充套件繼承而來的實現都比較容易

缺點:父類變,子類不得不變。繼承會破壞封裝,父類實現細節暴露給子類,增加了耦合性。因此,只能在「

is-a

」關係時才適用,而「

has-a

」關係時,不適用

9多型

表示不同的物件可以執行相同的動作,但要通過它們自己的實現**來執行。

注意: 第

一、子類以父類的身份出現 第

二、子類在工作時以自己的方式來實現 第

三、子類以父類的身份出現,子類特有的屬性和方法不可以使用

虛方法:為了使子類的例項完全接替來自父類的類成員,父類必須將該成員宣告為虛擬的。通過在返回值型別前加關鍵字

virtual實現

注:除了字段不能虛擬之外,其他都能虛擬

方法重寫:子類可以選擇

override

關鍵字,將父類實現替換為它自己的實現,這就是方法重寫

注:物件的宣告必須是父類,例項化的物件必須是子類,這才能實現多型

多型的原理是:當方法被呼叫時,無論物件是否被轉換為其父類,都只有位於物件繼承鏈最末端的方法實現會被呼叫。也就是說,虛方法是按照其執行時型別而非編譯時型別進行動態繫結呼叫的

10抽象類和抽象方法

c#允許把類和方法宣告為

abstract

,即抽象類和抽象方法

抽象類 第

一、抽象類不能例項化 第

二、抽象方法是必須被子類重寫的方法 第

三、如果類包含抽象方法,那麼類就必須定義為抽象類,不論是否還包含其他一般方法

抽象類通常代表乙個抽象概念,它提供乙個繼承的出發點,當設計乙個新的抽象類時,一定是用來繼承的,所以在乙個以繼承關係形成的登記結構裡面,樹葉節點應當是具體類,而樹枝節點應當是抽象類

我們要讓抽象類有盡可能多的共同**,盡可能少的資料

11介面

介面是把隱式公共方法和屬性組合起來,以封裝特定功能的乙個集合。一旦類實現了介面,類就可以支援介面所指定的所有屬性和成員。宣告介面與宣告抽象類在語法上完全相同,但不允許提供介面中任何成員的執行方式。 注:

1、實現介面必須要實現介面中的所有方法和屬性 2

、乙個類可以支援多個介面,多個類也可以支援相同的介面 3

、介面用

inte***ce

宣告,而不是

class

。介面名稱前要加「

i」,介面中的方法或屬性前面不能有修飾符、方法沒有方法體

抽象類與介面區別: 1

、類是對物件的抽象,抽象類是對類整體(字段、屬性、方法)的抽象;介面是對類的區域性(行為)的抽象 2

、如果行為跨越不同類的物件,可使用介面;而對於一些相似的類物件,用繼承抽象類。(注:實現介面和繼承抽象類並不衝突) 3

、從設計角度講,抽象類是從子類中發現了公共的東西,泛化出父類,然後子類繼承父類,而介面是根本不知子類的存在,方法如何實現還不確認,預先定義。即抽象類是自底而上抽象出來的,而介面是自頂向下設計出來的。

12集合

.net framework提供了用於資料儲存和檢測的專用類,統稱為集合

集合提供堆疊、佇列、列表、哈氏表的支援。

大多數集合實現相同的介面。

優點: 1

、隨著元素新增到集合中,容量會根據需要通過重新分配自動增加;使用整數索引可以訪問此集合中的元素,此集合中的索引從零開始。可 2

、以隨意地新增、插入或移除某一範圍的元素,始終保證元素的連續性,比陣列方便

缺點: 1

、不是型別安全的,容易造成型別不匹配 2

、如果有值型別,那就要進行裝箱拆箱,帶來了很大的效能損耗

裝箱:把值型別打包到

object

引用型別的乙個例項中 如:

int i=123;    objecto=(object) i  ;     //boxing

拆箱:從物件中提取值型別 如:

o=123;       i=(int)  o;      //unboxing

相對於簡單的賦值而言,裝箱和拆箱過程需要進行大量的計算。對值型別進行裝箱時,必須分配並構造乙個全新的物件。其次,拆箱所需大的強制轉換也需要進行大量的計算。

13泛型

泛型是具有佔位符(型別引數)的類、結構、介面和方法,這些佔位符是類、結構、介面和方法所儲存和使用的乙個或多個型別的佔位符。

泛型集合類可以將型別引數用作它所儲存的物件的型別的佔位符;型別引數作為其字段的型別和其方法的引數型別出現

需要的命名空間:

system.collections.generic

優點: 1

、獲得型別安全而不需要從基集合型別派生並實現型別特定的成員。 2

、如果集合元素為值型別,因為泛型不必對元素進行裝箱,所以比不用泛型更能充分利用資源

14委託與事件

委託是對函式的封裝,可以當做給方法的特徵指定乙個名稱。

事件則是委託的一種特殊形式,當發生有意義的事情時,事件物件處理通知過程

委託物件用

delegate

宣告。委託是一種引用方法的型別。一旦為委託分配了方法,委託將與該方法具有完全相同的行為。

事件用event

宣告。事件是說在發生其他類或物件關注的事情時,類或物件可通過事件通知它們

設計模式之物件導向

介面邏輯與業務邏輯分離。使用繼承與多型提高擴充套件性和復用性。對於專案剛開始的時候,可以不進行抽象,但是如果需求改變的時候,需要建立抽象來隔離以後可能發生的同類變化,也就是說對於程式的改動,是通過增加新 而不是修改舊 來完成。對於乙個類來說,應該只有乙個引起它變化的原因。職責過多會導致高度耦合。對於...

大話設計模式之物件導向基礎

a.2 類與例項 物件是乙個自包含的實體,用一組可識別的特性和行為來標識。物件導向程式設計 object oriented programming 類就是具有相同的屬性和功能的物件的抽象的集合。例項,就是乙個真實的物件。例項化就是建立物件的過程,使用new關鍵字來建立。a.3 構造方法 構造方法,又...

設計模式 之物件導向基礎一

總是在總是要等到睡覺前 才知道功課只做了一點點。總是要等到考試後 才知道該念的書都沒有念。總是要等到學下乙個專案的時候才知道上乙個專案根本就沒有學完。學到設計模式的時候,才明白師傅當時的苦心。原來基礎打不好只能在後邊的學習過程中費時間。不過還好的是我們還有這個機會不斷的學習。不斷地在後來的學習中反覆...