06 類別與物件. 06 類別與物件 6.1 類別與物件 目前的程式設計主流是物件導向 (OOP),Visual C# 已提供完整的物件導向功能。在物件導向設計裡,物件可以被封裝 ( 保護) 和繼承 ( 重複使用)。因為物件的封裝會使物件受到保護,要存取物件必須透過屬性 (Property)、方法.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

第6章 類別與物件 – 封裝 6-1 物件導向的基礎 6-2 Java的類別與物件 – 封裝 6-3 類別的建構子
大葉大學 指導教授: 黃鈴玲 學生: 林慶南(工業工程與科技管理所)
Introduction to C Programming
計算機程式語言實習課.
08 CSS 基本語法 8-1 CSS 的演進 8-2 CSS 樣式規則與選擇器 8-3 連結HTML 文件與CSS 樣式表
第13章 物件導向與例外處理 13-1 物件導向的基礎 13-2 類別與物件 13-3 類別的繼承 13-4 PHP的例外處理
11 繼承類別 11.4 建立者與破壞者 單一建立者與破壞者 11-20
Project 2 JMVC code tracing
Chapter 5 迴圈.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
LINQ 建國科技大學 資管系 饒瑞佶.
Java簡介.
JAVA 程式設計與資料結構 第七章 繼承與Interface.
Managing Inheritance Lecturer:曾學文.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
Google Data API Spreadsheet
Managing Inheritance Lecturer:楊昌樺.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
R教學 安裝RStudio 羅琪老師.
ASP.NET基本設計與操作 建國科技大學 資管系 饒瑞佶 2007年.
安裝JDK 安裝Eclipse Eclipse 中文化
程式設計(二) 進階類別 郭文真 Sabrina Kuo.
Visual Basic 物件導向程式設計簡介.
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Topic Introduction—RMI
第一單元 建立java 程式.
VS.NET 2003 IDE.
PLC-GPPW軟體使用教學 授課教師:張祖烈
Ch20. 計算器 (Mac 版本).
第7章 繼承/多型/介面 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
第 19 章 XML記憶體執行模式.
|07 函數.
精彩Java 2程式設計 <吳逸賢、吳目誠 編著>
網頁程式概論 建國科技大學資管系 饒瑞佶 2015/9 V1 2016/4 V2 2016/9 V3.
物件導向程式設計 參考書目: 1. 洪維恩,C++ 教學手冊 第三版,旗標出版圖書公司。 2. 陳錦揮,Java 初學指引,博碩文化 3
GridView.
GridView操作 (II).
LINQ資料查詢技術.
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
樣版.
類別、物件與方法 的設計運用.
FTP使用教學 簡介: 軟體名稱:FileZilla 軟體性質:Freeware 版本: 繁體中文版
MicroSim pspice.
物件封裝 學習目標 瞭解封裝觀念與實現 定義類別、建構式與方法 使用方法重載與不定長度引數 瞭解static成員.
Video 影像 (VideoPlayer 影像播放器、Camcorder 錄影機) 靜宜大學資管系 楊子青
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
OOP9 類別Class.
函數應用(二)與自定函數.
陣列與結構.
12 虛擬函數 12.1 多載與超載 12-2 多載函數 12-2 超載函數 虛擬函數 12-6 同名異式 12-7
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
Activity的生命週期: 播放音樂與影片 靜宜大學資管系 楊子青
電子郵件簡報.
What is “this”? 在物件導向程式設計中,類別的定義就是在說明如果創建了“這個物件”的話,它會具有那些屬性與功能,以及這些功能是如何實現的。 而所謂的“這個物件”就以 this 來表示。 當我們在JavaScript與jQuery中寫 script 程式(函式)時,“誰”呼叫這個函式,這個“誰”就是該函式中所謂的.
多國語系 建國科技大學 資管系 饒瑞佶.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
SQLite資料庫 靜宜大學資管系 楊子青.
Chapter 4 Multi-Threads (多執行緒).
13 繼承類別 13.1 繼承概論 基礎類別與衍生類別 繼承型式 13-2
Unix指令4-文字編輯與程式撰寫.
Develop and Build Drives by Visual C++ IDE
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

06 類別與物件

6.1 類別與物件 目前的程式設計主流是物件導向 (OOP),Visual C# 已提供完整的物件導向功能。在物件導向設計裡,物件可以被封裝 ( 保護) 和繼承 ( 重複使用)。因為物件的封裝會使物件受到保護,要存取物件必須透過屬性 (Property)、方法 (Method) 和事件(Event)。物件的封裝如同日常生活中的 ATM 提款機,其提款必須透過正確的方式才能提款 ( 輸入帳號和密碼),而不可用不當破壞方式提款。

6.1.1 類別與物件的關係 物件 (Object) 可說是一件東西,物件具有屬性 (Property)、方法(Method) 以及觸發的事件 (Event)。例如:David ( 物件) 代表一個人 ( 類別),David 的身高是 183 公分 ( 屬性),David 會跑步 ( 方法)。如果用程式表示如下: 類別 (Class) 則是一個物件的設計藍圖,而物件則是由該類別所建立出來的實體。例如:建築師設計了一張房子的設計圖 ( 類別),工程人員可以根據這張設計圖,蓋出了很多棟的房子 ( 物件) 來。

6.1.2 定義類別 要自行定義類別必須使用「public class 類別名稱{ }」語法,public 也可以省略,並依需要在類別中定義類別成員 ( 包括欄位、屬性、方法和事件等),其中欄位相當於變數或常數,可以直接存取,而屬性則必須透過 get 或 set 指令才能存取。 定義類別的語法為:

存取修飾詞中,資料成員若宣告為 public 代表該資料為共用型態,其存取沒有限制,即允許目前應用程式中的所有類別均可存取。若宣告為 private 代表私有型態,只允許在類別內部使用。而protected 則可以在類別內部以及其子類別中使用,若省略關鍵字,系統的預設值為 private。 「欄位」相當於變數或常數,用以儲存物件的資料,可用一般的資料型別或其他的類別來宣告。「屬性」可以保護物件欄位,屬性的建立較為複雜,將在下一節中詳細說明。 「方法」用以表示該類別所擁有的行為。

6.1.3 建立物件

Visual C# 系統提供了許多內建類別,大部份的情況,設計者都是使用 Visual C# 所提供的內建類別。例如:在 Windows Form 應用程式模式中要使用 .NET Framework 內建的 Button 類別來產生物件的實體 ( 主控台應用程式模式中不能使用)

6.1.4 使用物件成員

6.1.5 欄位的限制 如果將類別中的「欄位」成員宣告為 public 共用型態,在任何地方均可存取,使用上非常方便,然而其特性為變數或常數,所以只能單純的設定或讀取其欄位值,無法以程式對欄位做各種處理。例如:設計駕駛練習的程式中,希望將速度限制在100 公里以內,若使用欄位就無法在事前檢查欄位值而加以限定。

6.2 屬性 屬性 (property) 是一個具有保護的變數,可以保護物件的正當存取,屬性具有讀取和寫入的特性,用以取得或設定一個物件的屬性值。由於屬性的讀取和寫入都是程式區塊,所以可以在讀取和寫入時撰寫程式碼對屬性值做各種處理。

6.2.1 屬性存取

6.2.2 唯讀屬性 只有 get 區塊而沒有 set 區塊的屬性稱為「唯讀屬性 (ReadOnly)」。唯讀屬性只能被讀取,不能設定其屬性值。例如:

6.2.3 唯寫屬性 同樣的,只有 set 區塊而沒有 get 區塊的屬性就變成唯寫屬性 (WriteOnly),唯寫屬性只能設定屬性值,而不能讀取屬性值。 例如:

6.3 方法 上一章建立方法時曾提及,加上 static 關鍵字宣告的方法,稱為為靜態方法,而省略 static 關鍵字宣告的方法,則為案例方法 (instance method)。靜態方法已在上一章詳細說明,此處僅就案例方法做介紹,例如建立計算矩形面積的 GetArea 案例方法:

6.3.1 呼叫案例方法 在同一類別中宣告的其他案例方法,可以直接呼叫此案例方法 ( 但同類別的靜態方法不可以呼叫同類別的案例方法)。與靜態方法最大不同是:案例方法在不同類別中則必須先建立物件,再以「物件. 案例方法」才能呼叫此案例方法。

6.3.2 多載 多載 (Overload) 是名稱相同但參數不同的方法。類別的方法中,允許使用多個相同名稱但參數資料型別不同或參數個數不同的方法,Visual C# 會根據所傳入的參數執行正確的方法,所以多載實際上是以參數來區分要執行那一個方法。

6.3.3 建構式 類別中有一個特殊的方法,稱為建構式 (Constructor),其名稱和類別名稱相同。當使用者建立新的物件時,會自動執行此建構式。利用這個特性,建構式常用來做為物件的初始化動作 ( 例如:設定變數初始值、開啟檔案、配置記憶體等⋯⋯)。 建構式不必傳回返回值,所以不必使用 void 宣告。建構式是一種方法,所以建構式也可以多載,如果沒有宣告建構式,Visual C# 編譯器會自動在執行階段建立預設為public 的建構式,但不會產生程式碼。 例如為 Car 類別建立一個自訂的建構式,可在建立物件時設定速度初始值:

6.3.4 解構式 當物件結束時會執行物件的解構式 (Destructor),通常我們會在解構式中處理如檔案關閉、記憶體回收的動作。由於現在 .NET Framework 會由 CLR 自動執行記憶體回收的動作,且加上解構式會影響執行效能,所以除非必要,建議不要使用解構式。 解構式的名稱和類別名稱相同,但前面必須加上「~」符號,例如為 Car 類別建立一個自訂的解構式,顯示物件已釋放的訊息:

6.4 靜態成員 在 6.1.2 節定義類別時,可用修飾詞 public、private 或 protected 定義不同存取範圍的類別成員,此外,還有一個 static 修飾詞用以宣告成員為靜態成員。

靜態成員是以「靜態類別. 靜態成員」來執行 ( 如Student 靜態成員是以「靜態類別. 靜態成員」來執行 ( 如Student.Name),且即使未用new 建立物件亦可直接使用類別中的靜態成員。靜態成員在記憶中只有儲存一份。

6.5 繼承 繼承 (Inherit) 是物件導向程式設計中非常重要的機制。繼承是從既有的類別建立新的類別,繼承後的類別稱為為子類別 (Child Class) 或衍生類別 (Derived Class),而被繼承的類別稱為為父類別 (Parent Class) 或基底類別 (Base Class)。

6.5.1 子類別的建立 要建立子類別非常簡單,只要在子類別的名稱後面加入冒號並指定父類別即可,例如要建立子類別 B 繼承父類別 A 的語法為: 子類別會繼承父類別中宣告為 public 及 protected 的成員 ( 包括欄位、屬性、方法和事件), private 的成員雖然可以繼承,但不能存取。

6.5.2 子類別的應用 繼承最大的好處是可以由已存在的類別來擴充自己所需的功能,原來已設計好的部分可以直接使用,設計者只需專心於擴充的部分即可。例如:若已存在一個計算長方形面積的類別,現在需要計算三角形面積,由於兩者的計算資料都是寬與高,可以直接繼承此長方形面積類別,新增一個計算三角形面積的公式即可。完成的新類別,不但可以計算三角形面積,也可以計算長方形面積,真是一舉兩得。

6.5.3 子類別多載 如果要在子類別新增與父類別相同名稱但參數資料型別不同或參數個數不同的方法多載,可直接在子類別中建立方法多載。當呼叫子類別的方法時,Visual C# 會根據所傳入的參數執行正確的方法。

6.5.4 保留父類別的多載方法 如果子類別的多載方法會使用到原有父類別多載方法功能,想在子類別中使用父類別的多載方法,並在子類別中擴充新的功能,而不必重新撰寫父類別原來就具有的功能,如此可以快速建立功能強大的多載方法。 要保留父類別的多載方法,只要在子類別的多載方法中使用 base 代替父類別名稱,即可在子類別中使用父類別的多載方法。

6.6 覆寫及遮蔽 多載是以參數來區別多個方法的不同,若是要在子類別中建立參數和原來父類別的參數完全相同的方法(即相同參數的多載),就必須在子類別中以覆寫或遮蔽方式建立方法。 6.6.1 覆寫 覆寫 (Override) 是在子類別中以相同名稱成員取代原來父類別中的成員 ( 包括屬性及方法),如果覆寫的是「方法」,則子類別參數必須和原來父類別的參數完全相同。 要完成覆寫必須在父類別的屬性及方法加入「virtual」關鍵字表示此為虛擬屬性及方法允許被覆寫,同時也要在子類別加上「override」進行覆寫。如果子類別中沒有加入 override 關鍵字,或子類別中方法的參數和父類別中的參數不同,將會產生錯誤。例如要以子類別 B 的 Method1 方法覆寫父類別 A 的 Method1 方法:

6.6.2 遮蔽 遮蔽 (Shadow) 則沒有父類別必須先做 virtual 宣告的限制,只要在子類別的方法上加入 new 關鍵字即可取代父類別中相同參數的方法。遮蔽相當於「強制覆寫」,遮蔽之後原有父類別的方法仍然可以在父類別使用。

6.7 綜合練習 物件的精神主要是封裝、繼承和多載,最後舉一個精簡的例子,將本章所有物件的關念及用法全部融合在內。