面向对象的编程学习笔记
面向?qū)ο蟮木幊虆^(qū)別于面向過程的編程,其操作的單元是類,而面向過程操作的單元是方法。即面向過程的編程是由一個又一個的方法組成的。而面向?qū)ο蟮木幊淌怯梢粋€又一個類組成的。相對于面向過程,面向?qū)ο蟮拇a復(fù)用性更好,代碼的隱蔽性更高,并且更加符合人類思維的方式。
面向?qū)ο蟮淖罨A(chǔ)的單元就是類。類(Class)是一個抽象的概念,是對某一類事物的描述。例如:貓,狗,人。而對象(object)就是類的實例化。即符合類描述的具體的單個成員。例如我就是Person類實例化的對象。我是符合人描述的具體的單個成員。在創(chuàng)造對象的過程就叫做類的實例化。
類包含描述某種事物的狀態(tài)(例如姓名,性別)和行為(唱歌,跳舞,寫代碼)。
在.net平臺而言,最基本的編程結(jié)構(gòu)就是類類型。正式的說,類是由字段數(shù)據(jù)(通常叫做成員變量)以及操作這個數(shù)據(jù)的成員(如構(gòu)造函數(shù),屬性,方法,事件等)所構(gòu)成的自定義類型。其中字段數(shù)據(jù)表示狀態(tài)。
Class Person {//表示自身狀態(tài)的字段String Name;String Sex;//表示行為的方法Public void Sing();Public void Dance();Public void Coding(); }面向?qū)ο缶幊?#xff08;OOP)的三個特性:
1.封裝性
封裝是將對象用戶(用你編寫的類進行編程的人)不必了解的實現(xiàn)細節(jié)隱藏起來的一種語言能力。
1 //DatabaseReader封裝了數(shù)據(jù)庫操作的細節(jié) 2 DatabaseReader dbReader = new DatabaseReader(); 3 dbReader.Open(@"C:\AutoLot.mdb");和封裝編程邏輯緊密相關(guān)的概念就是數(shù)據(jù)的保護概念。理想情況下對象的狀態(tài)數(shù)據(jù)都應(yīng)該是隱蔽的,外部不能直接的訪問,只能通過訪問函數(shù)來進行“有禮貌的訪問”。
2.繼承性
繼承指的是基于已有的類型來創(chuàng)建心類的語言能力。通過繼承,子類可以繼承基類(或稱父類)的核心功能,并且擴展了基類的行為。
從圖中我們可以看出“矩形是圖形,圖形是對象”這就構(gòu)建成了一種“is - a”的關(guān)系,Is- a關(guān)系又稱為繼承關(guān)系。
我們會認為Shape定義了許多派生類都公有的成員(顏色,高度)。由于Rectangle擴展了Shape,它也就繼承了由Shape和Object定義的核心功能。同時它還有屬于自己獨特的功能。
區(qū)別于C++,C#不支持多重繼承的概念(所以引入了接口的概念)繼承的一個很大的優(yōu)點就是提高了代碼的復(fù)用性,OOP中還有另外的一種形式的代碼重用:包含/委托模型(has-a關(guān)系,也成聚合)這種重用的形式不是用來建立父類和子類關(guān)系的。它意味著,一個類可以定義另一個類的成員變量,并向?qū)ο笥脩糸g接的公開它的功能。
例如構(gòu)建一個汽車(Car)的類,想表達一輛車中有一個(has-a)收音機的概念。讓Car繼承Radio類顯然是不符合邏輯的。需要的是兩個類一起合作,其中Car類創(chuàng)建并公開了Radio的功能。
?
1 Class Car 2 { 3 Radio _Radio; 4 } 5 Class Radic 6 { 7 8 }?
3.多態(tài)性
同一操作作用于不同的對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果,這就是多態(tài)性。
實際上就是同一個類型的實例調(diào)用“相同”的方法,產(chǎn)生的結(jié)果是不同的。這里的“相同”打上雙引號是因為這里的相同的方法僅僅是看上去相同的方法,實際上它們調(diào)用的方法是不同的。
當(dāng)CirCle和Rectangle都調(diào)用Draw()的時候,看似這兩個實例調(diào)用了“相同”的方法,但是實際上,它們是調(diào)用各自的Draw()方法。所以只是看似相同,實際上是不同的方法。并且產(chǎn)生了不同的執(zhí)行結(jié)果,這就是多態(tài)性。
同時,這里講的多態(tài)性也只是簡單的多態(tài)性。多態(tài)性用來當(dāng)基類規(guī)定好一些實現(xiàn)的方法時,子類只需要重寫這些方法就好。這樣增強了代碼的復(fù)用性。
?
轉(zhuǎn)載于:https://www.cnblogs.com/MaFeng0213/p/5756408.html
總結(jié)
以上是生活随笔為你收集整理的面向对象的编程学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Java学习]Striing Str
- 下一篇: java基础 关于转换流