物件導向與事件驅動

Similar documents
透過.NET C# 程式實作 OO 建國科技大學資管系饒瑞佶

運算子多載 Operator Overloading

Microsoft Word - 物件導向編程精要.doc

投影片 1

(procedure-oriented)?? 2

Microsoft Word - ch04三校.doc

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

建立Android新專案

Microsoft PowerPoint - 13_ClassAndObj.ppt

投影片 1

Microsoft Word - 投影片ch11

The Embedded computing platform

25.( 0 在 進 行 水 溫 與 溶 解 量 的 實 驗 時, 每 一 匙 糖 都 要 刮 平 的 主 要 目 的 為 何? 1 避 免 一 次 溶 解 太 多 糖 2 可 以 增 加 溶 解 糖 的 次 數 3 控 制 加 入 的 每 一 匙 糖 都 一 樣 多 4 可 以 減 少 溶 解 量

Microsoft PowerPoint - P766Ch06.ppt

( )... 5 ( ) ( )

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD

untitled

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

The golden pins of the PCI card can be oxidized after months or years

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

CC213

PowerPoint Presentation

Microsoft PowerPoint - VB14.ppt


Microsoft Word - chap10.doc

epub83-1

使用手冊

第二章 簡介類別

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

投影片 1

Android Service

Microsoft PowerPoint - ch6 [相容模式]

多層次傳銷與獎金系統

導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式

<4D F736F F D20B9E3CEF7B9A4C9CCD6B0D2B5BCBCCAF5D1A7D4BA D D1A7C4EAD0C5CFA2B9ABBFAAB9A4D7F7C4EAB6C8B1A8B8E6A3A8C9CFCDF8A3A9>

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

文档 3

封面-12

第二章 簡介類別

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

《大话设计模式》第一章

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

Microsoft Word - 1HF12序.doc

Microsoft Word - 讀報看科普─人體篇_橫_.doc

Microsoft Word - 2B802內文.doc

鍟嗗搧瑙傚療鈥㈤挗鏉

東區校園中法治教育種子師資教學研習營

閱 讀 素 材 V.S 分 組 方 式 的 差 異 化 教 學 工 具 表 班 級 :( ) 閱 讀 素 材 V.S 分 組 方 式 獨 立 閱 讀 夥 伴 閱 讀 ( 同 質 性 ) 夥 伴 閱 讀 ( 異 質 性 ) 友 善 陪 伴 虛 心 受 教 國 語 日 報 新 聞 生 活 文 藝 兒 童

多媒體應用 13 新增專案並完成版面配置 <ExMusic01> <activity_main.xml> ImageView ID imgplay ImageView ID imgstop ImageView ID imgfront TextView ID txtsong TextView ID t

目 录 一 重 要 提 示... 3 二 公 司 主 要 财 务 数 据 和 股 东 变 化... 3 三 重 要 事 项... 8 四 附 录 / 28

AutoCAD 用戶如何使用 ArchiCAD

有 一 个 小 和 尚 要 去 云 游 参 学, 他 的 师 父 知 道 他 信 念 不 够 坚 定, 就 问 : 弟 子 什 么 时 候 动 身? 小 和 尚 说 : 下 星 期 吧, 路 途 远 我 要 多 打 几 双 草 鞋 师 父 说 : 我 通 知 大 家 明 天 送 草 鞋 给 你 于

SSReader Print.

範本檔

人 物 春 秋 杨 永 泰 将 其 削 藩 策 略 概 括 为 : 以 经 济 方 法 瓦 解 冯 玉 祥 的 第 二 集 团 军, 以 政 治 方 法 解 决 阎 锡 山 的 第 3 集 团 军, 以 军 事 方 法 解 决 李 宗 仁 的 第 四 集 团 军, 以 外 交 方 法 对 付 张 学

糖尿病食譜

Microsoft Word 養生與保健_中山大學_講義


萬里社區老人健康照護手冊

Microsoft Word - 強制汽車責任保險承保及理賠作業處理辦法 doc

Microsoft Word - 06.Understanding of Pregnancy and Birth.doc

(➂)11. 炎 炎 夏 日, 即 使 下 起 滂 沱 大 雨, 都 消 除 不 了 令 人 心 煩 的 暑 氣 這 句 話 主 要 想 表 達 什 麼? ➀ 夏 日 裡 經 常 下 著 滂 沱 大 雨, 令 人 心 煩 ➁ 下 著 滂 沱 大 雨 的 日 子, 可 以 消 除 暑 氣 ➂ 夏 日

附 件 一 : 办 理 集 中 式 银 期 转 账 业 务 网 点 名 单 序 号 地 区 网 点 名 称 地 址 联 系 人 电 话 23 工 商 银 行 安 徽 省 铜 陵 百 大 支 行 铜 陵 市 长 江 东 路 50 号 鲁 桂 珍 工 商 银 行 安 徽

2. 二 年 級 吳 毓 秀 老 師 : 感 謝 午 餐 公 司 平 時 均 能 準 時 送 餐, 但 希 望 能 不 要 使 用 加 工 品, 且 學 生 反 映 希 望 能 多 加 蛋 品 的 食 物 3. 三 年 級 柯 阿 青 老 師 : 雞 肉 有 血 水 味, 請 午 餐 公 司 能 調

高雄市立五福國民中學九十四學年度第一學期第三次段考二年級本國語文學習領域試題卷

台北老爺校外實地參訪結案報告

,,,,,,, (,, ),,,,,,,,,,,,,,, ,,, 4 11,, ( ),,,, ( ), :, ( ),,, 1995, 66 ; ( ),, 1996, , 3-4,,


天仁期末個人報告1.PDF

Strings


<4D F736F F D20A2B0A1D0A2B0A1D0A2B0A240A6CBAA4FC554BC4DB7ABA240A7D6AA4FBD6DB2DF2E646F63>

Microsoft Word - 雲林縣學校轉型優質計畫.docx

Transcription:

物件導向與事件驅動 建國科技大學資管系饒瑞佶 2016/4 V1 2016/5 V2

.NET 主要開發方式 包括 ASP.NET 物件導向 既有類別 ( 物件 )( 微軟或 3rd party 提供 ) 可見與不可見 程式中可以用顏色分辨 自訂類別 ( 物件 ) 事件驅動 : 透過 EventHandler 來控管

既有類別 ( 物件 ) 可見 : 工具箱中的控制項多數是

工具箱還有很多沒出現的既有物件 可以透過 Tools Choose Toolbox Items 來載入

可見與不可見 依照執行時畫面上是否出現而決定, 設計階段都看的到, 但位置不同 不出現者其功能仍會正常運作 可見物件 :Button TextBox 不可見物件 :SQLDataSource( 連接資料庫 ) 等

程式中可以用顏色分辨 ( 預設顏色 ) 既有類別 建立物件語法 物件名程式實際可用 參數可有可無

自訂類別 透過物件導向原理運作 C# 完全支援物件導向 使用者自行定義需要的類別 Class

類別與物件 Class= 類別 Object= 物件 物件導向程式 (OOP,Object Oriented Program) 的兩個核心人物 一切都是為了讓電腦能模擬出更接近事實的東西來解決需求

非 OOP 電腦語言 程序導向 (procedure-oriented) 為主, 也就是一系列命令構成一個系統或功能 強調資料管理 ( 資料庫 ), 面對流程或規則變化時幾乎要大改 擴充與更改困難 最糟的是跟事實不太接近

程序 vs. OOP 開始 程序 1 程序 2 程序 3 程序 4 結束 強調流程的正確與串接抽換不易 開始 物件 1 物件 3 物件 2 訊息 結束 強調物件間訊息的互動來完成工作抽換容易

那什麼是事實呢? 例如我要寫一個學生點名系統 使用這個系統的當然有學生 老師 教務處人員 系統最重要的功能當然是點名 當然要把點名資料儲存起來 傳統標準做法 : 利用資料庫儲存資料, 寫程式 ( 程序導向 ) 處理點名與儲存 強調流程圖與邏輯

這樣做好不好呢? 這樣做是對的! 但是 對於現實世界描述不佳 不利於程式碼重用 (reuse), 雖然可以寫成 dll 或是副程式, 但後續要修改就很麻煩 無法站在巨人肩膀上延伸, 所以無法縮短系統開發時程

對於現實世界描述不佳 以學生為例, 實際上 學生有基本屬性, 例如姓名 身高 學號等 學生有行為, 例如刷卡 查出勤記錄等 電腦怎麼模擬這樣的現實世界呢? 傳統的程序導向語言是很難做到的, 或是說要聯想 ( 包 ) 在一起很難

無法站在巨人肩膀上延伸 別人做過的幹嘛再做一次 (reuse) 寫成副程式不就好了, 問題是要修改擴充時怎麼辦? 所以讓程式開發成效與效率不彰 軟體工程所要探討!

抽象化 abstraction 為了更接近事實, 電腦採用模擬的方式, 將現實的東西 ( 意念 ) 抽象化 抽象化就是把現實的實物轉換對應 (mapping) 到電腦可以處理的東西 這個東西就是 class( 類別 ) 與 object( 物件 ) 為什麼抽象呢? 因為你不可能 100% 對應

事實 : 先談談類別 學生有基本屬性 ( 資料 ), 例如姓名 身高 學號等 學生有行為 ( 功能 動作 ), 例如刷卡 查出勤記錄等 特性 : 學生是一個大類, 每個學生都有姓名可是每個都不同 ( 同一類但個別有差異 ) 透過 class 與 Object 解決,class 相同, 但 Object 允許差異

如何把學生抽象化呢? 既然同一類, 那就弄個類別來定義它吧, 所以 CLASS 就誕生了 依據事實,CLASS 內會有 : 學生基本屬性,OOP 稱為 data member ( 資料成員 ) 學生有行為, OOP 稱為 member function ( 成員函數或 method 方法 ) 不是只有現實世界的實體可以抽象化動作交易或意念等也可以抽象化

轉換對應 (mapping) 現實 電腦 學生 姓名 身高 學號 抽象化 Class 學生 { 姓名身高學號 資料成員 刷卡點名查詢資料修改個人資料 非 100% } 會刷卡會查詢資料會修改資料 成員函數 每個學生都有的在 class 這裡沒有個別差異性

怎麼處理個別差異? 學生是一個大類, 每個學生都有姓名可是每個都不同 ( 同一類但個別有差異 ) 這時候 Object ( 物件 ) 就出現了 OOP 把從 class 變成物件這個過程稱為 instance( 實體化 ) 幾乎每本 OOP 書都會講的範例,CLASS 就像建築藍圖, 只有一份, 但是可以蓋出 (instance) 很多房子 (object), 每個房子外牆顏色可以不同 ( 個別差異 ) 真正可以用的是 OBJECT( 房子 ), 而不是 CLASS( 藍圖 ), 程式內也是一樣

instance Object Class 學生 { 姓名身高學號 instance 會刷卡會查詢資料會修改資料 } 這裡才有個別差異

告訴電腦有這個可以用我已經定義好了要不要用, 你自己選擇 class new 我決定要用這個類別所以我用 new 產生物件電腦就幫我配置出記憶體 object

再看看 Class 幾個 OO 重要的名詞開始出現 整個被包起來 ( 資料與動作在一起了 ) Encapsulation ( 封裝 ) public 資料 private 資料 公開 不公開 public 函數 private 函數 介面 interface 訊息 Message 資料不想被人看到或不是每個人都可以處理, 封裝 (Encapsulation) public private protected( 修飾詞 modifier) 別的 class

怎麼 reuse 與擴充? 繼承出現 學生 class 姓名選課 Inheritance 繼承 亞洲學生 class 姓名選課上軍訓課 非洲學生 class 姓名選課打仗 完全繼承 學生 class 的所有東西表示亞洲學生擁有學生的特性, 但是可以再加入亞洲學生特有的東西上軍訓課

小結 用 Class 來模擬現實世界 Class 裡面有資料與方法 ( 稱為 iterface) Class 是可以開放或被封起來的 Class 可以透過繼承, 不斷擴充 有 class 沒用, 需要利用 class 產生出物件才能有實際作為

再往下想 為了進一步解決前面說的 reuse 等問題 會再看到 Overriding( 覆寫 ) Composition( 複合 ) Polymorphism( 多形 ) Interface( 介面 ) Overloading( 多載 ) 一門物件導向程式的課

改寫 A overriding Class 輪胎 A B inheritance 畫個圖好了 Class 車燈 inheritance Class 競賽胎 A C( 參數 ) C 兩個 C overloading Class 高速胎 D E C Class 車 Class LED 燈 兩個 C 存在不同 Class Polymorphism( 多形, 同名異式 ) 組合兩個 CLASS Composition 有了這個就可以在程式內打造車子與操縱車子 Class 鹵素燈

來實作個範例 Class Car 資料 + 方法 繼承 inheritance Class SubCar 資料 + 方法

定義 Class Car 資料成員 : 方法 :

透過 VS IDE 操作

Class Car 初始面貌

開始來加東西 首先是資料成員與建構子 constructor 透過這個類別建立物件時, 自動會執行的方法 方法名稱定義成與 Class 名稱一樣就可以

1 其次加入方法 需要傳入兩個參數 2 需要回傳值 3

完整的 Class Car 2 個資料成員 1 個建構子 3 個方法 被參考幾次

先來使用 Class Car 新增一個 WebForm1 Label1 Label2 TextBox1 TextBox2 Button1

透過 Form_Load 事件呼叫建構子 取回預設的車樣式與 cc 數

透過 Button1 事件 設定資料成員並顯示

接著定義 Class SubCar

需要繼承 Class Car 建立 Class SubCar

加入資料成員到 Class SubCar 1 如果要直接使用 Class Car 內的資料呢?

加入方法到 Class SubCar 2 SubCar 中才有的

加入方法到 Class SubCar 出現 OverLoading 都是 gotourl, 但參數型態不同 3

加入方法到 Class SubCar 出現 Overriding 覆寫取代 Car 中原有繼承的方法 4 5

完整的 Class SubCar 2 個資料成員 4 個方法

使用 Class SubCar 新增一個 WebForm2 LinkButton1 Label1 Label2 LinkButton2 Button1 Button2

透過 Form_Load 事件呼叫 setcar 設定與取回車樣式與 cc 數 1

透過 LinkButton 呼叫 gotourl 方法 2 3

透過 Button 呼叫 gotourl 方法 4 5

如果讓 Class SubCar 可以繼承 Class 內的 car_type 參數 加入 public 修飾子 這兩個 car_cc 是不同的 重新宣告 car_cc

當在 SubCar 中呼叫 getcar_cc 時 SubCar 繼承 Car, 所以 SubCar 也繼承 getcar_cc 可是因為 SubCar 中並未繼承 Car 中的變數 car_cc 所以當在 SubCar 中呼叫 getcar_cc 時, 回傳的 car_cc 是 Car 中的 car_cc, 而非 SubCar 中的 car_cc

如果 修改 Class Car 的 namespace, 那需要更動? 我想要 SubCar 建立時設定我自己的初始值

有時候只定義不實作 (implement) 抽象概念, 例如動物 現實講動物時是沒有意義的, 我們會問是人 狗 獅子或老虎, 也就是動物並不是具體可操作的 ( 物件 )( 無法物件化 ), 所以動物只要規範大方向, 例如動物都會移動, 那只要屬於 ( 繼承 ) 動物的都要具體定義 (override 實作 ) 怎麼移動 稱為抽象類別

抽象類別 可以透過 abstract 定義 裡面可以定義具體方法 或抽象方法 可以透過介面 interface 定義 沒有資料成員 裡面不能定義具體方法

在 Class Car 中加入一個 abstract class 抽象類別 抽象方法

繼承實作 abstract class 繼承抽象類別

在 Class Car 中加入一個 interface

繼承實作 interface 繼承抽象類別 繼承 interface

Abstract vs. Interface 都可以只定義, 不實作 abstract 屬於 is-a 的概念, 例如定義一個鳥的 abstract 類別, 裡面有個 abstract 方法 飛, 那繼承鳥這個類別, 應該是老鷹或麻雀, 都會有飛這個方法, 也就是老鷹或麻雀是一種 (is-a) 鳥 Interface 屬於 有這種動作或行為 概念, 例如定義一個 會飛項目 的 Interface, 裡面定義 飛 的方法, 那這個 Interface 可以被繼承做出飛機 鳥 火箭等類別或物件, 因為他們都有飛的行為

使用既有 class

建立 Button 物件 使用既有的 Button 類別 建立方式 : 類別物件名稱 =new 類別名 (); Button bt1 = new Button();

Go To Definition

執行後 一片空白, 什麼也沒有 怎麼讓按鈕出現在畫面上呢? this.form.controls.add( 物件名 ); this.form.controls.add(bt1); 按鈕出現了

改善 加入顯示文字 ( 屬性 ) 加入對應的事件 (Click)

排版! 利用 HTML Table+Panel 也可以

處理多個物件

Partial class

Partial class 同一個 namespace 下 切割同一個 class( 相同名稱, 不同檔案 ), 如此可以讓兩組人發展同一個 class 內的功能

Part_Class1.cs

Part_Class2.cs

UsePartialClass.aspx

兩個專案 class 共用

加入 class 參考 首先在方案中建立另一個專案 透過加入 class link 方式,link 另一個專案已經建立的 class

連結參考

使用 link class

擴充 MS 提供既有的 class

Inheritance TextBox

複寫與建立新方法

使用新的 TextBox class

result 既有的標準 TextBox 新的 TextBox

建立 DLL

建立 Class Library New Project Windows Desktop Class Library

建立 class 內容

產生對應的 dll 檔案 建置專案

加入參考 reference 使用 dll 檔案

選擇 dll

加入完成

加入 using

使用 DLL