PM-Chap9 數(shù)據(jù)抽象與面向?qū)ο蟮某绦蛟O(shè)計(jì)-1_第1頁
PM-Chap9 數(shù)據(jù)抽象與面向?qū)ο蟮某绦蛟O(shè)計(jì)-1_第2頁
PM-Chap9 數(shù)據(jù)抽象與面向?qū)ο蟮某绦蛟O(shè)計(jì)-1_第3頁
PM-Chap9 數(shù)據(jù)抽象與面向?qū)ο蟮某绦蛟O(shè)計(jì)-1_第4頁
PM-Chap9 數(shù)據(jù)抽象與面向?qū)ο蟮某绦蛟O(shè)計(jì)-1_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2022-4-1819 9章章 數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)鮑玉斌鮑玉斌東北大學(xué)信息學(xué)院東北大學(xué)信息學(xué)院計(jì)算機(jī)軟件與理論研究所計(jì)算機(jī)軟件與理論研究所Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 2Outline1.大型程序設(shè)計(jì)概述大型程序設(shè)計(jì)概述2.數(shù)據(jù)抽象和抽象數(shù)據(jù)類型數(shù)據(jù)抽象和抽象數(shù)據(jù)類型3. 抽象數(shù)據(jù)類型的形式規(guī)范描述抽象數(shù)據(jù)類型的形式規(guī)范描述4. 面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)5.面向?qū)ο蠡靖拍蠲嫦驅(qū)?/p>

2、象基本概念6. 面向?qū)ο蟮脑O(shè)計(jì)過程面向?qū)ο蟮脑O(shè)計(jì)過程7.面向?qū)ο竺嫦驅(qū)ο?vs 傳統(tǒng)的設(shè)計(jì)方法傳統(tǒng)的設(shè)計(jì)方法8. 面向?qū)ο笤O(shè)計(jì)的基本原則面向?qū)ο笤O(shè)計(jì)的基本原則Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 39.1大型程序設(shè)計(jì)概述大型程序設(shè)計(jì)概述內(nèi)容提要內(nèi)容提要:n 大型程序的基本特點(diǎn)大型程序的基本特點(diǎn)n 與小型程序設(shè)計(jì)的差別與小型程序設(shè)計(jì)的差別n 大型程序設(shè)計(jì)方法大型程序設(shè)計(jì)方法n 模塊分解準(zhǔn)則模塊分解準(zhǔn)則 Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦?/p>

3、設(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 49.1大型程序設(shè)計(jì)概述大型程序設(shè)計(jì)概述一、一、 大型程序的特點(diǎn)大型程序的特點(diǎn)n大型程序是相對(duì)程序的大型程序是相對(duì)程序的復(fù)雜性復(fù)雜性而言而言,復(fù)雜性來自復(fù)雜性來自兩個(gè)方面兩個(gè)方面:n由多個(gè)人合作完成由多個(gè)人合作完成,形成大型程序的設(shè)計(jì)管理時(shí)的,形成大型程序的設(shè)計(jì)管理時(shí)的復(fù)雜性復(fù)雜性: 任務(wù)劃分、估計(jì)、資源分配、每個(gè)程序員任務(wù)劃分、估計(jì)、資源分配、每個(gè)程序員進(jìn)度的掌握、控制,檢查每個(gè)階段的設(shè)計(jì)標(biāo)準(zhǔn)進(jìn)度的掌握、控制,檢查每個(gè)階段的

4、設(shè)計(jì)標(biāo)準(zhǔn)等。等。n來自于大量的系統(tǒng)狀態(tài)來自于大量的系統(tǒng)狀態(tài)。正確處理每個(gè)狀態(tài)、組織。正確處理每個(gè)狀態(tài)、組織系統(tǒng)的程序邏輯、驗(yàn)證系統(tǒng)的正確性非常困難系統(tǒng)的程序邏輯、驗(yàn)證系統(tǒng)的正確性非常困難n正確性仍然是程序設(shè)計(jì)的首要目標(biāo)。正確性仍然是程序設(shè)計(jì)的首要目標(biāo)。健壯性、健壯性、易維護(hù)性、可靠性、可重用性易維護(hù)性、可靠性、可重用性Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 59.1大型程序設(shè)計(jì)概述大型程序設(shè)計(jì)概述二、二、 大型程序設(shè)計(jì)大型程序設(shè)計(jì)n大

5、型程序設(shè)計(jì)必然用模塊化設(shè)計(jì)思想大型程序設(shè)計(jì)必然用模塊化設(shè)計(jì)思想.n自頂向下、分而治之是對(duì)付系統(tǒng)復(fù)雜性的重要手段。自頂向下、分而治之是對(duì)付系統(tǒng)復(fù)雜性的重要手段。n分解和抽象是設(shè)計(jì)大型程序的重要方法。分解和抽象是設(shè)計(jì)大型程序的重要方法。n大型程序設(shè)計(jì)大型程序設(shè)計(jì)n就是如何將一個(gè)大型的程序就是如何將一個(gè)大型的程序系統(tǒng)分解為易于管理的模塊、系統(tǒng)分解為易于管理的模塊、如何定義模塊的界面、如何把這些模塊組織成一個(gè)程序如何定義模塊的界面、如何把這些模塊組織成一個(gè)程序系統(tǒng)系統(tǒng)的過程。的過程。n實(shí)質(zhì)是用模塊進(jìn)行程序設(shè)計(jì)實(shí)質(zhì)是用模塊進(jìn)行程序設(shè)計(jì)n重點(diǎn)在于模塊的連接和相互作用。重點(diǎn)在于模塊的連接和相互作用。n大型程

6、序的設(shè)計(jì)大型程序的設(shè)計(jì)=大型程序設(shè)計(jì)大型程序設(shè)計(jì)+小型程序設(shè)計(jì)小型程序設(shè)計(jì)n另一個(gè)很重要的方面是軟件開發(fā)環(huán)境和開發(fā)工具的選擇另一個(gè)很重要的方面是軟件開發(fā)環(huán)境和開發(fā)工具的選擇.Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 69.1大型程序設(shè)計(jì)概述大型程序設(shè)計(jì)概述三、三、 模塊分解的原則模塊分解的原則n模塊化方法通過減少任意時(shí)刻所必須考慮的細(xì)節(jié)模塊化方法通過減少任意時(shí)刻所必須考慮的細(xì)節(jié)(即抽象的即抽象的方法方法)來控制系統(tǒng)的復(fù)雜性來控制系統(tǒng)的復(fù)

7、雜性. n不同的模塊分解方法對(duì)系統(tǒng)的效率和復(fù)雜性的控制有很大不同的模塊分解方法對(duì)系統(tǒng)的效率和復(fù)雜性的控制有很大的影響的影響. 四、四、 模塊分解的兩種方法模塊分解的兩種方法:n基于基于功能抽象的模塊分解功能抽象的模塊分解方法方法. 數(shù)據(jù)作為模塊的界面數(shù)據(jù)作為模塊的界面, 成為成為橫向模塊化橫向模塊化設(shè)計(jì)設(shè)計(jì). n基于數(shù)據(jù)抽象的模塊分解方法基于數(shù)據(jù)抽象的模塊分解方法. 以以“信息隱蔽信息隱蔽”為模塊分解為模塊分解原則原則. 數(shù)據(jù)上的操作作為模塊的界面數(shù)據(jù)上的操作作為模塊的界面, 稱為稱為縱向模塊化縱向模塊化設(shè)計(jì)設(shè)計(jì), n大型軟件系統(tǒng)的設(shè)計(jì)一般是橫向和縱向模塊化設(shè)計(jì)的綜合大型軟件系統(tǒng)的設(shè)計(jì)一般是橫

8、向和縱向模塊化設(shè)計(jì)的綜合Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 79.2 數(shù)據(jù)抽象和抽象數(shù)據(jù)類型數(shù)據(jù)抽象和抽象數(shù)據(jù)類型n數(shù)據(jù)和對(duì)數(shù)據(jù)的處理是整個(gè)程序設(shè)計(jì)的核心數(shù)據(jù)和對(duì)數(shù)據(jù)的處理是整個(gè)程序設(shè)計(jì)的核心n數(shù)據(jù)表示的復(fù)雜性數(shù)據(jù)表示的復(fù)雜性決定其上操作實(shí)現(xiàn)的復(fù)雜性決定其上操作實(shí)現(xiàn)的復(fù)雜性: Algorithm+Data Structure= Programn有效地控制有效地控制數(shù)據(jù)的表示數(shù)據(jù)的表示,是控制程序復(fù)雜性的關(guān)鍵,是控制程序復(fù)雜性的關(guān)鍵

9、.n基于功能分解的模塊化設(shè)計(jì)方法不能用于控制大型基于功能分解的模塊化設(shè)計(jì)方法不能用于控制大型軟件系統(tǒng)的復(fù)雜性。軟件系統(tǒng)的復(fù)雜性。n數(shù)據(jù)抽象是一種新的設(shè)計(jì)方法,它把一組數(shù)據(jù)對(duì)象數(shù)據(jù)抽象是一種新的設(shè)計(jì)方法,它把一組數(shù)據(jù)對(duì)象及其作用其上的操作組成一個(gè)程序?qū)嶓w,使得外部及其作用其上的操作組成一個(gè)程序?qū)嶓w,使得外部只知道它做什么,而不知道它怎么做,也不知道其只知道它做什么,而不知道它怎么做,也不知道其數(shù)據(jù)對(duì)象是如何表示的。數(shù)據(jù)對(duì)象是如何表示的。數(shù)據(jù)抽象的背景與動(dòng)機(jī)數(shù)據(jù)抽象的背景與動(dòng)機(jī)Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)

10、院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 89.2數(shù)據(jù)抽象和抽象數(shù)據(jù)類型數(shù)據(jù)抽象和抽象數(shù)據(jù)類型n控制大型程序的復(fù)雜性要解決的問題:控制大型程序的復(fù)雜性要解決的問題:n更新程序設(shè)計(jì)語言中的類型定義的設(shè)施更新程序設(shè)計(jì)語言中的類型定義的設(shè)施,使得類型的內(nèi),使得類型的內(nèi)部表示細(xì)節(jié)對(duì)外界不可見,使得用戶程序不依賴于數(shù)據(jù)部表示細(xì)節(jié)對(duì)外界不可見,使得用戶程序不依賴于數(shù)據(jù)的某一具體的表示。的某一具體的表示。n尋求連接模塊的新方法,尋求連接模塊的新方法,盡可能縮小模塊的界面盡可能縮小模塊的界面。n解決途徑:解決途徑:n在程序設(shè)計(jì)語言中更新模塊的概念,尋求訪問類型對(duì)象在程序設(shè)

11、計(jì)語言中更新模塊的概念,尋求訪問類型對(duì)象的新途徑。的新途徑。nSimula67語言引入類(語言引入類(class)的概念。一個(gè)邏輯模的概念。一個(gè)邏輯模塊在其中可以表示為過程、函數(shù)、或類塊在其中可以表示為過程、函數(shù)、或類n設(shè)計(jì)具有下面特征的語言,如并行設(shè)計(jì)具有下面特征的語言,如并行Pascal、Ada等:等:數(shù)據(jù)抽象的背景與動(dòng)機(jī)數(shù)據(jù)抽象的背景與動(dòng)機(jī)Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 99.2數(shù)據(jù)抽象和抽象數(shù)據(jù)類型數(shù)據(jù)抽象和抽象數(shù)據(jù)類

12、型n類型不在是單純的一組值集,而是類型不在是單純的一組值集,而是一組值集和一組操作一組值集和一組操作的的二元合成。二元合成。n為用戶提供自定義類型的設(shè)施,如并發(fā)為用戶提供自定義類型的設(shè)施,如并發(fā)Pascal中的進(jìn)程,中的進(jìn)程,管程,過程,管程,過程,Ada中的中的Package。使得類型表示細(xì)節(jié)、操使得類型表示細(xì)節(jié)、操作的實(shí)現(xiàn)對(duì)外不可見,故稱為抽象數(shù)據(jù)類型作的實(shí)現(xiàn)對(duì)外不可見,故稱為抽象數(shù)據(jù)類型。n用戶自定義類型設(shè)施正是語言中的基本程序模塊,從而將用戶自定義類型設(shè)施正是語言中的基本程序模塊,從而將模塊和數(shù)據(jù)類型等同起來;一個(gè)模塊是由數(shù)據(jù)和作用在其模塊和數(shù)據(jù)類型等同起來;一個(gè)模塊是由數(shù)據(jù)和作用在其

13、上的操作構(gòu)成的實(shí)體。上的操作構(gòu)成的實(shí)體。n這時(shí),模塊不在是一個(gè)功能抽象單位,而是一個(gè)數(shù)據(jù)抽象這時(shí),模塊不在是一個(gè)功能抽象單位,而是一個(gè)數(shù)據(jù)抽象單位。模塊間的界面不再是復(fù)雜的數(shù)據(jù),而是作用在數(shù)據(jù)單位。模塊間的界面不再是復(fù)雜的數(shù)據(jù),而是作用在數(shù)據(jù)上的具有形式說明的操作上的具有形式說明的操作數(shù)據(jù)抽象的背景與動(dòng)機(jī)數(shù)據(jù)抽象的背景與動(dòng)機(jī)Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 109.2數(shù)據(jù)抽象和抽象數(shù)據(jù)類型數(shù)據(jù)抽象和抽象數(shù)據(jù)類型總之:總之:n數(shù)據(jù)

14、抽象是程序設(shè)計(jì)方法學(xué)的一個(gè)極為重?cái)?shù)據(jù)抽象是程序設(shè)計(jì)方法學(xué)的一個(gè)極為重要的方法,是要的方法,是70年代程序設(shè)計(jì)方法學(xué)的主年代程序設(shè)計(jì)方法學(xué)的主要成就之一。要成就之一。n把把數(shù)據(jù)抽象和結(jié)構(gòu)化程序設(shè)計(jì)數(shù)據(jù)抽象和結(jié)構(gòu)化程序設(shè)計(jì)一起譽(yù)為程一起譽(yù)為程序設(shè)計(jì)方法學(xué)發(fā)展史上的兩個(gè)序設(shè)計(jì)方法學(xué)發(fā)展史上的兩個(gè)里程碑里程碑。Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 119.3 抽象數(shù)據(jù)類型的形式規(guī)范描述抽象數(shù)據(jù)類型的形式規(guī)范描述n為什么:為什么:n程序員如何

15、來定義數(shù)據(jù)抽象模塊?程序員如何來定義數(shù)據(jù)抽象模塊?n模塊的用戶怎樣才能在不知道細(xì)節(jié)的情模塊的用戶怎樣才能在不知道細(xì)節(jié)的情況下,正確地使用語言數(shù)據(jù)抽象模塊?況下,正確地使用語言數(shù)據(jù)抽象模塊?Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 129.3.1 抽象數(shù)據(jù)類型的規(guī)范描述抽象數(shù)據(jù)類型的規(guī)范描述1. 抽象數(shù)據(jù)類型的規(guī)范描述抽象數(shù)據(jù)類型的規(guī)范描述:n程序員在劃分模塊時(shí)程序員在劃分模塊時(shí),必須給出模塊語義的注釋必須給出模塊語義的注釋規(guī)范描述規(guī)范描

16、述:n說明模塊將做什么說明模塊將做什么;n使得設(shè)計(jì)者能夠以此作為模塊設(shè)計(jì)的目標(biāo)使得設(shè)計(jì)者能夠以此作為模塊設(shè)計(jì)的目標(biāo);n確保編寫的模塊滿足規(guī)范描述的要求確保編寫的模塊滿足規(guī)范描述的要求,保證模塊實(shí)現(xiàn)的保證模塊實(shí)現(xiàn)的正確性正確性;n模塊的使用者以此作為使用的依據(jù)模塊的使用者以此作為使用的依據(jù),保證用戶正確理解保證用戶正確理解模塊和正確使用模塊模塊和正確使用模塊n便于證明模塊實(shí)現(xiàn)的正確性便于證明模塊實(shí)現(xiàn)的正確性;n為使用模塊的應(yīng)用程序的正確性證明提供條件為使用模塊的應(yīng)用程序的正確性證明提供條件Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟

17、件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 139.3.1 抽象數(shù)據(jù)類型的規(guī)范描述抽象數(shù)據(jù)類型的規(guī)范描述2. ADT規(guī)范描述方法規(guī)范描述方法nADT的形式規(guī)范有許多方法,可歸為兩類:的形式規(guī)范有許多方法,可歸為兩類:n操作規(guī)范操作規(guī)范n定義規(guī)范定義規(guī)范n操作規(guī)范:操作規(guī)范:不是描述抽象類型的性質(zhì),而是給出不是描述抽象類型的性質(zhì),而是給出構(gòu)造它的方法構(gòu)造它的方法,即用某種底層語言為這個(gè)類型建,即用某種底層語言為這個(gè)類型建立模型。特點(diǎn):立模型。特點(diǎn):n它容易被培訓(xùn)過的程序員構(gòu)造。它容易被培訓(xùn)過的程序員構(gòu)造。n對(duì)于包含少量中等運(yùn)算的抽象類型,操作規(guī)范

18、提供了對(duì)于包含少量中等運(yùn)算的抽象類型,操作規(guī)范提供了充分的清晰度充分的清晰度n當(dāng)被描述的運(yùn)算變得復(fù)雜時(shí),操作規(guī)范勢(shì)必變得冗長(zhǎng)當(dāng)被描述的運(yùn)算變得復(fù)雜時(shí),操作規(guī)范勢(shì)必變得冗長(zhǎng)Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 149.3.1 抽象數(shù)據(jù)類型的規(guī)范描述抽象數(shù)據(jù)類型的規(guī)范描述n定義規(guī)范:定義規(guī)范:給出抽象類型的目標(biāo)及其運(yùn)算必備給出抽象類型的目標(biāo)及其運(yùn)算必備的性質(zhì)的性質(zhì)n特點(diǎn):傾向于一般的定義類型,不過多涉及特點(diǎn):傾向于一般的定義類型,不過多

19、涉及多余的細(xì)節(jié),因而能增加規(guī)范的清晰度多余的細(xì)節(jié),因而能增加規(guī)范的清晰度n方法:方法:nHoare公理規(guī)范方法:應(yīng)用廣泛公理規(guī)范方法:應(yīng)用廣泛n數(shù)學(xué)語義的格理論方法:特點(diǎn)對(duì)論述的定數(shù)學(xué)語義的格理論方法:特點(diǎn)對(duì)論述的定義域限制更少;可以對(duì)實(shí)現(xiàn)者提供引導(dǎo)義域限制更少;可以對(duì)實(shí)現(xiàn)者提供引導(dǎo)Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 15Hoare公理化方法公理化方法n例:例:Module smallintset: n給出了在域給出了在域1100

20、的整數(shù)集合的抽象。的整數(shù)集合的抽象。n運(yùn)算包括:運(yùn)算包括:insert, remove, has。n當(dāng)類型當(dāng)類型smallintset的變量被聲明時(shí),它被初始的變量被聲明時(shí),它被初始化為空集?;癁榭占?。n該集合將由該集合將由100個(gè)元素的布爾數(shù)組個(gè)元素的布爾數(shù)組S描述,即:描述,即: s: array 1.100 of boolean其中,其中,s(i)=TRUE表示表示i屬于該集合。屬于該集合。Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved

21、 16Module smallintsetn該抽象類型的規(guī)范如下:該抽象類型的規(guī)范如下:Type smallintset= pre true module smallset abstract invariant true concrete invariant true exports( insert, remove, has, :=) var a:array 1.100 of boolean(Cont)Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reser

22、ved 17Module smallintset(Cont)procedure insert(i:integer)= pre 1=i=100 and smallset=smallset post smallset=smallset union i begin s(i):=true end insertProcedure remove(i:integer)= pre 1=i=100 and smallset=smallset post smallset=smallset - i begin s(i):=false end removeChap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)

23、2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 18Module smallintset(Cont)nFunction has(i:integer) return hasresult:boolean= pre 1=i=100 post hasresult=(i smallset) begin hasresult := s(i) end hasInitially post smallset= begin for j in s.indextype loop s(j):=false end loop end

24、initiallyChap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 19Module smallintset(Cont)Abstraction function setvalue returns result =import(s) begin resultset=j| s(j) and 1=j=100 end invariant trueEnd smallintset 該模型提供了不同層次的信息:模型的用戶僅看到與該模型提供了不同層次的信息:模

25、型的用戶僅看到與模型子程序相聯(lián)系的模型子程序相聯(lián)系的Pre/Post條件,以及與模型本身相條件,以及與模型本身相聯(lián)系的聯(lián)系的Pre/Post條件。條件。 模型實(shí)現(xiàn)者還會(huì)看到模型子程序的體和模型中說明的模型實(shí)現(xiàn)者還會(huì)看到模型子程序的體和模型中說明的標(biāo)識(shí)符標(biāo)識(shí)符Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 20代數(shù)方法代數(shù)方法n抽象類型的代數(shù)規(guī)范由三部分組成:抽象類型的代數(shù)規(guī)范由三部分組成:n語法規(guī)范:語法規(guī)范:該規(guī)范提供了語法和類型檢查信息,

26、該規(guī)范提供了語法和類型檢查信息,即與類型相聯(lián)系的運(yùn)算的名字、定義域和值域。即與類型相聯(lián)系的運(yùn)算的名字、定義域和值域。n語義規(guī)范:語義規(guī)范:一組公理集合,這些公理一組公理集合,這些公理使用確定使用確定運(yùn)算之間運(yùn)算之間的關(guān)系定義運(yùn)算。的關(guān)系定義運(yùn)算。n約束規(guī)范:約束規(guī)范:約束規(guī)范涉及前置條件和執(zhí)行條件。約束規(guī)范涉及前置條件和執(zhí)行條件。n例:例:Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 21類型類型BAG的代數(shù)規(guī)范的代數(shù)規(guī)范n語法規(guī)范:語法規(guī)

27、范:nEmpty-bag: bagnInsert: bag x integer bagnDelete: bag x integer bagnMember-of: bag x integer booleanChap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 22類型類型BAG的代數(shù)規(guī)范的代數(shù)規(guī)范(Cont)n語義規(guī)范語義規(guī)范nDeclare b: bag; i, i:integer1.Member-of ? (empty-bag, i) = fal

28、se2.Member-of ?(insert(b, i), i) = if ? = ? (i, i) then true else member-of ?(b, i)3.Delete( empty-bag, i)=empty-bag4.Delete(insert(b, i), i)= if ?=?(i, i) then b else insert(delete(b,i), i)Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 23例例2:類型:

29、類型SET的代數(shù)規(guī)范的代數(shù)規(guī)范n語法規(guī)范語法規(guī)范nEmpty-set: setnInsert: set x integer setnDelete: set x integer setnMember-of?: set x integer booleanChap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 24例例2:類型:類型SET的代數(shù)規(guī)范的代數(shù)規(guī)范n語義規(guī)范語義規(guī)范nDeclare s: set; i,i:integer;1.Member-of?

30、 (empty-set, i) = false2.Member-of?(insert(s,i), i) = if ?=?(i,i) then true else member-of?(s,i)3.Delete (empty-set, i) = empty-set4.Delete (insert(s,i),i) = if ?=?(i,i) then delete(s,i) else insert(delete(s,i), i)Bag 與與Set 的的區(qū)別區(qū)別Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)

31、方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 259.4 面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)n穩(wěn)定穩(wěn)定: 較小的需求變化不會(huì)導(dǎo)致系較小的需求變化不會(huì)導(dǎo)致系統(tǒng)結(jié)構(gòu)大的改變統(tǒng)結(jié)構(gòu)大的改變n舉例:某公司的銷售處理系統(tǒng)舉例:某公司的銷售處理系統(tǒng)定單定單合同合同出費(fèi)出費(fèi)Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 269.4 面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)n 穩(wěn)定穩(wěn)定: 數(shù)據(jù)和功能都打包在一起,從而改善軟件的再數(shù)據(jù)和功能都打包

32、在一起,從而改善軟件的再重用性重用性n軟件重用能提高質(zhì)量軟件重用能提高質(zhì)量,減少由于編制新的系統(tǒng)代碼而,減少由于編制新的系統(tǒng)代碼而產(chǎn)生的成本產(chǎn)生的成本FileMgrMacroEditorMathUtilitiesTextEditorPrintUtilitiesFormatEditorMenusStringUtilitiesSpreadsheetWord ProcessorReusable-Component RepositoryChap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All

33、 Rights Reserved 279.4 面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)n面向?qū)ο蟮哪P透淤N切地反映了現(xiàn)實(shí)世界面向?qū)ο蟮哪P透淤N切地反映了現(xiàn)實(shí)世界n更加準(zhǔn)確地描述公共數(shù)據(jù)和過程更加準(zhǔn)確地描述公共數(shù)據(jù)和過程n易于理解,尤其對(duì)于使用者易于理解,尤其對(duì)于使用者現(xiàn)實(shí)世界現(xiàn)實(shí)世界Laser PrinterExternal DriveComputer對(duì)象圖對(duì)象圖Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 289.4 面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)面

34、向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)n 面向?qū)ο蟮姆椒ㄖС执笠?guī)模開發(fā)面向?qū)ο蟮姆椒ㄖС执笠?guī)模開發(fā)n 可以嚴(yán)格定義各個(gè)組件之間的交互可以嚴(yán)格定義各個(gè)組件之間的交互n 減少內(nèi)部的依賴關(guān)系減少內(nèi)部的依賴關(guān)系n 減少集成的問題減少集成的問題n 支持并行開發(fā)支持并行開發(fā)Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 299.4 面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)n幫助開發(fā)多層結(jié)構(gòu)幫助開發(fā)多層結(jié)構(gòu) Equipment and Customer specific CodeP

35、rocesses and other application code Major abstractions, classes, etc. MechanismsH/W specific code, O/S specific code general-purpose code12345ApplicationSpecificApplicationIndependentLess ReuseMore ReuseChap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reser

36、ved 309.4 面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)n對(duì)系統(tǒng)的一部分進(jìn)行再工程,保護(hù)前對(duì)系統(tǒng)的一部分進(jìn)行再工程,保護(hù)前期軟件應(yīng)用的投資期軟件應(yīng)用的投資Existing SoftwareReengineered SoftwareChap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 319.4 面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)面向?qū)ο蠹夹g(shù)的優(yōu)勢(shì)(小結(jié)小結(jié))n需求改變時(shí)系統(tǒng)穩(wěn)定需求改變時(shí)系統(tǒng)穩(wěn)定n高水準(zhǔn)的軟件高水準(zhǔn)的軟件Reusabilityn更準(zhǔn)確的模型,更易于

37、理解更準(zhǔn)確的模型,更易于理解n嚴(yán)格定義大規(guī)模開發(fā)的交互界限嚴(yán)格定義大規(guī)模開發(fā)的交互界限n對(duì)象的封裝有利于對(duì)象的封裝有利于 client-server 應(yīng)用的開發(fā)應(yīng)用的開發(fā)n再工程保護(hù)前期投資再工程保護(hù)前期投資OOD增加細(xì)節(jié)和設(shè)計(jì)決策增加細(xì)節(jié)和設(shè)計(jì)決策開發(fā)人員的角度開發(fā)人員的角度OOA開發(fā)需求模型開發(fā)需求模型用戶的角度用戶的角度OOP實(shí)現(xiàn)和測(cè)試實(shí)現(xiàn)和測(cè)試Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 329.5 面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮幕?/p>

38、概念 n對(duì)象、類、消息對(duì)象、類、消息n封裝性、繼承性和多態(tài)性封裝性、繼承性和多態(tài)性n概念內(nèi)涵的區(qū)別概念內(nèi)涵的區(qū)別OOM = Object+ Class + Inheritance + Communication with messagesChap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 331. 對(duì)象對(duì)象Object化學(xué)過程化學(xué)過程連接顯示連接顯示n一個(gè)對(duì)象代表了一個(gè)現(xiàn)實(shí)的或虛構(gòu)的實(shí)體一個(gè)對(duì)象代表了一個(gè)現(xiàn)實(shí)的或虛構(gòu)的實(shí)體n自然實(shí)體自然實(shí)體n概念

39、實(shí)體概念實(shí)體n軟件實(shí)體軟件實(shí)體Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 34對(duì)象對(duì)象在在OO中,所謂對(duì)象,是一個(gè)屬性(數(shù)據(jù))集及中,所謂對(duì)象,是一個(gè)屬性(數(shù)據(jù))集及其操作(行為)的封裝體。其操作(行為)的封裝體。對(duì)象對(duì)象 = = 數(shù)據(jù)數(shù)據(jù) + + 功能功能n作為計(jì)算機(jī)模擬真實(shí)世界的抽象,一個(gè)對(duì)象就作為計(jì)算機(jī)模擬真實(shí)世界的抽象,一個(gè)對(duì)象就是一個(gè)實(shí)際問題論域、一個(gè)物理的實(shí)體或邏輯是一個(gè)實(shí)際問題論域、一個(gè)物理的實(shí)體或邏輯的實(shí)體。的實(shí)體。n在計(jì)

40、算機(jī)程序中,可視為一個(gè)在計(jì)算機(jī)程序中,可視為一個(gè)“基本程序模塊基本程序模塊”,因?yàn)樗藬?shù)據(jù)結(jié)構(gòu)和所提供的相關(guān)操作功因?yàn)樗藬?shù)據(jù)結(jié)構(gòu)和所提供的相關(guān)操作功能。能。 Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 35對(duì)象的屬性對(duì)象的屬性n對(duì)象是應(yīng)用中具有明顯邊界和含義的概對(duì)象是應(yīng)用中具有明顯邊界和含義的概念、抽象或事物念、抽象或事物n 一個(gè)對(duì)象有三個(gè)重要屬性一個(gè)對(duì)象有三個(gè)重要屬性: :n 狀態(tài)狀態(tài)n 行為行為n 標(biāo)識(shí)標(biāo)識(shí)n 術(shù)語術(shù)語“實(shí)例

41、實(shí)例”是是“對(duì)象對(duì)象”的同義詞的同義詞Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 36對(duì)象的狀態(tài)對(duì)象的狀態(tài)n 一個(gè)對(duì)象的狀態(tài)是它反映于現(xiàn)實(shí)世界的一個(gè)對(duì)象的狀態(tài)是它反映于現(xiàn)實(shí)世界的一系列屬性:一系列屬性:n 參數(shù)的數(shù)值參數(shù)的數(shù)值 ( (也就是也就是, ,與對(duì)象有關(guān)系的數(shù)據(jù)與對(duì)象有關(guān)系的數(shù)據(jù)) )n 它與其它對(duì)象的關(guān)系它與其它對(duì)象的關(guān)系n 任一時(shí)刻的歷史狀態(tài)任一時(shí)刻的歷史狀態(tài)n包括那些屬性取決于視點(diǎn)包括那些屬性取決于視點(diǎn)可能的狀態(tài)可能的狀態(tài)(

42、運(yùn)營(yíng)角度)(運(yùn)營(yíng)角度)停泊停泊 運(yùn)營(yíng)運(yùn)營(yíng)著陸著陸 終止終止班機(jī)班機(jī) 747 747可能的狀態(tài)可能的狀態(tài)(維修(維修角度)角度)發(fā)動(dòng)機(jī)型號(hào)發(fā)動(dòng)機(jī)型號(hào) 線路規(guī)范線路規(guī)范 Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 37對(duì)象的行為對(duì)象的行為n定義當(dāng)其它對(duì)象發(fā)出請(qǐng)求時(shí),該對(duì)象如定義當(dāng)其它對(duì)象發(fā)出請(qǐng)求時(shí),該對(duì)象如何反應(yīng)何反應(yīng)n由為對(duì)象定義的一系列操作決定由為對(duì)象定義的一系列操作決定班機(jī)班機(jī) 747核對(duì)出發(fā)時(shí)間核對(duì)出發(fā)時(shí)間(返回返回 9:27)機(jī)票代

43、理機(jī)票代理Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 38對(duì)象的標(biāo)識(shí)對(duì)象的標(biāo)識(shí)OIDn 每一個(gè)對(duì)象都有一個(gè)唯一的標(biāo)識(shí)每一個(gè)對(duì)象都有一個(gè)唯一的標(biāo)識(shí), , 即使即使其狀態(tài)有可能與其它對(duì)象一樣其狀態(tài)有可能與其它對(duì)象一樣班機(jī)班機(jī) 747 on 11/10班機(jī)班機(jī) 747 on 11/11班機(jī)班機(jī) 747 on 11/12Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件

44、所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 392. 什么是類(什么是類(Class)n 類是一組具有相同結(jié)構(gòu)和行為的對(duì)象的集合類是一組具有相同結(jié)構(gòu)和行為的對(duì)象的集合n 共同的結(jié)構(gòu)通過屬性表現(xiàn)出來共同的結(jié)構(gòu)通過屬性表現(xiàn)出來 (i.e. 數(shù)據(jù)數(shù)據(jù))n 共同的行為通過操作表現(xiàn)出來共同的行為通過操作表現(xiàn)出來 (i.e. 功能功能)班機(jī)班機(jī) 747結(jié)構(gòu)結(jié)構(gòu)班機(jī)號(hào)班機(jī)號(hào)日期日期分配的班分配的班機(jī)機(jī)起點(diǎn)起點(diǎn)終點(diǎn)終點(diǎn)狀態(tài)狀態(tài)行為行為裝載設(shè)備裝載設(shè)備起飛起飛延遲延遲取消取消終止終止Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信

45、息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 403. 消息(消息(Message)n消息(消息(Message)是面向?qū)ο笙到y(tǒng)中實(shí)現(xiàn)對(duì)象間的通)是面向?qū)ο笙到y(tǒng)中實(shí)現(xiàn)對(duì)象間的通信和請(qǐng)求任務(wù)的操作。信和請(qǐng)求任務(wù)的操作。n消息傳遞是系統(tǒng)構(gòu)成的基本元素,是程序運(yùn)行的基本消息傳遞是系統(tǒng)構(gòu)成的基本元素,是程序運(yùn)行的基本處理活動(dòng)。處理活動(dòng)。nMessage: = object_ID. method_ID (parameter(s);n一個(gè)對(duì)象所能接受的消息及其所帶參數(shù),構(gòu)成該對(duì)象一個(gè)對(duì)象所能接受的消息及其所帶參數(shù),構(gòu)成該對(duì)象的外部接口。的外部接口。n

46、一個(gè)對(duì)象可以同時(shí)向多個(gè)對(duì)象發(fā)送消息,也可以接受一個(gè)對(duì)象可以同時(shí)向多個(gè)對(duì)象發(fā)送消息,也可以接受多個(gè)對(duì)象發(fā)來的消息,消息只反映發(fā)送者的請(qǐng)求,由多個(gè)對(duì)象發(fā)來的消息,消息只反映發(fā)送者的請(qǐng)求,由于消息的識(shí)別、解釋取決于接受者,因而同樣的消息于消息的識(shí)別、解釋取決于接受者,因而同樣的消息在不同對(duì)象中可解釋成相應(yīng)的行為。在不同對(duì)象中可解釋成相應(yīng)的行為。 Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 414. 封裝性封裝性(Encapsulation)n封

47、裝的目的是有效實(shí)現(xiàn)信息隱藏原則。這是軟件設(shè)計(jì)模封裝的目的是有效實(shí)現(xiàn)信息隱藏原則。這是軟件設(shè)計(jì)模塊化、軟件復(fù)用和軟件維護(hù)的一個(gè)基礎(chǔ)。塊化、軟件復(fù)用和軟件維護(hù)的一個(gè)基礎(chǔ)。n封裝是一種機(jī)制,它將某些代碼和數(shù)據(jù)鏈接起來,形成封裝是一種機(jī)制,它將某些代碼和數(shù)據(jù)鏈接起來,形成一個(gè)自包含的黑盒子(即一個(gè)對(duì)象)。封裝的定義為:一個(gè)自包含的黑盒子(即一個(gè)對(duì)象)。封裝的定義為:n一個(gè)清楚的邊界,封裝的基本單位是對(duì)象;一個(gè)清楚的邊界,封裝的基本單位是對(duì)象;n一個(gè)接口,描述該對(duì)象與其它對(duì)象之間的相互作用;一個(gè)接口,描述該對(duì)象與其它對(duì)象之間的相互作用; n受保護(hù)的內(nèi)部實(shí)現(xiàn),提供對(duì)象的相應(yīng)的軟件功能細(xì)節(jié),受保護(hù)的內(nèi)部實(shí)現(xiàn)

48、,提供對(duì)象的相應(yīng)的軟件功能細(xì)節(jié),且實(shí)現(xiàn)細(xì)節(jié)不能在定義該對(duì)象的類之外且實(shí)現(xiàn)細(xì)節(jié)不能在定義該對(duì)象的類之外DirLocSet-in-griddisplayFacing WallTurn-left/rightAdvanceLocationChap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 425. 繼承性(繼承性(Inheritance)n繼承性體現(xiàn)了現(xiàn)實(shí)世界中對(duì)象之間的獨(dú)特關(guān)系。繼承性體現(xiàn)了現(xiàn)實(shí)世界中對(duì)象之間的獨(dú)特關(guān)系。n既然類是對(duì)具體對(duì)象的抽象,那么

49、就可以有不同既然類是對(duì)具體對(duì)象的抽象,那么就可以有不同級(jí)別的抽象,就會(huì)形成類的層次關(guān)系。級(jí)別的抽象,就會(huì)形成類的層次關(guān)系。FlyingThingAnimalAirplaneHelicopterBirdWolfHorseChap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 43繼承繼承n 繼承表示子類從父類繼承時(shí)抽象的層次繼承表示子類從父類繼承時(shí)抽象的層次n 單繼承:子類只從一個(gè)父類繼承單繼承:子類只從一個(gè)父類繼承n 多繼承:子類從多于一個(gè)的父類繼承

50、多繼承:子類從多于一個(gè)的父類繼承n 繼承通常被稱為繼承通常被稱為 “is-a” 或或“kind-of” n 一個(gè)子類的實(shí)例也一個(gè)子類的實(shí)例也 “is a” 父類的實(shí)例父類的實(shí)例n 一個(gè)子類的實(shí)例是一個(gè)子類的實(shí)例是 “kind-of” 父類父類n繼承的內(nèi)容:繼承的內(nèi)容:n屬性、操作、關(guān)系、約束屬性、操作、關(guān)系、約束Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 44多重繼承多重繼承n 在建模中直觀、準(zhǔn)確地反映現(xiàn)實(shí)世界在建模中直觀、準(zhǔn)確地反映現(xiàn)實(shí)

51、世界n 在實(shí)現(xiàn)中有可能帶來困難在實(shí)現(xiàn)中有可能帶來困難n名字沖突名字沖突: 兩個(gè)或更多的子類定義了同樣的屬性和操作兩個(gè)或更多的子類定義了同樣的屬性和操作n重復(fù)繼承重復(fù)繼承: 兩個(gè)或更多的同級(jí)父類有同一個(gè)子類兩個(gè)或更多的同級(jí)父類有同一個(gè)子類n 每一個(gè)編程語言每一個(gè)編程語言/環(huán)境都有解決的方法環(huán)境都有解決的方法n 并不是所有面向?qū)ο缶幊陶Z言都直接支持多重繼承并不是所有面向?qū)ο缶幊陶Z言都直接支持多重繼承VehicleGroundVehicleAirVehicleCarTruckAmphibiousVehicleSailboatChap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-

52、18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 45繼承的益處繼承的益處n增加軟件重用的機(jī)會(huì)增加軟件重用的機(jī)會(huì)n降低開發(fā)和維護(hù)費(fèi)用降低開發(fā)和維護(hù)費(fèi)用n 開發(fā)一個(gè)更貼近現(xiàn)實(shí)的模型開發(fā)一個(gè)更貼近現(xiàn)實(shí)的模型n 系統(tǒng)更加靈活系統(tǒng)更加靈活n所有的子類自動(dòng)繼承父類的改變所有的子類自動(dòng)繼承父類的改變n可以通過增加一個(gè)子類來處理需求的改變可以通過增加一個(gè)子類來處理需求的改變n 保證類之間的一致性保證類之間的一致性n父類可以為所有子類定制規(guī)則父類可以為所有子類定制規(guī)則; (許多(許多OOP語語言必須指定這類規(guī)則)言必須指定這類規(guī)則)n

53、繼承界面和實(shí)現(xiàn)過程繼承界面和實(shí)現(xiàn)過程n支持多態(tài)支持多態(tài)Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 46繼承繼承 vs. 聚合聚合n 容易混淆容易混淆n 繼承是繼承是 “is-a” 或或 “kind-of” 的關(guān)系的關(guān)系n 聚合是聚合是 “has-a” 的關(guān)系的關(guān)系n 替代法則:測(cè)試?yán)^承關(guān)系替代法則:測(cè)試?yán)^承關(guān)系替代法則替代法則如果子類如果子類 D 的一個(gè)對(duì)象被替換為父類的一個(gè)對(duì)象被替換為父類 B 的一個(gè)對(duì)象的一個(gè)對(duì)象, 在類在類 B 中定

54、義的所有程序的行為應(yīng)保持不變。中定義的所有程序的行為應(yīng)保持不變。Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 476. 多態(tài)性多態(tài)性 (Polymorphism)n多態(tài)性原意是指一種具有多種形態(tài)的事物,這里是指同一消多態(tài)性原意是指一種具有多種形態(tài)的事物,這里是指同一消息為不同的對(duì)象所接受時(shí),可導(dǎo)致不同的行為。息為不同的對(duì)象所接受時(shí),可導(dǎo)致不同的行為。n多態(tài)性支持多態(tài)性支持“同一接口,多種方法同一接口,多種方法”,使高層代碼(算法),使高層代

55、碼(算法)只寫一次而在低層可多次復(fù)用,面向?qū)ο蟮亩喾N多態(tài)性方法只寫一次而在低層可多次復(fù)用,面向?qū)ο蟮亩喾N多態(tài)性方法的使用,如動(dòng)態(tài)綁定(的使用,如動(dòng)態(tài)綁定(dynamic binding)、重載)、重載(overload)等,提高了程序設(shè)計(jì)的靈活性和效率。等,提高了程序設(shè)計(jì)的靈活性和效率。n在在C+中,利用多態(tài)性概念,使用函數(shù)名和參數(shù)類別來實(shí)現(xiàn)中,利用多態(tài)性概念,使用函數(shù)名和參數(shù)類別來實(shí)現(xiàn)功能重載功能重載.PolygonareaRECTANGLEareaTRIANGLEareaHEXAGONareaChap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大

56、信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 48double avg (const double a , int size) ;double avg (const int a , int size) ;double avg (const double a , int size) ; double sum = 0.0 ; for ( int i = 0; i size; +i ) sum += ai ; return ( sum / size ) ; double avg (const int a , int size) ; int s

57、um = 0 ; for ( int i = 0; i size; +i ) sum += ai ; return ( (double) sum / size ) ; main() int k3 = 1, 2, 3 ; double x3 = 1.1, 2.2, 3.3 ; cout avg(k, 3) “ int average n” ; cout avg(x, 3) “ double average n” ; Function (or parameter) overloading :不同函數(shù)共用一個(gè)不同函數(shù)共用一個(gè)名字,而調(diào)用參數(shù)名字,而調(diào)用參數(shù)的特征不同。的特征不同。例:例:7 Over

58、loadingChap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 49 Operator overloading : 同一運(yùn)算符同一運(yùn)算符 (operator)作用于不同作用于不同類型的操作數(shù)類型的操作數(shù) (operand) 上面。上面。 在編譯在編譯(compile)階段就決定了使用類型及執(zhí)行階段就決定了使用類型及執(zhí)行代碼,故亦稱為代碼,故亦稱為靜態(tài)聯(lián)編靜態(tài)聯(lián)編 (static binding)或或先先前聯(lián)編前聯(lián)編 (early binding

59、) 。7 Overloading多態(tài)和重載的區(qū)別:多態(tài)和重載的區(qū)別:多態(tài)允許不同的類所定義的方法具有相同的名字多態(tài)允許不同的類所定義的方法具有相同的名字重載允許同名的方法重載允許同名的方法在同一個(gè)類中定義多次。在同一個(gè)類中定義多次。Chap9數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)數(shù)據(jù)抽象與面向?qū)ο蟪绦蛟O(shè)計(jì)2022-4-18鮑玉斌鮑玉斌 東大信息學(xué)院軟件所東大信息學(xué)院軟件所 程序設(shè)計(jì)方法學(xué)程序設(shè)計(jì)方法學(xué) All Rights Reserved 509.6 面向?qū)ο笤O(shè)計(jì)的過程面向?qū)ο笤O(shè)計(jì)的過程n“面向?qū)ο竺嫦驅(qū)ο蟆笔且粋€(gè)認(rèn)識(shí)論和方是一個(gè)認(rèn)識(shí)論和方法學(xué)的基本原則。法學(xué)的基本原則。n人對(duì)客觀世界的認(rèn)識(shí)和判斷常常人

60、對(duì)客觀世界的認(rèn)識(shí)和判斷常常是采用由一般到特殊(演譯法)是采用由一般到特殊(演譯法)和由特殊到一般(歸納法)的兩和由特殊到一般(歸納法)的兩種方法,這實(shí)際上是對(duì)認(rèn)識(shí)判斷種方法,這實(shí)際上是對(duì)認(rèn)識(shí)判斷的問題論域?qū)ο筮M(jìn)行分解和歸類的問題論域?qū)ο筮M(jìn)行分解和歸類的過程。的過程。OOD增加細(xì)節(jié)和設(shè)計(jì)決策增加細(xì)節(jié)和設(shè)計(jì)決策開發(fā)人員的角度開發(fā)人員的角度OOA開發(fā)需求模型開發(fā)需求模型用戶的角度用戶的角度OOP實(shí)現(xiàn)和測(cè)試實(shí)現(xiàn)和測(cè)試描述一個(gè)解所描述一個(gè)解所需要的對(duì)象需要的對(duì)象問題空間中問題空間中的對(duì)象的對(duì)象實(shí)現(xiàn)一個(gè)解所實(shí)現(xiàn)一個(gè)解所需要的對(duì)象需要的對(duì)象解空間中解空間中的對(duì)象的對(duì)象類庫中所擁有類庫中所擁有的對(duì)象的對(duì)象由面

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論