第2章 物件導向技術導論 2-1 程式設計方法 2-2 抽象資料型態 2-3 物件導向的思維 2-4 物件導向技術的三大觀念

Slides:



Advertisements
Similar presentations
系統分析與設計 楊子青 H-1 H 、物件導向技術 n 物件導向的基本概念 – 物件、類別 – 封裝、繼承 – 同名異式 ( 多型 ) 、超荷 ( 過載 ) n 物件導向分析與設計及塑模工具 n UML 塑模工具.
Advertisements

第一單元 建立java 程式.
第6章 類別與物件 – 封裝 6-1 物件導向的基礎 6-2 Java的類別與物件 – 封裝 6-3 類別的建構子
大葉大學 指導教授: 黃鈴玲 學生: 林慶南(工業工程與科技管理所)
Ch02物件導向程式設計 物件導向系統分析與設計.
08 CSS 基本語法 8-1 CSS 的演進 8-2 CSS 樣式規則與選擇器 8-3 連結HTML 文件與CSS 樣式表
資料結構理論與實務 – 以C語言實作 Data Structures in C:Concept and Implementation
第11章 過載與多形 11-1 方法的過載 11-2 運算子的過載 11-3 再談抽象類別與介面 11-4 多形的基礎 11-5 實作多形.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
Taiwan President Election
Chapter 5 遞迴 資料結構導論 - C語言實作.
第1章 程式語言與C語言的基礎 1-1 程式語言的基礎 1-2 程式設計技術的演進 1-3 C語言的基礎 1-4 程式是如何執行.
平板與翻轉教學應用之結合 Eddie Chang Microsoft Taiwan.
C/C++程式設計範例教本 P657 陳會安.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
Java簡介.
物件導向程式設計 CH1, CH2.
H、物件導向技術 物件導向的基本概念 物件、類別 封裝、繼承 同名異式(多型) 、超荷(過載) 物件導向分析與設計及塑模工具 UML塑模工具.
Chapter 1 Introduction.
JAVA 程式設計與資料結構 第七章 繼承與Interface.
第1章 認識Arduino.
2-3 基本數位邏輯處理※.
物件導向系統分析與設計與UML.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
C語言簡介 日期 : 2018/12/2.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
R教學 安裝RStudio 羅琪老師.
ASP.NET基本設計與操作 建國科技大學 資管系 饒瑞佶 2007年.
第9章 類別圖與物件圖 9-1 類別圖與物件圖的基礎 9-2 類別圖的符號 9-3 類別關係 9-4 物件圖 9-5 繪製類別圖與物件圖
安裝JDK 安裝Eclipse Eclipse 中文化
Quiz6 繳交期限: 12/14(四) 23:59前.
Visual Basic 物件導向程式設計簡介.
管理資訊系統導論 資訊系統的定義與概念.
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
網路安全技術 OSI七層 學生:A 郭瀝婷 指導教授:梁明章.
Topic Introduction—RMI
第一單元 建立java 程式.
第 19 章 XML記憶體執行模式.
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
其他 ER 相關觀念 以及OO模型 國立中央大學 資訊管理系 范錚強 2002 中央大學。范錚強.
挑戰C++程式語言 ──第8章 進一步談字元與字串
重複圖形.
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
樣版.
C qsort.
MicroSim pspice.
函數應用(二)與自定函數.
陣列與結構.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
動畫演示 Node規範了一些基本的方法,像是增加節點、刪除節點、讓節點做一些事、取得第n個節點等等
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
資料表示方法 資料儲存單位.
MultiThread Introduction
資料擷取與監控應用實務.
Quiz1 繳交期限: 9/28(四).
期末報告第一題 通訊四甲 B 湯智瑋.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
What is “this”? 在物件導向程式設計中,類別的定義就是在說明如果創建了“這個物件”的話,它會具有那些屬性與功能,以及這些功能是如何實現的。 而所謂的“這個物件”就以 this 來表示。 當我們在JavaScript與jQuery中寫 script 程式(函式)時,“誰”呼叫這個函式,這個“誰”就是該函式中所謂的.
面向对象程序设计 C++教程 西安工业大学 于帆.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
Chapter 4 Multi-Threads (多執行緒).
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Introduction to Mobile Computing
InputStreamReader Console Scanner
Presentation transcript:

第2章 物件導向技術導論 2-1 程式設計方法 2-2 抽象資料型態 2-3 物件導向的思維 2-4 物件導向技術的三大觀念 2-5 物件導向程式語言

2-1 程式設計方法 2-1-1 非結構化程式設計 2-1-2 程序式與結構化程式設計 2-1-3 模組化程式設計 2-1-4 物件導向程式設計

2-1 程式設計方法-說明 一般來說,初學程式設計者在逐漸建立深厚的程式設計功力前,學習程式設計通常都會經歷數個學習過程,即四種「程式設計技術」(Programming Techniques),或稱為「程式設計風格」(Programming Styles),如下所示: 非結構化程式設計(Unstructured Programming)。 程序式程式設計(Procedural Programming)與結構化程式設計(Structured Programming)。 模組化程式設計(Modular Programming)。 物件導向程式設計(Object-Oriented Programming)。

2-1-1 非結構化程式設計 早期BASIC、機器語言或組合語言建立的程式,很多仍然是使用非結構化程式設計來建立程式碼。 對於C、C++或Java語言來說,所謂非結構化程式設計是指初學程式設計時,不論幾列的小程式或數百列程式碼的大程式,都只有一個main()主程式且不包含任何流程控制敘述的情況。非結構化程式設計的程式碼是使用線性方式來依序的執行,如右圖所示:

2-1-2 程序式與結構化程式設計 程序式程式設計是將程式中重複的程式片斷抽出成為程序(Procedures,或稱為Subroutine、Routine)或函數(Functions),也就是一段執行特定功能的程式區塊。 程式因為已經分割成程序,所以在main()主程式的程式碼只是依序呼叫不同程序或函數的程序呼叫(Procedure Call)。程式是使用流程控制連接程序,即目前程式設計最常使用的結構化程式設計,屬於程序式程式設計的子集,如右圖所示:

2-1-3 模組化程式設計 模組化程式設計是程序式程式設計的下一個階段,為了能夠重複使用程序式程式設計分割建立的程序,我們可以將相同功能的程序或函數結合在一起建立成獨立的「模組」(Modules),模組是處理指定功能的子程式,如下圖所示:

2-1-4 物件導向程式設計 模組化程式設計是物件導向程式設計的前身,只是沒有提供繼承和多形等物件導向觀念。物件導向程式設計是一種更符合人性化的程式設計方法,將原來專注於問題的分解,轉換成了解問題本質參與的東西,也就是「物件」(Object),如下圖所示:

2-2 抽象資料型態 2-2-1 程序或函數抽象化 2-2-2 資料抽象化 2-2-3 抽象資料型態 2-2-4 抽象資料型態與物件導向

2-2 抽象資料型態 物件導向程式設計的精神是資料抽象化,透過抽象資料型態建立電腦與真實世界之間的橋樑,描述和模擬真實世界的實體,即東西,簡單的說,物件導向程式設計就是一種抽象資料型態的程式設計。 「抽象化」(Abstraction)的主要目的是定義問題的二個屬性,如下所示: 資料(Data):問題影響的資料。 操作(Operators):問題產生的操作。

2-2-1 程序或函數抽象化-由上而下的設計方法 程序或函數抽象化(Procedure Abstraction or Function Abstraction)主要是針對傳統由上而下的設計方法,將問題分割成一個個子工作。 由上而下的設計方法(Top-down Design)是以程序為單位來切割工作,也就是所謂的「程序式程式設計」(Procedural Design)。 由上而下的設計方法是一種循序漸進了解問題的方法。筆者準備使用一個實例來說明分割工作的過程。

2-2-1 程序或函數抽象化-範例 例如:目前有一個工作是繪出房屋的圖形,房屋圖形的繪圖工作不是一筆畫就可以完成,所以,我們可以分割成多個小工作來分別處理,以由上而下的設計方法來了解整個繪圖工作的問題。

2-2-1 程序或函數抽象化-步驟一 從房屋繪圖工作可以粗分為三個小工作,如下所示: 繪出屋頂和外框。 繪出窗戶。 繪出門。 依據上述工作分割,可以建立各分割小工作之間的模組架構,如下圖所示: Call Draw Outline Call Draw Windows Call Draw Door

2-2-1 程序或函數抽象化-步驟二 將第一個小工作【繪出屋頂和外框】(Draw Outline)再次進行分割成二個小工作,如下所示: 繪出屋頂。 繪出房屋的外框。 Call Draw Roof Call Draw House Frame

2-2-1 程序或函數抽象化-其他步驟 現在,我們只需重複上述分析,一步一步向下進行分割工作,例如:因為窗戶有2個,所以【繪出窗戶】可以分為【繪出窗戶1】和【繪出窗戶2】;【繪出門】可以分為【繪出門框】和【繪出門把】。 最後,將問題分割成一個個小問題後,每一個小問題就是一個程序或函數,只需完成這些程序或函數就可以解決繪出房屋的問題。

2-2-1 程序或函數抽象化- 程序或函數抽象化(說明) 在由上而下設計方法分割的程序或函數之中,我們並不用考量實作的程式碼,只需定義好程序或函數使用介面的參數和傳回值,將它視為一個黑盒子,換句話說,程式可以使用任何符合介面的程序或函數來取代,稱為程序或函數抽象化。

2-2-1 程序或函數抽象化- 程序或函數抽象化(圖例) 例如:前述繪出房屋問題,我們可以將問題分解成一個個繪圖操作的程序,其最後結果如下圖所示:

2-2-2 資料抽象化 「資料抽象化」(Data Abstraction)是一種方法將基本資料型態的變數組合成複合資料(Compound Data),使用相關函數來處理複合資料,以便隱藏實際複合資料的儲存方式。 一般來說,程式語言如果沒有支援下一節的抽象資料型態,通常就是使用模組化程式設計來建立資料抽象化。例如:使用模組化程式設計建立「堆疊」(Stacks)資料結構,如下圖所示:

2-2-3 抽象資料型態-說明 「抽象資料型態」(Abstract Data Type,ADT)是使用資料抽象化的方法建立的自訂資料型態,抽象資料型態包含資料和相關操作,將資料和處理資料的操作一起思考,結合在一起,操作就是對外的使用介面,如下圖所示:

2-2-3 抽象資料型態-範例 我們可以將個人基本資料問題抽象化成Person模型,用來模擬真實世界的「人」實體,內含姓名name、地址address和電話號碼phone等資料,setPerson()指定個人資料,getName()、getAddress()和getPhone()取出個人資料的操作。Person抽象資料型態,如下圖所示:

2-2-4 抽象資料型態與物件導向-說明 物件導向程式設計的精神是資料抽象化的抽象資料型態,即類別,物件導向是將問題的資料屬性和資料本身的相關操作一起思考,不用考量其他資料或不相關操作,以便建立一個個完善定義的物件(Object)。 如果將第2-2-1節的繪出房屋範例看成堆積木遊戲,房屋可以使用一個個積木來堆出,著重於組成房屋元件的資料抽象化,即房屋是由房頂、窗戶、門和外框等物件組成。

2-2-4 抽象資料型態與物件導向-圖例

2-2-4 抽象資料型態與物件導向-模擬真實世界 簡單的說,物件導向程式設計就是在模擬真實世界,以便找出解決問題所需的物件集合和其關係,在物件之間是使用訊息建立互動,透過物件集合之間的合作來解決程式問題,如下所示: 程式 = 物件 + 訊息 如同車輛是由成千上萬個零件所組裝,物件導向程式設計可以視為是一種組裝工作,將眾多現成或擴充功能的物件結合起來。

2-3 物件導向的思維 2-3-1 物件 2-3-2 類別

2-3 物件導向的思維 物件導向技術源於1960年代的Simula程式語言,它是Simulation Language的簡稱,這是一種模擬語言,希望使用電腦程式來模擬真實世界的各種處理過程。 物件導向的思維就是我們現實生活的思維方式,人類自然的思考方式,其實各位讀者早已經知道,而且一直使用它來思考問題。

2-3-1 物件-說明 物件的英文是Object,在此筆者討論的是現實生活中的物件,並不是程式中的物件,物件的英文原意有物體、東西、對象和目的。 換句話說,物件不見的是一種看得到或摸得到的實體,它可能只是一個概念,一種我們可以認知的東西,如下圖所示:

2-3-1 物件-認知的東西 物件是一種可以認知的東西。例如:我們認知一輛車,是因為聯想到: 車子是紅色。 車子有四個門。 車子有四個輪胎。

2-3-2 類別-說明 當識別出物件後,物件導向技術的抽象化(Abstraction)就是從物件中抽出共通部分的特徵,排除其詳細部分,以物件導向技術來說,就是將物件抽象化成為類別(Class)。

2-3-2 類別-範例 例如:紅色汽車、白色貨車和銀色休旅車抽象化成陸上交通工具的車輛,然後進一步抽象化成交通工具,如下圖所示:

2-4 物件導向技術的三大觀念 2-4-1 物件觀念 2-4-2 訊息觀念 2-4-3 類別觀念

2-4 物件導向技術的三大觀念 物件導向技術有三大重要觀念:物件、訊息和類別,其簡單說明如下所示: 物件:提供資料和處理資料程序的封裝。 訊息:在物件之間的溝通方式,可以建立互動和支援多形。 類別:物件的分類,可以實作類別架構的繼承。

2-4-1 物件觀念-物件簡介 物件(Object)是物件導向技術的關鍵,以程式角度來說,它是電腦用來模擬現實生活的東西或事件,也是組成應用程式的元素。 物件是資料與相關處理資料的程序和函數結合在一起的組合體。資料是變數,程序和函數稱為方法(Methods),如下圖所示:

2-4-1 物件觀念-物件的三種特性 物件導向技術的物件是對應到現實生活的實體或事件,擁有三種特性,如下所示: 狀態(State):物件所有「屬性」(Attributes)目前的狀態值,屬性是儲存物件的狀態,可以簡單到只是一個布林值變數,也可能是另一個物件。例如:車子的車型、排氣量、色彩和自排或手排等屬性,以程式來說,也就是資料部分的變數。 行為(Behavior):行為是物件可見部分提供的服務,也就是塑模所抽象化的操作,可以做什麼事?程式語言是使用程序或函數來實作行為,稱為方法,例如:車子可以發動、停車、加速和換擋等。 識別字(Identity):每一個物件都擁有獨一無二的識別字來識別它是不同的物件。例如:使用物件參考(Reference)作為物件的識別字,即物件實際儲存的記憶體位址。

2-4-1 物件觀念-物件的範例 物件可以模擬真實生活的東西,例如:Car1物件模擬一輛1800cc紅色四門的Sentra車子。Car1是物件的識別字,使用Car1識別字就可以在眾多模擬其他車輛的Car2、Car3、Car4….物件中,識別出是哪一輛車輛物件。

2-4-1 物件觀念-組合物件 「組合物件」(Composite Object)是指物件的屬性是另一個物件,例如:上述Car1物件door是整數的車門數,如果是車門Door物件時,Car1物件就是組合物件。

2-4-2 訊息觀念-訊息簡介 物件可以模擬現實生活的東西,但是現實生活中的東西會彼此互動。例如:學生要求成績(學生與成績物件)、約同學看電影(同學與同學物件)和學生彈鋼琴(學生與鋼琴物件)等互動。所以,我們建立的物件之間也需要互動,使用的媒介就是訊息(Messages)。 物件是使用訊息來模擬彼此之間的互動,換句話說,訊息是物件之間的溝通橋樑,可以啟動另一個物件來執行指定的行為。

2-4-2 訊息觀念-訊息範例 例如:Student學生物件需要查詢成績,學生成績是儲存在StudentStatus物件,此時Student物件可以送一個訊息給StudentStatus物件,告訴它需要查詢學生的成績,如下圖所示:

2-4-2 訊息觀念-訊息傳回值 在接收物件接到訊息後,就會執行指定方法,然後將回應訊息送回給發送物件(也可能沒有回應),稱為「傳回值」(Return Value)或回傳值,即查詢結果的學生成績,如下圖所示:

2-4-2 訊息觀念-循序操作(說明) 物件送出的訊息,有可能在接收物件執行方法後就產生回應訊息,也有可能是觸發另一個訊息,操作會繼續送出一系列訊息給其他物件,以便依序執行各物件的指定方法來完成整個操作,稱為「循序操作」(Sequential Operation)。

2-4-2 訊息觀念-循序操作(範例) 例如:學生平均成績的查詢是送訊息到Teacher物件執行average()方法,Teacher物件再觸發另一個訊息到StudentStatus物件查詢學生的三科成績,如下圖所示:

2-4-2 訊息觀念-名稱再用:過載 在程序式程式設計的程序或函數名稱是識別字,如同變數一般,需要與其他程序或函數擁有不同的名稱。例如:分別取得2個和3個參數最大值的函數,我們需要建立2個不同名稱的maxTwo(a1, a2)和maxThree(a1, a2, a3)函數。 對於物件導向技術來說,物件是依接收的訊息來執行方法,訊息內容有三種資訊,只需有差異就足以讓物件辨識出是不同的方法,所以,方法同名也沒有關係。例如:執行Utility物件max()方法的訊息,如下所示: Utility.max(23, 45); Utility.max(23, 45, 87); Utility.max(‘a’, ‘z’);

2-4-2 訊息觀念-名稱再用:多形 「多形」(Polymorphism)屬於另一種名稱再用,針對同一個訊息,不同的物件擁有不同的反應,也就是同一個名稱擁有不同的操作。因為在人類的思維中,對於同一種工作,就算對象不同,也會使用相同名稱的操作,如右圖所示:

2-4-3 類別觀念-類別簡介 在第2-4-1節我們模擬不同車輛的Car1、Car2、Car3、Car4…物件,因為物件都擁有相同的屬性和行為,只是狀態不同。簡單的說,這些物件屬於同一類物件,所以可以建立名為Car的範本來建立這些物件,如同工廠依照藍圖製造車輛,此範本就是類別,屬於同一類別的物件即該類別的「實例」(Instance),也稱為副本。 類別也可以想像成扮演的角色。例如:模擬教室上課,在同一間教室共有30人,其中1位是老師,其他是學生。換句話說,如果每一個人是一個物件,30個物件可以進一步分類成屬於Teacher類別和Student類別的物件集合,也就是哪些物件扮演老師;哪些物件是學生。

2-4-3 類別觀念-類別是物件的藍圖 類別是一種抽象資料型態,其目的是建立物件,使用類別建立的物件稱為類別的實例(Instance)。例如:使用Student類別建立29位Student物件,這些物件和類別擁有相同的屬性和行為,只是狀態值不同,即物件的變數值不同。例如:一位學生的姓名name是【陳會安】,另一位是【江小魚】,如下圖所示:

2-4-3 類別觀念-類別架構:繼承 在前面的例子中,學生和老師都是人,換言之,我們可以先定義Person類別來模擬人類,然後擴充Person類別建立Student和Teacher類別模擬學生和老師,稱為「繼承」(Inheritance),如右圖所示:

2-4-3 類別觀念-多重繼承 如果父類別不只一個,即同時繼承多個父類別,稱為「多重繼承」(Multiple Inheritance),如下圖所示:

2-4-3 類別觀念-類別關係(說明) 類別關係(Relationships)是指不同類別之間的關係。例如:繼承是一種Is-a的類別關係,UML稱為「一般關係」(Gereralization)。 結合關係(Association)是在建立類別之間互通訊息的管道,一種類別真正擁有指標指向其他物件的類別關係,其他物件為其屬性。另外還有強度更強的結合關係,稱為「成品和零件」(Whole-Part),即Part-of和Has-a關係。

2-4-3 類別觀念-類別關係(圖例)

2-4-3 類別觀念-類別關係(圖例說明) Part-of和Has-a關係的說明,如下所示: Part-of關係:指此類別是其他類別的零件,以上圖為例Wheel車輪和Driving Computer行車電腦是Car車類別的零件。 Has-a關係:相反於Part-of關係,Car類別Has-a擁有Wheel和Driving Computer類別。

2-4-3 類別觀念-抽象類別 「抽象類別」(Abstract Class)是一種不能完全代表物件的類別,抽象類別並不能建立實例,只是擁有眾多類別的共同部分,其主要目的是作為其他類別的父類別。例如:哺乳類動物的分類,如右圖所示:

2-5 物件導向程式語言 2-5-1 物件導向程式語言的特點 2-5-2 常用的物件導向程式語言

2-5-1 物件導向程式語言的特點-封裝 封裝 封裝(Encapsulation)是將資料和處理資料的程序與函數組合起來建立物件。在C++、C#和Java語言定義物件是使用「類別」(Class),內含屬性和方法,屬於一種抽象資料型態(Abstract Data Type),換句話說,就是替程式語言定義新的資料型態。

2-5-1 物件導向程式語言的特點-繼承 繼承 繼承(Inheritance)是物件的再利用,當定義一個類別後,其他類別可以繼承這個類別的資料和方法,並且新增或取代繼承物件的資料和方法。

2-5-1 物件導向程式語言的特點-多形 多形 多形(Polymorphism)屬於物件導向最複雜的特性,類別如果需要處理各種不同資料型態時,並不需要針對不同資料型態來建立不同的類別,可以直接繼承基礎類別,也就是繼承此類別建立同名方法來處理不同的資料型態,因為方法的名稱相同,只是程式碼不同,所以也稱為「同名異式」。

2-5-2 常用的物件導向程式語言 最早的物件導向程式語言是Simula,這是在1960年代末期Norweigian Computing Center開發的程式語言,接著是1970年代由Xerox Palo Alto研發中心開發的Smalltalk語言,目前比較重要的物件導向程式語言有: Java C++ .NET的C# .NET的Visual Basic

End