面向對象的編程學習筆記

来源:http://www.cnblogs.com/MaFeng0213/archive/2016/08/10/5756408.html
-Advertisement-
Play Games

面向對象的編程區別於面向過程的編程,其操作的單元是類,而面向過程操作的單元是方法。即面向過程的編程是由一個又一個的方法組成的。而面向對象的編程是由一個又一個類組成的。相對於面向過程,面向對象的代碼復用性更好,代碼的隱蔽性更高,並且更加符合人類思維的方式。 ...


  面向對象的編程區別於面向過程的編程,其操作的單元是類,而面向過程操作的單元是方法。即面向過程的編程是由一個又一個的方法組成的。而面向對象的編程是由一個又一個類組成的。相對於面向過程,面向對象的代碼復用性更好,代碼的隱蔽性更高,並且更加符合人類思維的方式。

  面向對象的最基礎的單元就是類。類(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,它也就繼承了由ShapeObject定義的核心功能。同時它還有屬於自己獨特的功能。

  區別於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.多態性

  同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果,這就是多態性。

  實際上就是同一個類型的實例調用“相同”的方法,產生的結果是不同的。這裡的“相同”打上雙引號是因為這裡的相同的方法僅僅是看上去相同的方法,實際上它們調用的方法是不同的。

  CirCleRectangle都調用Draw()的時候,看似這兩個實例調用了“相同”的方法,但是實際上,它們是調用各自的Draw()方法。所以只是看似相同,實際上是不同的方法。並且產生了不同的執行結果,這就是多態性。

  同時,這裡講的多態性也只是簡單的多態性。多態性用來當基類規定好一些實現的方法時,子類只需要重寫這些方法就好。這樣增強了代碼的復用性。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ASP.NET MVC Razor語法 ...
  • 前言 前一篇淺顯的述說了一下c#介面的作用,並用了一個不怎麼好的例子述說了一下。時隔一天,在看完大家的評論後我在論壇中查看了很多前輩們對c#介面的描述,發現大家對例子的說明不是太容易讓我們這些新人理解。接下來,就用我這個新手的角度再來闡述一遍。哈哈哈哈…… 理論改編故事 A公司在經過“百獸齊鳴”的事 ...
  • 什麼叫HTTP/2? HTTP 2.0即超文本傳輸協議 2.0,是下一代HTTP協議。是由互聯網工程任務組(IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小組進行開發。是自1999年http1.1 發佈後的首個更新。HTTP 2.0在2013年8月 ...
  • 把Bing搜索的背景圖片設置為自己網站的背景,實現背景及資訊的每日更新 效果圖如下: 理一下思路,首先我們要抓取Bing的每日圖片及最新資訊,然後保存圖片及信息到本地,最後顯示圖片及資訊到網站首頁。 第一步:抓取圖片 首先打開Bing,然後使用開發者工具 F12,點擊審查網頁元素,分析HTML結構如 ...
  • 參考文章:http://blog.csdn.net/zhensoft163/article/details/7174661 我用到了這一種方式: 感覺又學到了新知識。 ...
  • 恢復內容開始 想做一個WPF 文字豎排 類似上圖。用在TabItem的header上面。 第一種挺無聊的 2.wpf 裝換器 其實就是加換行符 3.最後我發現這樣做的效果最好 文字間距 一般 http://zhidao.baidu.com/link?url=5S37v1FFQKvwf0x5LQLqL ...
  • 第一種方式: 這樣就可以彈出框了,這種方式適合刪除和查詢操作,支持當前視窗跳轉頁面。 第二種方式: 這種方式既可以彈出提示,還可以在當前視窗的父窗體跳轉頁面或者刷新頁面。 比如說這種情況: 如果想在編輯頁面彈出提示併在編輯頁面跳轉到另一個頁面,或者保持當前編輯頁面不跳轉,那就使用第一種方式。 如果想 ...
  • 在mvc-bootstrap中使用時@Scripts.Render("~/bundles/jqueryval")加上驗證的js ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...