? ? 7.1 面向?qū)ο蠡A(chǔ)
????????7.1.1 面向?qū)ο蟮幕靖拍?/h3>
? ? ? ? ? ? ? ? 面向?qū)ο?對象+分類+繼承+通過消息的通信
? ? ? ? ? ? ? ? 對象:基本的運(yùn)行實體憋活,包括屬性和行為,由對象名、屬性和方法組成
? ? ? ? ? ? ? ? 消息:對象之間進(jìn)行通信的一種構(gòu)造
? ? ? ? ? ? ? ? 類:定義一組大體顯示的對象,其所包含的方法和數(shù)據(jù)描述一組對象的共同行為和屬性笨忌,類是對象之上的抽象,對象是類的具體化辜梳,是類的實例,分為實體類泳叠、接口類和控制類
? ? ? ? ? ? ? ? 繼承:是父類和之類之間共享數(shù)據(jù)和方法的機(jī)制
? ? ? ? ? ? ? ? 多態(tài):不同的對象接收到同一消息可以產(chǎn)生完全不同的結(jié)果作瞄,參數(shù)多態(tài)和包含多態(tài)稱為通用的,過載多態(tài)和強(qiáng)制多態(tài)稱為特定的
? ? ? ? ? ? ? ? 動態(tài)綁定:在運(yùn)行時危纫,一個把過程調(diào)用和響應(yīng)調(diào)用所需要執(zhí)行的代碼加以結(jié)合的過程宗挥,與類的繼承以及多態(tài)相聯(lián)系的乌庶,在繼承關(guān)系中,子類是父類的一個特例契耿,所以父類對象可以出現(xiàn)的地方瞒大,子類對象也可以出現(xiàn),在運(yùn)行過程中宵喂,當(dāng)一個對象發(fā)送消息請求服務(wù)時糠赦,要根據(jù)接收對象的具體情況將請求的操作與實現(xiàn)的方法進(jìn)行連接
????????7.1.2 面向?qū)ο蠓治?
? ? ? ? ? ? ? ? 面向?qū)ο蠓治龅幕顒樱赫J(rèn)定對象会傲、組織對象锅棕、描述對象間的相互作用、確定對象的操作淌山、定義對象的內(nèi)部信息
????????7.1.3 面向?qū)ο笤O(shè)計
? ? ? ? ? ? ? ? 面向?qū)ο笤O(shè)計是將面向?qū)ο蠓治鏊鶆?chuàng)建的分析模型轉(zhuǎn)化為設(shè)計模型裸燎,其目標(biāo)是定義系統(tǒng)構(gòu)造藍(lán)圖,同樣遵循抽象泼疑、信息隱蔽德绿、功能獨立和模塊化等設(shè)計準(zhǔn)則
? ? ? ? ? ? ? ? 面向?qū)ο笤O(shè)計的活動:識別類及對象;定義屬性退渗;定義服務(wù)移稳;識別關(guān)系;識別包
? ? ? ? ? ? ? ? 面向?qū)ο笤O(shè)計原則:單一責(zé)任原則会油;開放-封閉原則个粱;理氏替換原則;依賴倒置原則翻翩;接口分離原則都许;重用發(fā)布等價原則;共同封閉原則嫂冻;共同重用原則胶征;無依賴原則;穩(wěn)定依賴原則桨仿;穩(wěn)定抽象原則
????????7.1.4 面向?qū)ο蟪绦蛟O(shè)計
? ? ? ? ? ? ? ? 類:類具有實例化功能睛低;同一個類的不同實例具有相同的數(shù)據(jù)結(jié)構(gòu),承受的是同一方法集合所定義的操作服傍,具有相同規(guī)律的行為钱雷;同一類的不同實例可以持有不同的值,具有不同的狀態(tài)伴嗡;實例的初始狀態(tài)可以在實例化時確定
? ? ? ? ? ? ? ?繼承和類層次結(jié)構(gòu):繼承通過定義類之間的關(guān)系來體現(xiàn)急波,子類和父類之間的繼承關(guān)系構(gòu)成了整個系統(tǒng)的類層次結(jié)構(gòu),可以用樹或格這樣的圖來描述瘪校;繼承體現(xiàn)了一條重要的設(shè)計原則澄暮,即開發(fā)人員在構(gòu)造程序時不必從零開始名段,而只需對差別進(jìn)行程序設(shè)計
? ? ? ? ? ? ? ? 對象、消息傳遞和方法:對象是類的實例泣懊,對象之間通過諾消息傳遞進(jìn)行通信伸辟;
? ? ? ? ? ? ? ? 對象自身引用:通過this或self等,自身引用的值和類型扮演了兩種意義的角色馍刮,對象自身引用的值使得方法體中引用的成員名與特定的對象相關(guān)信夫,對象自身引用的類型則決定了方法體被實際共享的范圍
? ? ? ? ? ? ? ? 重置:指在子類中重新定義父類已經(jīng)定義的方法,通過一種動態(tài)綁定機(jī)制的支持卡啰,使得子類在集成 父類接口定義的前提下用適合自己要求的實現(xiàn)去置換父類中的相應(yīng)實現(xiàn)
? ? ? ? ? ? ? ? 類屬類:可以看成類的模板静稻,是關(guān)于一組類的一個特性抽象,它強(qiáng)調(diào)的是這些類的成員特征中與具體類型無關(guān)的那些部分匈辱,而與具體類型相關(guān)相關(guān)的那些部分則用變元來表示振湾。
? ? ? ? ? ? ? ? 無實例的類:抽象類,C++通過定義抽象方法來定義抽象類亡脸;JAVA通過申明來定義抽象類
????????7.1.5 面向?qū)ο鬁y試
? ? ? ? ? ? ? ? 面向?qū)ο蟮臏y試:與其他方法開發(fā)的系統(tǒng)測試無異押搪,分為算法層(測試類中定義的方法)、類層(測試封裝在同一類中的所有方法和屬性之間的相關(guān)作用)浅碾、模板層(測試一組協(xié)同工作的類之間的相互作用)和系統(tǒng)層(組裝子系統(tǒng)過程中的測試)大州。
????7.2 UML
? ? ? ? ? ? ? ? UML組成要素:UML的基本構(gòu)造塊、支配這些構(gòu)造塊如何設(shè)置在一起的規(guī)則和運(yùn)用與整個語言的一些公共機(jī)制
? ? ? ? ? ? ? ? UML包含3種構(gòu)造塊:事物--對模型中最具代表性的成分的抽象垂谢;關(guān)系--把事物連接在一起厦画;圖--聚集了相關(guān)的事物
????????7.2.1 事物
? ? ? ? ? ? ? ? UML中的4中事物:結(jié)構(gòu)事物、行為事物埂陆、分組事物和注釋事物
? ? ? ? ? ? ? ? 結(jié)構(gòu)事物:模型的靜態(tài)部分苛白,描述概念或物理元素,包括類焚虱、接口购裙、協(xié)作、用例鹃栽、主動類躏率、構(gòu)件、制品和結(jié)點
? ? ? ? ? ? ? ? 行為事物:模型的動態(tài)部分民鼓,描述跨越時間和空間的行為薇芝,包括交互、狀態(tài)機(jī)和活動
? ? ? ? ? ? ? ? 分組事物:UML模型的組織部分丰嘉,主要指包
? ? ? ? ? ? ? ? 注釋事物:UML模型的解釋部分夯到,用來描述、說明和標(biāo)注模型的任何元素
????????7.2.2 關(guān)系
? ? ? ? ? ? ? ? UML中4中關(guān)系:依賴饮亏、關(guān)聯(lián)耍贾、泛化和實現(xiàn)
????????7.2.3 UML中的圖
? ? ? ? ? ? ? ? 圖:一組元素的圖形表示阅爽,一般畫為頂點(事物)和弧(關(guān)系)的連通圖荐开,包括類圖付翁、對象圖、用例圖晃听、序列圖百侧、通信圖、狀態(tài)圖能扒、活動圖佣渴、構(gòu)件圖、組合結(jié)構(gòu)圖赫粥、部署圖观话、包圖、交互概覽圖和計時圖
? ? ? ? ? ? ? ? 類圖:展現(xiàn)一組對象越平、接口、協(xié)作和他們之間的關(guān)系灵迫,包含類秦叛、接口、協(xié)作和依賴瀑粥、泛化和關(guān)聯(lián)關(guān)系
? ? ? ? ? ? ? ? 對象圖:展現(xiàn)了某時刻一組對象以及他們之間的關(guān)系
? ? ? ? ? ? ? ? 用例圖:展現(xiàn)一組用例挣跋、參與者以及他們之間的關(guān)系,包括用例狞换、參與者和用例間的擴(kuò)展避咆、包含關(guān)系修噪,參與者與用例之間的關(guān)聯(lián)關(guān)系,用例與用例及參與者與參與者之間的泛化關(guān)系
? ? ? ? ? ? ? ? 交互圖:用于對系統(tǒng)動態(tài)方面進(jìn)行建模黄琼,一張交互圖表示一個交互樊销,由一組對象和他們之間的關(guān)系組成脏款,包含其傳遞消息;一般包含對象撤师、鏈和消息
? ? ? ? ? ? ? ? 狀態(tài)圖:展現(xiàn)一個狀態(tài)機(jī),由狀態(tài)剃盾、轉(zhuǎn)換腺占、事件和活動組成
? ? ? ? ? ? ? ? 活動圖:一種特殊的狀態(tài)圖强法,展示了系統(tǒng)內(nèi)從一個活動到另一個活動的流程,包括活動狀態(tài)和動作狀態(tài)湾笛,轉(zhuǎn)換和對象
? ? ? ? ? ? ? ? 構(gòu)建圖:展示一組構(gòu)建之間的組織和依賴
? ? ? ? ? ? ? ? 組合結(jié)構(gòu)圖:描述一個分類器的內(nèi)部結(jié)構(gòu)饮怯,分類器與系統(tǒng)中其它組成部分之間的交互端口、展示一組相互協(xié)作的實例如何完成特定的任務(wù)嚎研,描述設(shè)計蓖墅、結(jié)構(gòu)模式或策略
? ? ? ? ? ? ? ? 部署圖:用來對面向?qū)ο笙到y(tǒng)的物理方面建模的方法,展現(xiàn)了運(yùn)行時處理節(jié)點以及其中構(gòu)件的配置
? ? ? ? ? ? ? ? 包圖:用于把模型本身組織成層次結(jié)構(gòu)的通用機(jī)制临扮,不能執(zhí)行论矾,展現(xiàn)由模型本身分解而成的組織單元以及其間的依賴關(guān)系
????7.3 設(shè)計模式?
????????7.3.1 設(shè)計模式的要素
? ? ? ? ? ? ? ? 設(shè)計模式的核心在于提供了相關(guān)問題的解決方案,使得人們可以更簡單的復(fù)用成功的設(shè)計和體系結(jié)構(gòu)
? ? ? ? ? ? ? ? 設(shè)計模式的要素:模式名稱杆勇、問題贪壳、解決方案、效果
? ? ? ? ? ? ? ? 設(shè)計模式的分類:創(chuàng)建型模式與對象的創(chuàng)建有關(guān)蚜退;結(jié)構(gòu)型模式處理類與對象的組合闰靴;行為型模式對類或?qū)ο笤趺唇换ズ驮趺捶峙渎氊?zé)進(jìn)行描述
????????7.3.2 創(chuàng)建型設(shè)計模式
? ? ? ? ? ? ? ? 創(chuàng)建型模式抽象了實例化過程,幫助系統(tǒng)獨立于如何創(chuàng)建钻注、組合和表示它的那些對象
? ? ? ? ? ? ? ? 抽象工廠(Abstract Factory):意圖提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口蚂且,而無須指定他們具體的類
? ? ? ? ? ? ? ? 生成器(Builder):意圖將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示
? ? ? ? ? ? ? ? 工廠方法(Factory Method):意圖定義一個用于創(chuàng)建對象的接口幅恋,讓子類決定實例化哪一個類
? ? ? ? ? ? ? ? 原型(Prototype):意圖用原型實例制定創(chuàng)建對象的種類杏死,并且通過復(fù)制這些原型創(chuàng)建新的對象
? ? ? ? ? ? ? ? 單例(Singleton):意圖保證一個類僅有一個實例,并提供一個訪問它的全局訪問點
????????7.3.3 結(jié)構(gòu)型設(shè)計模式
? ? ? ? ? ? ? ? 結(jié)構(gòu)型設(shè)計模式涉及如何組合類和對象以獲得更大的結(jié)構(gòu)捆交,采用繼承機(jī)制來實現(xiàn)組合接口或?qū)崿F(xiàn)
? ? ? ? ? ? ? ? 適配器(Adapter):意圖將一個類的接口轉(zhuǎn)換成客戶希望的另一個接口
? ? ? ? ? ? ? ? 橋接(Bridge):意圖將抽象部分與其實現(xiàn)部分分離淑翼,使他們都可以獨立的變化
? ? ? ? ? ? ? ? 組合(Composite):意圖將對象組合成樹形結(jié)構(gòu)儀表室部分-整體的層次結(jié)構(gòu)
? ? ? ? ? ? ? ? 裝飾(Decorator):意圖動態(tài)的給一個對象添加一些額外的職責(zé)
? ? ? ? ? ? ? ? 外觀(Facade):意圖為子系統(tǒng)中的一組接口提供一個一致的界面
? ? ? ? ? ? ? ? 享元(Flyweight):意圖運(yùn)用共享技術(shù)有效的支持大量的細(xì)粒度對象
? ? ? ? ? ? ? ?代理(Proxy):意圖為其他對象提供一種代理以控制對這個對象的訪問