H、物件导向技术
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
物件導向技術,將資訊(屬性)與操作此資訊 的函數(方法)包裝成一個物件,稱為封裝。
– 將物件的實作細節隱藏,使其與外界環境隔離 ,而只允許該物件所包含之操作修改其資訊, 稱為資訊隱藏(Information Hiding)。
• 使用物件時,僅需知道物件提供何種操作,而不需 知其內部之資訊或行為是如何表達或執行。
class E {
public static void main(String[] args) {
Account joe = new Account();
// 產生一個帳戶:joe
Account wason = new Account(); joe.clearAccount(); wason.clearAccount();
H、物件導向技術
物件導向的基本概念
– 物件、類別 – 封裝、繼承 – 同名異式(多型) 、超荷(過載)
物件導向分析與設計及塑模工具 UML塑模工具
系統分析與設計 楊子青 H-1
物件導向?
不使用物件導向描述一件事
青椒炒牛肉
• 取出青椒 500 g,用刀切成細絲,過油 • 取出牛肉 300 g,切丁,用醬油、酒、 黑醋醃製 • 起油鍋、放入牛肉炒及青椒大火快炒
物件內部才可對其作存取動作。任何外部的存取均會導 致錯誤發生。 – Protected (保護):在所屬的 package 中是被視為 public 資源;但是在其他的 package 中,則只被繼承的子類別 使用。 – Default Access (預設存取)或Package(類別庫):在所屬的 package 中是被視為 public 資源;但是在其他的 package 中,則會被視為是 private 資源而無法被使用。
的方法加以改寫,如此一來,子類別的使用者就 不會也不能看到及使用父類別中的方法,以達到 重新設計的目的。
系統分析與設計 楊子青 H-20
變數覆寫之Java程式實例
class C { int i = 10;
}
class D extends C { int i = 5;
}
class E { public static void main(String[] args) { D d = new D(); System.out.println("d = "+d.i); }
Joe has 300 dollars. Wason has 500 dollars.
System.out.println("Wason has " + wason.getBalance() + "dollars.");
}
}
系統分析與設計 楊子青 H-12
1.3 封裝 (Encapsulation)
} class D extends C {} // 類別 D 繼承類別 C class E extends C {} // 類別 E 繼承類別 C
class F { public static void main(String[] args) { D d = new D(); E e = new E();
系統分析與設計 楊子青 H-17
繼承之實例
學生和老師都是人 ,可先定義Person 類別來模擬人類, 然後擴充Person類 別建立Student和 Teacher類別,模擬 學生和老師
系統分析與設計 楊子青 H-18
繼承之Java程式實例
class C { private int i; public void setInfo(int x) { i = x; } public int getInfo() { return i; }
d.setInfo(5); e.setInfo(7);
執行結果: The value of d is 5 The value of e is 7
} }
System.out.println("The value of d is "+dln("The value of e is "+e.getInfo());
1 分半 • 拿出太白粉、水調在一起,這個稱為 芡汁。 • 將芡汁倒入鍋中攪拌,會產生黏稠現象 這叫芶芡 •完成。
使用物件導向描述一件事
青椒炒牛肉
• 青椒 數量:500 g 處理:用刀切成細絲,過油 • 牛肉 數量:300 g 處理:切丁,用醬油、酒、黑醋醃製 • 芡汁 製作:太白粉調上適量的水 芶芡:將芡汁倒入鍋中 • 青椒處理好、牛肉處理好、芡汁製作好, 青椒、牛肉放入鍋中快炒 1 分半後,用 芡汁芶芡即可。
系統分析與設計 楊子青 H-19
覆寫(overriding)
子類別將繼承自父類別來的屬性或方法, 重新定義的動作
– 變數覆寫
• 將繼承自父類別的變數遮蓋起來。(在父類別中的 變數宣告並不會因此消失,它只是隱藏起來而已)
– 方法覆寫
• 將繼承自父類別的方法遮蓋起來。 • 這種設計讓我們在繼承類別時,可將不符合需求
系統分析與設計 楊子青 H-6
物件的三種特性
狀態(State):物件所有「屬性」(Attributes) 目前的狀態值
– 例如:車子的車型、排氣量、色彩等屬性 – 以程式來說,也就是資料部分的變數,可以簡單到
只是一個布林值變數,也可能是另一個物件。
行為(Behavior):物件提供的服務,稱操作 (Operations)或方法(Methods)
// 私有資料
void public clearAccount() { balance = 0; } void deposit(int m) { balance = balance + m; } private int getBalance() { return balance; } }
// 公開方法 // 預設存取方法 // 私有方法
– 例如:車子可以發動、停車、加速和換擋等 – 程式語言是使用程序或函數來實作行為
識別字(Identity):每一個物件都擁有獨一無 二的識別字來識別它是不同的物件
– 例如使用物件實際儲存的記憶體位址 (Reference), 作為物件的識別字
系統分析與設計 楊子青 H-7
1.2 類別 (Class)
• 封裝之特性使物件導向的系統較容易維護。
系統分析與設計 楊子青 H-13
Java的封裝
將物件中資源(資料或方法)的存取分為幾個等級, 以管理某些資源隱藏在物件中,某些資源開放給 外界使用。
– Public (公開): 將物件內部的資源開放給外界使用。 – Private (私有):資源的所有權完全屬於該類別,只有在
1.1 物件 (Object)
物件是一種可認知的東西,是物件導向 的基本思維單位
– 我們認知下圖是一輛車,是因為聯想到:
• 車子是紅色。 • 車子有四個門。 • 車子有四個輪胎。
系統分析與設計 楊子青 H-5
物件的範例
例如:Car1物件模擬一輛1800cc紅色四 門的Sentra車子。Car1是物件的識別字, 使用Car1識別字,可以在眾多模擬其他 車輛的Car2、Car3、Car4….等物件中, 識別出是哪一輛車輛物件。
class D { public static void main(String[] args) { Account joe = new Account();
joe.clearAccount(); joe.deposit(300);
// OK! // OK!
System.out.println(“Joe has ” + joe.getBalance() + “dollars.”); // ERROR! 使用私有方法 } }
//宣告一帳戶餘額
void clearAccount() { balance = 0; } void deposit(int m) { balance = balance + m; } int getBalance() { return balance; } }
//清空帳戶餘額的 "方法" // 存錢的 "方法" // 顯示目前餘額的 "方法"
//程式開始的起點 // 根據類別C,宣告一個物件,名稱為 c1 // 以類別 C 為範本,產生一個物件c1
c1.i = 10;
System.out.println("c1.i = "+c1.i);
}
輸出結果:
}
c1.i = 10
系統分析與設計 楊子青 H-11
物件與類別之Java程式實例
class Account { private int balance;
類別
以詹姆士、愛德華物件 為例,他們有相似的行 為與資訊結構,可表示 成一個「人」的類別。
系統分析與設計 楊子青 H-10
物件與類別
物件導向程式,都是以類別為基本單位所 組成;在執行時的主體是物件,而非類別
class C { int i;
}
//類別 C宣告了一整數變數 i
class D { public static void main(String[] args) { C c1; c1 = new C(); //兩者可和寫為 C c1 = new C();
系統分析與設計 楊子青 H-14
封裝資料之Java程式實例
class C { private int i; public int j; int k;
}
// 私有資料 // 公開資料 // 預設存取資料
class D {
public static void main(String[] args) {
系統分析與設計 楊子青 H-2
物件、屬性、方法
青椒炒牛肉
• 青椒 數量:500 g 處理:用刀切成細絲,過油
• 牛肉 數量:300 g 處理:切丁,用醬油、酒、黑醋醃製
• 芡汁 製作:太白粉調上適量的水 芶芡:將芡汁倒入鍋中
• 青椒處理好、牛肉處理好、芡汁製作好, 放入鍋中快炒 1 分半後用芡汁芶芡即可。
具有相同結構及行為的物件所組成之集合
– 類別是物件經分類(Classification)或抽象化 (Abstraction)所得的結果
– 也就是將物件抽象化,僅考慮相同性質特徵, 排除其差異部分,將這些物件組成一個群體, 稱為類別。
系統分析與設計 楊子青 H-8
類別之範例
系統分析與設計 楊子青 H-9
先定義好參與這件事的物品有哪些 (這些物品叫做 “物件”)
再定義這些物品所需的數量及行為 (這些數量及行為叫做 “屬性”與“方法”)
接下來就可用物品間的互動行為 來描述整件事情是如何發生的。 (這部份的描述稱為“主程式”)
物件導向優點:程式碼再用
系統分析與設計 楊子青 H-3
1. 物件導向的基本概念
// 產生一個帳戶:wason // 將 Joe 的帳戶餘額清空 // 將 Wason 的帳戶餘額清空
joe.deposit(300); wason.deposit(500);
// Joe 存了 300 元 // Wason 存了 500 元
輸出結果:
// 顯示 Joe, Wason 目前的帳戶餘額 System.out.println("Joe has " + joe.getBalance() + "dollars.");
物件導向技術 (Object-Oriented Technique)
– 是繼結構化技術之後,系統開發上的新典範 (Paradigm)
– 以物件模式來描述真實系統,並將資料抽象 化(Data Abstraction)、封裝、繼承、同名異 式、超荷的觀念融入物件導向的系統開發中
系統分析與設計 楊子青 H-4
C c = new C();
c.i = 5;
// Error! c.i 是 private資料,禁止存取!
c.j = 10;
// OK!
c.k = 15;
// OK!
}
}
系統分析與設計 楊子青 H-15
封裝方法之Java程式實例
class Account { private int balance;
系統分析與設計 楊子青 H-16
1.4 繼承(Inheritance)
承接所有父類別 (Parent Class) 所有屬性及方法,並可加以改造 的特性。
– 以男人和女人物件為例,將相同的 部分抽出,一般化成一個更上層的 類別(父類別),稱為「人」類別。
– 物件導向技術中,繼承概念對軟體 工程有革命性的影響,如達成程式 碼再用(Reuse)與減少重複描述、 產生可靠度較高的軟體等。
– 將物件的實作細節隱藏,使其與外界環境隔離 ,而只允許該物件所包含之操作修改其資訊, 稱為資訊隱藏(Information Hiding)。
• 使用物件時,僅需知道物件提供何種操作,而不需 知其內部之資訊或行為是如何表達或執行。
class E {
public static void main(String[] args) {
Account joe = new Account();
// 產生一個帳戶:joe
Account wason = new Account(); joe.clearAccount(); wason.clearAccount();
H、物件導向技術
物件導向的基本概念
– 物件、類別 – 封裝、繼承 – 同名異式(多型) 、超荷(過載)
物件導向分析與設計及塑模工具 UML塑模工具
系統分析與設計 楊子青 H-1
物件導向?
不使用物件導向描述一件事
青椒炒牛肉
• 取出青椒 500 g,用刀切成細絲,過油 • 取出牛肉 300 g,切丁,用醬油、酒、 黑醋醃製 • 起油鍋、放入牛肉炒及青椒大火快炒
物件內部才可對其作存取動作。任何外部的存取均會導 致錯誤發生。 – Protected (保護):在所屬的 package 中是被視為 public 資源;但是在其他的 package 中,則只被繼承的子類別 使用。 – Default Access (預設存取)或Package(類別庫):在所屬的 package 中是被視為 public 資源;但是在其他的 package 中,則會被視為是 private 資源而無法被使用。
的方法加以改寫,如此一來,子類別的使用者就 不會也不能看到及使用父類別中的方法,以達到 重新設計的目的。
系統分析與設計 楊子青 H-20
變數覆寫之Java程式實例
class C { int i = 10;
}
class D extends C { int i = 5;
}
class E { public static void main(String[] args) { D d = new D(); System.out.println("d = "+d.i); }
Joe has 300 dollars. Wason has 500 dollars.
System.out.println("Wason has " + wason.getBalance() + "dollars.");
}
}
系統分析與設計 楊子青 H-12
1.3 封裝 (Encapsulation)
} class D extends C {} // 類別 D 繼承類別 C class E extends C {} // 類別 E 繼承類別 C
class F { public static void main(String[] args) { D d = new D(); E e = new E();
系統分析與設計 楊子青 H-17
繼承之實例
學生和老師都是人 ,可先定義Person 類別來模擬人類, 然後擴充Person類 別建立Student和 Teacher類別,模擬 學生和老師
系統分析與設計 楊子青 H-18
繼承之Java程式實例
class C { private int i; public void setInfo(int x) { i = x; } public int getInfo() { return i; }
d.setInfo(5); e.setInfo(7);
執行結果: The value of d is 5 The value of e is 7
} }
System.out.println("The value of d is "+dln("The value of e is "+e.getInfo());
1 分半 • 拿出太白粉、水調在一起,這個稱為 芡汁。 • 將芡汁倒入鍋中攪拌,會產生黏稠現象 這叫芶芡 •完成。
使用物件導向描述一件事
青椒炒牛肉
• 青椒 數量:500 g 處理:用刀切成細絲,過油 • 牛肉 數量:300 g 處理:切丁,用醬油、酒、黑醋醃製 • 芡汁 製作:太白粉調上適量的水 芶芡:將芡汁倒入鍋中 • 青椒處理好、牛肉處理好、芡汁製作好, 青椒、牛肉放入鍋中快炒 1 分半後,用 芡汁芶芡即可。
系統分析與設計 楊子青 H-19
覆寫(overriding)
子類別將繼承自父類別來的屬性或方法, 重新定義的動作
– 變數覆寫
• 將繼承自父類別的變數遮蓋起來。(在父類別中的 變數宣告並不會因此消失,它只是隱藏起來而已)
– 方法覆寫
• 將繼承自父類別的方法遮蓋起來。 • 這種設計讓我們在繼承類別時,可將不符合需求
系統分析與設計 楊子青 H-6
物件的三種特性
狀態(State):物件所有「屬性」(Attributes) 目前的狀態值
– 例如:車子的車型、排氣量、色彩等屬性 – 以程式來說,也就是資料部分的變數,可以簡單到
只是一個布林值變數,也可能是另一個物件。
行為(Behavior):物件提供的服務,稱操作 (Operations)或方法(Methods)
// 私有資料
void public clearAccount() { balance = 0; } void deposit(int m) { balance = balance + m; } private int getBalance() { return balance; } }
// 公開方法 // 預設存取方法 // 私有方法
– 例如:車子可以發動、停車、加速和換擋等 – 程式語言是使用程序或函數來實作行為
識別字(Identity):每一個物件都擁有獨一無 二的識別字來識別它是不同的物件
– 例如使用物件實際儲存的記憶體位址 (Reference), 作為物件的識別字
系統分析與設計 楊子青 H-7
1.2 類別 (Class)
• 封裝之特性使物件導向的系統較容易維護。
系統分析與設計 楊子青 H-13
Java的封裝
將物件中資源(資料或方法)的存取分為幾個等級, 以管理某些資源隱藏在物件中,某些資源開放給 外界使用。
– Public (公開): 將物件內部的資源開放給外界使用。 – Private (私有):資源的所有權完全屬於該類別,只有在
1.1 物件 (Object)
物件是一種可認知的東西,是物件導向 的基本思維單位
– 我們認知下圖是一輛車,是因為聯想到:
• 車子是紅色。 • 車子有四個門。 • 車子有四個輪胎。
系統分析與設計 楊子青 H-5
物件的範例
例如:Car1物件模擬一輛1800cc紅色四 門的Sentra車子。Car1是物件的識別字, 使用Car1識別字,可以在眾多模擬其他 車輛的Car2、Car3、Car4….等物件中, 識別出是哪一輛車輛物件。
class D { public static void main(String[] args) { Account joe = new Account();
joe.clearAccount(); joe.deposit(300);
// OK! // OK!
System.out.println(“Joe has ” + joe.getBalance() + “dollars.”); // ERROR! 使用私有方法 } }
//宣告一帳戶餘額
void clearAccount() { balance = 0; } void deposit(int m) { balance = balance + m; } int getBalance() { return balance; } }
//清空帳戶餘額的 "方法" // 存錢的 "方法" // 顯示目前餘額的 "方法"
//程式開始的起點 // 根據類別C,宣告一個物件,名稱為 c1 // 以類別 C 為範本,產生一個物件c1
c1.i = 10;
System.out.println("c1.i = "+c1.i);
}
輸出結果:
}
c1.i = 10
系統分析與設計 楊子青 H-11
物件與類別之Java程式實例
class Account { private int balance;
類別
以詹姆士、愛德華物件 為例,他們有相似的行 為與資訊結構,可表示 成一個「人」的類別。
系統分析與設計 楊子青 H-10
物件與類別
物件導向程式,都是以類別為基本單位所 組成;在執行時的主體是物件,而非類別
class C { int i;
}
//類別 C宣告了一整數變數 i
class D { public static void main(String[] args) { C c1; c1 = new C(); //兩者可和寫為 C c1 = new C();
系統分析與設計 楊子青 H-14
封裝資料之Java程式實例
class C { private int i; public int j; int k;
}
// 私有資料 // 公開資料 // 預設存取資料
class D {
public static void main(String[] args) {
系統分析與設計 楊子青 H-2
物件、屬性、方法
青椒炒牛肉
• 青椒 數量:500 g 處理:用刀切成細絲,過油
• 牛肉 數量:300 g 處理:切丁,用醬油、酒、黑醋醃製
• 芡汁 製作:太白粉調上適量的水 芶芡:將芡汁倒入鍋中
• 青椒處理好、牛肉處理好、芡汁製作好, 放入鍋中快炒 1 分半後用芡汁芶芡即可。
具有相同結構及行為的物件所組成之集合
– 類別是物件經分類(Classification)或抽象化 (Abstraction)所得的結果
– 也就是將物件抽象化,僅考慮相同性質特徵, 排除其差異部分,將這些物件組成一個群體, 稱為類別。
系統分析與設計 楊子青 H-8
類別之範例
系統分析與設計 楊子青 H-9
先定義好參與這件事的物品有哪些 (這些物品叫做 “物件”)
再定義這些物品所需的數量及行為 (這些數量及行為叫做 “屬性”與“方法”)
接下來就可用物品間的互動行為 來描述整件事情是如何發生的。 (這部份的描述稱為“主程式”)
物件導向優點:程式碼再用
系統分析與設計 楊子青 H-3
1. 物件導向的基本概念
// 產生一個帳戶:wason // 將 Joe 的帳戶餘額清空 // 將 Wason 的帳戶餘額清空
joe.deposit(300); wason.deposit(500);
// Joe 存了 300 元 // Wason 存了 500 元
輸出結果:
// 顯示 Joe, Wason 目前的帳戶餘額 System.out.println("Joe has " + joe.getBalance() + "dollars.");
物件導向技術 (Object-Oriented Technique)
– 是繼結構化技術之後,系統開發上的新典範 (Paradigm)
– 以物件模式來描述真實系統,並將資料抽象 化(Data Abstraction)、封裝、繼承、同名異 式、超荷的觀念融入物件導向的系統開發中
系統分析與設計 楊子青 H-4
C c = new C();
c.i = 5;
// Error! c.i 是 private資料,禁止存取!
c.j = 10;
// OK!
c.k = 15;
// OK!
}
}
系統分析與設計 楊子青 H-15
封裝方法之Java程式實例
class Account { private int balance;
系統分析與設計 楊子青 H-16
1.4 繼承(Inheritance)
承接所有父類別 (Parent Class) 所有屬性及方法,並可加以改造 的特性。
– 以男人和女人物件為例,將相同的 部分抽出,一般化成一個更上層的 類別(父類別),稱為「人」類別。
– 物件導向技術中,繼承概念對軟體 工程有革命性的影響,如達成程式 碼再用(Reuse)與減少重複描述、 產生可靠度較高的軟體等。