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

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第 9 章 物件的建構.
<<會計資訊系統課程講義>> 統一塑模語言(UML)語法精要 -- 物件導向概念、需求分析及系統分析
Ch02物件導向程式設計 物件導向系統分析與設計.
四資二甲 第三週作業 物件導向程式設計.
第二章 UML簡介 課前指引 本章介紹什麼是UML以及利用圖形來塑模資訊系統的好處在哪裡。文中也介紹了何謂「4+1的觀點」、以及簡述各項UML圖形的使用目的。並且,我們從靜態以及動態這兩個觀點來分類、介紹各圖形的使用時機。
第一章 面向对象程序设计.
程設一.
第10章 考试系统的分析与设计 1.
第二章 JAVA语言基础.
類別與物件 Class & Object.
Ch07 介面與多重繼承 物件導向程式設計(II).
軟體工程 -物件導向程式設計與UML系統分析實作
第9章 面向对象方法学引论 9.1 面向对象方法学概述 9.2 面向对象的概念 9.3 面向对象建模 9.4 对象模型 9.5 动态模型
JAVA程序设计 (03) JAVA Programming
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
程設一.
Ch08 巢狀類別 物件導向程式設計(II).
程式設計實作.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
H、物件導向技術 物件導向的基本概念 物件、類別 封裝、繼承 同名異式(多型) 、超荷(過載) 物件導向分析與設計及塑模工具 UML塑模工具.
物件導向程式語言Java 簡介 1.
CHAPTER 9 建構方法 ROBERT.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
第六章 类的扩展与继承.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
物件導向系統分析與設計與UML.
UML工具 --8种优秀的UML工具.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
软件建模精要 面向对象软件建模技术.
Java软件设计基础 5. 继承与多态.
第9章 類別圖與物件圖 9-1 類別圖與物件圖的基礎 9-2 類別圖的符號 9-3 類別關係 9-4 物件圖 9-5 繪製類別圖與物件圖
第4章 物件導向分析與設計簡介 4-1 物件導向的軟體系統開發 4-2 物件導向分析與設計 4-3 UML的物件導向分析與設計
Java程序设计 第9章 继承和多态.
软件建模与UML.
類別的繼承 Vehicle Car.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
UML介绍.
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
第5讲 使用类和对象编程(三) 内部类 实例 程序控制结构 选择语句.
C/C++/Java 哪些值不是头等程序对象
两种不同类别的软件: 功能预定义软件;用户驱动的软件。他们对软件工程方法有不同的需求
類別與物件 I (Classes and Objects I)
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
第16章 虛擬與多形 16-1 虛擬函數 16-2 純虛擬函數與抽象類別 16-3 多形 16-4 虛擬繼承與虛擬解構子.
UML语言.
学习导航 学习导航.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第二章Java基本程序设计.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Interfaces and Packages
第6章 面向对象开发的 分析与设计.
辅导课程十一.
第二章 Java基本语法 讲师:复凡.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
UML ISKM Lab.
辅导课程十二.
JAVA 程式設計與資料結構 第三章 物件的設計.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

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

系統分析與設計 楊子青 H-2 物件導向? 不使用物件導向描述一件事 青椒炒牛肉 取出青椒 500 g ,用刀切成細絲,過油 取出牛肉 300 g ,切丁,用醬油、酒、 黑醋醃製 起油鍋、放入牛肉炒及青椒大火快炒 1 分半 拿出太白粉、水調在一起,這個稱為 芡汁。 將芡汁倒入鍋中攪拌,會產生黏稠現象 這叫芶芡 完成。 使用物件導向描述一件事 青椒炒牛肉 青椒 數量: 500 g 處理:用刀切成細絲,過油 牛肉 數量: 300 g 處理:切丁,用醬油、酒、黑醋醃製 芡汁 製作:太白粉調上適量的水 芶芡:將芡汁倒入鍋中 青椒處理好、牛肉處理好、芡汁製作好, 青椒、牛肉放入鍋中快炒 1 分半後,用 芡汁芶芡即可。

系統分析與設計 楊子青 H-3 物件、屬性、方法 青椒炒牛肉 青椒 數量: 500 g 處理:用刀切成細絲,過油 牛肉 數量: 300 g 處理:切丁,用醬油、酒、黑醋醃製 芡汁 製作:太白粉調上適量的水 芶芡:將芡汁倒入鍋中 青椒處理好、牛肉處理好、芡汁製作好, 放入鍋中快炒 1 分半後用芡汁芶芡即可。 先定義好參與這件事的物品有哪些 ( 這些物品叫做 “ 物件 ” ) 再定義這些物品所需的數量及行為 ( 這些數量及行為叫做 “ 屬性 ” 與 “ 方法 ” ) 接下來就可用物品間的互動行為 來描述整件事情是如何發生的。 ( 這部份的描述稱為 “ 主程式 ” ) n 物件導向優點:程式碼再用

系統分析與設計 楊子青 H-4 1. 物件導向的基本概念 n 物件導向技術 (Object-Oriented Technique) – 是繼結構化技術之後,系統開發上的新典範 (Paradigm) – 以物件模式來描述真實系統,並將資料抽象 化 (Data Abstraction) 、封裝、繼承、同名異 式、超荷的觀念融入物件導向的系統開發中

系統分析與設計 楊子青 H 物件 (Object) n 物件是一種可認知的東西,是物件導向 的基本思維單位 – 我們認知下圖是一輛車,是因為聯想到: 車子是紅色。 車子有四個門。 車子有四個輪胎。

系統分析與設計 楊子青 H-6 物件的範例 n 例如: Car1 物件模擬一輛 1800cc 紅色四 門的 Sentra 車子。 Car1 是物件的識別字, 使用 Car1 識別字,可以在眾多模擬其他 車輛的 Car2 、 Car3 、 Car4…. 等物件中, 識別出是哪一輛車輛物件。

系統分析與設計 楊子青 H-7 物件的三種特性 n 狀態( State ):物件所有「屬性」 (Attributes) 目前的狀態值 – 例如:車子的車型、排氣量、色彩等屬性 – 以程式來說,也就是資料部分的變數,可以簡單到 只是一個布林值變數,也可能是另一個物件。 n 行為( Behavior ):物件提供的服務,稱操作 (Operations) 或方法 (Methods) – 例如:車子可以發動、停車、加速和換擋等 – 程式語言是使用程序或函數來實作行為 n 識別字( Identity ):每一個物件都擁有獨一無 二的識別字來識別它是不同的物件 – 例如使用物件實際儲存的記憶體位址 (Reference) , 作為物件的識別字

系統分析與設計 楊子青 H 類別 (Class) n 具有相同結構及行為的物件所組成之集合 – 類別是物件經分類 (Classification) 或抽象化 (Abstraction) 所得的結果 – 也就是將物件抽象化,僅考慮相同性質特徵, 排除其差異部分,將這些物件組成一個群體, 稱為類別。

系統分析與設計 楊子青 H-9 類別之範例

系統分析與設計 楊子青 H-10 類別 n 以詹姆士、愛德華物件 為例,他們有相似的行 為與資訊結構,可表示 成一個「人」的類別。

系統分析與設計 楊子青 H-11 物件與類別 n 物件導向程式,都是以類別為基本單位所 組成;在執行時的主體是物件,而非類別 class C { int i; // 類別 C 宣告了一整數變數 i } class D { public static void main(String[] args) { // 程式開始的起點 C c1; // 根據類別 C ,宣告一個物件,名稱為 c1 c1 = new C(); // 以類別 C 為範本,產生一個物件 c1 // 兩者可和寫為 C c1 = new C(); c1.i = 10; System.out.println("c1.i = "+c1.i); } 輸出結果: c1.i = 10

系統分析與設計 楊子青 H-12 物件與類別之 Java 程式實例 class Account { private int balance;// 宣告一帳戶餘額 void clearAccount() { balance = 0; }// 清空帳戶餘額的 " 方法 " void deposit(int m) { balance = balance + m; } // 存錢的 " 方法 " int getBalance() { return balance; } // 顯示目前餘額的 " 方法 " } class E { public static void main(String[] args) { Account joe = new Account(); // 產生一個帳戶: joe Account wason = new Account(); // 產生一個帳戶: wason joe.clearAccount(); // 將 Joe 的帳戶餘額清空 wason.clearAccount(); // 將 Wason 的帳戶餘額清空 joe.deposit(300); // Joe 存了 300 元 wason.deposit(500); // Wason 存了 500 元 // 顯示 Joe, Wason 目前的帳戶餘額 System.out.println("Joe has " + joe.getBalance() + "dollars."); System.out.println("Wason has " + wason.getBalance() + "dollars."); } 輸出結果: Joe has 300 dollars. Wason has 500 dollars.

系統分析與設計 楊子青 H 封裝 (Encapsulation) n 物件導向技術,將資訊 ( 屬性 ) 與操作此資訊 的函數 ( 方法 ) 包裝成一個物件,稱為封裝。 – 將物件的實作細節隱藏,使其與外界環境隔離 ,而只允許該物件所包含之操作修改其資訊, 稱為資訊隱藏 (Information Hiding) 。 使用物件時,僅需知道物件提供何種操作,而不需 知其內部之資訊或行為是如何表達或執行。 封裝之特性使物件導向的系統較容易維護。

系統分析與設計 楊子青 H-14 Java 的封裝 n 將物件中資源 ( 資料或方法 ) 的存取分為幾個等級, 以管理某些資源隱藏在物件中,某些資源開放給 外界使用。 –Public ( 公開 ) : 將物件內部的資源開放給外界使用。 –Private ( 私有 ) :資源的所有權完全屬於該類別,只有在 物件內部才可對其作存取動作。任何外部的存取均會導 致錯誤發生。 –Protected ( 保護 ) :在所屬的 package 中是被視為 public 資源;但是在其他的 package 中,則只被繼承的子類別 使用。 –Default Access ( 預設存取 ) 或 Package( 類別庫 ) :在所屬的 package 中是被視為 public 資源;但是在其他的 package 中,則會被視為是 private 資源而無法被使用。

系統分析與設計 楊子青 H-15 封裝資料之 Java 程式實例 class C { private int i; // 私有資料 public int j; // 公開資料 int k;// 預設存取資料 } class D { public static void main(String[] args) { C c = new C(); c.i = 5; // Error! c.i 是 private 資料,禁止存取! c.j = 10; // OK! c.k = 15; // OK! }

系統分析與設計 楊子青 H-16 封裝方法之 Java 程式實例 class Account { private int balance;// 私有資料 void public clearAccount() { balance = 0; }// 公開方法 void deposit(int m) { balance = balance + m; } // 預設存取方法 private int getBalance() { return balance; } // 私有方法 } class D { public static void main(String[] args) { Account joe = new Account(); joe.clearAccount(); // OK! joe.deposit(300); // OK! System.out.println(“Joe has ” + joe.getBalance() + “dollars.”); // ERROR! 使用私有方法 }

系統分析與設計 楊子青 H 繼承 (Inheritance) n 承接所有父類別 (Parent Class) 所有屬性及方法,並可加以改造 的特性。 – 以男人和女人物件為例,將相同的 部分抽出,一般化成一個更上層的 類別 ( 父類別 ) ,稱為「人」類別。 – 物件導向技術中,繼承概念對軟體 工程有革命性的影響,如達成程式 碼再用 (Reuse) 與減少重複描述、 產生可靠度較高的軟體等。

系統分析與設計 楊子青 H-18 繼承之實例 n 學生和老師都是人 ,可先定義 Person 類別來模擬人類, 然後擴充 Person 類 別建立 Student 和 Teacher 類別,模擬 學生和老師

系統分析與設計 楊子青 H-19 繼承之 Java 程式實例 class C { private int i; public void setInfo(int x) { i = x; } public int getInfo() { return i; } } 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(); d.setInfo(5); e.setInfo(7); System.out.println("The value of d is "+d.getInfo()); System.out.println("The value of e is "+e.getInfo()); } 執行結果: The value of d is 5 The value of e is 7

系統分析與設計 楊子青 H-20 覆寫 (overriding) n 子類別將繼承自父類別來的屬性或方法, 重新定義的動作 – 變數覆寫 將繼承自父類別的變數遮蓋起來。 ( 在父類別中的 變數宣告並不會因此消失,它只是隱藏起來而已 ) – 方法覆寫 將繼承自父類別的方法遮蓋起來。 這種設計讓我們在繼承類別時,可將不符合需求 的方法加以改寫,如此一來,子類別的使用者就 不會也不能看到及使用父類別中的方法,以達到 重新設計的目的。

系統分析與設計 楊子青 H-21 變數覆寫之 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); } 執行結果: d = 5

系統分析與設計 楊子青 H-22 方法覆寫之 Java 程式實例 class C { void f(String s) { System.out.println("f in class C: "+s); } class D extends C { void f(String s) { System.out.println("f in class D: "+s); // 父類別的方法被覆寫! } class E { public static void main(String[] args) { D d = new D(); d.f("hello"); } 執行結果: f in class D: hello

系統分析與設計 楊子青 H 同名異式 (Polymorphism) n 又稱「多型」 – 相同的方法名稱, 卻定義不同的實作 (implementation) – 目的:希望簡化系 統發展的複雜性, 並增加其彈性。 – 在人類的思維中, 對於同一種工作, 就算對象不同,也 會使用相同名稱的 操作,例如:

系統分析與設計 楊子青 H-24 同名異式又稱為動態多型 n 多型在程式呼叫一方法時,以動態連結 (Dynamic Binding) 的方式,來判斷當時被呼叫物件所屬的 類別,以決定執行哪一實作 動態多型是建立在繼承的架構上:

系統分析與設計 楊子青 H-25 同名異式之 Java 程式實例 abstract class Shape { public abstract void f(); } class Triangle extends Shape { public void f() { System.out.println("Triangle!"); } class Rectangle extends Shape { public void f() { System.out.println("Rectangle!"); } class Circle extends Shape { public void f() { System.out.println("Circle!"); } 執行結果: Triangle! Rectangle! Circle! class E { public static void main (String[] args) { Shape[] s = new Shape[] { new Triangle(), new Rectangle(), new Circle() }; for (int i=0; i<s.length; i++) { s[i].f(); }

系統分析與設計 楊子青 H 超荷 ( 或稱過載, Overload) n 在同一類別中有相同名稱的操作,依參數個數 及參數資料型態來判斷要使用哪一個操作,又 稱靜態多型。 – 例如: class C { int add(int i, int j) { return i + j; } int add(int i, int j, int k) { return i + j + k; } String add(String i, String j) { return i + j; } } class D { public static void main(String[] args) { C c1 = new C(); System.out.println(“ = "+c1.add(3,10)); System.out.println(" = "+c1.add(1,2,5)); System.out.println("'abc' + 'xyz' = "+c1.add("abc","xyz")); } 執行結果: = = 8 'abc' + 'xyz' = abcxyz

系統分析與設計 楊子青 H 物件導向分析與設計及塑模工具 n 統一塑模語言 (Unified Modeling Language, UML) – 可以讓我們使用圖形描述系統來建立模型 – 是 Rational 公司整合 Booch 、 Rumbaugh 與 Jacobson 三種方法,提出的物件導向塑模工具

系統分析與設計 楊子青 H-28 UML 的 4+1 觀點 n 對於複雜的軟體系統,需要透過一組 UML 圖形才能完整描述系統的所有資訊 – 可以從不同觀點來檢視,每一個觀點使用 特定種類的 UML 圖形來呈現。 n Kruchten’s 的 4+1 觀點能夠幫助我們呈現 不同種類 UML 圖形在描述整個系統模型 時扮演的角色,稱為「觀點模型」 (View Model)

系統分析與設計 楊子青 H 觀點 設計觀點 處理流程觀點 實作觀點 部署觀點 使用個案 觀點

系統分析與設計 楊子青 H-30 使用個案觀點 (Use Case View) n 從系統外部的使用者角度,來表達系統 要做什麼,並不涉及系統的軟硬體架構 – 由描述系統行為的使用個案組成 – 與其他 4 個觀點都相關,所以稱為 +1 觀點 –UML :使用個案圖。 設計觀點 處理流程 觀點 實作觀點 部署觀點 使用個案 觀點

系統分析與設計 楊子青 H-31 設計觀點 (Design View) n 描繪系統的靜態結構以及動態行為,以 做為系統所應提供之功能的解答 n 重點在系統之類別、介面、物件的合作 等設計問題 –UML :類別圖、物件圖、狀態圖和互動圖 ( 循序圖、溝通圖、時序圖、互動概觀圖 ) 。 設計觀點 處理流程 觀點 實作觀點 部署觀點 使用個案 觀點

系統分析與設計 楊子青 H-32 處理流程觀點 (Process View) n 描繪系統非功能需求的的績效 (Performance) 、產出 (Throughput) 與可擴充性 (Scalability) – 著重表達系統內部的處理程序,如同步機制之 執行緒 (thread) –UML :活動圖。 設計觀點 處理流程 觀點 實作觀點 部署觀點 使用個案 觀點

系統分析與設計 楊子青 H-33 實作觀點 (Implementation View) n 以程式設計者角度的觀點 – 著重於程式碼管理的模組與元件 – 以模組或元件來顯示設計觀點的物件,是在 哪一個模組或元件中實作。 –UML :元件圖。 設計觀點 處理流程 觀點 實作觀點 部署觀點 使用個案 觀點

系統分析與設計 楊子青 H-34 部署觀點 (Deployment View) n 從系統工程師觀點呈現的系統 – 表達系統執行時,各個組成元件的實際佈置 與安裝,強調系統執行環境的硬體拓撲上各 節點 (Nodes) 之配置。 –UML :部署圖。 設計觀點 處理流程 觀點 實作觀點 部署觀點 使用個案 觀點

系統分析與設計 楊子青 H-35 物件導向分析與設計之塑模 n 上述五個觀點,配合物件導向分析與設計 ( 含需 求分析、系統分析與設計 ) ,可分為五種塑模: – 使用個案塑模(需求塑模):使用個案圖、 活動圖、藍圖與資料詞彙 – 物件結構塑模:類別圖與物件圖 – 物件互動行為塑模:循序圖與溝通圖 – 使用者介面塑模:介面結構圖、介面藍圖、 介面詞彙、循序圖與狀態圖 – 系統元件與結構塑模:元件圖與部署圖

系統分析與設計 楊子青 H-36 套件圖

系統分析與設計 楊子青 H-37 物件導向核心工作流程與塑模 工具

系統分析與設計 楊子青 H-38 系統 分析與設計和塑模工具: 結構化 vs. 物件導向

系統分析與設計 楊子青 H UML 塑模工具 n UML 塑模工具 (UML Modelling Tool) ,可幫助 系統開發者使用 UML 圖形進行物件導向分析與 設計,快速建立軟體系統所需的模型。 n 依使用者的授權方式,可分為商業和免費版本 UML 塑模工具。 n 簡介影片: 簡介影片 –UML Video 01: Choosing the right UML Package

系統分析與設計 楊子青 H-40 商業版本的 UML 塑模工具 n 提供較強大功能 – 很多都提供 Community 社群版,可以讓非商業用途 的使用者免費使用,不過,其功能會打一些折扣, 而且通常都需要線上註冊啟動後才能使用。 n 常見商業版本的 UML 塑模工具,如下: –IBM Rational Software Architect ( RSA ) –Microsoft Visio –Astah UML –Visual Paradigm for UML ( VP-UML ) –Enterprise Architect…

系統分析與設計 楊子青 H-41 免費版本的 UML 塑模工具 n Open Source( 開放原始碼 ) 的免費塑模工 具,和一些非商業用途使用者可全功能 免費使用的 UML 塑模工具,例如: –StarUML –ArgoUML –Umbrello –BOUML –Software Ideas Modeler…

系統分析與設計 楊子青 H-42 Software Ideas Modeler n 官方網站: n 下載: n 安裝: UMLVideo02: Install and Run Software Ideas Modeler UMLVideo02