面向?qū)ο蟪绦蛟O(shè)計(jì)方法_第1頁
面向?qū)ο蟪绦蛟O(shè)計(jì)方法_第2頁
面向?qū)ο蟪绦蛟O(shè)計(jì)方法_第3頁
面向?qū)ο蟪绦蛟O(shè)計(jì)方法_第4頁
面向?qū)ο蟪绦蛟O(shè)計(jì)方法_第5頁
已閱讀5頁,還剩92頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

面向?qū)ο蟪绦蛟O(shè)計(jì),

山東大學(xué)計(jì)算機(jī)學(xué)院1

引言

如何學(xué)習(xí)(面向?qū)ο蟮模┸浖治鲈O(shè)計(jì)?

?本質(zhì)上是一種〃能力〃可〃學(xué)〃難〃教〃

?Intheorypracticeisthesameastheory.

Inpracticeitisn't.

-AdamSmith

?紙上得來終覺淺,絕知此事要躬行。

一冬夜讀書示子聿(陸游.宋)

2012/4/17

引言a

學(xué)習(xí)00軟件設(shè)計(jì)從程序設(shè)計(jì)開始

?建立對(duì)象計(jì)算基本概念;

從程序組織到運(yùn)行機(jī)制;

?知道什么樣的結(jié)構(gòu)可以被有效/高效實(shí)現(xiàn);

?知道什么對(duì)設(shè)計(jì)變動(dòng)敏感,什么不敏感;

學(xué)習(xí)前人!

?設(shè)計(jì)模式--解決反復(fù)出現(xiàn)的問題的設(shè)計(jì)經(jīng)驗(yàn)

2012/4/173

參考書籍

《UML用戶指南》2001年

[美]GradyBooch等,機(jī)械工業(yè)出版社

《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》2000年

[美]ErichGamma等,機(jī)械工業(yè)出版社

《Java與模式》2002年閆宏,電子工業(yè)出版社

《面向?qū)ο笙到y(tǒng)分析與設(shè)計(jì)》2000年

[美]RonaldJ.Norman,清華大學(xué)出版社

課程主要內(nèi)容

1面.向?qū)ο蠡靖拍詈驮?/p>

2.UML基礎(chǔ)

3.面向?qū)ο笤O(shè)計(jì)原則

4.面向?qū)ο笤O(shè)計(jì)模式

教學(xué)日歷

教學(xué)日歷

周時(shí)■

次數(shù)

52繼承、替換

62子類、子類型、反射機(jī)制

72靜態(tài)行為、動(dòng)態(tài)行為、替換本質(zhì)

82多重繼承

教學(xué)日歷

周時(shí)

內(nèi)容

次數(shù)

92多態(tài)和軟件復(fù)用(重載、改寫、多

態(tài)變量)

102泛型、對(duì)象互連

112UML基礎(chǔ)

122UML圖和關(guān)系

教學(xué)日歷

周時(shí)

內(nèi)容

次數(shù)

132面向?qū)ο笤O(shè)計(jì)原則-OCP、LSP、

DIP

142面向?qū)ο笤O(shè)計(jì)原則-ISP、CRP、

LOD

152設(shè)計(jì)模式-工廠、單例

162設(shè)計(jì)模式-策略、適配器M

什么是面向?qū)ο?/p>

■面向?qū)ο蟮姆椒ㄊ且环N分析方法、

設(shè)計(jì)方法和思維方法。

■面向?qū)ο蠓椒▽W(xué)的出發(fā)點(diǎn)和所追求

的基本目標(biāo)是使人們分析、設(shè)計(jì)與

實(shí)現(xiàn)一個(gè)系統(tǒng)的方法盡可能接近人

們認(rèn)識(shí)一個(gè)系統(tǒng)的方法。

■使描述問題的問題空間和解決問題

的方法空間在結(jié)構(gòu)上盡可能一致。

10

面向?qū)ο蠡舅枷?/p>

■對(duì)問題空間進(jìn)行自然分割,以更接

近人類思維的方式建立問題域模型,

以便對(duì)客觀實(shí)體進(jìn)行結(jié)構(gòu)模擬和行

為模擬,從而使設(shè)計(jì)出的軟件盡可

能直接地描述現(xiàn)實(shí)世界。

■構(gòu)造出模塊化的、可重用的、維護(hù)

性好的軟件,同時(shí)限制軟件的復(fù)雜

性和降低開發(fā)維護(hù)費(fèi)用。

11

什么是面向?qū)ο?/p>

從程序設(shè)計(jì)方法的角度看,面向?qū)ο笫且环N新的程

序設(shè)計(jì)范型(paradigm),其基本思想是使用對(duì)象、

類、繼承、封裝、聚合、關(guān)聯(lián)、消息、多態(tài)性等基

本概念來進(jìn)行程序設(shè)計(jì)。

自八十年代以來,面向?qū)ο蠓椒ㄒ焉钊氲接?jì)算機(jī)軟件領(lǐng)域的幾乎所有分支。它

不僅是一些具體的軟件開發(fā)技術(shù)與策略,而且是一整套關(guān)于如何看待軟件系統(tǒng)

與現(xiàn)實(shí)世界的關(guān)系,用什么觀點(diǎn)來研究問題并進(jìn)行問題求解,以及如何進(jìn)行系

統(tǒng)構(gòu)造的軟件方法學(xué)。從這個(gè)意義上講:

面向?qū)ο蠓椒ㄊ且环N運(yùn)用對(duì)象、類、繼承、封裝

、聚合、關(guān)聯(lián)、消息、多態(tài)性等概念來構(gòu)造系統(tǒng)

的物件開發(fā)方法。

基本思想

從現(xiàn)實(shí)世界中客觀存在的事物出發(fā)來建立軟

件系統(tǒng)

強(qiáng)調(diào)直接以問題域(現(xiàn)實(shí)世界)中的事物為中心來思

考問題、認(rèn)識(shí)問題,并根據(jù)這些事物的本質(zhì)特征,把

它們抽象地表示為系統(tǒng)中的對(duì)象,作為系統(tǒng)的基本構(gòu)

成單位。這可以使系統(tǒng)直接映射問題域,保持問題域

中事物及其相互關(guān)系的本來面貌

充分運(yùn)用人類日常的思維方法

強(qiáng)調(diào)運(yùn)用人類在日常的邏輯思維中經(jīng)常采用的思想方

法與原則,例如抽象、分類、繼承、聚合、封裝、關(guān)

聯(lián)等等。這使得軟件開發(fā)者能更有效地思考問題,并

以其他人也能看得懂的方式把自己的認(rèn)識(shí)表達(dá)出來。]

主要特點(diǎn):I

從問題域中客觀存在的事物出發(fā)來構(gòu)造軟件系統(tǒng),用對(duì)

象作為對(duì)這些事物的抽象表示,并作為系統(tǒng)的基本構(gòu)成

單位。(對(duì)象)

用對(duì)象的屬性表示事物的靜態(tài)特征;用對(duì)象的服務(wù)(操

作)表示事物的動(dòng)態(tài)特征。(屬性與服務(wù))

對(duì)象的屬性與服務(wù)結(jié)合為一體,成為一個(gè)獨(dú)立的、不可

分的實(shí)體,對(duì)外屏蔽其內(nèi)部細(xì)節(jié)。(封裝)

對(duì)事物進(jìn)行分類。把具有相同屬性和相同服務(wù)的對(duì)象歸

為一類,類是這些對(duì)象的抽象描述,每個(gè)對(duì)象是它的類

的一個(gè)實(shí)例。(分類)

W

通過在不同程度上運(yùn)用抽象的原則可以得到較一般的類和密

特殊的類。特殊類繼承一般類的屬性與服務(wù),從而簡(jiǎn)化系統(tǒng)

的構(gòu)造過程及其文檔。(繼承)

復(fù)雜的對(duì)象可以用簡(jiǎn)單的對(duì)象作為其構(gòu)成部分。(聚合)

對(duì)象之間通過消息進(jìn)行通訊,以實(shí)現(xiàn)對(duì)象之間的動(dòng)態(tài)聯(lián)系。

(消息)

通過關(guān)聯(lián)表達(dá)對(duì)象之間的靜態(tài)關(guān)系。(關(guān)聯(lián))

總結(jié):用類和對(duì)象作為系統(tǒng)的基本構(gòu)成單位。對(duì)象對(duì)應(yīng)問題

域中的事物,其屬性與服務(wù)刻畫了事物的靜態(tài)特征和動(dòng)態(tài)特

征,它們之間的繼承關(guān)系、聚合關(guān)系、消息和關(guān)聯(lián)如實(shí)地表

達(dá)了問題域中事物之間實(shí)際存在的各種關(guān)系。

因此,無論系統(tǒng)的構(gòu)成成分,還是通過這些成分之間的關(guān)系

而體現(xiàn)的系統(tǒng)結(jié)構(gòu),都可直接地映射問題域。£二?

從認(rèn)識(shí)論看面向?qū)ο蠓椒ǖ男纬?/p>

軟件開發(fā):對(duì)事物的認(rèn)識(shí)和描述

問題——語言的鴻溝

語言的發(fā)展使鴻溝變窄。

軟件工程學(xué)的作用

——在各個(gè)階段提供了一些方法與法則。

傳統(tǒng)的軟件工程方法

問題:分析與設(shè)計(jì)概念及表示法的不一致。

面向?qū)ο蟮能浖こ谭椒?/p>

各個(gè)階段能較好地銜接

程序設(shè)計(jì)思想的發(fā)展歷程

1

階段T

■1Computer(Mainframe)formany

18

早期軟件開發(fā)

■硬件環(huán)境:CPU能力弱,存儲(chǔ)量小

■應(yīng)用特點(diǎn):科學(xué)計(jì)算,計(jì)算量大,

入輸出量小

■主要對(duì)象:小型程序,順序程序

■軟件開發(fā):個(gè)體工作,個(gè)人技巧

階段-23

■1Computer(PC)foreveryone

20

特征

■硬件環(huán)境:外設(shè)發(fā)展迅速,處理能力

增強(qiáng)

■應(yīng)用特點(diǎn):非數(shù)值應(yīng)用,輸入輸出量

■主要對(duì)象:大型程序,并發(fā)程序

■軟件開發(fā):程序失控管理失控軟

件危機(jī)

■失控原因:程序員難以控制程序的復(fù)盤

雜性

21^^

結(jié)構(gòu)化的程序設(shè)計(jì)

■結(jié)構(gòu)化程序設(shè)計(jì)的思路是:自頂向下,

逐步細(xì)化求精。

■其程序結(jié)構(gòu)是按功能劃分成若干個(gè)功

能模塊,這些模塊形成一個(gè)樹狀結(jié)構(gòu);

各模塊間的關(guān)系盡可能簡(jiǎn)單,在功能

上相對(duì)獨(dú)立;每一模塊的內(nèi)部均是由

順序、選擇和循環(huán)三種基本結(jié)構(gòu)組成,

其模塊化實(shí)現(xiàn)的具體方法是使用子程

序。曰

22

階段-3

■Many(disappearing)computers

foreveryone

特征

■主要問題

1.功能抽象困難(數(shù)據(jù)和過程分離為相

互獨(dú)立的實(shí)體)

2.功能易變性

3.分解結(jié)構(gòu)隨意

4.模塊分解準(zhǔn)則的依據(jù)

5.可重用性差(保證數(shù)據(jù)結(jié)構(gòu)和算法的

相容性)

解決途徑

1.面向現(xiàn)實(shí)世界

2.開發(fā)不變性

2

面向?qū)ο蟪绦蛟O(shè)計(jì)s

■面向?qū)ο竽M人類習(xí)慣的解題方法,

用對(duì)象分解取代功能分解,即把程序

分解成許多對(duì)象,不同對(duì)象之間通過

發(fā)送消息向?qū)Ψ教岢龇?wù)要求,接受

消息的對(duì)象主動(dòng)完成指定功能。

■程序中的所有對(duì)象分工協(xié)作,共同完

成整個(gè)程序的功能

2

比較

■結(jié)構(gòu)化設(shè)計(jì)方法中,程序被劃分成許

多個(gè)模塊,這些模塊被組織成一個(gè)樹

型結(jié)構(gòu)。

■上方的模塊需要調(diào)用下方的模塊,所

以這些上方的模塊就依賴于下方的細(xì)

-H-

To

■與問題領(lǐng)域相關(guān)的抽象要依賴于與問

題領(lǐng)域無關(guān)的細(xì)節(jié)。

■細(xì)節(jié)影響抽象/復(fù)用抽象困難1

W2

比較

■在面向?qū)ο蟪绦蛟O(shè)計(jì)中,倒轉(zhuǎn)這種依

賴關(guān)系:創(chuàng)建的抽象不依賴于任何細(xì)

節(jié),而細(xì)節(jié)則高度依賴于上面的抽象。

■這種依賴關(guān)系的倒轉(zhuǎn)正是面向?qū)ο蟪?/p>

序設(shè)計(jì)和傳統(tǒng)技術(shù)之間根本的差異,

也正是面向?qū)ο蟪绦蛟O(shè)計(jì)思想的精華

所在。

'晨f,.7/Z

面向?qū)ο蠓椒ㄅc傳統(tǒng)方法的比較

傳統(tǒng)方法面向?qū)ο蠓椒?/p>

數(shù)據(jù)結(jié)構(gòu)+算法=程序設(shè)計(jì)以對(duì)象為中心組織數(shù)據(jù)與操作

數(shù)據(jù)對(duì)象的屬性

操作對(duì)象的服務(wù)

二類型與變量類與對(duì)象實(shí)例J

函數(shù)(過程)調(diào)用消息傳送

類型與子類型一般類與特殊類,繼承

構(gòu)造類型整體■部分結(jié)構(gòu),聚合

指針關(guān)聯(lián)

思想觀念:從對(duì)象出發(fā)認(rèn)識(shí)問題域;構(gòu)造策略:以對(duì)象

作為構(gòu)成系統(tǒng)的基本單位,將對(duì)象的數(shù)據(jù)與操作緊密結(jié)合;僻

證機(jī)制:由支持封裝、繼承、多態(tài)的機(jī)制保證其原則的實(shí)

'J/

廠面向機(jī)器

面向?qū)ο笫擒浖椒▽W(xué)的返樸歸真面向代數(shù)

面向過程

面向數(shù)據(jù)

軟件科學(xué)的發(fā)展歷程中面向人

出現(xiàn)過許多“面向”面向文件

面向信息

面向應(yīng)用

,面向功能

涔面向?qū)ο驤面向數(shù)據(jù)流

軟件開發(fā)從過分專業(yè)化的方法、規(guī)則和技

巧中回到了客觀世界,回到了人們的日常

思維,是軟件理論的返樸歸真。

階段-4

■Networkingofallthings.

31

特征

■分布計(jì)算?

■單機(jī)對(duì)象技術(shù)映射到網(wǎng)絡(luò)分布環(huán)境?

分布式對(duì)象8

■OMG組織制訂的COMBA(CommonObject

RequestBrokerArchitecture)標(biāo)準(zhǔn)

■Microsoft的COM/DCOM(Distributed

ComponentObjectModeI)標(biāo)準(zhǔn)

■SUN公司的JavaRMI(RemoteMethod

Invocation)標(biāo)準(zhǔn)

33

面向?qū)ο蠓椒ǖ陌l(fā)展歷程

■面向?qū)ο蟮姆椒ㄆ鹪从诿嫦驅(qū)ο蟮?/p>

程序設(shè)計(jì)語言

3

OO方法的發(fā)展歷史與現(xiàn)狀

1.雛形階段

60年代挪威計(jì)算中心開發(fā)的Simula67——面向?qū)ο笳Z言的

先驅(qū)和第一個(gè)里程碑(首先引入了類的概念和繼承機(jī)制)。

70年代CLU、并發(fā)Pascal、Ada和Modula-2等語言對(duì)抽象

數(shù)據(jù)類型理論的發(fā)展起到重要作用(支持?jǐn)?shù)據(jù)與操作的封裝

)o

猶他大學(xué)的博士生AlanKay設(shè)計(jì)了一個(gè)實(shí)驗(yàn)性的語言Flex。

從Simula67中借鑒了許多概念,如類、對(duì)象、繼承等。

1972年P(guān)al。Aino研究中心(PARC)發(fā)布了Smalltalk-72

,其中正式使用了〃面向?qū)ο蟆ㄟ@個(gè)術(shù)語。

Smalltalk的問世標(biāo)志著面向?qū)ο蟪绦蛟O(shè)計(jì)方法的正式形成一

o但是這個(gè)時(shí)期的Smalltalk語言還不夠完善

語言發(fā)展

■Simula-67

■SmallTalk-80(AlanKay)

■C++(BjarneStroustrup)

■Java

2.完善階段?

P最C先后發(fā)布了Smalltalk-72,76,78等版本,直至

1981年推出該語言最完善的版本Smalltalk-80。

Smalltalk-80的問世被今認(rèn)為是面向?qū)ο笳Z言發(fā)展史上

最重要的里程碑。迄今絕大部分面向?qū)ο蟮幕靖拍罴?/p>

其支持機(jī)制在Smalltalk-80中都已具備。它是第一個(gè)完

善的、能夠?qū)嶋H應(yīng)用的面向?qū)ο笳Z言。

3繁榮階段

“自80年代中期到90年代,是面向?qū)ο笳Z言走向繁榮的

階段。其主要表現(xiàn)是大批比較實(shí)用的OOPL的涌現(xiàn)。

0。編程語言分為純00語言和混合型00語言

混合型語言是在傳統(tǒng)的過程式語言基礎(chǔ)上增加0。語言

成分,在實(shí)用性方面具有更大的優(yōu)勢(shì)。

4、發(fā)展到軟件生命周期前期階段

面向?qū)ο蠓椒◤木幊贪l(fā)展到

設(shè)計(jì)、分析,進(jìn)而發(fā)展到整

個(gè)軟件生命周期。

當(dāng)前:幾乎覆蓋計(jì)算機(jī)軟件

領(lǐng)域的所有分支

許多新領(lǐng)域以面向?qū)?/p>

象理論為基礎(chǔ),或作

為主要技術(shù)

在軟件生命周期全過程運(yùn)用面向?qū)ο蠓椒?/p>

L.M.Northrop:“盡管面向?qū)ο笳Z言正取得令人振奮的發(fā)展,但編程并

不是軟件開發(fā)問題的主要根源。需求分析與設(shè)計(jì)問題更為普遍并且更

值得解決。因此面向?qū)ο箝_發(fā)技術(shù)的焦點(diǎn)不應(yīng)該只對(duì)準(zhǔn)編程階段,而

應(yīng)更全面地對(duì)準(zhǔn)軟件工程的其他階段。面向?qū)ο蠓椒ㄕ嬲饬x深遠(yuǎn)的

目標(biāo)是它適合于解決分析與設(shè)計(jì)期間的復(fù)雜性并實(shí)現(xiàn)分析與設(shè)計(jì)的復(fù)

用。面向?qū)ο蟮拈_發(fā)不僅僅是編程,必須在整個(gè)軟件生命周期采用一

種全新的方法,這一觀點(diǎn)已被人們所接受。

——《軟件工程百科全書》紐約,1994

面向?qū)ο箝_發(fā)方法

■20世紀(jì)90年代,主要面向?qū)ο箝_發(fā)方

法:

■Coad/Yourdon(00AD)

■GradBooch(00D)

■IvarJacobson(OOSEyObject-

OrientedSoftwareEngineering)

■JimRumbaugh(OMTObjectModeIing

Technique)%

w

面向?qū)ο蠓治鲈O(shè)計(jì)

■在20世紀(jì)90年代后期,GradyBooch、

IvarJacobson及JimRumbaugh三人盡

管在面向?qū)ο箢I(lǐng)域各有各自的主張,

但是通力合作將面向?qū)ο笥煤侠淼姆?/p>

號(hào)表示產(chǎn)生了統(tǒng)一建模語言

UML(UnifiedModeIingLanguage),

這個(gè)圖形化的建模語言既有可視的表

達(dá)形式又有嚴(yán)謹(jǐn)?shù)恼Z義支撐。

41

UML

■圖形化的建模語言

■開發(fā)者用來為面向?qū)ο笙到y(tǒng)建立模型

■具有靈活性與可擴(kuò)展性

■UML結(jié)構(gòu)型圖:識(shí)別對(duì)象和類、描述對(duì)

象和類之間的關(guān)系(靜態(tài)結(jié)構(gòu))

■UML行為型圖:對(duì)象如何協(xié)作產(chǎn)生滿足

要求的系統(tǒng)行為(動(dòng)態(tài)性質(zhì))

W

設(shè)計(jì)模式

■面向?qū)ο笏枷氲陌l(fā)展使得在軟件開發(fā)中使

用模式化的方法受到了重視,模式化的思

想來源于建筑業(yè)。

■建筑大師Alexander:每一個(gè)模式描述了一

個(gè)在我們周圍不斷重復(fù)發(fā)生的問題以及該

問題解決方案的核心,這樣你就可以一次

又一次的使用該方案而不必做重復(fù)勞動(dòng)。

■就像建筑業(yè)用預(yù)制的墻和窗來構(gòu)筑房屋,

在面向?qū)ο笤O(shè)計(jì)中我們使用對(duì)象和接口代

替墻和窗來構(gòu)筑系統(tǒng),它們的核心都在無

提供了相關(guān)問題的解決方案。I

設(shè)計(jì)模式

■模式化的設(shè)計(jì)使系統(tǒng)更穩(wěn)定、易修改、

易擴(kuò)展、易理解、易測(cè)試。

■90年代末,被稱為四人幫的GoF發(fā)表了

在面向?qū)ο缶幊讨惺褂媚J交椒ㄑ?/p>

究的開創(chuàng)性著作-《設(shè)計(jì)模式-可復(fù)用

面向?qū)ο筌浖幕A(chǔ)》(《Design

Patterns—ElementsofReusable

Object-OrientedSoftware》)。一

w

設(shè)計(jì)模式

■其中提出了23種模式,這23種模式又

可以被劃分為三類:

■創(chuàng)建型:與對(duì)象創(chuàng)建有關(guān)

■結(jié)構(gòu)型:處理類或?qū)ο蠼M合

■行為型:對(duì)象或類怎樣交互和怎樣分

配職責(zé)

4

第1章.面向?qū)ο笏枷?/p>

■計(jì)算機(jī)語言對(duì)思想的啟迪。(DNA序

列分析)

ml

1

IIIIl”c|g|a|g||||||||t|c|g巨|g]一[

一種觀察世界的方式

■現(xiàn)實(shí)世界問題例。(濟(jì)南男孩A送花給

北京女孩B)

■How?

4

代理和團(tuán)體

■解決問題的方法是找到一個(gè)合適的代

理C,并把要求告訴他。

■代理有責(zé)任完成你的需求。

■A沒必要理解C使用什么方法來完成任

務(wù),這些細(xì)節(jié)通常是隱蔽的。

48

花的傳送中代理組成的團(tuán)僦8

代理和團(tuán)體

■一個(gè)面向?qū)ο蟮某绦蚴怯梢粋€(gè)相互作

用的代理團(tuán)體組成,這些代理被稱作

對(duì)象。

■每一個(gè)對(duì)象承擔(dān)一個(gè)角色。

■每一個(gè)對(duì)象都提供一種服務(wù)或者執(zhí)行

一種動(dòng)作,以便為團(tuán)體中其他對(duì)象服

務(wù)。

50

對(duì)象

■對(duì)象是獨(dú)立存在的客觀事物,它由一組屬

性和一組操作構(gòu)成。

■屬性和操作是對(duì)象的兩大要素。屬性是對(duì)

象靜態(tài)特征的描述,操作是對(duì)象動(dòng)態(tài)特征

的描述。

■屬性一般只能通過執(zhí)行對(duì)象的操作來改變。

■操作又稱為方法或服務(wù),它描述了對(duì)象執(zhí)

行的功能。通過消息傳遞,還可以為其它

對(duì)象使用。.二

51

對(duì)象性質(zhì)

1.封裝型:信息隱藏

2.自治性:主動(dòng)數(shù)據(jù)

3.通信性:并發(fā)

4.暫存性:作用域/期

5.永久性:文檔串行化

復(fù)合對(duì)象

■劃分(partition):Pc

■聚合(aggregation):Window

部分/整體

■部分/整體關(guān)系中有兩種方式:組合和

聚合O

■PC機(jī)是一個(gè)組合的例子,一個(gè)部分對(duì)象

(CPU)只能屬于一個(gè)唯一的整體對(duì)象

(PC機(jī))。

■組合關(guān)系中部分和整體的關(guān)系很緊密。

聚合關(guān)系中則比較松散,一個(gè)部分對(duì)象

可以屬于幾個(gè)整體對(duì)象。

5

消息和方法

■送花例

■團(tuán)體的成員通過傳達(dá)要求來相互合作。

消息和方法

■在面向?qū)ο缶幊讨?,行為的啟?dòng)是通過將

“消息”傳遞給對(duì)此行為負(fù)責(zé)的代理(對(duì)

象)來完成的。

■消息對(duì)行為的要求進(jìn)行編碼,并且隨著執(zhí)

行要求所需的附加信息(參數(shù))來一起傳

遞。

■“接收器”就是消息發(fā)送的對(duì)象。如果接

收器接受了消息,那么同時(shí)它也接受了消

息所包含的行為責(zé)任。然后,接受器響感

消息,執(zhí)行相應(yīng)的“方法”以實(shí)現(xiàn)要求.

56

消息傳遞與過程調(diào)用

■每一條消息都有一個(gè)指定的接收器相

對(duì)應(yīng);接收器就是消息發(fā)送的對(duì)象。

過程調(diào)用沒有指定的接收器。

■消息的解釋由接收器決定,并且隨著

接收器的不同而不同。

■動(dòng)態(tài)綁定。

,“,,,?5

信息隱藏B

■作為某對(duì)象提供的服務(wù)的一個(gè)用戶,只

需要知道對(duì)象將接受的消息的名字。

■不需要知道要完成要求,需要執(zhí)行哪些

動(dòng)作。

■在接收到一條消息后,對(duì)象會(huì)負(fù)責(zé)將該

項(xiàng)任務(wù)完成。

58

責(zé)任

■用責(zé)任來描述行為。A對(duì)行為的要求

僅表明他所期望的結(jié)果,C可隨意選

擇使用的方法來實(shí)現(xiàn)所期待的目標(biāo),

并在此過程中不受A的干擾。

■提高了抽象水平,對(duì)象更加獨(dú)立。

結(jié)構(gòu)化與面向?qū)ο蟊容^

■不要問你能為數(shù)據(jù)結(jié)構(gòu)做什么

■要問數(shù)據(jù)結(jié)構(gòu)能為你做什么

■如孩子做事:督促或委派負(fù)責(zé)

60

不干預(yù)原則工所

■允許對(duì)象以任何它認(rèn)為合適的不干涉

其他對(duì)象的方式來完成任務(wù),而不要

干預(yù)它。

類和實(shí)例8

■C是花商的一個(gè)特例。

■C是花商(Florist)類(class)的

一個(gè)實(shí)例(instance)

■根據(jù)抽象的原則對(duì)客觀事物進(jìn)行歸納和

劃分,只關(guān)注與當(dāng)前目標(biāo)相關(guān)的特征,

把具有相同特征的事物歸為一個(gè)類。它

是一個(gè)抽象的概念。

■類是具有相同屬性和相同操作(服務(wù))

的對(duì)象的集合。它包括屬性和操作。

63

類和實(shí)例

■所有對(duì)象都是類的實(shí)例。

■在響應(yīng)消息時(shí)調(diào)用何種方法由類的接

收器來決定。

■一個(gè)特定類的所有對(duì)象使用相同的方

法來響應(yīng)類似的消息。

6

類和實(shí)例

■每一個(gè)對(duì)象都是某個(gè)類的實(shí)例。類是

一組相似的對(duì)象。

■類是對(duì)象相關(guān)行為的儲(chǔ)存庫

(repository)0即同一個(gè)類的所有對(duì)

象都能執(zhí)行同樣的動(dòng)作。

6

類的層次

■除了知道C是花商外,還知道他是商

人、人類、哺乳動(dòng)物、物質(zhì)對(duì)象。

■在每一層次上,都可以了解特定的信

息,這些信息適用于所有較低層次。

■付款適用其他店主。

6

類的層次

MaterialObject

Animal

Mamma

Human

Shopkeeper

Florist

7

6

繼承

■類被組織成有單個(gè)根節(jié)點(diǎn)的樹狀結(jié)構(gòu),

稱為繼承層次結(jié)構(gòu)。與類實(shí)例相關(guān)的

內(nèi)存和行為都會(huì)被樹結(jié)構(gòu)中的后代自

動(dòng)繼承。

繼承

■在類層次結(jié)構(gòu)中與某層相聯(lián)系的信息

(數(shù)據(jù)、行為)都會(huì)自動(dòng)地提供地該

層次結(jié)構(gòu)的較低層次中。

繼承

■繼承表達(dá)了對(duì)象的一般與特殊的關(guān)系。

■特殊類的對(duì)象具有一般類的全部屬性和

服務(wù)。

70

類的層次

Flower

Platypus

Carnation

FidoFredElizabethKennethPhylHobmsflowers

繼承

■類可以組織成一個(gè)有層次的繼承機(jī)構(gòu)。

■一個(gè)子類繼承層次樹中更高一層的父

類的屬性。

■抽象父類是指沒有具體實(shí)例的類,他

只是用來產(chǎn)生子類。

72

一般/特殊

■對(duì)象之間存在著一般和特殊的結(jié)構(gòu)關(guān)

系,也就是說它們存在繼承關(guān)系。很多

時(shí)候也稱作泛化和特化關(guān)系。

73

方法綁定與改寫

■鴨嘴獸?

■處理一般規(guī)則外的特例?

改寫

■將子類中某一方法取與父類方法相同

的名稱,結(jié)合尋找方法的規(guī)則實(shí)現(xiàn)改

寫。

方法綁定與改寫

■接收器搜索并執(zhí)行相應(yīng)的方法以響應(yīng)

給定的消息。

■如果沒有找到匹配的方法,搜索就會(huì)

傳導(dǎo)到此類的父類。搜索會(huì)在父類鏈

上一直進(jìn)行下去,直到找到匹配的方

法,或者父類鏈結(jié)束。

■如果能在更高類層次找到相同名稱的

方法,所執(zhí)行的方法就稱為改寫了繼

承的行為。W

7

多態(tài)

■不同花商送花方式

1.重載

2.類等級(jí)不同層次共享同一方法名字

多態(tài)性

■多態(tài)性是指一般類中定義的屬性和服

務(wù),在特殊類中不改變其名字,但通

過各自不同的實(shí)現(xiàn)后,可以具有不同

的數(shù)據(jù)類型或具有不同的行為。

OOP定義-AIanKay

■OOP是基于遞歸設(shè)計(jì)的原則的:

1.一切都是對(duì)象。

2.計(jì)算通過對(duì)象間相互通信,請(qǐng)求其他對(duì)象執(zhí)行動(dòng)作來

實(shí)現(xiàn)。對(duì)象間通過發(fā)送和接收消息來通信。

3.每個(gè)對(duì)象都有自己的內(nèi)存,其中可能包括了其他的對(duì)

象。

4.每一個(gè)對(duì)象都是某個(gè)類的實(shí)例。類就是一組相似的對(duì)

象。

5.類是對(duì)象相關(guān)行為的儲(chǔ)存庫。也就是說,同一個(gè)類的

所有對(duì)象都能執(zhí)行同樣的動(dòng)作。

6.類被組織成有單個(gè)根節(jié)點(diǎn)的樹狀結(jié)構(gòu),被稱為繼承層

次結(jié)構(gòu)。與類實(shí)例相關(guān)的內(nèi)存和行為都會(huì)被樹結(jié)構(gòu)中

M后在自動(dòng)繼承。.

79

軟件開發(fā)方法

?軟件工程所采用的方法不是唯一的。自軟件工程

出現(xiàn)以來,人們已經(jīng)提出了多種軟件開發(fā)方法,

例如:

?功能分解法、

?數(shù)據(jù)流法(結(jié)構(gòu)化方法).

?快速原型法、

?信息模型法、

?面向?qū)ο蠓椒ā?/p>

山東大學(xué)計(jì)算機(jī)學(xué)院80

結(jié)構(gòu)化軟件開發(fā)方法簡(jiǎn)介a

?1978年,E.Yourdon和L.L.Constantine提出了結(jié)

構(gòu)化開爰方法SASD(StructureAnalysisStructure

Design)

?也稱面向數(shù)據(jù)流的軟件開發(fā)方法

?把軟件系統(tǒng)的功能看做是根據(jù)給定的輸入數(shù)據(jù),

進(jìn)行相應(yīng)的運(yùn)算,然后輸出結(jié)果。

輸入數(shù)據(jù)

功能輸出數(shù)據(jù)

?結(jié)構(gòu)化設(shè)計(jì)是屬于自頂向下的設(shè)計(jì),在設(shè)計(jì)階段

就不得不考慮如何實(shí)現(xiàn)系統(tǒng)的功能,因?yàn)榉纸獾?/p>

過程其實(shí)就是實(shí)現(xiàn)功能的過程。

?局限性

?不能靈活地適應(yīng)用戶不斷變化的需求

?比如要求修改現(xiàn)有軟件的實(shí)現(xiàn)方式或追加新功能時(shí)

?需要自頂向下地修改模塊的結(jié)構(gòu),有時(shí)甚至整個(gè)軟件系

統(tǒng)的設(shè)計(jì)被推翻。

?結(jié)構(gòu)化編程SP(StructureProgramming)

■程序的主體是方法

?方法是最小的功能模塊

■一組相關(guān)的方法組合成一個(gè)大的功能模塊

?結(jié)構(gòu)化學(xué)發(fā)過程舉例

?一個(gè)畫板系統(tǒng)Panel

?包括4個(gè)功能

?選擇形狀

?畫長(zhǎng)方形

,圓圓

?畫直線

y

?自頂向下結(jié)構(gòu)化分析設(shè)計(jì)

?工具:數(shù)據(jù)流圖DFD

19

lift

?選擇形狀模塊數(shù)據(jù)流圖

?結(jié)構(gòu)化編程

?定義形狀標(biāo)示常量

?drawCircle()

?drawLine()

?drawRectangle()

?selectShape()

?接收用戶輸入的形狀

?switch

在一

?voidselectShape(){

?intshape;

?scanf("%d",&shape);

?switch(shape){

?caseCircle;

?drawCircle();

?break;

?caseLine;

?drawLine();

?break;

?caseRectangle;

?drawRectangle();

?break;

?default;

?printf("輸入的形狀不存在”);

?break;

?}

?}.

?假定需求發(fā)生變化

?要求增加一個(gè)畫三角形的功能

?需要對(duì)系統(tǒng)做多處改動(dòng)

?增加一個(gè)形狀常量定義

?增加一個(gè)畫三角形的功能方法

?在selectShape中增加一個(gè)分支邏輯

?結(jié)構(gòu)化開發(fā)方法

?制約了軟件的可維護(hù)性和可擴(kuò)展性

?模塊之間的松耦合性不高

?修改或增加一個(gè)模塊會(huì)影響到其他模塊

?這些缺陷的根本原因在于:

?自頂向下地按照功能來劃分。但是軟件的功能不是一成不

變的

?軟件系統(tǒng)中最小的子系統(tǒng)是方法。方法和一部分與之相關(guān)

的數(shù)據(jù)分離,全局變量和常量數(shù)據(jù)分散在系統(tǒng)的各個(gè)角落,

削弱了各個(gè)系統(tǒng)之間的相對(duì)獨(dú)立性。

/7

?非面向?qū)ο缶幊?/p>

?對(duì)于非面向?qū)ο缶幊?,程序往往是面向過程或者面向數(shù)

據(jù)的。

?這些程序中通常有可全訪問的數(shù)據(jù)及過程,由主程序或

其子程序來控制及操作這些數(shù)據(jù)。

?程序的每個(gè)部分都可以訪問全局?jǐn)?shù)據(jù),得到數(shù)據(jù)的一部

分,操作這些數(shù)據(jù),然后在在需要時(shí),保存對(duì)數(shù)據(jù)的更

改。

山東大學(xué)計(jì)算機(jī)學(xué)院91

?對(duì)于面向?qū)ο缶幊?/p>

■程序被劃分為一組通信的對(duì)象。

?每個(gè)對(duì)象均封裝了關(guān)于某個(gè)概念所有行為和信息

■實(shí)現(xiàn)功能的能力、實(shí)現(xiàn)功能所需的〃知識(shí)〃或數(shù)據(jù)被分

布在對(duì)象之中。當(dāng)一個(gè)對(duì)象對(duì)其他對(duì)象有需求時(shí),就向

該對(duì)象發(fā)出消息,這個(gè)對(duì)象接受到此消息后做出相應(yīng)的

動(dòng)作并很有可能返回值給調(diào)用者。

?第一個(gè)對(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)論