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