![面向?qū)ο蟪绦蛟O(shè)計(jì)方法_第1頁](http://file4.renrendoc.com/view7/M02/3C/3E/wKhkGWcWLEmAOM7VAAEerZmxg8E622.jpg)
![面向?qū)ο蟪绦蛟O(shè)計(jì)方法_第2頁](http://file4.renrendoc.com/view7/M02/3C/3E/wKhkGWcWLEmAOM7VAAEerZmxg8E6222.jpg)
![面向?qū)ο蟪绦蛟O(shè)計(jì)方法_第3頁](http://file4.renrendoc.com/view7/M02/3C/3E/wKhkGWcWLEmAOM7VAAEerZmxg8E6223.jpg)
![面向?qū)ο蟪绦蛟O(shè)計(jì)方法_第4頁](http://file4.renrendoc.com/view7/M02/3C/3E/wKhkGWcWLEmAOM7VAAEerZmxg8E6224.jpg)
![面向?qū)ο蟪绦蛟O(shè)計(jì)方法_第5頁](http://file4.renrendoc.com/view7/M02/3C/3E/wKhkGWcWLEmAOM7VAAEerZmxg8E6225.jpg)
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人形象與職場(chǎng)禮儀考核試卷
- 民辦學(xué)校教師聘用合同協(xié)議(2025版)-體育與健康專業(yè)
- 博物館展覽館施工建設(shè)合同(2025版)6篇
- 2025-2030年戶外露營折疊置物架行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 充電寶維修注意事項(xiàng)考核試卷
- 2025-2030年塑木戶外健身路徑行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2025-2030年手術(shù)室設(shè)備社區(qū)篩查行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2025-2030年地道臘肉香腸體驗(yàn)館企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 2025-2030年商用巧克力噴泉機(jī)行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2025-2030年堅(jiān)果心臟健康包行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 桃李面包盈利能力探析案例11000字
- GB/Z 30966.71-2024風(fēng)能發(fā)電系統(tǒng)風(fēng)力發(fā)電場(chǎng)監(jiān)控系統(tǒng)通信第71部分:配置描述語言
- 污泥處置合作合同模板
- 腦梗死的護(hù)理查房
- 2025高考數(shù)學(xué)專項(xiàng)復(fù)習(xí):概率與統(tǒng)計(jì)的綜合應(yīng)用(十八大題型)含答案
- 2024-2030年中國紫蘇市場(chǎng)深度局勢(shì)分析及未來5發(fā)展趨勢(shì)報(bào)告
- 銷售人員課件教學(xué)課件
- LED大屏技術(shù)方案(適用于簡(jiǎn)單的項(xiàng)目)
- Lesson 6 What colour is it(教學(xué)設(shè)計(jì))-2023-2024學(xué)年接力版英語三年級(jí)下冊(cè)
- GB/T 4706.10-2024家用和類似用途電器的安全第10部分:按摩器具的特殊要求
- NB/T 11446-2023煤礦連采連充技術(shù)要求
評(píng)論
0/150
提交評(píng)論