




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
面向?qū)ο蟪绦蛟O(shè)計,
山東大學(xué)計算機(jī)學(xué)院1
引言
如何學(xué)習(xí)(面向?qū)ο蟮模┸浖治鲈O(shè)計?
?本質(zhì)上是一種〃能力〃可〃學(xué)〃難〃教〃
?Intheorypracticeisthesameastheory.
Inpracticeitisn't.
-AdamSmith
?紙上得來終覺淺,絕知此事要躬行。
一冬夜讀書示子聿(陸游.宋)
2012/4/17
引言a
學(xué)習(xí)00軟件設(shè)計從程序設(shè)計開始
?建立對象計算基本概念;
從程序組織到運(yùn)行機(jī)制;
?知道什么樣的結(jié)構(gòu)可以被有效/高效實(shí)現(xiàn);
?知道什么對設(shè)計變動敏感,什么不敏感;
學(xué)習(xí)前人!
?設(shè)計模式--解決反復(fù)出現(xiàn)的問題的設(shè)計經(jīng)驗(yàn)
2012/4/173
參考書籍
《UML用戶指南》2001年
[美]GradyBooch等,機(jī)械工業(yè)出版社
《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》2000年
[美]ErichGamma等,機(jī)械工業(yè)出版社
《Java與模式》2002年閆宏,電子工業(yè)出版社
《面向?qū)ο笙到y(tǒng)分析與設(shè)計》2000年
[美]RonaldJ.Norman,清華大學(xué)出版社
課程主要內(nèi)容
1面.向?qū)ο蠡靖拍詈驮?/p>
2.UML基礎(chǔ)
3.面向?qū)ο笤O(shè)計原則
4.面向?qū)ο笤O(shè)計模式
教學(xué)日歷
教學(xué)日歷
周時■
容
次數(shù)
52繼承、替換
62子類、子類型、反射機(jī)制
72靜態(tài)行為、動態(tài)行為、替換本質(zhì)
82多重繼承
教學(xué)日歷
周時
內(nèi)容
次數(shù)
92多態(tài)和軟件復(fù)用(重載、改寫、多
態(tài)變量)
102泛型、對象互連
112UML基礎(chǔ)
122UML圖和關(guān)系
教學(xué)日歷
周時
內(nèi)容
次數(shù)
132面向?qū)ο笤O(shè)計原則-OCP、LSP、
DIP
142面向?qū)ο笤O(shè)計原則-ISP、CRP、
LOD
152設(shè)計模式-工廠、單例
162設(shè)計模式-策略、適配器M
什么是面向?qū)ο?/p>
■面向?qū)ο蟮姆椒ㄊ且环N分析方法、
設(shè)計方法和思維方法。
■面向?qū)ο蠓椒▽W(xué)的出發(fā)點(diǎn)和所追求
的基本目標(biāo)是使人們分析、設(shè)計與
實(shí)現(xiàn)一個系統(tǒng)的方法盡可能接近人
們認(rèn)識一個系統(tǒng)的方法。
■使描述問題的問題空間和解決問題
的方法空間在結(jié)構(gòu)上盡可能一致。
10
面向?qū)ο蠡舅枷?/p>
■對問題空間進(jìn)行自然分割,以更接
近人類思維的方式建立問題域模型,
以便對客觀實(shí)體進(jìn)行結(jié)構(gòu)模擬和行
為模擬,從而使設(shè)計出的軟件盡可
能直接地描述現(xiàn)實(shí)世界。
■構(gòu)造出模塊化的、可重用的、維護(hù)
性好的軟件,同時限制軟件的復(fù)雜
性和降低開發(fā)維護(hù)費(fèi)用。
11
什么是面向?qū)ο?/p>
從程序設(shè)計方法的角度看,面向?qū)ο笫且环N新的程
序設(shè)計范型(paradigm),其基本思想是使用對象、
類、繼承、封裝、聚合、關(guān)聯(lián)、消息、多態(tài)性等基
本概念來進(jìn)行程序設(shè)計。
自八十年代以來,面向?qū)ο蠓椒ㄒ焉钊氲接嬎銠C(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é)。從這個意義上講:
面向?qū)ο蠓椒ㄊ且环N運(yùn)用對象、類、繼承、封裝
、聚合、關(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)識問題,并根據(jù)這些事物的本質(zhì)特征,把
它們抽象地表示為系統(tǒng)中的對象,作為系統(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)識表達(dá)出來。]
主要特點(diǎn):I
從問題域中客觀存在的事物出發(fā)來構(gòu)造軟件系統(tǒng),用對
象作為對這些事物的抽象表示,并作為系統(tǒng)的基本構(gòu)成
單位。(對象)
用對象的屬性表示事物的靜態(tài)特征;用對象的服務(wù)(操
作)表示事物的動態(tài)特征。(屬性與服務(wù))
對象的屬性與服務(wù)結(jié)合為一體,成為一個獨(dú)立的、不可
分的實(shí)體,對外屏蔽其內(nèi)部細(xì)節(jié)。(封裝)
對事物進(jìn)行分類。把具有相同屬性和相同服務(wù)的對象歸
為一類,類是這些對象的抽象描述,每個對象是它的類
的一個實(shí)例。(分類)
W
通過在不同程度上運(yùn)用抽象的原則可以得到較一般的類和密
特殊的類。特殊類繼承一般類的屬性與服務(wù),從而簡化系統(tǒng)
的構(gòu)造過程及其文檔。(繼承)
復(fù)雜的對象可以用簡單的對象作為其構(gòu)成部分。(聚合)
對象之間通過消息進(jìn)行通訊,以實(shí)現(xiàn)對象之間的動態(tài)聯(lián)系。
(消息)
通過關(guān)聯(lián)表達(dá)對象之間的靜態(tài)關(guān)系。(關(guān)聯(lián))
總結(jié):用類和對象作為系統(tǒng)的基本構(gòu)成單位。對象對應(yīng)問題
域中的事物,其屬性與服務(wù)刻畫了事物的靜態(tài)特征和動態(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)識論看面向?qū)ο蠓椒ǖ男纬?/p>
軟件開發(fā):對事物的認(rèn)識和描述
問題——語言的鴻溝
語言的發(fā)展使鴻溝變窄。
軟件工程學(xué)的作用
——在各個階段提供了一些方法與法則。
傳統(tǒng)的軟件工程方法
問題:分析與設(shè)計概念及表示法的不一致。
面向?qū)ο蟮能浖こ谭椒?/p>
各個階段能較好地銜接
程序設(shè)計思想的發(fā)展歷程
1
階段T
■1Computer(Mainframe)formany
18
早期軟件開發(fā)
■硬件環(huán)境:CPU能力弱,存儲量小
■應(yīng)用特點(diǎn):科學(xué)計算,計算量大,
入輸出量小
■主要對象:小型程序,順序程序
■軟件開發(fā):個體工作,個人技巧
階段-23
■1Computer(PC)foreveryone
20
特征
■硬件環(huán)境:外設(shè)發(fā)展迅速,處理能力
增強(qiáng)
■應(yīng)用特點(diǎn):非數(shù)值應(yīng)用,輸入輸出量
大
■主要對象:大型程序,并發(fā)程序
■軟件開發(fā):程序失控管理失控軟
件危機(jī)
■失控原因:程序員難以控制程序的復(fù)盤
雜性
21^^
結(jié)構(gòu)化的程序設(shè)計
■結(jié)構(gòu)化程序設(shè)計的思路是:自頂向下,
逐步細(xì)化求精。
■其程序結(jié)構(gòu)是按功能劃分成若干個功
能模塊,這些模塊形成一個樹狀結(jié)構(gòu);
各模塊間的關(guān)系盡可能簡單,在功能
上相對獨(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è)計s
■面向?qū)ο竽M人類習(xí)慣的解題方法,
用對象分解取代功能分解,即把程序
分解成許多對象,不同對象之間通過
發(fā)送消息向?qū)Ψ教岢龇?wù)要求,接受
消息的對象主動完成指定功能。
■程序中的所有對象分工協(xié)作,共同完
成整個程序的功能
2
比較
■結(jié)構(gòu)化設(shè)計方法中,程序被劃分成許
多個模塊,這些模塊被組織成一個樹
型結(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è)計中,倒轉(zhuǎn)這種依
賴關(guān)系:創(chuàng)建的抽象不依賴于任何細(xì)
節(jié),而細(xì)節(jié)則高度依賴于上面的抽象。
■這種依賴關(guān)系的倒轉(zhuǎn)正是面向?qū)ο蟪?/p>
序設(shè)計和傳統(tǒng)技術(shù)之間根本的差異,
也正是面向?qū)ο蟪绦蛟O(shè)計思想的精華
所在。
'晨f,.7/Z
面向?qū)ο蠓椒ㄅc傳統(tǒng)方法的比較
傳統(tǒng)方法面向?qū)ο蠓椒?/p>
數(shù)據(jù)結(jié)構(gòu)+算法=程序設(shè)計以對象為中心組織數(shù)據(jù)與操作
數(shù)據(jù)對象的屬性
操作對象的服務(wù)
二類型與變量類與對象實(shí)例J
函數(shù)(過程)調(diào)用消息傳送
類型與子類型一般類與特殊類,繼承
構(gòu)造類型整體■部分結(jié)構(gòu),聚合
指針關(guān)聯(lián)
思想觀念:從對象出發(fā)認(rèn)識問題域;構(gòu)造策略:以對象
作為構(gòu)成系統(tǒng)的基本單位,將對象的數(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ī)對象技術(shù)映射到網(wǎng)絡(luò)分布環(huán)境?
分布式對象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è)計語言
3
OO方法的發(fā)展歷史與現(xiàn)狀
1.雛形階段
60年代挪威計算中心開發(fā)的Simula67——面向?qū)ο笳Z言的
先驅(qū)和第一個里程碑(首先引入了類的概念和繼承機(jī)制)。
70年代CLU、并發(fā)Pascal、Ada和Modula-2等語言對抽象
數(shù)據(jù)類型理論的發(fā)展起到重要作用(支持?jǐn)?shù)據(jù)與操作的封裝
)o
猶他大學(xué)的博士生AlanKay設(shè)計了一個實(shí)驗(yàn)性的語言Flex。
從Simula67中借鑒了許多概念,如類、對象、繼承等。
1972年P(guān)al。Aino研究中心(PARC)發(fā)布了Smalltalk-72
,其中正式使用了〃面向?qū)ο蟆ㄟ@個術(shù)語。
Smalltalk的問世標(biāo)志著面向?qū)ο蟪绦蛟O(shè)計方法的正式形成一
o但是這個時期的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中都已具備。它是第一個完
善的、能夠?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)勢。
4、發(fā)展到軟件生命周期前期階段
面向?qū)ο蠓椒◤木幊贪l(fā)展到
設(shè)計、分析,進(jìn)而發(fā)展到整
個軟件生命周期。
當(dāng)前:幾乎覆蓋計算機(jī)軟件
領(lǐng)域的所有分支
許多新領(lǐng)域以面向?qū)?/p>
象理論為基礎(chǔ),或作
為主要技術(shù)
在軟件生命周期全過程運(yùn)用面向?qū)ο蠓椒?/p>
L.M.Northrop:“盡管面向?qū)ο笳Z言正取得令人振奮的發(fā)展,但編程并
不是軟件開發(fā)問題的主要根源。需求分析與設(shè)計問題更為普遍并且更
值得解決。因此面向?qū)ο箝_發(fā)技術(shù)的焦點(diǎn)不應(yīng)該只對準(zhǔn)編程階段,而
應(yīng)更全面地對準(zhǔn)軟件工程的其他階段。面向?qū)ο蠓椒ㄕ嬲饬x深遠(yuǎn)的
目標(biāo)是它適合于解決分析與設(shè)計期間的復(fù)雜性并實(shí)現(xiàn)分析與設(shè)計的復(fù)
用。面向?qū)ο蟮拈_發(fā)不僅僅是編程,必須在整個軟件生命周期采用一
種全新的方法,這一觀點(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è)計
■在20世紀(jì)90年代后期,GradyBooch、
IvarJacobson及JimRumbaugh三人盡
管在面向?qū)ο箢I(lǐng)域各有各自的主張,
但是通力合作將面向?qū)ο笥煤侠淼姆?/p>
號表示產(chǎn)生了統(tǒng)一建模語言
UML(UnifiedModeIingLanguage),
這個圖形化的建模語言既有可視的表
達(dá)形式又有嚴(yán)謹(jǐn)?shù)恼Z義支撐。
41
UML
■圖形化的建模語言
■開發(fā)者用來為面向?qū)ο笙到y(tǒng)建立模型
■具有靈活性與可擴(kuò)展性
■UML結(jié)構(gòu)型圖:識別對象和類、描述對
象和類之間的關(guān)系(靜態(tài)結(jié)構(gòu))
■UML行為型圖:對象如何協(xié)作產(chǎn)生滿足
要求的系統(tǒng)行為(動態(tài)性質(zhì))
W
設(shè)計模式
■面向?qū)ο笏枷氲陌l(fā)展使得在軟件開發(fā)中使
用模式化的方法受到了重視,模式化的思
想來源于建筑業(yè)。
■建筑大師Alexander:每一個模式描述了一
個在我們周圍不斷重復(fù)發(fā)生的問題以及該
問題解決方案的核心,這樣你就可以一次
又一次的使用該方案而不必做重復(fù)勞動。
■就像建筑業(yè)用預(yù)制的墻和窗來構(gòu)筑房屋,
在面向?qū)ο笤O(shè)計中我們使用對象和接口代
替墻和窗來構(gòu)筑系統(tǒng),它們的核心都在無
提供了相關(guān)問題的解決方案。I
設(shè)計模式
■模式化的設(shè)計使系統(tǒng)更穩(wěn)定、易修改、
易擴(kuò)展、易理解、易測試。
■90年代末,被稱為四人幫的GoF發(fā)表了
在面向?qū)ο缶幊讨惺褂媚J交椒ㄑ?/p>
究的開創(chuàng)性著作-《設(shè)計模式-可復(fù)用
面向?qū)ο筌浖幕A(chǔ)》(《Design
Patterns—ElementsofReusable
Object-OrientedSoftware》)。一
w
設(shè)計模式
■其中提出了23種模式,這23種模式又
可以被劃分為三類:
■創(chuàng)建型:與對象創(chuàng)建有關(guān)
■結(jié)構(gòu)型:處理類或?qū)ο蠼M合
■行為型:對象或類怎樣交互和怎樣分
配職責(zé)
4
第1章.面向?qū)ο笏枷?/p>
■計算機(jī)語言對思想的啟迪。(DNA序
列分析)
ml
1
IIIIl”c|g|a|g||||||||t|c|g巨|g]一[
一種觀察世界的方式
■現(xiàn)實(shí)世界問題例。(濟(jì)南男孩A送花給
北京女孩B)
■How?
4
代理和團(tuán)體
■解決問題的方法是找到一個合適的代
理C,并把要求告訴他。
■代理有責(zé)任完成你的需求。
■A沒必要理解C使用什么方法來完成任
務(wù),這些細(xì)節(jié)通常是隱蔽的。
48
花的傳送中代理組成的團(tuán)僦8
代理和團(tuán)體
■一個面向?qū)ο蟮某绦蚴怯梢粋€相互作
用的代理團(tuán)體組成,這些代理被稱作
對象。
■每一個對象承擔(dān)一個角色。
■每一個對象都提供一種服務(wù)或者執(zhí)行
一種動作,以便為團(tuán)體中其他對象服
務(wù)。
50
對象
■對象是獨(dú)立存在的客觀事物,它由一組屬
性和一組操作構(gòu)成。
■屬性和操作是對象的兩大要素。屬性是對
象靜態(tài)特征的描述,操作是對象動態(tài)特征
的描述。
■屬性一般只能通過執(zhí)行對象的操作來改變。
■操作又稱為方法或服務(wù),它描述了對象執(zhí)
行的功能。通過消息傳遞,還可以為其它
對象使用。.二
51
對象性質(zhì)
1.封裝型:信息隱藏
2.自治性:主動數(shù)據(jù)
3.通信性:并發(fā)
4.暫存性:作用域/期
5.永久性:文檔串行化
復(fù)合對象
■劃分(partition):Pc
■聚合(aggregation):Window
部分/整體
■部分/整體關(guān)系中有兩種方式:組合和
聚合O
■PC機(jī)是一個組合的例子,一個部分對象
(CPU)只能屬于一個唯一的整體對象
(PC機(jī))。
■組合關(guān)系中部分和整體的關(guān)系很緊密。
聚合關(guān)系中則比較松散,一個部分對象
可以屬于幾個整體對象。
5
消息和方法
■送花例
■團(tuán)體的成員通過傳達(dá)要求來相互合作。
消息和方法
■在面向?qū)ο缶幊讨?,行為的啟動是通過將
“消息”傳遞給對此行為負(fù)責(zé)的代理(對
象)來完成的。
■消息對行為的要求進(jìn)行編碼,并且隨著執(zhí)
行要求所需的附加信息(參數(shù))來一起傳
遞。
■“接收器”就是消息發(fā)送的對象。如果接
收器接受了消息,那么同時它也接受了消
息所包含的行為責(zé)任。然后,接受器響感
消息,執(zhí)行相應(yīng)的“方法”以實(shí)現(xiàn)要求.
56
消息傳遞與過程調(diào)用
■每一條消息都有一個指定的接收器相
對應(yīng);接收器就是消息發(fā)送的對象。
過程調(diào)用沒有指定的接收器。
■消息的解釋由接收器決定,并且隨著
接收器的不同而不同。
■動態(tài)綁定。
,“,,,?5
信息隱藏B
■作為某對象提供的服務(wù)的一個用戶,只
需要知道對象將接受的消息的名字。
■不需要知道要完成要求,需要執(zhí)行哪些
動作。
■在接收到一條消息后,對象會負(fù)責(zé)將該
項(xiàng)任務(wù)完成。
58
責(zé)任
■用責(zé)任來描述行為。A對行為的要求
僅表明他所期望的結(jié)果,C可隨意選
擇使用的方法來實(shí)現(xiàn)所期待的目標(biāo),
并在此過程中不受A的干擾。
■提高了抽象水平,對象更加獨(dú)立。
結(jié)構(gòu)化與面向?qū)ο蟊容^
■不要問你能為數(shù)據(jù)結(jié)構(gòu)做什么
■要問數(shù)據(jù)結(jié)構(gòu)能為你做什么
■如孩子做事:督促或委派負(fù)責(zé)
60
不干預(yù)原則工所
■允許對象以任何它認(rèn)為合適的不干涉
其他對象的方式來完成任務(wù),而不要
干預(yù)它。
類和實(shí)例8
■C是花商的一個特例。
■C是花商(Florist)類(class)的
一個實(shí)例(instance)
類
■根據(jù)抽象的原則對客觀事物進(jìn)行歸納和
劃分,只關(guān)注與當(dāng)前目標(biāo)相關(guān)的特征,
把具有相同特征的事物歸為一個類。它
是一個抽象的概念。
■類是具有相同屬性和相同操作(服務(wù))
的對象的集合。它包括屬性和操作。
63
類和實(shí)例
■所有對象都是類的實(shí)例。
■在響應(yīng)消息時調(diào)用何種方法由類的接
收器來決定。
■一個特定類的所有對象使用相同的方
法來響應(yīng)類似的消息。
6
類和實(shí)例
■每一個對象都是某個類的實(shí)例。類是
一組相似的對象。
■類是對象相關(guān)行為的儲存庫
(repository)0即同一個類的所有對
象都能執(zhí)行同樣的動作。
6
類的層次
■除了知道C是花商外,還知道他是商
人、人類、哺乳動物、物質(zhì)對象。
■在每一層次上,都可以了解特定的信
息,這些信息適用于所有較低層次。
■付款適用其他店主。
6
類的層次
MaterialObject
Animal
Mamma
Human
Shopkeeper
Florist
7
6
繼承
■類被組織成有單個根節(jié)點(diǎn)的樹狀結(jié)構(gòu),
稱為繼承層次結(jié)構(gòu)。與類實(shí)例相關(guān)的
內(nèi)存和行為都會被樹結(jié)構(gòu)中的后代自
動繼承。
繼承
■在類層次結(jié)構(gòu)中與某層相聯(lián)系的信息
(數(shù)據(jù)、行為)都會自動地提供地該
層次結(jié)構(gòu)的較低層次中。
繼承
■繼承表達(dá)了對象的一般與特殊的關(guān)系。
■特殊類的對象具有一般類的全部屬性和
服務(wù)。
70
類的層次
Flower
Platypus
Carnation
FidoFredElizabethKennethPhylHobmsflowers
繼承
■類可以組織成一個有層次的繼承機(jī)構(gòu)。
■一個子類繼承層次樹中更高一層的父
類的屬性。
■抽象父類是指沒有具體實(shí)例的類,他
只是用來產(chǎn)生子類。
72
一般/特殊
■對象之間存在著一般和特殊的結(jié)構(gòu)關(guān)
系,也就是說它們存在繼承關(guān)系。很多
時候也稱作泛化和特化關(guān)系。
73
方法綁定與改寫
■鴨嘴獸?
■處理一般規(guī)則外的特例?
改寫
■將子類中某一方法取與父類方法相同
的名稱,結(jié)合尋找方法的規(guī)則實(shí)現(xiàn)改
寫。
方法綁定與改寫
■接收器搜索并執(zhí)行相應(yīng)的方法以響應(yīng)
給定的消息。
■如果沒有找到匹配的方法,搜索就會
傳導(dǎo)到此類的父類。搜索會在父類鏈
上一直進(jìn)行下去,直到找到匹配的方
法,或者父類鏈結(jié)束。
■如果能在更高類層次找到相同名稱的
方法,所執(zhí)行的方法就稱為改寫了繼
承的行為。W
7
多態(tài)
■不同花商送花方式
1.重載
2.類等級不同層次共享同一方法名字
多態(tài)性
■多態(tài)性是指一般類中定義的屬性和服
務(wù),在特殊類中不改變其名字,但通
過各自不同的實(shí)現(xiàn)后,可以具有不同
的數(shù)據(jù)類型或具有不同的行為。
OOP定義-AIanKay
■OOP是基于遞歸設(shè)計的原則的:
1.一切都是對象。
2.計算通過對象間相互通信,請求其他對象執(zhí)行動作來
實(shí)現(xiàn)。對象間通過發(fā)送和接收消息來通信。
3.每個對象都有自己的內(nèi)存,其中可能包括了其他的對
象。
4.每一個對象都是某個類的實(shí)例。類就是一組相似的對
象。
5.類是對象相關(guān)行為的儲存庫。也就是說,同一個類的
所有對象都能執(zhí)行同樣的動作。
6.類被組織成有單個根節(jié)點(diǎn)的樹狀結(jié)構(gòu),被稱為繼承層
次結(jié)構(gòu)。與類實(shí)例相關(guān)的內(nèi)存和行為都會被樹結(jié)構(gòu)中
M后在自動繼承。.
79
軟件開發(fā)方法
?軟件工程所采用的方法不是唯一的。自軟件工程
出現(xiàn)以來,人們已經(jīng)提出了多種軟件開發(fā)方法,
例如:
?功能分解法、
?數(shù)據(jù)流法(結(jié)構(gòu)化方法).
?快速原型法、
?信息模型法、
?面向?qū)ο蠓椒ā?/p>
山東大學(xué)計算機(jī)學(xué)院80
結(jié)構(gòu)化軟件開發(fā)方法簡介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è)計是屬于自頂向下的設(shè)計,在設(shè)計階段
就不得不考慮如何實(shí)現(xiàn)系統(tǒng)的功能,因?yàn)榉纸獾?/p>
過程其實(shí)就是實(shí)現(xiàn)功能的過程。
?局限性
?不能靈活地適應(yīng)用戶不斷變化的需求
?比如要求修改現(xiàn)有軟件的實(shí)現(xiàn)方式或追加新功能時
?需要自頂向下地修改模塊的結(jié)構(gòu),有時甚至整個軟件系
統(tǒng)的設(shè)計被推翻。
?結(jié)構(gòu)化編程SP(StructureProgramming)
■程序的主體是方法
?方法是最小的功能模塊
■一組相關(guān)的方法組合成一個大的功能模塊
?結(jié)構(gòu)化學(xué)發(fā)過程舉例
?一個畫板系統(tǒng)Panel
?包括4個功能
?選擇形狀
?畫長方形
,圓圓
?畫直線
y
?自頂向下結(jié)構(gòu)化分析設(shè)計
?工具:數(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ā)生變化
?要求增加一個畫三角形的功能
?需要對系統(tǒng)做多處改動
?增加一個形狀常量定義
?增加一個畫三角形的功能方法
?在selectShape中增加一個分支邏輯
?結(jié)構(gòu)化開發(fā)方法
?制約了軟件的可維護(hù)性和可擴(kuò)展性
?模塊之間的松耦合性不高
?修改或增加一個模塊會影響到其他模塊
?這些缺陷的根本原因在于:
?自頂向下地按照功能來劃分。但是軟件的功能不是一成不
變的
?軟件系統(tǒng)中最小的子系統(tǒng)是方法。方法和一部分與之相關(guān)
的數(shù)據(jù)分離,全局變量和常量數(shù)據(jù)分散在系統(tǒng)的各個角落,
削弱了各個系統(tǒng)之間的相對獨(dú)立性。
/7
?非面向?qū)ο缶幊?/p>
?對于非面向?qū)ο缶幊蹋绦蛲敲嫦蜻^程或者面向數(shù)
據(jù)的。
?這些程序中通常有可全訪問的數(shù)據(jù)及過程,由主程序或
其子程序來控制及操作這些數(shù)據(jù)。
?程序的每個部分都可以訪問全局?jǐn)?shù)據(jù),得到數(shù)據(jù)的一部
分,操作這些數(shù)據(jù),然后在在需要時,保存對數(shù)據(jù)的更
改。
山東大學(xué)計算機(jī)學(xué)院91
?對于面向?qū)ο缶幊?/p>
■程序被劃分為一組通信的對象。
?每個對象均封裝了關(guān)于某個概念所有行為和信息
■實(shí)現(xiàn)功能的能力、實(shí)現(xiàn)功能所需的〃知識〃或數(shù)據(jù)被分
布在對象之中。當(dāng)一個對象對其他對象有需求時,就向
該對象發(fā)出消息,這個對象接受到此消息后做出相應(yīng)的
動作并很有可能返回值給調(diào)用者。
?第一個對象甚至可以在第二
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中信息技術(shù)課堂教學(xué)方法的創(chuàng)新研究
- 2025光電車衣發(fā)電系統(tǒng)
- 中小學(xué)心理健康教育課程設(shè)計與實(shí)踐知到課后答案智慧樹章節(jié)測試答案2025年春浙江師范大學(xué)
- 三級人力資源管理師-三級人力資源管理師考試《理論知識》押題密卷6
- 三級人力資源管理師-《企業(yè)人力資源管理師(理論知識)》考前強(qiáng)化模擬卷6
- 山東省菏澤市東明縣第一中學(xué)2024-2025學(xué)年高二下學(xué)期開學(xué)地理試題
- 2018高考人教政治二輪鞏固練題(六)及解析
- 2018年普通高校招生全國統(tǒng)一考試仿真模擬(一)語文試題
- 甘肅省張掖市高臺縣一中2024-2025學(xué)年高三下學(xué)期第二次檢測語文試題(原卷版+解析版)
- 2025屆福建省漳州市高三下學(xué)期第三次檢測歷史試題 (原卷版+解析版)
- 廣告品印刷行業(yè)技術(shù)趨勢分析
- 2024至2030年中國角鯊?fù)椋ㄏ┬袠I(yè)運(yùn)營格局及前景戰(zhàn)略分析報告
- 人工智能訓(xùn)練師理論知識考核要素細(xì)目表三級
- 2024年車輛牌照租賃協(xié)議常用版(三篇)
- 2 不一樣你我他 教學(xué)設(shè)計-2023-2024學(xué)年道德與法治三年級下冊統(tǒng)編版
- 護(hù)理美學(xué)-第一章 美學(xué)概述
- 四川省廣元市旺蒼縣 2023-2024學(xué)年八年級下學(xué)期7月期末道德與法治試題
- HY/T 0403-2024波浪滑翔器海上試驗(yàn)規(guī)范
- 《財務(wù)管理學(xué)(第10版)》課件 第1、2章 總論、財務(wù)管理的價值觀念
- 江蘇2024年江蘇省新聞出版學(xué)校招聘人員筆試歷年典型考題及考點(diǎn)附答案解析
- 北師大版二年級下冊數(shù)學(xué)第二單元-方向與位置-測試卷必考
評論
0/150
提交評論