物件導向的基本概念:
(1)物件
物件是人們要進行研究的任何事物,從最簡單的整數到複雜的飛機等均可看作物件,它不僅能表示具體的事物,還能表示抽象的規則、計畫或事件。
(2)物件的狀態和行為
物件具有狀態,乙個物件用資料值來描述它的狀態。
物件還有操作,用於改變物件的狀態,物件及其操作就是物件的行為。
物件實現了資料和操作的結合,使資料和操作封裝於物件的統一體中
(3)類
具有相同或相似性質的物件的抽象就是類。因此,物件的抽象是類,類的具體化就是物件,也可以說類的例項是物件。
類具有屬性,它是物件的狀態的抽象,用資料結構來描述類的屬性。
類具有操作,它是物件的行為的抽象,用操作名和實現該操作的方法來描述。
(4)類的結構
在客觀世界中有若干類,這些類之間有一定的結構關係。通常有兩種主要的結構關係,即一般--具體結構關係,整體--部分結構關係。
①一般——具體結構稱為分類結構,也可以說是「或」關係,或者是「is a」關係。
②整體——部分結構稱為組裝結構,它們之間的關係是一種「與」關係,或者是「has a」關係。
ood ( object-oriented design ):物件導向設計
ooa ( object-oriented analysis ):物件導向分析
oop( object oriented programming ):物件導向程式設計
類的九大成員:
字段( field )
屬性( property )
方法( method )
建構函式( constructor )
析構函式( destructor )
索引器( indexer )
事件( event )
運算子( operator )
巢狀類(nested class )
五種訪問修飾符:
private:僅在類的內部訪問
public:沒有訪問限制
internal:在同乙個程式集內訪問
protected:類和其派生類的內部訪問
protectedinternal:類和其派生類的內部或者同乙個程式集內訪問
字段:物件具有狀態,這個狀態是通過資料值來描述的
說的直白點就是乙個物件有用來描述它的文字,欄位就起到這個作用。比如:人這個物件,有性別、名字…用來對其進行具體的描述。
字段原則上是是私有的。為什麼呢?因為每個物件所對應的資料值並不是一樣的,為了更好的說明是那個物件就定義成私有的了。這裡提到私有這個詞就要注意上面的訪問修飾符了。所以原則上定義欄位用的訪問修飾符就是:private
屬性:上面的字段已經是私有的了,那麼在別的類中要訪問物件中的字段怎麼辦呢?如果沒有屬性如果想訪問的話就必須每個欄位要寫乙個相應的方法。在沒有屬性語法的語言裡通常的作法是使用物件方法來訪問屬性。或者理解為:屬性是對私有欄位的乙個簡單包裝,使用屬性而不是直接公開私有欄位的乙個好處就是在屬性的獲 取訪問器或設定訪問器裡加入額外的邏輯並不會為客戶端**帶來麻煩。
//字段
privatestring name;
//屬性作用一:讀寫設定
//注釋:get訪問器,讀操作;set訪問器,寫操作
public string name
getset
//字段
private int age;
//屬性作用二:驗證輸入資料的合法性和正確性
public int age
getset
//age= value;
if(value >= 0 && value <= 150)
age= value;
else throw new exception("年齡輸入不正確!");
屬性作用三:隱藏細節
建構函式和析構函式:
class test_gaozaohanshu
//首先要明白建構函式和析構函式是什麼?
//建構函式和析構函式分別管理物件的建立和釋放,負責物件的誕生和死亡的過程。當乙個物件誕生時,建構函式負責建立並初始化物件的內部環境,包括分配記憶體、建立內部物件和開啟相關的外部資源,等等。而當物件死亡時,析構函式負責關閉資源、釋放內部的物件和已分配的記憶體。
//建構函式
//建構函式是類中的一種特殊方法
//它的特殊性主要體現在如下幾方面:
//建構函式的方法名和類名相同;
//建構函式沒有返回型別;
//建構函式的主要作用是完成對類物件的初始化工作;
//在建立乙個類的新物件時,系統會自動呼叫該的建構函式初始化新物件;
//注意:非必要我們可以不向乙個類提供建構函式,編譯器會在後台建立乙個預設的建構函式。但如果提供了自定義的建構函式,編譯器就不會提供預設的建構函式。
//下面這個是系統預設的建構函式,也是最簡單的建構函式
public test_gaozaohanshu()
//有引數的建構函式
public test_gaozaohanshu(string str_test)
console.writeline(str_test);
//在例項化的時候就賦值給str_test在程式執行的時候就會將你輸入的內容寫在控制台應用程式上面
//建構函式的過載
//上面的兩個建構函式已經形成了建構函式的過載
//過載
//函式名稱相同
//在乙個類中
//引數類表不同(包括引數的個數,資料型別)
//建構函式的訪問修飾符
//public外,可以設定建構函式的修飾符為private及protected,若設定為private,則該類不能用這個建構函式來例項化;若設定為protected,則該類只能在派生類中用該建構函式例項化
//在建構函式中呼叫在這個類中的其他建構函式
public class usermodel
private string _userid;
private string _username;
public usermodel(string userid)//帶乙個引數的建構函式
_userid = userid;
public usermodel(string userid, string username)//帶兩個引數的建構函式
: this(userid)
_username = username;
//面的**中帶有兩個引數的建構函式後新增了: this(userid)**,這樣就實現了呼叫帶有乙個引數的建構函式的方法。
//這種方法叫建構函式的初始化器,:this表示呼叫本類的建構函式,userid為引數,這樣編譯器就會呼叫那個和這個引數最匹配的建構函式。
//那這兩個建構函式的執行順序是怎樣的?若按上面的**,則是先執行有乙個引數的建構函式,然後再執行有兩個引數的建構函式。
//呼叫基類中的建構函式
public class user
private string _userid;
public user(string userid)
_userid = userid;
public class adminuser : user
private string _username;
public adminuser(string userid, string username)
: base(userid)
_username = username;
//方法和呼叫本類內建構函式的方法基本相同,只是將this換成了base。需要注意的是,子類必須有訪問基類相應建構函式的許可權,即基類的建構函式設定了合適的修飾符
類和物件 構造析構函式
a.類和物件 1.關鍵字class表明正宣告乙個類,類中資料成員 屬性 和資料功能 行為 經過封裝,使得使用者通過外部介面訪問。2.類的封裝隱藏了實現細節,同時也保證了資料的安全性。3.只要類的外部介面不變,內部實現細節再怎麼修改,使用類庫的程式也不用修改。4.物件是類型別的變數。5.內聯成員函式 ...
C 物件導向(二) 構造 析構函式
析構函式 destructor 構造 析構順序 建構函式 也叫構造器 在物件建立的時候回自動呼叫,一般用於完成物件的初始化工作 函式名與類同名,無返回值,可以有引數,可以過載,可以有多個建構函式 struct person person int age intmain 一旦自定義了建構函式,必須用其...
python物件導向與構造構析函式
程式設計正規化 程式設計范型 程式設計正規化或程式設計法 範即模範 典範之意,正規化即模式 方法 是一類典型的程式設計風格,是指從事軟體工程的一類典型的風格 可以對照方法學 如 函式式程式設計 程式程式設計 物件導向程式設計 命令式程式設計等等為不同的程式設計范型。面向過程程式設計 面向過程 pro...